Ir al contenido principal
Desarrollo & IA

Cómo Detectar Objetos y Personas con Frigate e IA: Guía Completa para Cámaras Ezviz [2026]

5 de febrero de 2026
32 min

Convierte tus cámaras Ezviz en un sistema de vigilancia inteligente con Frigate. IA local para detectar personas, coches, perros y paquetes sin pagar servicios cloud.

Javier Santos

Especialista en IA & Machine Learning

📧¿Te gusta este contenido?

Únete a 547+ profesionales que reciben tips de IA cada semana. Sin spam, cancela cuando quieras.

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ísticaCámaras cloud (Ezviz App)Frigate local
Detección de objetosBásica (solo movimiento)Personas, coches, perros, gatos, paquetes
ProcesamientoServidores en China/USA100% local en tu casa
Coste mensual€3-10/cámara€0
PrivacidadVídeo en servidores externosNunca sale de tu red
Integración HALimitadaNativa y completa
Retención7-30 días según planIlimitada (tu disco)
Latencia2-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:

AceleradorDetecciones/sPotenciaPrecioRecomendado
Solo CPU (i5/i7)10-2065W+€0Para 1-2 cámaras
Google Coral USB100+2W€60-90Hasta 10 cámaras
Google Coral M.2100+2W€25-40Si tienes slot M.2
Raspberry Pi AI Kit80+3W€70Para Pi 5
Intel OpenVINO (iGPU)50-80Incluido€0CPUs Intel 11th+
Nvidia GPU200+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:

  1. Abre la app Ezviz en tu móvil
  2. Ve a Ajustes de la cámara > Configuración del dispositivo
  3. Busca Configuración de servicio local o LAN Live View
  4. Activa RTSP
  5. 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:

code
1rtsp://admin:CODIGO_VERIFICACION@IP_CAMARA:554/h264/ch1/main/av_stream

Donde:

  • CODIGO_VERIFICACION: El código de 6 caracteres de la cámara
  • IP_CAMARA: La IP local de tu cámara (ej: 192.168.1.100)

Para probar que funciona:

bash
1# Con VLC
2vlc rtsp://admin:ABC123@192.168.1.100:554/h264/ch1/main/av_stream
3 
4# Con ffprobe
5ffprobe -rtsp_transport tcp rtsp://admin:ABC123@192.168.1.100:554/h264/ch1/main/av_stream

Streams disponibles en Ezviz

StreamResolución típicaUso en Frigate
Main stream1080p/2KGrabaciones
Sub stream640x480Detección de objetos

code
1# Main stream (alta resolución)
2rtsp://admin:CODIGO@IP:554/h264/ch1/main/av_stream
3 
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)

  1. Ve a Configuración > Complementos > Tienda de complementos
  2. Busca "Frigate" e instala el complemento oficial
  3. Antes de iniciar, configura el archivo frigate.yml

Opción B: Docker Compose (Para servidores dedicados)

yaml
1# docker-compose.yml
2version: "3.9"
3services:
4 frigate:
5 container_name: frigate
6 image: ghcr.io/blakeblackshear/frigate:stable
7 restart: unless-stopped
8 privileged: true # Necesario para acceso a hardware
9 shm_size: "256mb" # Ajustar según número de cámaras
10 devices:
11 - /dev/bus/usb:/dev/bus/usb # Para Coral USB
12 # - /dev/apex_0:/dev/apex_0 # Para Coral M.2
13 volumes:
14 - /etc/localtime:/etc/localtime:ro
15 - ./config:/config
16 - ./storage:/media/frigate
17 ports:
18 - "5000:5000" # Web UI
19 - "8554:8554" # RTSP restream
20 - "8555:8555/tcp" # WebRTC
21 - "8555:8555/udp"
22 environment:
23 FRIGATE_RTSP_PASSWORD: "password"

Iniciar:

bash
1docker compose up -d


Paso 3: Configuración completa de Frigate

Archivo de configuración base

Crea o edita /config/frigate.yml:

yaml
1# frigate.yml - Configuración optimizada para Ezviz
2# Autor: Javier Santos - javadex.es
3 
4mqtt:
5 enabled: true
6 host: core-mosquitto # IP del broker MQTT
7 port: 1883
8 user: frigate
9 password: tu_password_mqtt
10 
11# Configuración de detección
12detectors:
13 coral:
14 type: edgetpu
15 device: usb # Cambia a "pci" para M.2
16 
17# Configuración de modelos
18model:
19 width: 320
20 height: 320
21 
22# Configuración de objetos global
23objects:
24 track:
25 - person
26 - car
27 - dog
28 - cat
29 - bicycle
30 filters:
31 person:
32 min_area: 5000
33 max_area: 100000
34 min_score: 0.5
35 threshold: 0.7
36 car:
37 min_area: 10000
38 max_area: 200000
39 min_score: 0.5
40 threshold: 0.7
41 dog:
42 min_area: 2000
43 max_area: 50000
44 min_score: 0.4
45 threshold: 0.6
46 cat:
47 min_area: 1000
48 max_area: 30000
49 min_score: 0.4
50 threshold: 0.6
51 
52# Configuración de grabación
53record:
54 enabled: true
55 retain:
56 days: 7
57 mode: motion
58 events:
59 retain:
60 default: 14
61 mode: active_objects
62 objects:
63 person: 30
64 car: 14
65 
66# Configuración de snapshots
67snapshots:
68 enabled: true
69 timestamp: true
70 bounding_box: true
71 crop: true
72 retain:
73 default: 14
74 objects:
75 person: 30
76 
77# Configuración de cámaras Ezviz
78cameras:
79 # Cámara entrada principal
80 entrada:
81 ffmpeg:
82 inputs:
83 # Stream de alta resolución para grabación
84 - path: rtsp://admin:ABC123@192.168.1.100:554/h264/ch1/main/av_stream
85 roles:
86 - record
87 # Stream de baja resolución para detección
88 - path: rtsp://admin:ABC123@192.168.1.100:554/h264/ch1/sub/av_stream
89 roles:
90 - detect
91 output_args:
92 record: preset-record-generic-audio-copy
93 detect:
94 enabled: true
95 width: 640
96 height: 480
97 fps: 5
98 motion:
99 mask:
100 # Máscara para ignorar zonas (árboles, calle)
101 - 0,0,300,0,300,200,0,200
102 zones:
103 porche:
104 coordinates: 400,480,640,480,640,300,400,300
105 jardin:
106 coordinates: 0,480,400,480,400,200,0,200
107 objects:
108 filters:
109 person:
110 mask:
111 - 0,0,200,0,200,100,0,100 # Ignora esquina superior izquierda
112 
113 # Cámara garaje
114 garaje:
115 ffmpeg:
116 inputs:
117 - path: rtsp://admin:DEF456@192.168.1.101:554/h264/ch1/main/av_stream
118 roles:
119 - record
120 - path: rtsp://admin:DEF456@192.168.1.101:554/h264/ch1/sub/av_stream
121 roles:
122 - detect
123 detect:
124 enabled: true
125 width: 640
126 height: 480
127 fps: 5
128 objects:
129 track:
130 - person
131 - car
132 - bicycle
133 - motorcycle
134 
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_stream
140 roles:
141 - record
142 - path: rtsp://admin:GHI789@192.168.1.102:554/h264/ch1/sub/av_stream
143 roles:
144 - detect
145 detect:
146 enabled: true
147 width: 640
148 height: 480
149 fps: 5
150 objects:
151 track:
152 - person
153 - dog
154 - cat
155 record:
156 events:
157 required_zones:
158 - zona_principal
159 zones:
160 zona_principal:
161 coordinates: 100,480,540,480,540,100,100,100
162 
163# Interfaz web
164ui:
165 live_mode: jsmpeg
166 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:

yaml
1cameras:
2 entrada:
3 zones:
4 # Zona alta prioridad: porche
5 porche:
6 coordinates: 400,480,640,480,640,300,400,300
7 objects:
8 - person
9 filters:
10 person:
11 min_score: 0.6 # Más estricto en esta zona
12 
13 # Zona media: jardín
14 jardin:
15 coordinates: 0,480,400,480,400,200,0,200
16 objects:
17 - person
18 - dog
19 filters:
20 person:
21 min_score: 0.5
22 
23 # Zona a ignorar: calle pública
24 calle:
25 coordinates: 0,200,640,200,640,0,0,0
26 objects: [] # No detectar nada aquí

Configurar máscaras de movimiento

Las máscaras evitan que zonas específicas disparen detección:

yaml
1cameras:
2 entrada:
3 motion:
4 mask:
5 # Formato: lista de coordenadas x,y
6 # Máscara para árbol que se mueve
7 - 50,100,150,100,150,250,50,250
8 # Máscara para carretera con coches pasando
9 - 0,0,640,0,640,80,0,80
10 threshold: 25 # Sensibilidad de movimiento (1-255)
11 contour_area: 100 # Área mínima de contorno
12 delta_alpha: 0.2
13 frame_alpha: 0.2
14 frame_height: 100 # Reducir para mejor rendimiento

Filtros por objeto

yaml
1objects:
2 filters:
3 person:
4 min_area: 5000 # Ignora personas muy pequeñas (lejos)
5 max_area: 100000 # Ignora objetos muy grandes
6 min_score: 0.5 # Confianza mínima del modelo
7 threshold: 0.7 # Umbral final para confirmar
8 min_ratio: 0.4 # Ratio ancho/alto mínimo
9 max_ratio: 3.0 # Ratio máximo
10 
11 # Perros suelen ser más pequeños
12 dog:
13 min_area: 2000
14 max_area: 50000
15 min_score: 0.4
16 
17 # Coches son grandes
18 car:
19 min_area: 15000
20 max_area: 300000
21 min_score: 0.5


Paso 5: Integración con Home Assistant

Configurar la integración Frigate

  1. Ve a Configuración > Dispositivos y servicios
  2. Añade integración Frigate
  3. Introduce la URL: http://frigate:5000 (o la IP de tu servidor)

Entidades creadas automáticamente

Frigate crea entidades para cada cámara:

EntidadDescripción
camera.entradaStream en vivo
binary_sensor.entrada_personSensor de persona detectada
binary_sensor.entrada_carSensor de coche detectado
binary_sensor.entrada_dogSensor de perro detectado
sensor.entrada_person_countContador de personas
binary_sensor.entrada_motionSensor de movimiento

Automatizaciones con detección de objetos

yaml
1# automations.yaml
2 
3# Notificación cuando detecta persona en entrada
4- alias: "Alerta: Persona en la entrada"
5 trigger:
6 - platform: state
7 entity_id: binary_sensor.entrada_person
8 to: "on"
9 condition:
10 # Solo si no estamos en casa
11 - condition: state
12 entity_id: group.familia
13 state: "not_home"
14 # Solo de día (evitar notificaciones por vecinos de noche)
15 - condition: time
16 after: "08:00:00"
17 before: "22:00:00"
18 action:
19 - service: notify.telegram
20 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 noche
31- alias: "Alerta CRÍTICA: Intruso de noche"
32 trigger:
33 - platform: state
34 entity_id: binary_sensor.entrada_person
35 to: "on"
36 condition:
37 - condition: time
38 after: "23:00:00"
39 before: "06:00:00"
40 - condition: state
41 entity_id: group.familia
42 state: "home"
43 action:
44 - service: notify.all_devices
45 data:
46 title: "🚨🚨 ALERTA DE SEGURIDAD 🚨🚨"
47 message: "Persona detectada en entrada a las {{ now().strftime('%H:%M') }}"
48 - service: light.turn_on
49 target:
50 entity_id: light.jardin
51 data:
52 brightness: 255
53 - delay: "00:00:05"
54 - service: tts.google_translate_say
55 data:
56 entity_id: media_player.salon
57 message: "Atención: persona detectada en la entrada"
58 
59# Detección de perro en zona prohibida
60- alias: "Perro en el sofá"
61 trigger:
62 - platform: state
63 entity_id: binary_sensor.salon_dog
64 to: "on"
65 action:
66 - service: notify.mobile_app_mi_telefono
67 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/salen
74- alias: "Log coche en garaje"
75 trigger:
76 - platform: state
77 entity_id: binary_sensor.garaje_car
78 action:
79 - service: logbook.log
80 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

yaml
1# En tu dashboard
2type: vertical-stack
3cards:
4 - type: custom:frigate-card
5 cameras:
6 - camera_entity: camera.entrada
7 live_provider: jsmpeg
8 - camera_entity: camera.garaje
9 live_provider: jsmpeg
10 - camera_entity: camera.salon
11 live_provider: jsmpeg
12 menu:
13 buttons:
14 frigate: true
15 live: true
16 clips: true
17 snapshots: true
18 timeline: true
19 live:
20 preload: true
21 lazy_load: true
22 performance:
23 profile: low
24 
25 - type: horizontal-stack
26 cards:
27 - type: entity
28 entity: binary_sensor.entrada_person
29 name: "Persona entrada"
30 icon: mdi:walk
31 - type: entity
32 entity: binary_sensor.garaje_car
33 name: "Coche garaje"
34 icon: mdi:car
35 - type: entity
36 entity: binary_sensor.salon_dog
37 name: "Perro salón"
38 icon: mdi:dog


Paso 6: Optimización de rendimiento

Ajustes para múltiples cámaras

yaml
1# Para 5+ cámaras, optimiza estos valores
2 
3# Aumentar memoria compartida de Docker
4# En docker-compose.yml:
5shm_size: "512mb" # 64mb por cámara aproximadamente
6 
7# En frigate.yml:
8detect:
9 fps: 5 # 5 FPS es suficiente para detección
10 width: 640 # No necesitas más para detección
11 height: 480
12 
13# Deshabilitar detección en cámaras menos críticas
14cameras:
15 pasillo:
16 detect:
17 enabled: false # Solo grabación, sin detección

Monitorizar rendimiento

Accede a http://frigate:5000/api/stats para ver:

json
1{
2 "detectors": {
3 "coral": {
4 "inference_speed": 8.5, // ms por inferencia
5 "detection_start": 1234567890.123
6 }
7 },
8 "cameras": {
9 "entrada": {
10 "camera_fps": 5.0,
11 "process_fps": 5.0,
12 "detection_fps": 5.0,
13 "capture_pid": 1234
14 }
15 }
16}

Valores saludables:

  • inference_speed < 20ms con Coral
  • camera_fps ≈ valor configurado
  • detection_fps ≈ valor configurado


Casos de uso avanzados

Detección de paquetes en la puerta

Frigate puede detectar paquetes con un modelo personalizado:

yaml
1# Añadir modelo custom para paquetes
2model:
3 path: /config/model_cache/ssd_mobilenet_v2_custom_package.tflite
4 width: 320
5 height: 320
6 labelmap_path: /config/labelmap.txt
7 
8# labelmap.txt
9person
10car
11dog
12package

Reconocimiento facial (experimental)

yaml
1# Usar double_take para reconocimiento
2# Requiere instalación adicional
3 
4cameras:
5 entrada:
6 ffmpeg:
7 inputs:
8 - path: rtsp://...
9 roles:
10 - detect
11 - record
12 - face # Stream para caras

Integración con Telegram para clips

yaml
1# automation: Enviar clip de evento a Telegram
2- alias: "Enviar clip de intruso"
3 trigger:
4 - platform: state
5 entity_id: binary_sensor.entrada_person
6 to: "on"
7 action:
8 - delay: "00:00:10" # Esperar a que termine el evento
9 - service: telegram_bot.send_video
10 data:
11 file: >
12 http://frigate:5000/api/events/{{
13 states.binary_sensor.entrada_person.attributes.event_id
14 }}/clip.mp4
15 caption: "Persona detectada en entrada"


Solución de problemas comunes

Cámara no conecta (RTSP timeout)

bash
1# Verificar conectividad
2ping 192.168.1.100
3 
4# Probar RTSP directamente
5ffprobe -rtsp_transport tcp \
6 rtsp://admin:ABC123@192.168.1.100:554/h264/ch1/main/av_stream
7 
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

  1. Añade máscaras en zonas problemáticas (árboles, calle)
  2. Aumenta min_score de 0.5 a 0.6 o 0.7
  3. Define zonas y limita detección a ellas
  4. Ajusta min_area si detecta objetos muy pequeños

Coral no detectado

bash
1# Verificar USB
2lsusb | grep Google
3 
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.0
8# 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.list
11sudo apt update
12sudo apt install libedgetpu1-std

Alta latencia en stream

yaml
1# Usar JSMPEG en lugar de webRTC
2ui:
3 live_mode: jsmpeg
4 
5# O reducir bitrate del stream
6cameras:
7 entrada:
8 ffmpeg:
9 output_args:
10 detect: -f rawvideo -pix_fmt yuv420p


Costes reales: ¿Merece la pena?

Comparativa con servicios cloud

ServicioCoste mensual (4 cámaras)Detección objetosAlmacenamiento
Ezviz Cloud+€20Básica30 días
Ring Protect€28Personas60 días
Nest Aware€30Personas, coches60 días
Frigate local€3 (electricidad)TodoIlimitado

Inversión inicial vs. ahorro

ComponenteCoste
Mini PC / NAS€200-400 (si no tienes)
Google Coral USB€70
Disco 2TB€60
Total€330-530
ROI: Con 4 cámaras, recuperas la inversión en 12-18 meses respecto a suscripciones cloud.


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.

📬

¿Te ha gustado? Hay más cada semana

Únete a "IA Sin Humo" — la newsletter donde comparto lo que realmente funciona en inteligencia artificial. Sin teoría innecesaria, sin postureo.

📚

1 Tutorial

Paso a paso, práctico

🛠️

3 Herramientas

Probadas y útiles

💡

0 Bullshit

Solo lo que importa

+547 suscriptores • Cada martes • Cancela cuando quieras