Pipeline de detecção e rastreamento de gado em vídeo aéreo (VANT): YOLO em tempo real (Roboflow), associação temporal de indivíduos, profundidade métrica (Depth Pro) e seleção automática do melhor ângulo por animal. O objetivo é contagem, localização e frames de qualidade sem inspeção manual frame a frame.
Neste post documentamos o fluxo de inferência, o rastreamento, a estimativa de profundidade e os critérios de seleção de vista — base da série de gado vivo antes do Antares (peso).
1. Motivação e Contexto
O monitoramento de rebanhos em larga escala apresenta desafios significativos de processamento de imagem e análise temporal. Abordagens tradicionais requerem inspeção manual ou sistemas custosos. O objetivo deste trabalho é automatizar a detecção e análise de indivíduos em vídeo capturado por VANT (Veículo Aéreo Não Tripulado), viabilizando contagem, localização espacial e seleção automática de frames de melhor qualidade visual.
2. Arquitetura do Sistema
O pipeline opera em três estágios sequenciais:
2.1 Estágio 1: Live Streaming e Detecção em Tempo Real
Processamento contínuo de frames de vídeo com detecção YOLO via API Roboflow:
# Fluxo principal
for frame in video_stream:
# Redimensionar para otimizar latência
frame_resized = resize_image(frame, max_size=1024)
# Inferência no modelo cattle-bmfuz/1
predictions = roboflow_api.detect(
frame_resized,
confidence_threshold=0.40,
overlap_threshold=0.30
)
# Associar detecções a IDs de rastreamento
cattle_tracker.update(predictions, frame_id)Especificações:
- Modelo:
cattle-bmfuz/1(modelo customizado treinado com Roboflow) - Confiança mínima: 40%
- Limiar de sobreposição (IOU): 30%
- API: Inference SDK v0.58.1
2.2 Estágio 2: Rastreamento Temporal e Seleção de Melhor Ângulo
Cada animal detectado é associado a um ID único. Para cada indivíduo, o sistema mantém histórico de detecções e seleciona o frame de melhor qualidade visual:
class CattlePipeline:
cattle_tracker = {
'cattle_id': {
'detections': [...], # Histórico de bbox e confiança
'best_detection': None, # Detecção com maior confiança
'best_frame': None, # Frame visual de melhor qualidade
'best_confidence': float, # Score de confiança máximo
'best_angle_score': float, # Métrica de ângulo de visualização
'first_seen_time': timestamp,
'is_confirmed': bool, # Rastreamento confirmado (>15s)
'depth_map': numpy.ndarray # Mapa de profundidade estimado
}
}Critérios de Seleção:
- Confiança de detecção (output da rede YOLO)
- Ângulo de visualização (relação aspecto, posição no frame)
- Duração de rastreamento (confirmação após 15 segundos contínuos)
2.3 Estágio 3: Estimativa de Profundidade e Segmentação
Para o melhor frame de cada animal, calcula-se mapa de profundidade métrica usando Apple Depth Pro:
from depth_pro import create_model_and_transforms
# Inferência de profundidade
model, transform = create_model_and_transforms()
depth_map = model(frame_transformed)
# Profundidade no ROI (bounding box)
bbox_depth = depth_map[y1:y2, x1:x2]
mean_depth = bbox_depth.mean() # Distância métrica do animalArquitetura Depth Pro:
- Modelo pré-treinado em diversas cenas naturais
- Saída: mapa de profundidade densa em escala métrica
- Dispositivo: GPU (CUDA), MPS (Apple Silicon), ou CPU
3. Componentes Principais
3.1 Pipeline de Detecção (cattle_pipeline.py)
Classe CattlePipeline orquestra toda a sequência:
pipeline = CattlePipeline(
api_key="vAEx3j7cOgLv4GtMzmPv",
model_id="cattle-bmfuz/1"
)
# Processar vídeo
for frame in video_source:
predictions = pipeline.process_frame(frame, frame_id)
pipeline.update_tracking(predictions)
# Após confirmação (15s), extrair melhor specimen
if animal.is_confirmed:
best_crop = pipeline.get_best_crop(animal.cattle_id)Métodos principais:
process_frame(frame, frame_id): Inferência e atualizaçãoupdate_tracking(predictions): Associação de dados de rastreamentoget_best_crop(cattle_id): Exportar melhor imagem do animalestimate_depth(frame, bbox): Calcular profundidade
3.2 Estimativa de Profundidade (depth_estimator.py)
Wrapper para Apple Depth Pro com suporte a múltiplos aceleradores:
depth_estimator = DepthEstimator()
# GPU NVIDIA
if torch.cuda.is_available():
depth_map = depth_estimator.predict(frame, device='cuda')
# Apple Silicon
elif torch.backends.mps.is_available():
depth_map = depth_estimator.predict(frame, device='mps')
# CPU fallback
else:
depth_map = depth_estimator.predict(frame, device='cpu')3.3 Processamento de Vídeo
Entrada: MP4/MOV de drone com múltiplos fotogramas
Fluxo:
video_detection.py: Detecção em arquivo pré-gravadovideo_detection_live.py: Processamento em tempo real (protocolo de câmera)visual_odometry.py: Estimação de movimento de câmera entre frames
3.4 Overlay de Telemetria (telemetry_overlay.py)
Visualização em tempo real com metadados:
# Dados sobrepostos no vídeo
draw_telemetry_overlay(frame, {
'timestamp': frame_time,
'cattle_count': len(confirmed_animals),
'frame_rate': fps,
'model_inference_time': latency_ms,
'gps_position': drone_position,
'altitude': height_m
})4. Dados e Validação
4.1 Dataset de Entrada
- Fonte: Captura aérea por VANT em ambiente rural
- Resolução: UHD 2560×1440, 30 fps
- Duração: Sequências de vídeo com múltiplos minutos
- Exemplo:
20250914_184106_19117428-uhd_2560_1440_30fps - Frames extraídos: Conjunto de referência em
data/frames/original/
4.2 Modelo de Detecção
Treinamento: Roboflow com dataset anotado de gado
- Modelo ID:
cattle-bmfuz/1 - Classes: Gado (single class detection)
- Performance: Confiança média ~0.65–0.85 em condições de voo normal
Parâmetros de Inferência:
Confidence threshold: 40% (reduz falsos negativos)
Overlap IOU threshold: 30% (agrupa detecções próximas)
Input: JPG redimensionado (max 1024px)
Latência: ~500–1000ms por frame via API4.3 Validação de Rastreamento
- Confirmação após 15 segundos contínuos de rastreamento
- Métrica: Taxa de reidentificação (re-ID) de animais
- Métrica: Precisão de profundidade em ROI (comparar com GPS/RTK se disponível)
5. Fluxo de Execução
5.1 Modo Batch (Arquivo de Vídeo)
python video_detection.py \
--video-path data/20250914_184106_19117428-uhd_2560_1440_30fps/video.mp4 \
--api-key vAEx3j7cOgLv4GtMzmPv \
--model-id cattle-bmfuz/1 \
--output-dir output/Saída:
- Vídeo com bounding boxes e track IDs
- JSON com metadados de cada detecção
- Imagens cropped dos melhores exemplares
5.2 Modo em Tempo Real
python video_detection_live.py \
--camera-source 0 \
--api-key <API_KEY> \
--telemetry-port /dev/ttyUSB0 # GPS/IMU do drone5.3 Análise Pós-Processamento
python cattle_pipeline.py \
--input-video output/detected.mp4 \
--estimate-depth \
--export-crops \
--export-metrics6. Arquitetura Técnica Detalhada
6.1 Stack de Dependências
dependencies = [
"inference>=0.58.1", # Roboflow API client
"inference-sdk>=0.58.1", # Advanced features
"opencv-python>=4.10.0.84", # Processamento de vídeo
"supervision>=0.26.1", # Utilidades de detecção
"pillow>=11.3.0", # Manipulação de imagens
"torch>=2.0", # Deep learning (Depth Pro)
"requests>=2.32.5", # HTTP client
"certifi>=2025.10.5" # SSL/TLS
]6.2 Fluxo de Dados
Vídeo de entrada (MP4)
↓
Extração de frames (OpenCV)
↓
Redimensionamento (max 1024px)
↓
Inferência YOLO (Roboflow API)
↓
Rastreamento temporal (ID association)
↓
Seleção de melhor frame (por animal)
↓
Estimativa de profundidade (Depth Pro)
↓
Exportação (crops, metadata JSON, vídeo anotado)6.3 Limitações Atuais
- Latência de API: ~500–1000ms por frame (bottleneck principal)
- Modelo genérico: Treinado em gado bovino; generalização para outras espécies não testada
- Profundidade: Estimativa monocular; exatidão depende de texture e lighting
- Rastreamento: Associação greedy; não implementa filtro Kalman para trajectórias suaves
7. Extensões Futuras
- Deploy Local: Implementar YOLO v8 local (TensorRT) para eliminar latência de API
- Multi-classe: Estender para ovinos, equinos, fauna selvagem
- Segmentação de Instância: Contorno preciso de cada animal
- Rastreamento Robusto: Implementar Kalman filter e Hungarian algorithm para data association
- Calibração Estéreo: Usar múltiplas câmeras para profundidade mais precisa
- Análise Comportamental: Detectar padrões de movimento (pastejo, repouso, fuga)
8. Referências e Créditos
- Roboflow: Plataforma de treinamento customizado de YOLO
- Apple Depth Pro: Modelo de estimativa de profundidade monocular
- OpenCV & Supervision: Processamento e anotação de vídeo
- Inference SDK: Cliente Python para modelos via API
Conclusão
Este pipeline demonstra como integrar detecção de objetos em tempo real, rastreamento visual e estimativa de profundidade para automatizar monitoramento de rebanhos. A modularidade do design permite adaptar o sistema para outras aplicações de detecção aérea, como inventário agrícola, monitoramento ambiental ou busca e resgate.

