Cómo Detectar Objetos y Personas con Frigate e IA: Guía Completa para Cámaras Ezviz
Tus cámaras de seguridad solo muestran vídeo. Frigate las convierte en ojos inteligentes que entienden qué está pasando: distinguen entre una persona y un coche, detectan paquetes en la puerta, y saben si hay un perro en el sofá.
Con Frigate y un acelerador de IA como Google Coral, puedes ejecutar más de 100 detecciones por segundo en local, sin enviar vídeo a ningún servidor cloud y sin suscripciones mensuales.
¿Qué es Frigate NVR y por qué lo necesitas?
Frigate es un NVR (Network Video Recorder) de código abierto con detección de objetos en tiempo real mediante IA. Todo el procesamiento ocurre localmente en tu red.
El problema de las cámaras "tontas"
Las cámaras tradicionales solo graban movimiento. Esto significa:
- Falsas alarmas constantes: Un árbol moviéndose, una sombra, un gato
- Miles de clips inútiles: El 99% de las grabaciones por "movimiento" son irrelevantes
- Dependencia del cloud: Ezviz, Ring, Nest cobran por almacenamiento y detección "inteligente"
- Privacidad nula: Tu vídeo pasa por servidores de terceros
Qué ofrece Frigate
| Característica | Cámaras cloud (Ezviz App) | Frigate local |
|---|---|---|
| Detección de objetos | Básica (solo movimiento) | Personas, coches, perros, gatos, paquetes |
| Procesamiento | Servidores en China/USA | 100% local en tu casa |
| Coste mensual | €3-10/cámara | €0 |
| Privacidad | Vídeo en servidores externos | Nunca sale de tu red |
| Integración HA | Limitada | Nativa y completa |
| Retención | 7-30 días según plan | Ilimitada (tu disco) |
| Latencia | 2-5 segundos | < 500ms |
Detecciones soportadas por Frigate
Frigate detecta 80+ tipos de objetos gracias al modelo COCO. Los más útiles:
- person - Personas (el más importante)
- car - Coches y vehículos
- dog - Perros
- cat - Gatos
- bicycle - Bicicletas
- motorcycle - Motos
- bird - Pájaros
- package - Paquetes (modelos custom)
"La detección de objetos local convierte tu sistema de cámaras de 'grabador tonto' a 'centinela inteligente' que solo te avisa cuando importa." — Blake Blackshear, creador de Frigate
Hardware necesario: ¿Qué acelerador de IA elegir?
Comparativa de aceleradores
Frigate soporta múltiples aceleradores de IA. Aquí la comparativa actualizada:
| Acelerador | Detecciones/s | Potencia | Precio | Recomendado |
|---|---|---|---|---|
| Solo CPU (i5/i7) | 10-20 | 65W+ | €0 | Para 1-2 cámaras |
| Google Coral USB | 100+ | 2W | €60-90 | Hasta 10 cámaras |
| Google Coral M.2 | 100+ | 2W | €25-40 | Si tienes slot M.2 |
| Raspberry Pi AI Kit | 80+ | 3W | €70 | Para Pi 5 |
| Intel OpenVINO (iGPU) | 50-80 | Incluido | €0 | CPUs Intel 11th+ |
| Nvidia GPU | 200+ | 75W+ | €150+ | Muchas cámaras + más |
Mi recomendación según tu setup
Si tienes Raspberry Pi 5: Raspberry Pi AI Kit (Hailo) o Coral USB Si tienes mini PC Intel: OpenVINO (usa la GPU integrada) Si tienes servidor con PCIe: Coral M.2 Dual (mejor relación precio/rendimiento) Para más de 15 cámaras: Nvidia GPU dedicada
Estado actual del Google Coral
Importante: Según la documentación oficial de Frigate, el Coral ya no se recomienda para nuevas instalaciones excepto en:
- Dispositivos de muy bajo consumo
- Hardware incapaz de usar otros aceleradores
Sin embargo, Frigate seguirá soportando Coral indefinidamente por su base de usuarios instalada. Si ya tienes uno, úsalo. Si compras nuevo, considera alternativas como Hailo o OpenVINO.
Paso 1: Preparar cámaras Ezviz para Frigate
Habilitar RTSP en cámaras Ezviz
Las cámaras Ezviz vienen con RTSP deshabilitado por defecto. Para activarlo:
- Abre la app Ezviz en tu móvil
- Ve a Ajustes de la cámara > Configuración del dispositivo
- Busca Configuración de servicio local o LAN Live View
- Activa RTSP
- Anota el código de verificación (lo necesitarás)
Encontrar la URL RTSP de tu cámara
La URL típica para Ezviz es:
1rtsp://admin:CODIGO_VERIFICACION@IP_CAMARA:554/h264/ch1/main/av_stream
Donde:
CODIGO_VERIFICACION: El código de 6 caracteres de la cámaraIP_CAMARA: La IP local de tu cámara (ej: 192.168.1.100)
Para probar que funciona:
1# Con VLC2vlc rtsp://admin:ABC123@192.168.1.100:554/h264/ch1/main/av_stream3 4# Con ffprobe5ffprobe -rtsp_transport tcp rtsp://admin:ABC123@192.168.1.100:554/h264/ch1/main/av_stream
Streams disponibles en Ezviz
| Stream | Resolución típica | Uso en Frigate |
|---|---|---|
| Main stream | 1080p/2K | Grabaciones |
| Sub stream | 640x480 | Detección de objetos |
1# Main stream (alta resolución)2rtsp://admin:CODIGO@IP:554/h264/ch1/main/av_stream3 4# Sub stream (baja resolución, para detección)5rtsp://admin:CODIGO@IP:554/h264/ch1/sub/av_stream
Paso 2: Instalar Frigate en Home Assistant
Opción A: Add-on de Home Assistant (Recomendado)
- Ve a Configuración > Complementos > Tienda de complementos
- Busca "Frigate" e instala el complemento oficial
- Antes de iniciar, configura el archivo
frigate.yml
Opción B: Docker Compose (Para servidores dedicados)
1# docker-compose.yml2version: "3.9"3services:4 frigate:5 container_name: frigate6 image: ghcr.io/blakeblackshear/frigate:stable7 restart: unless-stopped8 privileged: true # Necesario para acceso a hardware9 shm_size: "256mb" # Ajustar según número de cámaras10 devices:11 - /dev/bus/usb:/dev/bus/usb # Para Coral USB12 # - /dev/apex_0:/dev/apex_0 # Para Coral M.213 volumes:14 - /etc/localtime:/etc/localtime:ro15 - ./config:/config16 - ./storage:/media/frigate17 ports:18 - "5000:5000" # Web UI19 - "8554:8554" # RTSP restream20 - "8555:8555/tcp" # WebRTC21 - "8555:8555/udp"22 environment:23 FRIGATE_RTSP_PASSWORD: "password"
Iniciar:
1docker compose up -d
Paso 3: Configuración completa de Frigate
Archivo de configuración base
Crea o edita /config/frigate.yml:
1# frigate.yml - Configuración optimizada para Ezviz2# Autor: Javier Santos - javadex.es3 4mqtt:5 enabled: true6 host: core-mosquitto # IP del broker MQTT7 port: 18838 user: frigate9 password: tu_password_mqtt10 11# Configuración de detección12detectors:13 coral:14 type: edgetpu15 device: usb # Cambia a "pci" para M.216 17# Configuración de modelos18model:19 width: 32020 height: 32021 22# Configuración de objetos global23objects:24 track:25 - person26 - car27 - dog28 - cat29 - bicycle30 filters:31 person:32 min_area: 500033 max_area: 10000034 min_score: 0.535 threshold: 0.736 car:37 min_area: 1000038 max_area: 20000039 min_score: 0.540 threshold: 0.741 dog:42 min_area: 200043 max_area: 5000044 min_score: 0.445 threshold: 0.646 cat:47 min_area: 100048 max_area: 3000049 min_score: 0.450 threshold: 0.651 52# Configuración de grabación53record:54 enabled: true55 retain:56 days: 757 mode: motion58 events:59 retain:60 default: 1461 mode: active_objects62 objects:63 person: 3064 car: 1465 66# Configuración de snapshots67snapshots:68 enabled: true69 timestamp: true70 bounding_box: true71 crop: true72 retain:73 default: 1474 objects:75 person: 3076 77# Configuración de cámaras Ezviz78cameras:79 # Cámara entrada principal80 entrada:81 ffmpeg:82 inputs:83 # Stream de alta resolución para grabación84 - path: rtsp://admin:ABC123@192.168.1.100:554/h264/ch1/main/av_stream85 roles:86 - record87 # Stream de baja resolución para detección88 - path: rtsp://admin:ABC123@192.168.1.100:554/h264/ch1/sub/av_stream89 roles:90 - detect91 output_args:92 record: preset-record-generic-audio-copy93 detect:94 enabled: true95 width: 64096 height: 48097 fps: 598 motion:99 mask:100 # Máscara para ignorar zonas (árboles, calle)101 - 0,0,300,0,300,200,0,200102 zones:103 porche:104 coordinates: 400,480,640,480,640,300,400,300105 jardin:106 coordinates: 0,480,400,480,400,200,0,200107 objects:108 filters:109 person:110 mask:111 - 0,0,200,0,200,100,0,100 # Ignora esquina superior izquierda112 113 # Cámara garaje114 garaje:115 ffmpeg:116 inputs:117 - path: rtsp://admin:DEF456@192.168.1.101:554/h264/ch1/main/av_stream118 roles:119 - record120 - path: rtsp://admin:DEF456@192.168.1.101:554/h264/ch1/sub/av_stream121 roles:122 - detect123 detect:124 enabled: true125 width: 640126 height: 480127 fps: 5128 objects:129 track:130 - person131 - car132 - bicycle133 - motorcycle134 135 # Cámara interior (salón)136 salon:137 ffmpeg:138 inputs:139 - path: rtsp://admin:GHI789@192.168.1.102:554/h264/ch1/main/av_stream140 roles:141 - record142 - path: rtsp://admin:GHI789@192.168.1.102:554/h264/ch1/sub/av_stream143 roles:144 - detect145 detect:146 enabled: true147 width: 640148 height: 480149 fps: 5150 objects:151 track:152 - person153 - dog154 - cat155 record:156 events:157 required_zones:158 - zona_principal159 zones:160 zona_principal:161 coordinates: 100,480,540,480,540,100,100,100162 163# Interfaz web164ui:165 live_mode: jsmpeg166 timezone: Europe/Madrid
Paso 4: Ajustar detección para evitar falsos positivos
Estrategia de zonas de detección
Las zonas son cruciales para reducir falsas alarmas:
1cameras:2 entrada:3 zones:4 # Zona alta prioridad: porche5 porche:6 coordinates: 400,480,640,480,640,300,400,3007 objects:8 - person9 filters:10 person:11 min_score: 0.6 # Más estricto en esta zona12 13 # Zona media: jardín14 jardin:15 coordinates: 0,480,400,480,400,200,0,20016 objects:17 - person18 - dog19 filters:20 person:21 min_score: 0.522 23 # Zona a ignorar: calle pública24 calle:25 coordinates: 0,200,640,200,640,0,0,026 objects: [] # No detectar nada aquí
Configurar máscaras de movimiento
Las máscaras evitan que zonas específicas disparen detección:
1cameras:2 entrada:3 motion:4 mask:5 # Formato: lista de coordenadas x,y6 # Máscara para árbol que se mueve7 - 50,100,150,100,150,250,50,2508 # Máscara para carretera con coches pasando9 - 0,0,640,0,640,80,0,8010 threshold: 25 # Sensibilidad de movimiento (1-255)11 contour_area: 100 # Área mínima de contorno12 delta_alpha: 0.213 frame_alpha: 0.214 frame_height: 100 # Reducir para mejor rendimiento
Filtros por objeto
1objects:2 filters:3 person:4 min_area: 5000 # Ignora personas muy pequeñas (lejos)5 max_area: 100000 # Ignora objetos muy grandes6 min_score: 0.5 # Confianza mínima del modelo7 threshold: 0.7 # Umbral final para confirmar8 min_ratio: 0.4 # Ratio ancho/alto mínimo9 max_ratio: 3.0 # Ratio máximo10 11 # Perros suelen ser más pequeños12 dog:13 min_area: 200014 max_area: 5000015 min_score: 0.416 17 # Coches son grandes18 car:19 min_area: 1500020 max_area: 30000021 min_score: 0.5
Paso 5: Integración con Home Assistant
Configurar la integración Frigate
- Ve a Configuración > Dispositivos y servicios
- Añade integración Frigate
- Introduce la URL:
http://frigate:5000(o la IP de tu servidor)
Entidades creadas automáticamente
Frigate crea entidades para cada cámara:
| Entidad | Descripción |
|---|---|
camera.entrada | Stream en vivo |
binary_sensor.entrada_person | Sensor de persona detectada |
binary_sensor.entrada_car | Sensor de coche detectado |
binary_sensor.entrada_dog | Sensor de perro detectado |
sensor.entrada_person_count | Contador de personas |
binary_sensor.entrada_motion | Sensor de movimiento |
Automatizaciones con detección de objetos
1# automations.yaml2 3# Notificación cuando detecta persona en entrada4- alias: "Alerta: Persona en la entrada"5 trigger:6 - platform: state7 entity_id: binary_sensor.entrada_person8 to: "on"9 condition:10 # Solo si no estamos en casa11 - condition: state12 entity_id: group.familia13 state: "not_home"14 # Solo de día (evitar notificaciones por vecinos de noche)15 - condition: time16 after: "08:00:00"17 before: "22:00:00"18 action:19 - service: notify.telegram20 data:21 title: "🚨 Persona detectada"22 message: >23 Se ha detectado una persona en la entrada.24 {{ now().strftime('%H:%M') }}25 data:26 photo:27 - url: "http://frigate:5000/api/entrada/latest.jpg"28 caption: "Persona en entrada"29 30# Alerta especial: persona en zona prohibida de noche31- alias: "Alerta CRÍTICA: Intruso de noche"32 trigger:33 - platform: state34 entity_id: binary_sensor.entrada_person35 to: "on"36 condition:37 - condition: time38 after: "23:00:00"39 before: "06:00:00"40 - condition: state41 entity_id: group.familia42 state: "home"43 action:44 - service: notify.all_devices45 data:46 title: "🚨🚨 ALERTA DE SEGURIDAD 🚨🚨"47 message: "Persona detectada en entrada a las {{ now().strftime('%H:%M') }}"48 - service: light.turn_on49 target:50 entity_id: light.jardin51 data:52 brightness: 25553 - delay: "00:00:05"54 - service: tts.google_translate_say55 data:56 entity_id: media_player.salon57 message: "Atención: persona detectada en la entrada"58 59# Detección de perro en zona prohibida60- alias: "Perro en el sofá"61 trigger:62 - platform: state63 entity_id: binary_sensor.salon_dog64 to: "on"65 action:66 - service: notify.mobile_app_mi_telefono67 data:68 title: "🐕 Rocky en el sofá"69 message: "El perro está en el sofá del salón"70 data:71 image: "http://frigate:5000/api/salon/latest.jpg"72 73# Registro de coches que entran/salen74- alias: "Log coche en garaje"75 trigger:76 - platform: state77 entity_id: binary_sensor.garaje_car78 action:79 - service: logbook.log80 data:81 name: "Garaje"82 message: >83 {% if trigger.to_state.state == 'on' %}84 Coche detectado (entrada)85 {% else %}86 Coche salió87 {% endif %}
Dashboard de Frigate en Lovelace
1# En tu dashboard2type: vertical-stack3cards:4 - type: custom:frigate-card5 cameras:6 - camera_entity: camera.entrada7 live_provider: jsmpeg8 - camera_entity: camera.garaje9 live_provider: jsmpeg10 - camera_entity: camera.salon11 live_provider: jsmpeg12 menu:13 buttons:14 frigate: true15 live: true16 clips: true17 snapshots: true18 timeline: true19 live:20 preload: true21 lazy_load: true22 performance:23 profile: low24 25 - type: horizontal-stack26 cards:27 - type: entity28 entity: binary_sensor.entrada_person29 name: "Persona entrada"30 icon: mdi:walk31 - type: entity32 entity: binary_sensor.garaje_car33 name: "Coche garaje"34 icon: mdi:car35 - type: entity36 entity: binary_sensor.salon_dog37 name: "Perro salón"38 icon: mdi:dog
Paso 6: Optimización de rendimiento
Ajustes para múltiples cámaras
1# Para 5+ cámaras, optimiza estos valores2 3# Aumentar memoria compartida de Docker4# En docker-compose.yml:5shm_size: "512mb" # 64mb por cámara aproximadamente6 7# En frigate.yml:8detect:9 fps: 5 # 5 FPS es suficiente para detección10 width: 640 # No necesitas más para detección11 height: 48012 13# Deshabilitar detección en cámaras menos críticas14cameras:15 pasillo:16 detect:17 enabled: false # Solo grabación, sin detección
Monitorizar rendimiento
Accede a http://frigate:5000/api/stats para ver:
1{2 "detectors": {3 "coral": {4 "inference_speed": 8.5, // ms por inferencia5 "detection_start": 1234567890.1236 }7 },8 "cameras": {9 "entrada": {10 "camera_fps": 5.0,11 "process_fps": 5.0,12 "detection_fps": 5.0,13 "capture_pid": 123414 }15 }16}
Valores saludables:
inference_speed< 20ms con Coralcamera_fps≈ valor configuradodetection_fps≈ valor configurado
Casos de uso avanzados
Detección de paquetes en la puerta
Frigate puede detectar paquetes con un modelo personalizado:
1# Añadir modelo custom para paquetes2model:3 path: /config/model_cache/ssd_mobilenet_v2_custom_package.tflite4 width: 3205 height: 3206 labelmap_path: /config/labelmap.txt7 8# labelmap.txt9person10car11dog12package
Reconocimiento facial (experimental)
1# Usar double_take para reconocimiento2# Requiere instalación adicional3 4cameras:5 entrada:6 ffmpeg:7 inputs:8 - path: rtsp://...9 roles:10 - detect11 - record12 - face # Stream para caras
Integración con Telegram para clips
1# automation: Enviar clip de evento a Telegram2- alias: "Enviar clip de intruso"3 trigger:4 - platform: state5 entity_id: binary_sensor.entrada_person6 to: "on"7 action:8 - delay: "00:00:10" # Esperar a que termine el evento9 - service: telegram_bot.send_video10 data:11 file: >12 http://frigate:5000/api/events/{{13 states.binary_sensor.entrada_person.attributes.event_id14 }}/clip.mp415 caption: "Persona detectada en entrada"
Solución de problemas comunes
Cámara no conecta (RTSP timeout)
1# Verificar conectividad2ping 192.168.1.1003 4# Probar RTSP directamente5ffprobe -rtsp_transport tcp \6 rtsp://admin:ABC123@192.168.1.100:554/h264/ch1/main/av_stream7 8# Si usa TCP forzado, añadir en frigate.yml:9cameras:10 entrada:11 ffmpeg:12 input_args: preset-rtsp-restream-low-latency
Muchos falsos positivos
- Añade máscaras en zonas problemáticas (árboles, calle)
- Aumenta
min_scorede 0.5 a 0.6 o 0.7 - Define zonas y limita detección a ellas
- Ajusta
min_areasi detecta objetos muy pequeños
Coral no detectado
1# Verificar USB2lsusb | grep Google3 4# Debería mostrar:5# Bus 001 Device 003: ID 1a6e:089a Global Unichip Corp.6 7# Si no aparece, probar otro puerto USB 3.08# O reinstalar drivers:9echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | \10 sudo tee /etc/apt/sources.list.d/coral-edgetpu.list11sudo apt update12sudo apt install libedgetpu1-std
Alta latencia en stream
1# Usar JSMPEG en lugar de webRTC2ui:3 live_mode: jsmpeg4 5# O reducir bitrate del stream6cameras:7 entrada:8 ffmpeg:9 output_args:10 detect: -f rawvideo -pix_fmt yuv420p
Costes reales: ¿Merece la pena?
Comparativa con servicios cloud
| Servicio | Coste mensual (4 cámaras) | Detección objetos | Almacenamiento |
|---|---|---|---|
| Ezviz Cloud+ | €20 | Básica | 30 días |
| Ring Protect | €28 | Personas | 60 días |
| Nest Aware | €30 | Personas, coches | 60 días |
| Frigate local | €3 (electricidad) | Todo | Ilimitado |
Inversión inicial vs. ahorro
| Componente | Coste |
|---|---|
| Mini PC / NAS | €200-400 (si no tienes) |
| Google Coral USB | €70 |
| Disco 2TB | €60 |
| Total | €330-530 |
Conclusión: Tu casa ahora entiende lo que ve
Frigate transforma cámaras "tontas" en un sistema de vigilancia inteligente que:
- Distingue entre personas, coches, perros y gatos
- Solo te notifica cuando importa
- No envía vídeo a ningún servidor externo
- Funciona 24/7 sin costes recurrentes
La combinación de cámaras Ezviz + Frigate + Google Coral ofrece capacidades de detección que antes solo estaban disponibles en sistemas empresariales de miles de euros.
¿Siguiente paso? En el próximo artículo te muestro cómo crear un agente autónomo en n8n que publique noticias de tecnología en tus redes sociales mientras duermes.
¿Ya tienes Frigate funcionando? Comparte tu configuración en los comentarios. Y si este artículo te ha sido útil, suscríbete a la newsletter para recibir más guías de Home Assistant y automatización.