Plugin Deepstack

Hello,

J’ai mis à dispo un plugin Deepstack.
Deepstack est un outil qui permet de faire de l’analyze d’images, il fonctionne en containeur et fourni une API.
Là le plugin est assez simple, surtout sur certains types de commandes (comme reconnaissance des objets, il va rmeplir un champ texte avec tous les objets trouvés)
Je chercherais 2 ou 3 personnes avec donc un docker dispo pour faire tourner Deepstack et « gratter » les use cases possible, triturer ca et voir ce qui pourrait etre améliorer.

Bonsoir,

J’ai installé un container, je m’attendais à voir une interface web et pas grand chose à voir.
Si je suis dans le bon, je peux contribuer

Bonsoir,

J’ai installé le plugin sans problème et il communique correctement avec l’instance docker, mais j’ai une erreur 400 quelque soit les demandes effectuées.

En envoyant directement des requêtes au container avec un script python j’ai bien en retour un statut 200.

Dans les champs image quel type de chemins faut-il envoyer ?

Il y a deux moyens d’nevoyer l’image :

  • en utilisant la commande message comme une notification de snapshot des caméras (par exemple comme on utilise le plugin camera avec telegram, sms, slack …)
  • sinon tu dois mettre le chemin complet d’une image dans le champ message (/data/images/blaba.png par exemple)

J’avais déjà essayé les 2 méthodes et rien à faire.
J’ai l’impression que l’image n’est pas envoyé

[2021-08-25 08:12:16][DEBUG] : Image data/img/Salon.jpg
[2021-08-25 08:12:16][DEBUG] : Error 400 http://192.168.XX.XX:5000/v1/vision/face/

Pour le plugin camera l’info qui est envoyé est le titre pas un chemin dans mon cas.

[2021-08-25 08:03:30][DEBUG] : Image Alerte sur la camera : Salon à 2021-08-25 08:03:30
[2021-08-25 08:03:30][DEBUG] : Error 400 http://192.168.XX.XX:5000/v1/vision/detection

Ca c’est pas bon, c’"est un chemin relatif et pas absolu. Met le chemin absolu.

Pour le plugin camera, je vois le soucis, il envoit un titre à chaque fois, donc faut que j’inverse un test dans le plugin. Je fais ca de suite et ca sera demain en beta

1 « J'aime »

Même avec le chemin absolu

[2021-08-26 10:07:58][DEBUG] : Image /var/www/html/data/img/Salon.jpg
[2021-08-26 10:07:58][DEBUG] : Error 400 http://192.168.XX.XX:5000/v1/vision/face/

J’ai aussi déplacé le fichier dans /tmp

[2021-08-26 10:19:06][DEBUG] : Image /tmp/Salon.jpg
[2021-08-26 10:19:06][DEBUG] : Error 400 http://192.168.XX.XX:5000/v1/vision/face/

J’ai réussi à envoyer des images en modifiant la ligne 62 du fichier deepstack.class.php.

  • $data[‹ image ›] = ‹ @ › . realpath($_image);
  • $data[‹ image ›] = curl_file_create($_image);

[2021-08-26 17:00:30][DEBUG] : Image /tmp/Salon.jpg
[2021-08-26 17:00:30][DEBUG] : Result {« success »:true,« predictions »:[{« confidence »:0.65225625,« y_min »:82,« x_min »:112,« y_max »:181,« x_max »:175}],« duration »:0}

Mais les prédictions ne s’affiche pas dans les commandes info respective.

Ton jeedom tourne sur quelle debian ? Le @ ne pose aucun soucis chez moi.
C’est la commande de Face Detection que tu essayes là oui ? Tu n’as pas de mise à jour des 2 commandes infos liées ?

Jeedom tourne sur buster 10.8.

Oui, c’est la section de log correspondant à la Face Detection mais j’ai testé toutes les commandes sans succès pour la prédiction.

Les 2 commandes infos liées se mettent à jour systématiquement et on le comportement suivant :

  • image valide > Detection Success = coche verte, Detection Predictions = rien
  • image n’existe pas > Detection Success = croix rouge, Detection Predictions = affiche le chiffre zéro

J’ai trouvé un bug effectivement pour les prédictions, j’ai mis à jour le market

Ca fonctionne merci !!!

Maintenant je vais voir comment traiter les infos dans un scénario.

Merci encore pour ta réactivité.

Je suis preneur de retour sur comment faciliter l’utilisation des données trouvées.
Car là oui c’est forme brute car malheureusement on peut avoir des formes variables suivant l’API.
Mais par exemple si une commande qui permettrait de vérifier si on trouve une chaine dans les prédictions pour simplifier l’utilisation des expressions régulières&co dans les scénarios
Par exemple : ```
‹ label ›: ‹ dog ›

Je viens de découvrir ton plugin. Au top… J’ai quelques use cases en tete.

Pour le moment je teste un peu et j’ai aussi l’erreur 400 lors de l’envoie d’une image depuis un autre plugin. ;

[2021-09-05 15:15:00][INFO] : Début d’activation du plugin
[2021-09-05 15:15:01][INFO] : Info sur le démon : {« launchable_message »:«  »,« launchable »:« nok »,« state »:« nok »,« log »:« nok »,« auto »:0}
[2021-09-05 15:15:01][DEBUG] : Lancement de : /var/www/html/core/class/…/…/core/php/jeePlugin.php plugin_id=deepstack function=install callInstallFunction=1
[2021-09-05 15:15:48][DEBUG] : URL 192.168.1.61/v1/vision/detection
[2021-09-05 15:15:48][DEBUG] : Image [Jeedom] Message de test
[2021-09-05 15:15:48][DEBUG] : Error 400 192.168.1.61/v1/vision/detection
[2021-09-05 15:24:47][DEBUG] : URL 192.168.1.61/v1/vision/detection
[2021-09-05 15:24:47][DEBUG] : Image [Jeedom] Message de test
[2021-09-05 15:24:47][DEBUG] : Error 400 192.168.1.61/v1/vision/detection
[2021-09-05 15:24:57][DEBUG] : URL 192.168.1.61/v1/vision/detection
[2021-09-05 15:24:57][DEBUG] : Image [Jeedom] Message de test
[2021-09-05 15:24:57][DEBUG] : Error 400 192.168.1.61/v1/vision/detection
[2021-09-05 15:26:05][DEBUG] : URL 192.168.1.61/v1/vision/detection
[2021-09-05 15:26:05][DEBUG] : Image /var/www/html/tmp/facerecognition/Unknown_20210904191950.jpg
[2021-09-05 15:26:05][DEBUG] : Error 400 192.168.1.61/v1/vision/detection

Dans deepstack j’ai bien les infos de requetes:

---------------------------------------
v1/restore
[GIN] 2021/09/05 - 15:15:48 |←[90;43m 400 ←[0m|       530.7µs |    192.168.1.27 |←[97;46m POST    ←[0m /v1/vision/detection
[GIN] 2021/09/05 - 15:24:46 |←[90;43m 400 ←[0m|            0s |    192.168.1.27 |←[97;46m POST    ←[0m /v1/vision/detection
[GIN] 2021/09/05 - 15:24:57 |←[90;43m 400 ←[0m|            0s |    192.168.1.27 |←[97;46m POST    ←[0m /v1/vision/detection
[GIN] 2021/09/05 - 15:26:05 |←[90;43m 400 ←[0m|            0s |    192.168.1.27 |←[97;46m POST    ←[0m /v1/vision/detection

Pour le moment, j’ai juste fait un scénario dans lequel j’envoie une image en dur avec un chemin absolu.

J’ai pu résoudre mon soucis.
J’avais un soucis de chemin et ensuite j’ai du reboot mon instance de Deepstack

Résultat de la commande : [{"confidence":0.40455472,"label":"potted plant","y_min":152,"x_min":100,"y_max":222,"x_max":155},{"confidence":0.47294775,"label":"dining table","y_min":142,"x_min":28,"y_max":238,"x_max":214},{"confidence":0.53476775,"label":"bench","y_min":160,"x_min":204,"y_max":240,"x_max":298},{"confidence":0.58401436,"label":"vase","y_min":190,"x_min":112,"y_max":222,"x_max":136},{"confidence":0.59749293,"label":"person","y_min":0,"x_min":147,"y_max":215,"x_max":233},{"confidence":0.62823546,"label":"cup","y_min":190,"x_min":112,"y_max":222,"x_max":136},{"confidence":0.67521054,"label":"chair","y_min":121,"x_min":7,"y_max":234,"x_max":73}]

Un nouveau monde s’ouvre la…

Je teste actuellement une commande qui remonte le premier confidence sur le face detection.
Si ca marche, on peut envisager dans jeedom une commande qui permet de définir un path dans confidence, puis une commande info qui la lit. Exemple sur ton premier résultat, une commande où tu peux dire 0.label et la commande info donnerait alors « potted plant »
Mais ca fait assez usine et ca va faire des scénarios à rallonge, donc faut trouver mieux

Alors je me suis beaucoup creusé la tete. En fait, il faut qu’à un moment il y ait un user input.
A priori, l’intérêt reside sur des declencheurs de scenarios détectés pas la cam (personnes / objets). Auquel cas, les declencheurs sont a definir en amont. La donnée brute en l’état n’est pas trop articulable sans que l’utilisateur sache ce qu’il cherche sur une detection, je me trompe?

Du coup une structure de plugin possible serait:

  1. Configurer les instances deepstack dans la partie config du plugin
  2. Les objets du plugin serait les labels a reconnaitre
  3. Les commandes on pourrait retrouver un etat binaire de detection / min x / max x / min y / max y / score de confiance de detection

On pourrait imaginer un peu comme ton plugin Xiaomi avec la partie gateway, pour la liaison cam deepstack.

Est ce que ça a du sens pour toi?

Bonjour @lunarok,Merci pour ce plugin

j’ai un peu galéré avec l’erreur 404, mais j’ai trouvé comment activer la vision

en SSH lancer : docker run -e VISION-DETECTION=True -e VISION-FACE=True -v localstorage:/datastore:rw -p 32785:5000 deepquestai/deepstack:latest

source ; il faut scroller au 2 dec 2020
https://forum.deepstack.cc/t/need-help-with-qnap-docker-install-and-configuration/469/5

Du coup j’ai commencé a jouer avec « Object detection »

Résultat de la commande :

[{"confidence":0.663358,"label":"chair","y_min":543,"x_min":1627,"y_max":875,"x_max":1818},{"confidence":0.70014983,"label":"chair","y_min":573,"x_min":1385,"y_max":867,"x_max":1530},{"confidence":0.7675476,"label":"refrigerator","y_min":312,"x_min":435,"y_max":873,"x_max":717},{"confidence":0.7923286,"label":"tv","y_min":334,"x_min":769,"y_max":521,"x_max":992},{"confidence":0.85134387,"label":"chair","y_min":302,"x_min":909,"y_max":1025,"x_max":1332}]

j’ai pas de réfrigérateur dans la pièce, mais le principe est là

Par contre, pour face détection, j’ai moins de succés

C’est dans la doc Deepstack pour chaque type de détection, tu as la variable à setter :
https://docs.deepstack.cc/index.html

Face Detection par exemple : VISION-FACE=True

Perso, j’ai tout activé dans le docker compose

Il me semble avoir activé tout ce que je pouvais, voici la nouvelle ligne de commande docker

docker run -e VISION-DETECTION=True -e VISION-FACE=True -e VISION-SCENE=True -v localstorage:/datastore:rw -p 80:5000 deepquestai/deepstack:latest

[Object Detection] OK

[Face Detection] doit avoir un fonctionnement similaire et là j’ai Erreur 500 (timeout)