AIDE pour projet de camera pour les champs et les prés

@bof si je me démerde sur mon projet actuel, je reviendrai vers toi pour ça, j’ai été intrigué et amusé par les possibilités!

Dans cette logique de surveillance aidée par l’IA ( intelligence artificielle ) j’ai trouvé une association ( RESOLVE ) qui poursuit un but parallèle au tien.
ils ont développé avec intel une caméra avec IA et transmission gsm ou satellite, pour prévenir les attaques de braconniers dans des réserves africaines.
malheureusement je ne trouve pas où obtenir leur caméra, ni aucun document opensource permettant de récupérer tout ou partie de leur système ( apparemment construit autour d’ une puce movidius X et peut-être aussi un dérivé d’une caméra intelsense ))
peut-être peux tu les contacter directement ( vu leur profile, au nom d’une association ou d’un politique rendrait cette démarche plus efficace…)

Bonjour à tous,

Je vais publier un post sur Framboise 314, de reconnaissance d’objets autour d’un Rpi 4, une caméra IR 5Mp et ses 2 Leds IR. Bon c’est un peu juste en terme de distance la nuit, mais on obtient de bons résultats pour la reconnaissance d’une personne.
L’application fonctionne très bien de jour, même avec une caméra IR.
Côté soft, c’est OpenCV 4 et TensorFlow qui « gèrent » la reconnaissance d’objets (plus de 100 différents), bien sur le système est capable de reconnaître un ou plusieurs chevaux.
Sinon j’avais rédigé un post il y a quelque temps sur le sujet.
https://www.framboise314.fr/i-a-realisez-un-systeme-de-reconnaissance-dobjets-avec-raspberry-pi/
@++

Ca a vraiment l’air bien, quoique au delà de mes compétences et c’est assez cher.
Il est vrai que pouvoir différencier permet de ne pas lancer d’alerte tant que l’ordi reconnait l’objet « cheval »…

Stef, dès que je reçois mes équipements j’essaierai ton système.
C’est avantageux, comme je le disais à Bof, de pouvoir différencier.
L’idée de l’alim en panneau solaire m’intéresse aussi car je souhaite un système autonome et dédié à rester en place longtemps avec envoie par SMS ou SMTP des infos utiles comme des photos ou des mini films de 10 secondes.

Salut,
J’ai fait un essai hier soir avec la caméra et les deux Leds IR (Rpi 4 + Buster + OpenCV 4 + TensorFlow). Elle est située à environ 6 mètres du sujet détecté.

Voilà le résultat avec un taux de détection à 79% (ou taux de réussite)

J’imagine qu’avec des Leds plus puissantes, on pourrait augmenter la distance de détection de nuit. mais cela implique plus de consommation si tu veux un système autonome.

@++

La solution de stef-k semble très valable, peut être même pour des pizero:
il y a des binaires pas trop vieux de disponibles (faire à partir des sources opencv prend une ou deux heures sur une Pi4, beaucoup plus -4-6h IIRC sur une Pi3-)
Le seul petit problème (la detection de mouvements est très rapide) reste le temps d’execution :

A noter que stef-k m’a permis de decouvrir mobilenet ssd, qui est considéré comme très rapide, peu gourmand en memoire -il doit pouvoir tenir sur un pizero - et assez précis https://mc.ai/object-detection-speed-and-accuracy-comparison-faster-r-cnn-r-fcn-ssd-and-yolo/.
Pour yolo (qui semble equivalent ou legerement inferieur à mobilenet), j’ai regardé ce qu’il donnait sur
une image avec un cheval: je l’ai deja dit
une photo de Sabiha Gockcen se preparant à bombarder Dersim(c’était une pionnière, tant dans l’aviation militaire que dans l’usage de gaz toxiques) : c’est une photo https://upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Breguet_19_Sabiha.jpg/220px-Breguet_19_Sabiha.jpg en noir et blanc (proche de la vision nocturne avec projecteur IR), bien cadrée (different de votre problème) et on detecte … un avion et un être humain -son mécano, semble-t-il(mon autre reseau de neurones detectait une ford modele T, un canon, et ne voyait pas d’êtres humains…). LEs autres militaires sont cachés par l’avion.
Il semble, sur d’autres images, reconnaître des objets partiellement occultés (un chien ou un chat tenus dans des bras sont détéctés), même si ce n’est pas très glorieux (un chat peut être vu « double », une partie avec la tête seulement …le bras le coupant-, un autre etant le chat complet.).
Cela prend 11 secondes sur un Pi B4 - et 3 secondes sur un jetson nano- pour une photo… (mais mobile SD est plus rapide, et je n’ai aps la version la plus recente de yolo-

Donc, j’ai l’impression que vous pourrez, à terme, arriver à distinguer entre les mouvements d’un cheval -qui peut bouger la nuit- et celle d’un e^tre humain, en recherchant, après la detection de mouvements, quelle est la nature de ce qui bouge…
Par contre, je suppose que les mutilateurs de chevaux sont frileux (on n’en parle plus) : ça vous laisse le temps de decouvrir tous vos materiels, et de choisir (autrement que sur des essais un peu anarchiques, en tous cas pas adaptés à vos données) ce que vous mettrez dedans.

Disons que le modèle ssd_lite_mobilenet est optimisé pour la framboise, du moins sa version 4.
La détection d’objets demande pas mal de ressources processeur, je doute que l’on est les mêmes résultats sur une Pi zéro.
Ayant une Nvidia Jetson Nano à la maison, autant dire que l’on pulvérise les « scores » de détection et ce serait inutile d’utiliser un modèle ssd_lite, autant se tourner vers d’autre modèle plus « puissant », merci à la carte graphique qui se charge de la plupart des calculs et soulage en quelque sorte le processeur.

Mais la carte a son coût, une centaine d’euros sans compter la carte sd, l’alim et la caméra.
Je finalise mes essais avec le Rpi 4, le post sera publié sur Framboise 314 dans la semaine.

@+

Je suis à peu près sûr que l’on peut, sans trop d’efforts, detecter un mouvement (et dire s’il y a suffisamment de pixels affectés) avec OCV sur PiZero (j’ai joué avec OCV et une piB+).
La detection de nature des objets en mouvement permettrait de lever le doute: s’agit il d’un cheval ou d’un être humain/d’une voiture? Là, je serais effectivement etonné qu’un piZero fasse fonctionner en des temps utilisables un reseau de neurones.

Ce qui n’empêche pas d’essayer, de stocker des minivideos et de voir si les detecteurs disponibles détectent "bien " et arrivent à différencier un cheval d’un mobile suspect (par exemple).

Pour info:
les gains de la jetson, d’un facteur 3 ou 4, ne sont pas epoustouflants (alors que j’ai une version de opencv optimisée -par compilation des sources- pour la prise en compte des gpu: celle qui est livrée avec les packages d’ubuntu ne l’est pas). Ceci est peut être lié au fait que yolo retire tous les objets redondants (ex: il detectera n fois une voiture donnée, dans des rectangles « gigogne »: seule celle qui est la plus vraisemblable sera présentée; cette operation prend du temps, hors GPU).

Par ailleurs, la compétition des reseaux de neurones est assez féroce: yolov4 va beaucoup plus vite (moins de neurones, mais de bonne qualité) à performances en détection égales (selon les auteurs) que yolov3…(version que j’utilise si je trouve des photos interessantes; quand j’aurai fabriqué un stock stable de photos interessantes, je passerai à un autre réseau de neurones).

On peut espèrer qu’à terme, on trouve un reseau de neurones adapté aux besoins… ou que les cartes verront leurs prix et leur consommation electrique baisser, à performances supérieures (loi de Moore). Il est peut être temps de s’y interesser… sans chercher à tout prix des performances enn temps reel.
Je suis mal à l’aise avec votre évaluation du coût de la JetsonNano: elle est plus chère que la RPi, son alim par un jack très solide est plus chère; je suis d’accord. Mais les cartes SD pour Jetson ont le même prix que pour RPi! et Jetson utilise officiellement des cameras pour RPi … donc ces deux éléments ne rentrent pas dans le coût .
(il y a des element moins faciles à chiffrer, tels que la fiabilité -si on doit changer de carte tous les 3 ans, ou tous les 5 ans, ce n’est pas la même dépense-, la facilité de mise en oeuvre -jetson est plus compliquée, ce peut être très génant pour débuter, voire décourageant- …). (et jetson m’a fait faire l’économie d’un écran , d’un clavier et d’un mulot: il fonctionne très bien en X forwarding …vers un PC ou un RPi -testé les deux-).

Oui très bien, mais le sujet ici, n’est pas de converser sur un éventuel benchmark avec les différents nano-ordinateur. Vous pouvez ouvrir un sujet de discussion :grinning:

Le but ici, est de trouver un moyen suffisamment performant, pour que l’on puisse le déployer avec le minimum d’énergie et de façon autonome, par exemple des panneaux solaires couplés à une batterie et un régulateur de tension. Le tout dans un petit espace discret comme une cabane à oiseau.
Si vous avez une Framboise zéro, essayer de faire le test avec ssdlite. :wink:

Tout d’abord, je n’ai jamais écrit que RPizero supportait un reseau de neurones…
J’ai écrit que, très vraisemblablement, il serait capable, avec des ajustements mineurs, de detecter du mouvement et de savoir si ce mouvement est significatif.
Les reseaux de neurones viendraient uniquement pour lever l’ambiguite :
mouvement de chevaux/mouvement de predateurs…

Quant au choix de nano (ou pas : on peut transmettre une video d’un RPi à un ordinateur sans prefixe) ordinateurs, je préfère laisser le sujet ouvert (en application de la loi de Moore tensorflow lite est -ou sera, une fois debuggué- porté sur Maixduino, IIRC: c’est plutôt un femto ordinateur) et conseiller … de se tenir au courant, en archivant des videos/photos interessantes et en faisant le tri pour être prêt lorqu’on on aura une machine idoine.

Que le choix final porte sur un Pi, une jetson ou un-e- autre machin-e- m’importe peu: ce sont la structure et les conditions d’entraînement/ reentraînement d’un reseau de neurones qui influent sur les performances…

Parmi les performances en detection -plus que vague rapport avec le sujet- :
quelle est le comportement en situation dégradée; voisine de celle visée (qui n’est pas dans les publis, les compétitions -benchmarks, pour faire high tech- portant sur des bases de données fixes…?
quel est le comportement si une portion de l’objet est partiellement occultée (on ne le trouve pas non plus dans la littérature).

Enfin, je sais calculer un prix et comparer deux prix… sur des bases honnêtes… même si, dans 3 ou 4 ans, ça n’aura pas de sens.

Bien, beaucoup de littérature, de plus hors sujet.

Faites plutôt des essais avec un matériel très peu gourmand en terme d’énergie et de ressource de calcul, afin d’aider notre ami qui souhaite une solution autonome.

Perso, c’est que je suis entrain de faire, avec les moyens du bord. L’idée ici, c’est d’essayer d’apporter des réponses sur des problèmes précis.

Si vous souhaitez débattre sur qui ou quoi est plus performant, vous pouvez ouvrir un nouveau sujet.
@+

1 « J'aime »

Yo,

Vite fait, en passant (pas tout relu ; trop de contenu)
J’ai fait de la surveillance d’oiseaux.
Simple salve de photos avec une image toutes les 10 secondes (léger post traitement d’ajout de texte mais ça ne consomme rien).
RpiZero avec caméra NoIR et ses 2 LED ; le tout alimenté par une batterie externe de téléphone.
Plus de 10h voire plus de 12h en journée (été) ; entre 2 et 4h la nuit (LED à allumage selon luminosité).
Donc si LED IR de grosse puissance, penser stockage d’énergie de grosse capacité.

++

Merci beaucoup
A propos de performances, j’ai suivi vos liens (vous êtes auteur sur framboise pi, n’est ce pas) et j’ai vu : I.A : Créez votre propre modèle de reconnaissance d’objets (1er partie)
du 17 janvier 2019. Pour ne pas faire mauvais genre, un crawler (ramasse des images sur le ouaibe) gagnerait beaucoup à être complété par la partie interessante (entrainement et résultats) qui serait une seconde partie.
A noter que kaggle livre chaque semaine des systèmes de reconnaissance d’objets, et que « notre ami » a l’opportunité de stocker des images adaptées à son problème: cela permettrait de savoir
a) si une detection de mouvements suffit
b) dans le cas contraire, hors effets d’annonce tonitruants du genre « salut les gars, je vais vous montrer la magie de la reconnaissance d’image » :
b1) si des detecteurs existants basés sur le « deep learning » suffisent, et sont utilisables en temps utile (sur un RPi B3, B4/ un PC/ un maixduino/ un jetsonnano) sur des images en niveaux de gris…
b2) si a) et b1 ne sont pas suffisants, envisager un reentraînement sur des images monochromes (les mutilateurs de chevaux sévissent la nuit: les réseaux de neurones courants exploitent les 3 canaux, alors que l’image IR est monochrome).

Désolé de rappeler des méthodes un tant soi peu rationnelles.

Et, au lieu de sauter sur mon clavier, comme la vérole sur le bas clergé breton, pour fourguer un detecteur à bas taux de fausses alertes (capturer une image toutes les 10 secondes permet à un nocif d’avancer d’une vingtaine de mètres; u,ne cadence d’une seconde serait plus utile…: un TFA de 1/1000 alerterail la gendarmerie toutes les 3 heures avec une cadence de 10 s, 3 fois par heure avec une cadence de prise de vues de 1 s… je doute que les pandores apprécient longtemps), je préfère lier vers ce que l’on ose appeler avec mépris « la littérature »:

  • kaggle donne à peu près tout (bases de données standard; cours gratuits -ils sont souvent à 100 ou 400 dollars: j’attends que le dollar baisse-; liens; scripts d’apprentissage) en matière d’apprentissage automatique.

  • learnopencv donne de beaux exemples de traitement d’images (avec ou sans reseaux de neurones), des sources , souvent simultanément en C++ et en python, et de sages conseils.

A noter que les mutilateurs de chevaux ont l’air de ne sévir qu’en été: ça donne au posteur initial le temps
-de faire des calculs de prix et de consommation réalistes

  • de dimensionner ses batteries (si besoin; ou d’attendre que les batteries voient leur prix baisser),
    et surtout
    *de se documenter (malheureusement, dans un domaine où la concurrence est rude et l’évolution est constante, « la littérature » permet d’éviter de faire -et de donner/vendre à ses amis/collègues- un truc inachevé (je n’aurai pas la cruauté de rappeler que, quand on annonce une seconde partie, on ne met pas plus de 18 mois à la sortir), voire au mieux difficilement exploitable …

A noter que commencer par stocker des videos de nuit (et au besoin, faire se promener des bonshommes pour simuler des mutilateurs de chevaux) a un double interet:

a) on sait ce que donne un algorithme sur son propre problème (pas sur un « crawler », qui ramasse sur internet ce que les gens jugent postable, mettant un biais d’échantillonnage terrible)

b) on peut montrer à ses amis collègues les résultats de ce qu’on veut donner/vendre…

Edité: si la detection d’êtres humains de nuit est primordiale (ne fût ce que pour constituer une base de données et être capable de donner un taux de fausses alertes, quel que soit l’algorithme utilisé), il faut être conscient que la
lumière reflechie par un pixel et qui retourne à la caméra décroît comme la puissance quatrième de la distance
(donc, si vous voulez avoir une distance de détection deux fois plus grande -je suppose que les terrains sont assez grands- , il vous faut…un projecteur 16 fois plus puissant… ou 16 projecteurs eventuellement répartis un peu partout, impliquant un effort de câblage -et, tant qu’à faire, vous pouvez faire arriver … le secteur, règlant le problème des batteries).

Par exemple, est ce que on souhaitevoir un visage pour pouvoir le reconnaître (« elements de justice »)
Naturellement, ça ne peut se voir que lors d’essais de nuit, préalables à toute solution miracle et à tout bombardement par le reseau de neurones de la mortkitue.

Que du qualtiatif autosatisfait.
Surfer sur un phénoméne temporaire (avec le froid, ça s’est calmé):
a) est ce que ça peut reconnaître des chevaux endormis de nuit?
b) des bonshommes (debout, courbés ou rampants)?
c) Avec quel taux de fausses alarmes (deplacer les gendarmes 10 fois par nuit ne sera pas bienvenu longtemps: infliger un sytsème « cléfs en main » à ses amis peut être considéré comme de l’escroquerie)
Les bons résultats sont ils
a) sur une image? (ou une vidéo)
b) sur 10(0+) images?

Noter que la detection de bonshommes debout a été mise au point dans les années 1990 (histogramme of oriented gradients: l’industrie automobile -des consortiums de constructeurs- voulait detecter automatiquement des piétons)… pour des processeurs plus lents que ceux des RPi… et est livrée avec opencv…

Si on veut des suites, il faut au moins voir le visage…(sinon, les gendarmes diront « désolé »… si ils n’ont pas été ennuyés par un taux de fausses alarmes extravagant)…
J’ignore si la vidéo de lamortkitue est « un peu juste » … ou carrément inexploitable par un pandore.

@stef-k très intéressant ton article sur la détection, il m’a donné des idées mais dans l’immédiat je dois me concentrer sur un système viable mais simple et pas trop cher pour un maximum de néophytes. Cela signifie que je dois aussi penser à faire un truc qu’on démarre simplement, donc pas en ligne de commande.

Pour la partie triviale , voir cron [Wiki ubuntu-fr] (l’option reboot est tout indiquée). Il faut, si on l’utilise, faire attendre une minute que le materiel soit initialisé, fixer les variables d’environnement utiles, et lancer un script python. Une autre solution est dans https://www.raspberrypi.org/documentation/linux/usage/rc-local.md

Pour la partie un peu moins triviale: avant de se lancer dans le remède miracle, il faut vérifier que les mutilateurs de chevaux seviront toujours, se documenter et ne pas sauter sur le premier zigouigoui venu, avec de belles images (au fait l’article commence par une superbe confusion - seconde phrase- entre apprentissage -déterminer les valeurs de quelques milliers/millions de paramètres-
et utilisation de réseaux déjà entraînés -ce qui est plus facile: encore faudrait il savoir ce qu’ils donnent!- et conclut, dans un respect du sujet sidérant, par de la pub… pour des accus li-ion.).
si les mutilateurs de chevaux sévissent l’été prochain, il vous reste quelque temps pour vous former et filtrer des escroqueries potentielles (les réseaux de neurones profonds ont une place de choix dans https://www.callingbullshit.org/ : deux études de cas dans ce domaine sur 10 dans leurs travaux pratiques de bousologie)

Matériel reçu en partie, je peux déjà expérimenter…
J’en ai profité pour acheter le guide officiel de la caméra PI (HQ) il y a dedans une partie des réponses à mes questions.
Je vous tiens informés…

Merci à tous

Bon, suivant les indications d’un petit site web, j’ai installé MotionEye.

Soucis :
Le RPi 3B+ était très lent (avant reboot) pour se connecter au localhost, pas réessayé après.
Impossible de démarrer avec la caméra connectée (celle qui a les leds IR)

J’en ai déduis que je n’avais pas assez de jus, j’ai changé d’alim (pour celle de mon HUAWEI qui délivre jusqu’à 5v en 4.5A mais cette alim semble pas convenir non pus… (elle permet trois niveaux différents automatiquement et j’imagine qu’elle ne sait pas choisir)

Bon, mais pourriez vous faire

  • une liste de tout ce qui est connecté -une LED IR peut consommer enormément; une radio peut avoir des pics de consommation-
  • calculer (ou, si votre liste est coherente, visible et exhaustive, faire calculer) le courant maximum -
  • additionner (ou faire additionner) ces courants maximums…
    parce que dimentionner une alim par essais et horreurs est cher (@nabla utilise des alims de PC recyclées pour son 5v 10 A: je ne sais pas si c’est sûr pour quelque chose qui doit être mis à l’exterieur, et soumis à la pluie et la corrosion -à confirmer- mais c’est un point de départ plus que confortable et pas cher.)

Par ailleurs, je ne sais toujours pas
a)si vous voulez des videos
ou
b)lancer une alerte (reveiller lepropriétaire) s’il y a un mouvement.
Dans le cas de motion eyes, il fonctionne très bien (difference de deux images) si la pièce à surveiller est normalement sans être vivant (une villa inoccupée). µIl est bien incapable de discerner si l’être vivant , s’il y en a un, est un voleur ou … le propriètaire.
Dans votre cas, je suppose que, même de nuit, les chevaux peuvent se reveiller et bouger…
Il existe des solutions qui permettent, une fois la presence d’un mouvement detecté, de savoir quelle est la direction de ce mouvement : je suppose que les chevaux se lèvent verticalement, et se déplacent ensuite horizontalement : s’il y a plus de mouvements *horizontaux que de chevaux, on peut supposer … qu’il y a un intrus). Un point de départ (qui m’a donné satisfaction) est Object Tracking using OpenCV (C++/Python)
(j’ai choisi il y 2 ans le « tracker » le plus simple et je lui ai fait suivre une liste de points pris au hazard: le mouvement géneral était bien rendu… et c’était assez rapide, le lien que je vous donne explique pourquoi

  • telle ou telle méthode est lente -c’est gênant-,
    imprécise -c’est moins génant

pour lever le doute après que motioneyes ait detecté un changement, si cette façon de procèder -qui dépasse yakabrancheretprier, sans faire appel au dernier reseau de neurones, à l’origine … tenue inconnue (voir le commentaire n’émanant pas d’un fan boy de framboise314 et la reponse piteuse) - vous interesse à terme).