Documentação de Integração

A API corporativa do NAI-IA utiliza padrões RESTful. Todas as respostas analíticas são fornecidas em formato JSON estruturado, sendo o processamento de imagens e streams de vídeo acelerado localmente ou na nuvem.

Endpoint Base: https://api.nai-ia.com.br/v1

Autenticação: Utilize seu token corporativo nos cabeçalhos HTTP (`Authorization: Bearer `).

C# (.NET 6+)

Exemplo de envio de frame e seleção de modos analíticos utilizando HttpClient e autenticação corporativa via Headers.

ClienteApi.cs
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

namespace NAI.IA.Client
{
   class Program
   {
      private const string ApiBaseUrl = "https://api.nai-ia.com.br/v1";
      private const string AnalyzeEndpoint = "/analyze";
      private const string ApiKey = "SUA_CHAVE_CORPORATIVA";

      private static readonly HttpClient Client = new HttpClient();

      public static async Task Main(string[] args)
      {
         string FilePath = "./frame_operacao.jpg";

         if(!File.Exists(FilePath))
         {
            Console.WriteLine("Arquivo não encontrado.");
            return;
         }

         try
         {
            await RunAnalyticsAsync(FilePath);
         }
         catch(Exception ex)
         {
            Console.WriteLine($"Erro: {ex.Message}");
         }
      }

      private static async Task RunAnalyticsAsync(string FilePath)
      {
         using(var Form = new MultipartFormDataContent())
         {
            // Adiciona o parâmetro dos modos analíticos desejados
            Form.Add(new StringContent("perimeter,tracking,proximity"), "analytic_modes");

            using(var FileStream = File.OpenRead(FilePath))
            {
               var StreamContent = new StreamContent(FileStream);
               StreamContent.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
               Form.Add(StreamContent, "image", Path.GetFileName(FilePath));

               // Define o header de autenticação corporativa
               Client.DefaultRequestHeaders.Clear();
               Client.DefaultRequestHeaders.Add("Authorization", $"Bearer {ApiKey}");
               Client.DefaultRequestHeaders.Add("X-Device-ID", "edge_cam_refinery_04");

               string FullUrl = $"{ApiBaseUrl}{AnalyzeEndpoint}";
               var Response = await Client.PostAsync(FullUrl, Form);

               if(!Response.IsSuccessStatusCode)
               {
                  throw new Exception($"Falha na requisição: {Response.StatusCode}");
               }

               string JsonResponse = await Response.Content.ReadAsStringAsync();
               Console.WriteLine(JsonResponse);
            }
         }
      }
   }
}

JavaScript (Fetch)

Utilize FormData para empacotar a imagem e envie com cabeçalhos de autenticação e identificação de dispositivo.

app.js
const API_BASE_URL = "https://api.nai-ia.com.br/v1";
const ANALYZE_ENDPOINT = "/analyze";
const API_KEY = "SUA_CHAVE_CORPORATIVA";

/**
 * Envia frame de imagem para análise na plataforma NAI-IA.
 */
async function analisarFrame(file) {
   const formData = new FormData();
   formData.append("image", file);
   formData.append("analytic_modes", "perimeter,tracking,proximity");

   try {
      const response = await fetch(`${API_BASE_URL}${ANALYZE_ENDPOINT}`, {
         method: 'POST',
         headers: {
            'Authorization': `Bearer ${API_KEY}`,
            'X-Device-ID': 'edge_cam_refinery_04'
         },
         body: formData
      });

      if (!response.ok) {
         throw new Error(`Erro na requisição: ${response.status}`);
      }

      const json = await response.json();
      console.log("Resultado analítico:", json);
      return json;

   } catch (error) {
      console.error("Falha na análise:", error);
   }
}

Python 3 (Requests)

Recomendado para automação de servidores de borda ou backend corporativo. Envio via multipart form contendo os dados analíticos solicitados.

cliente_api.py
import requests
import os

# Configurações do endpoint NAI-IA
API_BASE_URL = "https://api.nai-ia.com.br/v1"
ANALYZE_ENDPOINT = "/analyze"
API_KEY = "SUA_CHAVE_CORPORATIVA"

def analisar_frame(caminho_arquivo):
   """
   Envia imagem para a API NAI-IA para processamento de visão computacional.
   Modos ativos: perimeter, tracking, proximity.
   """
   if not os.path.exists(caminho_arquivo):
      print("Arquivo não encontrado.")
      return

   # Cabeçalhos de autenticação corporativa
   headers = {
      "Authorization": f"Bearer {API_KEY}",
      "X-Device-ID": "edge_cam_refinery_04"
   }
   
   # Modos analíticos desejados
   data = {
      "analytic_modes": "perimeter,tracking,proximity"
   }

   # Definição do arquivo de imagem
   files = {
      "image": (os.path.basename(caminho_arquivo), open(caminho_arquivo, "rb"), "image/jpeg")
   }

   try:
      response = requests.post(
         API_BASE_URL + ANALYZE_ENDPOINT, 
         data=data,
         files=files, 
         headers=headers
      )

      if response.status_code == 200:
         print("[Sucesso] Resposta JSON:")
         print(response.json())
      else:
         print(f"[Erro] Status: {response.status_code}")
         print(response.text)

   except Exception as e:
      print(f"Erro de conexão com o servidor: {e}")

if __name__ == "__main__":
   analisar_frame("./frame_operacao.jpg")