(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Cómo hacer detección de objetos en vídeo con Azure AI Vision: paso a paso

João Barros 16 de August de 2026 4 min de lectura

Este tutorial muestra cómo hacer detección de objetos en vídeo usando Azure AI Vision para identificar y anotar objetos en fotogramas de vídeo. Es útil para vigilancia, análisis de tráfico o control de calidad, cuando necesita automatizar la identificación de objetos en streaming o archivos de vídeo.

Requisitos previos

  • Cuenta Azure con suscripción y permiso para crear recursos.
  • Instancia de Azure AI Vision (resource key y endpoint) o Azure Cognitive Services con Vision habilitado.
  • Python 3.8+ instalado y pip.
  • Bibliotecas: azure-ai-vision, opencv-python, numpy.
  • Archivo de vídeo (MP4) o cámara disponible para prueba.

Paso 1: Crear el recurso Azure AI Vision

En el portal Azure cree un recurso Azure AI Vision (o Cognitive Services si lo prefiere). Guarde el endpoint y la clave (resource key): serán necesarios para autenticar las llamadas de inferencia.

Paso 2: Instalar dependencias y configurar entorno

Instale las bibliotecas necesarias en un entorno virtual. Aquí usamos el SDK azure-ai-vision, OpenCV y numpy para leer vídeo y dibujar cajas.

python -m venv venv
source venv/bin/activate   # ou venv\Scripts\activate no Windows
pip install azure-ai-vision opencv-python numpy

Paso 3: Código básico para leer vídeo y enviar fotogramas a Azure AI Vision

Dividimos el vídeo en fotogramas (por ejemplo, 1 fotograma por segundo) y llamamos a la API de detección de objetos. Este ejemplo asume que usa el endpoint del servicio de Vision con la operación detectObjects.

import cv2
import numpy as np
from azure.ai.vision import VisionClient, VisionServiceOptions
from azure.core.credentials import AzureKeyCredential

# Configurar credenciales
endpoint = "https://SEU_ENDPOINT"
key = "SUA_CHAVE"
client = VisionClient(endpoint=endpoint, credential=AzureKeyCredential(key))

# Abrir vídeo
cap = cv2.VideoCapture('exemplo.mp4')
fps = cap.get(cv2.CAP_PROP_FPS)
frame_interval = int(fps)  # 1 frame por segundo
frame_idx = 0

while True:
    ret, frame = cap.read()
    if not ret:
        break
    if frame_idx % frame_interval == 0:
        # Converter frame para JPEG em memória
        ret2, buf = cv2.imencode('.jpg', frame)
        jpg_bytes = buf.tobytes()

        # Chamada de deteção de objetos (exemplo conceptual)
        response = client.detect_objects(image=jpg_bytes)
        # A resposta terá uma lista de boxes: cada box tem left, top, width, height e tagName/confidence
        for obj in response.objects:
            x = int(obj.bounding_box.x)
            y = int(obj.bounding_box.y)
            w = int(obj.bounding_box.w)
            h = int(obj.bounding_box.h)
            label = f"{obj.tag_name}: {obj.confidence:.2f}"
            cv2.rectangle(frame, (x, y), (x+w, y+h), (0,255,0), 2)
            cv2.putText(frame, label, (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1)

        # Mostrar frame anotado
        cv2.imshow('Deteção', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    frame_idx += 1

cap.release()
cv2.destroyAllWindows()

Paso 4: Ajustar frecuencia, resolución y filtrado de clases

Para optimizar coste y latencia, envíe menos fotogramas, redimensione a una resolución más baja y filtre por clases de interés (por ejemplo, "car" o "person"). También puede usar un umbral en la confianza para reducir falsos positivos.

# Exemplo de filtragem e resize antes da chamada
target_w = 640
h, w = frame.shape[:2]
scale = target_w / w
frame_small = cv2.resize(frame, (target_w, int(h*scale)))
# converter e enviar frame_small em vez do original

# Ao processar resposta:
min_conf = 0.6
for obj in response.objects:
    if obj.confidence < min_conf:
        continue
    if obj.tag_name not in ('person','car'):
        continue
    # desenhar box como antes

Paso 5: Guardar resultados y generar informes

Guarde las anotaciones en CSV o JSON con el tiempo del fotograma, clase y confianza para análisis posterior o integración con alertas. Esto permite crear paneles en Power BI o canalizaciones ETL.

import csv
with open('detecoes.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['frame_time_s','class','confidence','x','y','w','h'])
    # para cada deteção: writer.writerow([time_sec, obj.tag_name, obj.confidence, x, y, w, h])

Verificar el resultado

Ejecute el script y verifique si las cajas aparecen en los objetos esperados, si la tasa de falsos positivos es aceptable y si el archivo CSV tiene registros coherentes. Pruebe con vídeos de validación y cambie min_conf, resolución e intervalos de fotogramas para calibrar rendimiento y coste.

Conclusión

Con Azure AI Vision y un cliente Python simple es posible crear una canalización de detección de objetos en vídeo para vigilancia, análisis de tráfico o control de calidad. Próximos pasos: integrar streaming en tiempo real (Azure Media Services), usar modelos Custom Vision para clases específicas, o exponer resultados vía Azure Functions. Consejo: registre métricas (latencia, tasa de detección) desde el inicio para optimizar coste y precisión.