
Sistema de videovigilància amb Frigate i Home Assistant
Si teniu Home Assistant i voleu muntar un sistema de videovigilància coix nu (per a casa o l' empresa), doncs no queda altra que muntar Frigate, que es open source. Podrem rebre en missatges de Telegram (amb fotos i vídeos), quan les càmeres detectin persones, gossos, gats, ocells, cavalls…
Bo, la idea és senzilla, tenim o volem tenir unes càmeres de seguretat, de videovigilància, càmeres IP de bona qualitat però barates i gestionar-nos nosaltres mateixos el sistema. On Frigate ens ajudarà a centralitzar cada càmera i a configurar el que necessitem. Frigate s'encarregarà de detectar els objectes que hàgim dit, com sigui la detecció de persones, qualsevol tipus d' animal, cotxes, matrícules… si volem els clips i els vídeos durant el temps que li indiquem. I després aquests esdeveniments que es generen podem enviar-los a Home Assistant i depenent d'una sèrie de factors (estem fora de casa, estem menjant…) que ens alerti via Telegram o el que ens de la gana.
Frigate correrà en un contenidor de Docker, i depèn del nombre de càmeres que disposem necessitarà usar molta CPU i fins i tot és recomanable usar un maquinari accelerador que millori el rendiment de les deteccions. Dependrà tot de molts factors, si hi ha molts píxels que canvien a les càmeres sempre podrem crear zones per evitar la seva anàlisi; el nombre de càmeres o el còmput que li donem, ja que pot córrer en una Raspberry Pi. Per a 4-5 cambres amb el Google Coral USB Accelerator anem bé, és un co-processador, una TPU externa que ens ajudarà a moure la càrrega.
Coral USB Accelerator,
Bo, doncs amb això més o menys el peix està venut, anem començant si us sembla 🙂 El primer serà tenir una màquina amb Docker, aquest post està basat en una Raspberry Pi 4, i el segon instal·lar els drivers del Google Coral USB Accelerator (o el que usem). Per a això, descarreguem el repositori de Google:
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - sudo apt-get update
Instal·lem el runtime i la llibreria de PyCoral:
sudo apt-get install libedgetpu1-std #Para màxim rendiment --> sudo apt-get install libedgetpu1-max sudo apt-get install python3-pycoral -y
Ja estem llistats per provar si la Raspberry Pi ja reconeix al dispositiu, podremos bajarnos un model d'exemple i validarlo:
mkdir corall && cd coral git clon https://github.com/google-coral/pycoral.git cd pycoral bash examples/install_requirements.sh classify_image.py python3 examples/classify_image.py \ --Model test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \ --etiquetes test_data/inat_bird_labels.txt \ --entrada test_data/parrot.jpg
I si va tot bé rebre alguna cosa com això:
----TEMPS D'INFERÈNCIA---- Nota: La primera inferència a Edge TPU és lenta perquè inclou carregar el model a la memòria Edge TPU. 11.8ms 3.0ms 2.8ms 2.9ms 2.9ms -------RESULTATS-------- Ara Macau (Guacamai escarlata): 0.75781
Fragata Desplegar,
Com hem comentat anteriorment Fragata no s'instal·la, el desplegarem en un contenidor, així que recordar que necessitem tenir instal·lat Docker prèviament. I abans de començar necessitem un crear l'arxiu de configuració de Frigate. En el meu cas el deixaré a '/mnt/config.yml’ i aquest és un exemple mínim, on li indico qui és el servidor de MQTT per enviar els esdeveniments, el path de la BD, LOGs, (opcionalment) indiquem si tenim un accelerador de Coral i després hi afegim les càmeres, insisteixo exemple mínim:
mqtt: host: DIRECCIÓN_IP_MQTT port: 1883 user: USUARIO_MQTT password: CONTRASEÑA_MQTT database: path: /mitja/frigate/frigate.db logger: default: info logs: frigate.event: debug
detectors:
coral:
type: edgetpu
device: usb
cameres: NOMBRE_DE_LA_CAMARA: ffmpeg: inputs: - path: rtsp://USUARIO_RTS:CONTRASEÑA@DIRECCION_IP_CAMARA:554/av_stream/ch0 detect: width: 1280 height: 720
Actualment aquesta Frigate en la versió 0.10.1, i aquestes són les diferents imatges que ens donen depenent la màquina que tinguem:
- x86: blakeblackshear/frigate:0.10.1-amd64
- x86 w/ nvidia (for ffmpeg only): blakeblackshear/frigate:0.10.1-amd64nvidia
- Raspberry Pi 3/4 (32bit): blakeblackshear/frigate:0.10.1-armv7
- Raspberry Pi 4 (64bit): blakeblackshear/frigate:0.10.1-aarch64
Hem de crear i arrencar el contenidor, li passarem el dispositiu USB, incrementem la mida de la memòria compartida, li passem el directori on ens guardarà totes les dades que Frigate necessiti (clips, enregistraments…), li passem el fitxer de configuració, hora, contrasenya de RTSP i el port que farem servir per a la seva gestió (5000tcp), seguit d' això, la imatge que volem; des d'una Raspberry Pi 4 executarem:
sudo docker run -d --name frigate --restart=unless-stopped --mount type=tmpfs,target=/tmp/cache,tmpfs-size=1000000000 --device /dev/bus/usb:/dev/bus/usb --shm-size=128m -v /media/frigate:/mitja/frigate -v /mnt/config.yml:/config/config.yml:ro -v /etc/localtime:/etc/localtime:ro -e FRIGATE_RTSP_PASSWORD='CONTRASEÑA' -p 5000:5000 -p 1935:1935 blakeblackshear/frigate:0.10.1-aarch64
I després d'uns minuts que es descarregui tot i arrenqui el contenidor ja podrem connectar Frigate, mitjançant un navegador accedim a http://DIRECCION_IP_DOCKER:5000 i tindrem alguna cosa com aquesta imatge superior.
Permetre'm que us deixi uns comandaments de Docker que al millor necessiteu per a i+D:
sudo docker ps -a # Llista contenidors sudo docker stop ID_CONT # Apaga contenidor sudo docker start ID_CONT # Arrenca contenidor sudo docker restart ID_CONT # Reinicia contenidor sudo docker rm ID_CONT # Elimina contenidor sudo docker system prune -a # Elimina caixets i altres morrallas ¡ull! sudo docker logs ID_CONT -f # Veure logs generats pel contenidor
I després ja cadascú haurà de desenvolupar el seu Frigate al seu gust, us deixo el link amb el fitxer de configuració i totes les seves possibilitats. Podrem veure totes les càmeres des de Frigate, o usar el Birdeye, que és una pantalla apagada i s'encén quan hi ha moviment en alguna càmera, o veure els esdeveniments que ha recopilat…
Tenim moltíssimes possibilitats, a cada càmera podem crear màscares per evitar que escaneja zones no interessants i que potser tinguin algun moviment, per minimitzar falsos positius, perquè de res serveix que detecti una persona fora, al carrer, o un tiesto que es mou que generi còmput innecessari… O crear zones per unificar diferents càmeres… té força possibilitats. Us deixo per si us serveix d'orientació la configuració que estic fent servir amb les meves càmeres, i podeu veure els rols de cada càmera, quin tipus d'objectes trackejar, resolució, FPS, temps d' emmagatzematge per a les imatges, els vídeos… :
CAMARA03: ffmpeg: output_args: record: -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac inputs: - path: rtsp://USUARIO_RTSP:CONTRASEÑA@DIRECCION_IP_CAMARA:554//h264Preview_01_main rols: - detect - clips - rtmp - record - snapshots motion: mask: - 1136,79,1045,62,683,33,576,55,484,69,213,114,30,161,129,278,221,370,238,673,145,709,187,834,253,960,0,960,0,0,954,0,1040,0,1280,0,1280,122 - 1280,402,901,274,708,224,491,191,473,50,503,53,511,159,690,186,692,149,777,156,789,87,893,120,1083,156,1280,224 detect: width: 1280 height: 960 fps: 5 objects: track: - person - cat - dog #- bird record: enabled: True retain_days: 0 events: retain: default: 10 snapshots: bounding_box: true enabled: true timestamp: true retain: default: 10
Integració de Frigate amb Home Assistant
Com heu pogut veure, no he instal·lat Frigate a Home Assistant directament, que es podria fer, però crec que depèn l'entorn i per temes de rendiment és millor separar els components. Així que Frigate pel seu costat i Home Assistant pel seu, sobretot perquè Frigate demana molt.
Per instal·lar la integració de Frigate amb Home Assistant el més còmode és fer servir HACKS. “HACKS” > “Integracions” > “Frigate” >Descarregar i instal·lar-lo i reiniciar Home Assistant després. Si no surt al llistat, afegirem aquesta repo 'https://github.com/blakeblackshear/frigate-hass-integration'.
Un cop instal·lada la integració la configurem, anem a les Integracions, i posem a afegir nova integració, escrivim 'Frigate'…
I res, no ens queda més que indicar la URL de Frigate, posem en “Enviar”. Això ja ens crearà totes les Entitats amb les cambres que tinguem definides a Frigate, i no queda més que fer-nos el nostre panell de control!
Estic segur que en una estona feu alguna cosa millor que jo, aquest és un exemple de 4 càmeres, on podem veure en temps real què succeeix, si punxem a la càmera i té micròfon podrem escoltar-lo també sense problemes. Podem afegir uns clips amb les últimes deteccions que va fer cada càmera, que en polsar algun d'ells ens posi el vídeo…
I aquí us deixo un exemple d'una automatització de Home Assistant, que si detecta un gat a la nit, li faci una foto, ens la mani per Telegram i un link amb el vídeo per si volem veure'l. L'automatització escoltarà un esdeveniment de MQTT i amb una plantilla definim l'objecte que esperem, en aquest cas un gat. I després l'acció que ens de la gana, us deixo un exemple a YAML que podeu fer servir per rebre una foto i un link al vídeo:
service: telegram_bot.send_photo data: url: >- http://DIRECCION_IP_FRIGATE:5000/api/events/{{trigger.payload_json["after"]["id"]}}/snapshot.jpg?bbox = 0&crop = 1 caption: >- {{trigger.payload_json["after"]["camera"]|replaçament("frigate_","") | upper }} {{trigger.payload_json["after"]["label"] | upper }} [VIEW VIDEO](https://DIRECCION_IP_FRIGATE/api/events/{{trigger.payload_json["after"]["id"]}}/clip.mp4) timeout: 1000
Si tot ha anat bé, el resultat seria una cosa com això, doncs en un horari en particular conèixer les visites que rebem, òbviament això es pot aplicar a persones o altres tipus d' objectes, animals…
Com veieu és bastant maleïble tot el que podem fer, dependrà cadascú les seves particularitats o el que es vulgui complicar… Espero que us hagi resultat interessant, de veritat que no és gaire costós el muntar-se un sistema propi, sense treure imatges privades a l'exterior o un tercer pugui manipular-les. A més estic segur que obtenim millors prestacions que amb qualsevol solució comercial.
Frigate és la pera i Home Assistant un Déu tot poderós, res, espero que això, que us hagi agradat, intentar-ho, ser felices i agrair-vos com sempre als que mogueu aquest tipus de contingut per les xarxes socials. Una abraçada a tod@s!