Tuto : Intégrer Frigate, et faire de la reconnaissance video d'objet par IA en local dans son Jeedom

Bonjour
Apres quelques semaines de tests, de mon frigate , installé sur un rpi4B 8go sous Debian 12 ,avec 4 cameras de configurées j’ai une vitesse d’inference assez elevé qui tourne entre 70 et 120 ms alors que j’ai une carte coral USB .(alors que je vois certain a 20 ms sur le forum )

Je pense que le RPI4 est a ses limites .
J’aimerais l’avis d’utlisateurs de RPI4, peut etre RPI5 ?? sinon monter en puissance avec des mini pc .
Merci pour vos avis.

Je pense que la performance du RPI n’a rien à voir avec la vitesse d’inférence (sauf si il est totalement saturé au niveau charge.
Si ton frigate est seul sur ton RPI, une charge importante signifie que a mal paramétré tes cameras et que tu diffuses un flux qui nécessite une conversion (ex : tu détectes en HD (1 280 x 720), mais tu recupere de la camera en FHD (1920 x 1080) ou UHD (3840 x 2160). Ces conversions sont faites par FFmpeg sur le CPU

Si c’est OK coté charge ou CPU, c’est peut-être que tu détectes (la détection est faite sur le coral) sur un format ou un nb de frames trop important. Frigate préconise une détection sur de HD au maximum et sur un fps de 5.

Et remarque subsidiaire … Tu as bien mis la clé su run port USB3 ?

(n’hésites pas à partager ta conf pour qu’on jette un oeil …; J’ai 4 cameras su run RPI4 4Go et une inférence à 20ms)

Norbert

1 « J'aime »

Bonsoir
Merci pour ta reponse…j’ai tout reverifié …et deja un peu rapide a l’install… carte coral sur USB2 (oups !!)
Et dans la config de mes cameras (foscam un peu anciennes, modèle C1 (2) C2 et FI9961EP D2EP) j’ai réajusté le type de flux avec la résolution .

Pour la config de Frigate j’ai repris le même principe que tu as décrit dans ton tuto, a savoir tous les param standards en début et seul les param particuliers au niveau de chaque cameras , c’est le plus simple .et dans go2rtc un stream videoMain et un stream videoSub pour chaque camera.

Ca fonctionne bien depuis 2 semaines environ , tres peu de faux positif (par contre, une veste posé sur un dossier de chaise, il aime pas !!!)

Ce soir après ses quelques ajustements, pour le moment je suis retombé vers 33 ms
A suivre

1 « J'aime »

Du coup, de mon côté, c’est aussi 4 foscam
Fas un check sur le flux main et sub des résolutions via ffprobe, et tu forces éventuellement les mêmes résolutions pour le record → flux main, et pour le détect → flux sub

Norbert

Je viens d’installer Frigate sur VM Ubuntu 20.04 (VMware 7.03) , NUC intel, avec évidemment Docker et Portainer.
j’ai aussi ajouté un disque dur SATA 2.5" 1TB dans le NUC uniquement pour l’enregistrement des video, pour ne pas user prématurément le SSD du NUC.

Ca m’a pris du temps, mais ca marche pas mal, je suis impressionné par la détection de personne, j’ai meme du définir un masque d’exception pour la camera du salon qui détectait tous les visages à la TV. :smile: qui est pourtant une partie infime du champ de la camera.

je viens de commander un Coral USB

le MQTT marche pas mal, le frigate/<camera_name>/<object_name>/snapshot envoie un encoded JPEG du dernier <object_name> détecté.

pour afficher l’encoded JPEG un custom widget encodedJPEG de type info-autres-multistate fonctionne avec comme Résultat thème Light/Dark :

image

encodedjpeg.json.txt (378 Octets)

Est ce quelqu’un aurait un autre widget plus sympa ?

oui j’ai utilise aussi ZM mais Frigate c’est nettement mieux en matiere de détection d’événements, cependant plus difficile a installer

Bonjour,
Bravo pour ce tuto, je fais à peu prêt la même chose que toi. J’ai 2 ,3 questions pour affiner le tout chez moi, même si je suis satisfait de mon install. J’utilisais avant motioneye , là c’est un autre niveau. Avec la clé google coral sur un rpi4 , très peu de ressources utilisées , une détection au top , c’est que du bonheur.
Je vais tester l’intégration direct du flux frigate dans le plug camera, actuellement , j’ai créé des cameras avec flux direct dans le plugin camera , ça ralenti peut être la camera. T’en penses quoi ?
Je vois que tu utilises go2rtc dans ta config, quel est l’intérêt par rapport à une déclaration directe des cameras dans frigate ?
J’ai du mal à saisir la différence entre motion, detection, et mouvement ?
est ce qu’activer recording , enregistre 7/7 24/24?
Faut-il forcement activer le recording pour faire du « otion, detection, et mouvement » , ou cela enrgistre quand meme lors d’un des 3 evenements ?
Merci pour ta réponse

franchement j’etais sur motioneye pendant 2 ans, j’ai découvert frigate, c’est à des années lumières la difference. Motion, trop de faux positifs , pas de détection d’objets…config sommaire. Avec une clé Coral, frigate est top .Il ne faut pas hésiter à l’acheter.
Motion trés peu maj, frigate oui.
Frigate beaucoup de docs sur le net sans compter sur la doc officielle trés bien faite.
J’étais un noobs en docker, en suivant la doc m’en suis très bien sorti.

:hugs:

L’interet, c’est que tu parametres une fois pour toute tes cameras avec go2rtc et qu’ensoite, tu ne touches plus a tes cameras. ta detection, tes enregistrments, ton plugins camera, attaquent tous les flux go2rtc. quelquesoit les modeles de camera, tes flux gi2rtc sont toujours identiques. et puis en fonction des options tu peux extraire un flux video, un snapshot, un mp4, …
Pour schématiser, je dirais que go2rtc, c’est un peu le mqtt du flux video. c’est un broker video. Bref, je conseille ++

cf réponse précédente, tu paramètres go2rtc et tu n’attaques que go2rtc que ce soit avec frigate ou jeedom

il faut comprendre que tu as 2 principes dans frigate :
1 - MOTION : la detection de mouvement (motion) qui est une detectyion basique de detection de diffrences de pixels. pas d’IA derriere. un nb de pixel change et hop, ca detecte un mouvement. si tu souhaites masquer des zone dans la detection → il faut utiliser les « mask »
2 - DETECT : UNE FOIS QU’UN MOUVEMENT EST DETECTE. frigate fait une DETECTION d’objets via IA. Attention, j’ai compris que la detection d’objets est du coup sur TOUTE l’image ou TOUTES les zones, meme si le mouvement a lieu dans un coin en haut à gauche, il va te detecter une voiture stationnée en bas à droit. D’ou l’interet de definir des zones dans lesquelles tu souhaite detecter ou exclure des objets.

Ensuite, à toi de definir si tu veux faire un record sur un MOTION ou un DETECT

Non, juste sur les events (motion ou detect) - mais il y a enormement de parametrages possibles

SI tu fait du recording, il faut l’activer ((enabled : true) et ensuite definir sur quelques events faire le RECORD

Voilà, j’espere ne pas trop dire de betises (je ne suis pas expert non plus :yum:)
Je suis aussi preneur de vos paramétrages, et conseils et autres equipements mqtt créés

Norbert

Je te remercie vraiment de ta réponse rapide. C’est un peu plus clair.
Commençons par go2rtc :
je vois dans mes logs qu’il est actif donc il est installé avec frigate ?

2024-04-04 22:35:25.870679735  [INFO] Preparing new go2rtc config...
2024-04-04 22:35:26.761812889  [INFO] Starting go2rtc...
2024-04-04 22:35:26.955702726  22:35:26.955 INF go2rtc version 1.8.4 linux/arm64
2024-04-04 22:35:26.957455631  22:35:26.957 INF [rtsp] listen addr=:8554
2024-04-04 22:35:26.957469038  22:35:26.957 INF [api] listen addr=:1984
2024-04-04 22:35:26.958383305  22:35:26.958 INF [webrtc] listen addr=:8555
2024-04-04 22:35:35.596428046  [INFO] Starting go2rtc healthcheck service...

Par contre , je n’ai rien déclaré dans mon fichier de paramétrage comme toi (section go2rtc) , donc je n’ai pas de flux go2ttc existant , c’est ça ?

Tu préconises 2 flux pour le « live » et la détection, moi j’en ai fait qu’un ça marche bien, mais je vais faire pareil
actuellement mes cameras sont paramétrées comme ça dans frigate :

cameras:
  jardin:
    ffmpeg:
      inputs:
      - path: rtsp://vname:pass@192.168.xx.xx:45270/Streaming/Channels/1
        roles:
        - detect
        - record

J’ai quand même différencier le flux « frigate » ,du flux plugin camera de jeedom , mais avec go2rtc, je pourrais attaquer le flux main indépendamment des 2 . maintenant que j’ai compris le concept, je vais changer le fusil d’épaule :slight_smile:

motion / detect
Est ce qu’il faut forcement avoir motion à ON pour faire de la DETECT ( sur ON évidement)

Autrement de ce que j’ai compris , la détection se fait sur toute l’image ( moins les masq je suppose) , ce n’est que le onvif ( d’après ce que j’ai compris) qui utilise les zones

pour le record c’est dans cette section qu’on définit ?

record:
  
  enabled: true
  
  expire_interval: 60
  # Optional: Retention settings for recording
  retain:
    
    days: 7
    
    mode: motion
  

le mode motion inclu donc le detect ??
Dans mon cas il enregistre bien les personnes avec ce paramètre, mais peut être il faut que je rajoute le detect

Il doit le demarrer, mais si tu n’as rien paramétré …

DU coup, ca n’ets pas moi qui preconise :sweat_smile: c’ets plutot frigate :
1 - un flux sub avec une resolution max de 1280x720 et un fps de 5 que tu utilises pour le detect
2 - un flux avec une resolution plus importante pour le flux record

Ca permet de limiter la charge sur le detect tout en ayant un live, un birdeyes ou des enregistrements de qualité.

Normalement, toutes les cameras permettent de paramétrer la resolution et le fps des flux main et sub
Autre point, il est TRES TRES TRES recommandé de gérer la resoluiton au niveua de la camera et pas au niveau de frigate. C’ets le CPU (via ffmpeg) qui redimensionne avant toute action et donc ca consomme H24 du CPU (et pas le CORAL)

Et oui, du coup, si tu as compris le principe, pas de motion, pas de detect

  • La detection de mouvement (motion) utilise les masques pour exclure une partie de l’image
  • La detection d’objet (detect) utilise les zones pour que tu souhaites rechercher tel objet dans telle zone

Oui

Je pens eque tu confonds record (j’enregistre) et motion ou detect (je detecte quelquechose, un mouvement ou un objet)

Il est indiqué dans la doc qu’il ets preferable de parametrer

record:
  ...
  events:
     ....
    # Optional: Retention settings for recordings of events
    retain:
      # Required: Default retention days (default: shown below)
      default: 10
      # Optional: Mode for retention. (default: shown below)
      #   all - save all recording segments for events regardless of activity
      #   motion - save all recordings segments for events with any detected motion
      #   active_objects - save all recording segments for event with active/moving objects
      #
      # NOTE: If the retain mode for the camera is more restrictive than the mode configured
      #       here, the segments will already be gone by the time this mode is applied.
      #       For example, if the camera retain mode is "motion", the segments without motion are
      #       never stored, so setting the mode to "all" here won't bring them back.
      mode: active_objects

C’ets là que tu lui indiques que tu souhaites faire un enregistrement de tout (motion ou objets) ou seulement des motion ou des actives_objets (detect)
(j’ai suppirmé quelques parties du paramétrage)

Merci encore pour toutes ces explications

Oui normalement , j’ai paramétré des 2 cotés la meme valeur, je l’avais lu dans la doc. Je vais vérifier du coup, comme je vais faire 2 flux
Le snapshot c’est aussi go2rtc qui les gere ?

Oui, bien sûr

je regarde mes cameras et elles ont des resolutions différentes. Pour économiser le max de ressources de calcul de mon rpi4 ( j’ai un coral usb dessus) et pour me coller aux valeurs de mes cameras, il me semble qu’on peut configurer le flux par camera non ?
la config generale :

detect:
  # Optional: width of the frame for the input with the detect role (default: s>
  width: 1280
  # Optional: height of the frame for the input with the detect role (default: >
  height: 720
  # Optional: desired fps for your camera for the input with the detect role (d>
  # NOTE: Recommended value of 5. Ideally, try and reduce your FPS on the camer>
  fps: 8

pet etre déclinée par camera il me semble non ?
par contre , je n’ai pas définie de resolution pour record car ma camera ne monte pas trés haut mais ça suffit :

ça sert à quelque chose de monter les fps pour le flux main d’enregistrement ?

Oui, tout à fait

A avoir des vidéos plus fluides mais aussi plus grosses … A voir si c’est utile

on peu mettre une section record avec width, height,fps ? comme pour detect dans les cameras ?

Je ne crois pas. En record, il prend le fluytel quel

ça gene pas le 640*352 pour le flux de detection ? ça monte pas plus ma camera

Après, si on flux main est plus important. Tu peux utiliser le flux main en détecter record

c’est un peu faible non ?
peut etre utiliser le flux 2 pour jeedom et le plugin camera? C’est ce que je fais dejà mais en direct

1280*720

go2rtc marche pas :

go2rtc:
  streams:
    rtsp_entree:
      -ffmpeg:rtsp://192.168.xx.xx:45260/11

J’ai une erreur go2rc

unsupported scheme: -ffmpeg:rtsp://192.168.xx.xx:45260/11" stream=rtsp_entree

pourtant le flux marche dans vlc et dans cameras, je comprend pas