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

Il faudrait que tu partage ton fichier de paramétrage, mais ca peut venir de cette section de paramétrage :

dans Records >> Events >> Retain

    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: motion
      # Optional: Per object retention days
      objects:
        person: 15

→ Mode de retention : motion par défaut. Ce que je comprends, c’est que si le mode = motion, tu peux avoir la production d’un event (MQTT), mais si l’objet est statique, tu n’auras pas d’enregistrement d’image ou video

il serait interessant de regarder dans ce genre de situaiton les champs :

    "has_snapshot": false,
    "has_clip": false,
    "stationary": false, // whether or not the object is considered stationary

dans le json recu dans mqtt

Norbert

J’ai ceci au premier niveau. Ces valeurs ne sont pas écrasées au niveau des caméras.
J’ai bien « active_objects ». Mais c’est « record » sans « s », on est d’accord ?

Sur les cas que j’ai pu observer, j’avais bien une image dans la notif mqtt. Et ce qui l’a déclenché, c’est un promeneur dans la rue alors que la rue est masquée et que le promeneur n’est pas rentré dans la zone scrutée. En attendant, comme je soupçonne la taille de la « bounding box » d’être erronée au début de la détection, j’ai mis le paramètre « inertia » de la zone à 4.

Autre comportement, probablement lié: ma femme vient de sortir du garage en voiture. J’ai 1 événement dans Frigate, et 4 dans Jeedom (2 new et 2 end)

snapshots:
  # Optional: Enable writing jpg snapshot to /media/frigate/clips (default: shown below)
  enabled: True
  # Optional: save a clean PNG copy of the snapshot image (default: shown below)
  clean_copy: True
  # Optional: print a timestamp on the snapshots (default: shown below)
  timestamp: False
  # Optional: draw bounding box on the snapshots (default: shown below)
  bounding_box: True
  # Optional: crop the snapshot (default: shown below)
  crop: False
  retain:
    # Required: Default retention days (default: shown below)
    default: 15

record:
  enabled: True
  events:
    pre_capture: 5
    post_capture: 8
    retain:
      default: 7
      mode: active_objects

Il serait interessant d’avoir les infos dans le message MQTT quand ca se produit :

    "has_snapshot": false,
    "has_clip": false,
    "stationary": false, // whether or not the object is considered stationary

J’ai les 3 valeurs à 0 quand ça se produit. Mais j’ai bien une image reçue dans la notif sur le type=new mais pas sur le type=end.

Quand je me balade moi-même dans la zone, j’ai has_snapshot=1, has_clip=0 et stationary=0 (Je n’enregistre pas les clips ayant un enregistrement 24/7 par ailleurs)

Ouep, je ne vois pas trop, là (mais je ne suis pas un expert de frigate non plus !)

Pas grave, je vais continuer de chercher. Je reviendrai ici si j’ai une avancée.

Encore un grand merci pour avoir partagé ceci, ça fait des semaines que je lorgnais sur Frigate sans jamais me prendre le temps d’aller au bout. Et là c’est vraiment du clé en main, bravo !

Bonjour,

Merci pour les tutos. C’est ceux que j’avais trouvé. Bon j’ai enfin reussi à installer frigate.
Satane droit Sudo sous debian…

J’ai configure deux cameras mais je ne comprends pas trop la syntaxe du fichier de config.
Doit on mettre par exemple pour chaque camera le record sur enable ou on peut le mettre pour toutes les cameras.
En clair je ne comprend pas trop la structure du fichier . J’ai regarde sur la doc frigate ou je n’ai pas les yeux en face de mes lunettes ou mon traducteur ne comprend pas le fichier :unamused:

Hello. J’ai ce type de comportement de mon côté aussi à savoir des events qu’ensuite je ne retrouve pas dans l’IHM dans la section events. Je n’ai pas creusé en revanche si j’ai une image dans la notif end car mon scénario ne traite que new (je ne voyais pas l’intérêt de gérer update, trop de notifs, et pour end je n’ai pas trop cherché, le but est d’être prévenu d’un début de détection, charge à moi d’aller vérifier sans attendre le end).
Je ne sais plus si quand je constate cela je suis sur un cas d’objet stationnaire ou pas (je ne pense pas) mais à vérifier dans les infos has_snapshot etc comme suggéré par @ngrataloup
Je ne sais pas si j’ai cela depuis que j’ai mis des zones avec des required objects dedans ou depuis le début.
Bref tu n’es pas le seul à avoir ce symptôme, reste que à date je ne sais pas l’expliquer (et je n’ai pas assez fait d’essais ou ajouté d’infos pour comprendre quand ca se présente), et cela ne me gêne pas trop puisque comme dit l’idée sur notif est d’aller vérifier et je n’ai pas une notif toutes les heures de ce type.
A noter que c’est la caméra de mon portier de mémoire qui génère cela (normal c’est quand même la qu’il y a le plus de monde à passer plutôt que dans mon jardin) donc je ne pense pas que ce soit lié au type de la caméra. J’ai toutefois dans les logs des erreurs sur cette caméra : une rupture du flux peut pt être (ou pas !) générer un arrêt relance de la détection et le faux positif

Bref si jamais tu as trouvé la cause chez toi, je veux bien ton retour :slight_smile:

Tu peux très bien mettre tous ces elements à la racine pour qu’ils soient génériques à toutes les cameras et surcharger ensuite sur chacune des caméras :

un bout de ma racine :

motion:
  threshold: 25
  contour_area: 30
  delta_alpha: 0.2
  frame_alpha: 0.2
  frame_height: 50
  improve_contrast: True
  mqtt_off_delay: 30

record:
  enabled: true
  retain:
    days: 30
    mode: active_objects
  events:
    pre_capture: 5
    post_capture: 5
    retain:
      default: 30
      mode: motion

snapshots:
  enabled: true
  clean_copy: true
  timestamp: true
  bounding_box: true
  crop: false
  retain:
    default: 15

detect:
  fps: 5
  width: 1280
  height: 720
  enabled: true
  max_disappeared: 25
  stationary:
    interval: 10
    threshold: 50
    max_frames:
      default: 3000

Ensuite, au niveau de mes camera, je n’ai que ce qui est spécifique :

  Allee:
    ffmpeg:
      inputs:
      - path: rtsp://127.0.0.1:8554/rtsp_allee
        input_args: preset-rtsp-restream
        roles:
        - record
      - path: rtsp://127.0.0.1:8554/rtsp_allee_sub
        input_args: preset-rtsp-restream
        roles:
        - detect
    live:
      stream_name: rtsp_allee
    objects:
      track:
      - person
      - vehicle
      - animal
    motion:
      mask:
      - 324,0,330,49,687,49,708,0
    zones:
      allee:
        coordinates: 1280,720,615,720,0,720,120,453,354,102,523,123,468,229,510,342,631,433
        objects:
        - vehicle
      tout_allee:
        coordinates: 0,0,758,0,1280,140,1280,720,0,720
        objects:
        - person
        - animal
      zone_0:
        coordinates: 1280,720,586,411,162,422,0,720
      zone_1:
        coordinates: 0,0,418,0,0,468

Merci de ton aide c’est un peu clair pour moi. Je vais revoir ma config.

Hello,

Je viens de mettre en place frigate, il y a quelques jours, merci pour le tuto, ça m’a permis de compléter certaines choses :slight_smile:

J’ai un petit problème sur une caméra qui détecte mon chat comme une personne, est-ce qu’il est possible de définir une taille minimal de déclenchement ?

Merci

Oui, pas testé mais, mais tu peux définir une taille ou un ratio largeur hauteur (objects >> filters >> person)
C’est une configuration globale ou par caméra

objects:
  # Optional: list of objects to track from labelmap.txt (default: shown below)
  track:
    - person
  # Optional: mask to prevent all object types from being detected in certain areas (default: no mask)
  # Checks based on the bottom center of the bounding box of the object.
  # NOTE: This mask is COMBINED with the object type specific mask below
  mask: 0,0,1000,0,1000,200,0,200
  # Optional: filters to reduce false positives for specific object types
  filters:
    person:
      # Optional: minimum width*height of the bounding box for the detected object (default: 0)
      min_area: 5000
      # Optional: maximum width*height of the bounding box for the detected object (default: 24000000)
      max_area: 100000
      # Optional: minimum width/height of the bounding box for the detected object (default: 0)
      min_ratio: 0.5
      # Optional: maximum width/height of the bounding box for the detected object (default: 24000000)
      max_ratio: 2.0
      # Optional: minimum score for the object to initiate tracking (default: shown below)
      min_score: 0.5
      # Optional: minimum decimal percentage for tracked object's computed score to be considered a true positive (default: shown below)
      threshold: 0.7
      # Optional: mask to prevent this object type from being detected in certain areas (default: no mask)
      # Checks based on the bottom center of the bounding box of the object
      mask: 0,0,1000,0,1000,200,0,200

A tous, il y a pas mal de paramètres et tout est expliqué là :yum:

La version 0.13 est sortie en stable ce jour avec un nb impressionant de nouvelles fonctionnalités :

On note entre autre :

  • Beaucoup d’améliorations sur la gestion du tracking d’objets et de la detection de mouvements
  • Des améliorations sur la gestion des enregstrements et notamment la possibilité d’extraire des « rapports » sous forme de timelapse
  • La gestion des évènements audio
  • La gestion des cameras ptz et le suivi live des objets

Hello,

Merci @ngrataloup pour ce tuto, cela m’a permis d’intégrer Frigate sans trop de douleur :grinning:

J’ai une question concernant le bloc code de notification JC. En ligne 64, la variable $sourceUrl est calculée ainsi : $sourceUrl = $urlFrigate.'/api/events/'.$eventId.'/snapshot.jpg?bbox=1×tamp=1';

Or dans la doc Frigate de l’API HTTP, il est dit :

Du coup, à quoi correspond le tamp=1 dans la construction de l’url ? Ce ne serait pas plutôt timestamp=1 ?

A été traduit (code html) qlq part par « x »

Les arguments sont a separer par des & → il ny en a aucun ici

Bonjour,

Je suis en 0.13.0-rc1, est-ce que ça vaut le coup de faire la migration vers la 0.13.0 stable ou pas ?

Comme dit @tomitomas, sans doute une erreur de copier/coller … C’est corriger dans le premier post !

Norbert

Oui, il est nécessaire de passer en stable.
L’adresse de l’image est : ghcr.io/blakeblackshear/frigate:stable
nous sommes d’ailleurs dejà en 0.13.1

Après avoir passé pas mal de temps à potasser la documentation, et m’être entretenu avec un développeur sur Github, je pense avoir mieux cerné le fonctionnement de Frigate. Je partage ce que j’ai compris avec vous:

  • Les masques permettent de ne pas solliciter le système en permanence avec des zones qui sont en mouvement et qui déclenchent une analyse. C’est par exemple les feuilles d’un arbre qui bougent avec le vent, les nuages. Donc, une zone masquée ne déclenche pas d’analyse. Dès qu’un mouvement est détecté dans une zone non masquée, la recherche d’objet se fait sur l’image complète, même les zones masquées.
  • C’est le milieu du bas du rectangle de détection qui est utilisé pour savoir si un objet a pénétré une zone.
  • Une notif MQTT est envoyée systématiquement dès qu’il y a une détection, qu’un objet soit dans une zone ou non. Charge au récepteur du message de l’analyser et de choisir le comportement à adopter. Dans le cas de Jeedom, c’est dans le bloc code qu’il faut opérer. Suis en train de tester plusieurs méthodes que je partagerai avec vous bientôt.

J’ai commandé une clé usb Coral pour soulager mon raspberry pi 4 dédié à frigate, mais je ne l’aurais pas avant le mois de mars.

Est-ce que ceux qui ont commandé un tpu peuvent faire un retour d’expérience sur la charge cpu et sur la qualité de la détection? Est-ce que ça vaut vraiment le coup ?

Merci, je suis effectivement preneur des améliorations …

Pour le coral : Tuto : Intégrer Frigate, et faire de la reconnaissance video d'objet par IA en local dans son Jeedom - #79 par ngrataloup

Côté CPU, je suis passé de 250% à 15% avec une interference speed de + de 200ms à 15-30ms (temps d’analyse des objets sur une image via tensorlight)

Attention à l’ambiguïté
Masks → utilisé pour empêcher une détection de mvt
Zones → utilisé pour la détection d’objets

Norbert