/ tech

Détection d'objets / personne

L'IA peut servir a beaucoup de choses.
Dans le domaine du "computer vision" deux champs d'application sont possibles :

  • La détection d'objets / personne
  • La reconnaissance faciale

Nous alons voir comment intégrer un tel outil sous Home Assistant avec un traitement offline pour plus de sécurité.

Deepstack

on commence par installer deepstack, perso je suis passé par un container docker pour le faire ci dessous ma config :

docker run -d -e VISION-DETECTION=True -e API-KEY="monapikey" -v /mon/repertoire:/datastore -p 5000:5000 --name deepstack deepquestai/deepstack:cpu-x3-beta

il s'agira de modifier :

  • API_KEY avec votre clef API (vous pouvez en mettre ce que vous voulez il faudra juste utiliser la meme sur HA).
  • /mon/repertoire avec un repertoire local pour la database de deepstack
  • le port 5000 qui correspoind au port local d'ecoute de deepstack sur la machine

Une fois que c'est bon on a le container prêt a recevoir nos sollicitations.

Intégration sous Home assistant

Déja il faut installer un custom_component deepstack soit en manuel via une copie de ce git dans le repertoire custom_components soit via HACS.

github
Apres un restart HA, on devrait pouvoir ajouter notre configuration comme suit :

image_processing:
  - platform: deepstack_object
    ip_address: 192.168.x.x
    port: 5000
    api_key: monapikey
    scan_interval: 5
    save_file_folder: /config/www/surf/videos/Alarme/
    save_timestamped_file: True
    always_save_latest_jpg: True
    targets:
      - target: person
    source:
      - entity_id: camera.deepstack_camera
        name: deepstack_person_detector
    source:
      - entity_id: camera.cr10_cam_esp
        name: deepstack_person_detector

On va commencer avec un fichier jpg local on va donc declarer ce fichier en tant que camera.local_file

  - platform: local_file
    file_path: /config/www/surf/videos/Alarme/fichier_test.jpg
    name: deepstack_camera

puis on va aussi recupérer le resultat de l'IA :

camera:
  - platform: local_file
    file_path: /config/www/surf/videos/Alarme/deepstack_person_detector_latest.jpg
    name: deepstack_snapshot

en fichier on peut tester avec ce fichier :
workplace-1245776_1920

Ok on peut restart Home assistant bien vérifier vos paramètres file_path ainsi que le nom de fichier du jpg.

Apres le restart on s'ajout une card coup d'oeil :

type: picture-glance
title: Intrusion IA detection
image: 'https://demo.home-assistant.io/stub_config/kitchen.png'
entities:
  - entity: image_processing.deepstack_person_detector
camera_image: camera.deepstack_snapshot

Maintenant que tout est bon, on peut procéder à un scan.
Il faudra faire un scan on demand visiblement le mode auto est trop consommateur.

pour faire ça on execute le service :

image_processing.scan
avec en data :
entity_id: image_processing.deepstack_person_detector

apres une ou deux secondes on obtient quelque chose comme ca :

deepstack_person_detector_2021-02-10_09-31-58

On a plus qu'a changer pour pointer sur sa camera en lieu et place de ce jpg.

Automations

On éxécute le scan sur un mouvement, de mon coté un binary_sensor dans mon salon (détecteur de mouvement) :

alias: scan deepstack
description: ''
trigger:
  - platform: state
    entity_id: binary_sensor.couloir_motion
    to: 'on'
condition: []
action:
  - service: image_processing.scan
    data: {}
    entity_id: image_processing.deepstack_person_detector
mode: single

et envoi automatique via Telegram de la photo scannée par deepstack :

alias: deepstack telegram
description: ''
trigger:
  - platform: event
    event_type: deepstack.object_detected
    event_data:
      name: person
condition: []
action:
  - service: telegram_bot.send_photo
    data:
      caption: 'New person detection with confidence {{ trigger.event.data.confidence }}'
      file: '{{ trigger.event.data.saved_file  }}'
mode: single

Des options sympas

Beaucoup de choses sont possibles avec Deepstack.
Coté detection on peut detecter tous ces "formes" :

person,   bicycle,   car,   motorcycle,   airplane,
bus,   train,   truck,   boat,   traffic light,   fire hydrant,   stop_sign,
parking meter,   bench,   bird,   cat,   dog,   horse,   sheep,   cow,   elephant,
bear,   zebra, giraffe,   backpack,   umbrella,   handbag,   tie,   suitcase,
frisbee,   skis,   snowboard, sports ball,   kite,   baseball bat,   baseball glove,
skateboard,   surfboard,   tennis racket, bottle,   wine glass,   cup,   fork,
knife,   spoon,   bowl,   banana,   apple,   sandwich,   orange, broccoli,   carrot,
hot dog,   pizza,   donut,   cake,   chair,   couch,   potted plant,   bed, dining table,
toilet,   tv,   laptop,   mouse,   remote,   keyboard,   cell phone,   microwave,
oven,   toaster,   sink,   refrigerator,   book,   clock,   vase,   scissors,   teddy bear,
hair dryer, toothbrush.

Il est également possible si besoin de passer des arguments à Deepstack pour effectuer de la reconnaissance faciale via par un modele d'entrainement d'IA.

La solution est gratuite et OpenSource.

de mon coté je suis sur une VM sur un ESX pas sur de la faisabilité et des performances sur RPI.

exemple avec des voitures pour cible :
deepstack02

on pourrait par exemple prendre des snapshots d'un jardin quand un animal apparait, détecter et compter le nombre d'oiseaus, de chats ....

Détection d'objets / personne
Share this