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")