A CV Central API é uma aplicação baseada em FastAPI para gerenciar inferências em diversos contextos e tarefas baseadas em visão computacional. A API permite enviar imagens para processamento em filas específicas e consultar resultados armazenados em um banco de dados MongoDB.
A API CV Central conta com os seguintes endpoints:
Método: GET
Descrição: Fornece uma mensagem de boas-vindas e links para os endpoints disponíveis.
Entrada: Nenhum dado é necessário.
Saída: Um JSON contendo:
{
"message": "Bem vindo à API de visão computacional do projeto BAITES.",
"documentation_url": "/docs",
"endpoints": {
"contexts": "/api/v1/contexts",
"predict semantic-segmentation": "/api/v1/predict/semantic-segmentation/{context}",
"predict object-detection": "/api/v1/predict/object-detection/{context}",
"result semantic-segmentation": "/api/v1/result/semantic-segmentation/{inference_id}",
"result object-detection": "/api/v1/result/object-detection/{inference_id}",
}
Método: GET
Descrição: Retorna uma lista de todos os contextos disponíveis para inferências. ◦ Entrada:
Cabeçalho: api_key
(obrigatório) - Chave de autenticação da API.
Saída: Lista de contextos com o seguinte formato:
{
"context": "detect_palmaceas",
"description": "Modelo para contagem/detecção de palmáceas (monocultura) de imagens de Drone.",
"queue": "detect_palmaceas_inference_queue",
"task_type": "object_detection",
"class_map": {
"1": "palm"
},
"class_map_color": {
"1": [
0,
255,
0
]
},
"capture_distance": [
45,
65
]
},
{
"context": "seg_biomas",
"description": "Modelo para segmentação de imagens de Drone (quatro classes).",
"queue": "seg_biomas_inference_queue",
"task_type": "semantic_segmentation",
"class_map": {
"1": "forest",
"2": "water",
"3": "soil",
"4": "urban_area"
},
"class_map_color": {
"1": [
34,
139,
34
],
"2": [
30,
144,
255
],
"3": [
139,
69,
19
],
"4": [
128,
128,
128
]
},
"capture_distance": [
45,
65
]
},
{
"context": "seg_drone",
"description": "Modelo para segmentação de imagens de Drone (24 classes).",
"queue": "seg_drone_inference_queue",
"task_type": "semantic_segmentation",
"class_map": {
"1": "tree",
"2": "building",
"3": "road",
"4": "car",
"5": "water",
"6": "grass",
"7": "sky",
"8": "person",
"9": "animal",
"10": "fence",
"11": "pole",
"12": "sign",
"13": "light",
"14": "bench",
"15": "bus",
"16": "truck",
"17": "bicycle",
"18": "motorcycle",
"19": "vegetation",
"20": "playground",
"21": "rail",
"22": "train",
"23": "plane",
"24": "boat"
},
"class_map_color": {
"1": [
34,
139,
34
],
"2": [
128,
128,
128
],
"3": [
128,
64,
0
],
"4": [
0,
0,
255
],
"5": [
30,
144,
255
],
"6": [
124,
252,
0
],
"7": [
135,
206,
250
],
"8": [
255,
215,
0
],
"9": [
160,
82,
45
],
"10": [
70,
130,
180
],
"11": [
105,
105,
105
],
"12": [
255,
69,
0
],
"13": [
255,
140,
0
],
"14": [
255,
20,
147
],
"15": [
255,
0,
255
],
"16": [
186,
85,
211
],
"17": [
148,
0,
211
],
"18": [
139,
0,
139
],
"19": [
0,
100,
0
],
"20": [
34,
139,
34
],
"21": [
255,
228,
181
],
"22": [
160,
82,
45
],
"23": [
0,
255,
255
],
"24": [
0,
191,
255
]
},
"capture_distance": [
45,
65
]
},
{
"context": "seg_drone_flood",
"description": "Modelo para segmentação de imagens de Drone com foco em alagamentos (10 classes).",
"queue": "seg_drone_flood_inference_queue",
"task_type": "semantic_segmentation",
"class_map": {
"1": "flooded_area",
"2": "dry_land",
"3": "building",
"4": "road",
"5": "tree",
"6": "grass",
"7": "water",
"8": "sky",
"9": "vehicle",
"10": "bridge"
},
"class_map_color": {
"1": [
0,
0,
255
],
"2": [
124,
252,
0
],
"3": [
128,
128,
128
],
"4": [
128,
64,
0
],
"5": [
34,
139,
34
],
"6": [
50,
205,
50
],
"7": [
30,
144,
255
],
"8": [
135,
206,
250
],
"9": [
255,
215,
0
],
"10": [
139,
69,
19
]
},
"capture_distance": [
45,
65
]
}
Método: POST
Descrição: Inicia uma inferência em um contexto específico, enviando um arquivo de imagem para processamento.
Entrada:
api_key
(obrigatório) - Chave de autenticação da API.{ "inference_id": "id_da_inferencia" }
Método: POST
Descrição: Inicia uma inferência em um contexto específico, enviando um arquivo de imagem para processamento.
Entrada:
api_key
(obrigatório) - Chave de autenticação da API.{ "inference_id": "id_da_inferencia" }
Erros possíveis:
404: Contexto não encontrado.
400: Formato de arquivo inválido.
500: Erro ao armazenar a inferência no banco de dados.
503: Erro ao publicar no RabbitMQ.
Método: GET
Descrição: Busca o resultado de uma inferência pelo ID gerado anteriormente.
Entrada:
{ "context": "nome_do_contexto",
"task_type": "tipo_da_tarefa",
"status": "pending/completed/failed",
"reason": "Motivo do erro, se aplicável.",
"created_at": "timestamp_de_criacao",
"updated_at": "timestamp_de_atualizacao",
"result": { "resultado": "detalhes_do_resultado" }
}
Método: GET
Descrição: Busca o resultado de uma inferência pelo ID gerado anteriormente.
Entrada:
{ "context": "nome_do_contexto",
"task_type": "tipo_da_tarefa",
"status": "pending/completed/failed",
"reason": "Motivo do erro, se aplicável.",
"created_at": "timestamp_de_criacao",
"updated_at": "timestamp_de_atualizacao",
"result": { "resultado": "detalhes_do_resultado" }
}
Erros possíveis:
404: ID da inferência não encontrado.
500: Erro ao acessar o banco de dados.
Requisitos:
Python 3.10
RabbitMQ 3.13
MongoDB 8.0
Dependências Python (instaladas via pip).