Προς το περιεχόμενο

Λήψη εικόνας από αναλογικό σύστημα DVR (και όχι μόνο) στο Frigate NVR / Home Assistant με σκοπό Person Detection και Alert (και ίσως Alarm).


koukobin79

Προτεινόμενες αναρτήσεις

Αρχικά να ξεκαθαρίσω ότι η συγκεκριμένη καταχώριση αφορά περισσότερο το Frigate NVR και λιγότερο την λειτουργία του Home Assistant. Ίσως όμως η εγκατάσταση που θα παραθέσω ενδιαφέρει όσους διαθέτουν ήδη σε λειτουργία κάποιο παλαιότερο αναλογικό (ή υβριδικό) DVR, του οποίου οι κάμερες προφανώς είναι αναλογικές και η αντικατάσταση του εκτός από μεγάλο κόστος (νέο καταγραφικό και ψηφιακές κάμερες) ίσως σημαίνει και τεχνικές δυσκολίες (νέες καλωδιώσεις κλπ).

Ορισμένα από τα προαναφερθέντα καταγραφικά, διαθέτουν την δυνατότητα να ενημερώνουν στην περίπτωση που εντοπίσουν κίνηση (motion detection), αλλά η συγκεκριμένη λειτουργία είναι αναξιόπιστη αφού παράγει πολλά false positives, ειδικά στην περίπτωση που οι κάμερες είναι σε ανοιχτούς χώρους. Συνεπώς, τις περισσότερες φορές η χρήση τέτοιων συστημάτων περιορίζεται μόνο στην καταγραφή εικόνας ώστε σε μελλοντικό χρόνο να μπορούμε να διαπιστώσουμε τι έχει συμβεί. Πρέπει να σημειωθεί, πως ακόμα και αν το σύστημα μας είναι κάποιο σύγχρονο NVR με  ψηφιακές κάμερες (IP), το ίδιο πρόβλημα εξακολουθεί να ισχύει, τουλάχιστον στα οικονομικά μοντέλα. 

Από την άλλη πλευρά, το Frigate NVR, με τις κατάλληλες ρυθμίσεις είναι εξαιρετικά ακριβές και σχεδόν μηδενίζει την παραγωγή των false positives. Ας δούμε πως μπορούμε να αξιοποιήσουμε το Frigate ώστε να κάνει real time ανάλυση εικόνας που θα λαμβάνει από το παλιό μας καταγραφικό. 

ΠΡΟΥΠΟΘΕΣΗ: Το παλιό καταγραφικό να υποστηρίζει/μεταδίδει RTSP stream. Αν όχι, το άρθρο αυτό δεν είναι για εσάς. Αν το παλιό σας καταγραφικό υποστηρίζει RTSP stream τότε μπορούμε να οδηγήσουμε την εικόνα από όσες κάμερες επιθυμούμε (δεν μας ενδιαφέρει καθόλου αν είναι αναλογικές) στον Home Assistant και συγκεκριμένα στο Frigate NVR ώστε να κάνουμε την ανάλυση και τον εντοπισμό που επιθυμούμε. Όσον αφορά τα καταγραφικά της Hikvision το RTSP url είναι συνήθως της μορφής:

rtsp://<username>:<password>@<address>:<port>/Streaming/Channels/<id>/

(δείτε εδώ: https://www.use-ip.co.uk/forum/threads/hikvision-rtsp-stream-urls.890/ )

Με κατάλληλο google search μπορείτε να βρείτε το url του δικού σας συστήματος. Στην δική μου περίπτωση όμως, επειδή το καταγραφικό είναι μικρού και καθόλου διαδεδομένου κατασκευαστή, το google search δεν φάνηκε καθόλου χρήσιμο και δεν μπορούσα να βρω τα url από τα οποία θα τραβούσα την εικόνα. Ευτυχώς όμως, το συγκεκριμένο καταγραφικό υποστηρίζει το πρωτόκολλο ONVIF (όπως και πάρα πολλά άλλα κυρίως υβριδικά καταγραφικά). Σε υπολογιστή με windows 10 εγκατέστησα την δωρεάν εφαρμογή ONVIF Device Manager (μπορείτε να την κατεβάσετε από εδώ: https://sourceforge.net/projects/onvifdm/) και κατόπιν ακολούθησα τις οδηγίες που βρήκα εδώ: https://help.angelcam.com/en/articles/372646-how-to-find-an-rtsp-address-for-an-onvif-compatible-camera-nvr-dvr

Στην δική μου περίπτωση πήρα τα ακόλουθα 3 url (διαθέτω 8 κάμερες αλλά detection θέλω μόνο σε τρεις από αυτές):

path: rtsp://admin:pass@@192.168.x.xxx:554/unicast/c1/s0/live
path: rtsp://admin:pass@@192.168.x.xxx:554/unicast/c2/s0/live
path: rtsp://admin:pass@@192.168.x.xxx:554/unicast/c8/s0/live

όπου “pass” είναι προφανώς το password της συσκευής, 192.168.x.xxx είναι η IP address του καταγραφικού (όχι της κάμερας, υπενθυμίζω άλλωστε οι κάμερες είναι αναλογικές) και 554 είναι η θύρα σύνδεσης του RTSP stream. Η πρώτη κάμερα έχει όνομα C1, η δεύτερη C2 και ούτω κάθε εξής. 

Πράγματι, αν ένα από τα παραπάνω τα url το ανοίξω σε VLC, μπορώ και λαμβάνω live εικόνα από την αντίστοιχη κάμερα. 

Το Homeassistant στην δική μου περίπτωση είναι εγκατεστημένο σε VM και συγκεκριμένα σε Proxmox Hypervisor. Ο τρόπος εγκατάστασης προφανώς διαφέρει από τις ανάγκες και τα μέσα που ο καθένας διαθέτει. Το Frigate το εγκατέστησα ως add-on μέσω του HACS. Με google search ή στο youtube θα βρείτε δεκάδες howtos για τον σκοπό αυτό. Επιπλέον, είναι αναγκαία η εγκατάσταση του add-on “Mosquitto broker” και να προσθέσετε το MQTT integration. 

Παραθέτω το configuration file του frigate (frigate.yml) όπως φαίνεται στην δική μου περίπτωση (για λόγους μεγέθους περιλαμβάνω μόνο την μία κάμερα από τις 3):

//

mqtt:
  host: 192.168.x.xxx
  user: mqtt-user
  password: xxxxxxxxxx

objects:
  track:
    - person
  filters:
    person:
      min_area: 4000

cameras:
  front:
    ffmpeg:
      inputs:
        - path: rtsp://admin:pass@@192.168.x.xxx:554/unicast/c1/s0/live
          roles:
            - detect
            - record

    detect:
      width: 1280
      height: 720
      fps: 5
    
    motion:
      mask:
        - 0,720,477,720,387,0,0,0

    record:
      enabled: True
      events:
          retain:
            default: 10

    snapshots:
      enabled: true
      timestamp: true

    
detectors:
  cpu1:
    type: cpu
  cpu2:
    type: cpu

//

Στο πρώτο σημείο:

mqtt:
  host: 192.168.x.xxx
  user: mqtt-user
  password: xxxxxxxxxx

βάζουμε την ip address του homeassistant και το username και password του mqtt user που δημιουργήσαμε όταν προσθέσαμε το integration MQTT. 

Στο ακόλουθο κομμάτι:

objects:
  track:
    - person
  filters:
    person:
      min_area: 4000

λέμε στο frigate να εντοπίζει μόνο ανθρώπους με ελάχιστο μέγεθος 4000. Με την συγκεκριμένη ρύθμιση έχω απαλλαγή πλήρως από false positives αλλά αναλόγως την κάμερα και την τοποθεσία που αυτή καλύπτει, το συγκεκριμένο νούμερο μπορεί να διαφέρει (με δοκιμές θα βρείτε τι αρμόζει στην δική σας περίπτωση). 

Στο επόμενο κομμάτι:

cameras:
  front:
    ffmpeg:
      inputs:
        - path: rtsp://admin:pass@@192.168.x.xxx:554/unicast/c1/s0/live
          roles:
            - detect
            - record

“Front” είναι το όνομα που δίνουμε εμείς στην συγκεκριμένη κάμερα, “input” είναι το url που έχουμε βρει παραπάνω και “roles” είναι προφανώς οι ρόλοι που της αποδίδουμε. Η συγκεκριμένη θα κάνει detect αλλά και record. Να σημειωθεί ότι στον δίσκο θα καταγράφεται κάτι μόνο αν πρώτα έχει γίνει εντοπισμός ανθρώπου. Με τις συγκεκριμένες ρυθμίσεις δεν γίνεται διαρκείς καταγραφή στον δίσκο του Home Assistant. Δεν υπάρχει λόγος άλλωστε. Το αναλογικό μας σύστημα καταγράφει 24/7.  

Προσοχή στο σημείο:

 detect:
      width: 1280
      height: 720
      fps: 5

πρέπει να βάλετε ακριβώς τις διαστάσεις που η κάμερα σας κάνει καταγραφή. Τα νούμερα μπορεί να είναι αρκετά μικρότερα και μπορείτε να τα βρείτε αν ανοίξετε το URL στο VLC. Στο επίσημο documentation συστήνεται τα fps να μην είναι πάνω από 5 (δεν αφορά την καταγραφή αλλά μόνο τον εντοπισμό).

Το σημείο:

 motion:
      mask:
        - 0,720,477,720,387,0,0,0

Δεν είναι υποχρεωτικό. Απλά κάνω “mask” ένα κομμάτι της εικόνας ώστε το frigate να μην ασχολείται με αυτό. Είναι εξωτερική κάμερα και το σημείο αυτό είναι τμήμα πεζοδρομίου. Δεν θέλω να ασχολείται το frigate με τους περαστικούς. 

Στο σημείο:

 record:
      enabled: True
      events:
          retain:
            default: 10

    snapshots:
      enabled: true
      timestamp: true

ορίζουμε ότι τα clips που τυχόν θα καταγραφούν, να μην παραμένουν περισσότερο από 10 ημέρες στον δίσκο του Home Assistant. Επίσης ενεργοποιούμε snapshots (φωτογραφία του συμβάντος) το οποίο θα έχει και timestamp. 

Τέλος στο σημείο:

detectors:
  cpu1:
    type: cpu
  cpu2:
    type: cpu

ορίζουμε ποιο τμήμα του hardware θα κάνει το detection. Στο VM έχω αποδώσει 2 CPU cores και λέω στο frigate ότι θα χρησιμοποιεί και τις 2. Η CPU που χρησιμοποιώ είναι Intel Core i5 7500t (χαμηλό σχετικά TDP – 35watt) και φαίνεται να μην αντιμετωπίζει κανένα πρόβλημα με detection σε 3 κάμερες. Αν θέλετε να βάλετε πολλές κάμερες θα πρέπει να χρησιμοποιήσετε κάποιον CORAL ACCELERATOR (https://coral.ai/products/ ). Με την πρώτη ευκαιρία σκοπεύω να αγοράσω την USB έκδοση. 

Αφού λοιπόν ολοκληρώσουμε την εγκατάσταση και την διαμόρφωση του Frigate, επόμενο βήμα είναι η παραγωγή και αποστολή ειδοποιήσεων προς κινητό μας όταν γίνει εντοπισμός προσώπου σε κάποια κάμερα. Τα πράγματα εδώ είναι σχετικά απλά: https://docs.frigate.video/guides/ha_notifications/

Κάνουμε import το blueprint που θα βρούμε εδώ:

https://community.home-assistant.io/t/frigate-mobile-app-notifications-2-0/559732

και δημιουργούμε ένα automation που θα στέλνει στο κινητό μας την σχετική ειδοποίηση με την οποία θα μπορούμε να δούμε snapshot αλλά και video από το συμβάν. Προφανώς θα πρέπει να έχουμε ήδη εγκαταστήσει και ρυθμίσει την επίσημη εφαρμογή του homeassistant στο κινητό μας. Αρχικά, εκτός του δικτύου που λειτουργεί ο home assitant, ενώ θα έρχονται οι ειδοποιήσεις, δεν θα λαμβάνουμε εικόνα και video και αυτό είναι λογικό. Θα πρέπει στον router να κάνουμε κατάλληλο port forward, να βάλουμε στον home assistant το add-on “duck dns” και να βάλουμε την mobile εφαρμογή να ανοίγει την DNS καταχώριση που αντιστοιχεί στο σύστημα μας. Εναλλακτικά μπορούμε να χρησιμοποιήσουμε την υπηρεσία “nabu casa” (https://www.nabucasa.com/ ) η οποία όμως δεν είναι δωρεάν. Τέλος υπάρχει και αυτή η επιλογή: https://www.youtube.com/watch?v=xXAwT9N-7Hw την οποία όμως δεν την έχω χρησιμοποιήσει ακόμα. 

Σαν τελευταίο βήμα θα μπορούσαμε να συνδέσουμε κάποια zigbee σειρήνα που θα συνδεθεί στον home assistant μέσω κάποιου coordinator όπως είναι ο sonoff (https://sonoff.tech/product/gateway-and-sensors/sonoff-zigbee-3-0-usb-dongle-plus-e/). Οι γνώσεις μου γύρω από τον home assistant είναι περιορισμένες αφού ασχολούμαι μαζί του μόλις 15 ημέρες. Θα μπορούσε ίσως κάποιος περισσότερο ειδικός να βοηθήσει στο σημείο αυτό και να προτείνει κάτι. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Δημιουργία νέου...