Grâce à l’aide de ChatGPT en mode itératif, j’ai construit un script qui me permet d’envoyer les alertes Frigate de détection de personnes et de voitures sur la messagerie Signal sur mon mobile. Il se base sur MQTT (Message Queuing Telemetry Transport) qui est un protocole de messagerie qui fonctionne sur le principe de souscription / publication, c’est à dire qu’un serveur (ou broker) peut publier des notifications sur un canal et des clients peuvent souscrire pour visualiser les notifications.
Cela donne quelque chose comme cela :
Pour MQTT j’ai utilisé Mosquitto qu’il faudra lancer en tant que service systemd. Frigate génére un certain nombre de messages MQTT comme on peut le voir ici. On utilisera Frigate/events qui est diffusé sur un canal MQTT, un script s’abonnera à ce canal et déclenchera l’envoi de mail et un message Signal dès déclenchement d’une alerte avec détection de personnes ou de voitures.
Finalement après avoir testé le système de vidéosurveillance Frigate depuis quelques semaines, je suis conquis, ça me change de ZoneMinder qu est vraiment une usine à gaz que j’avais le plus grand mal à régler. Je suis donc naturellement passé à la version payante Frigate+, qui pour un abonnement modique de 50$ annuel (payable via paypal) permet de pouvoir bénéficier d’un modèle personnalisé pour la détection des objets. Il se base sur les modèles partagés par la communauté et accessibles avec l’abonnement et on peut l’enrichir par apprentissage en l’alimentant en validant les vrais positifs, en créant des objets non détectés ou en invalidant des faux positifs.
Invalidation d’un faux positif
A force d’apprentissage le modèle personnalisé deviendra de plus en plus précis et nécessitera de moins en moins de ressource. Au point qu’on peut abaisser les seuils de détection pour capter davantage d’objets.
Tant qu’à faire, par défaut Frigate génère un certificat auto signé pour utiliser le port 8971 ce qui génère un avertissement de sécurité dans le navigateur. Sous Firefox on peut accepter le risque pour pouvoir y accéder, mais ce n’est quand même pas terrible, d’autant plus si on accède à Frigate d’internet. J’ai donc utilisé Let’s Encrypt qui se repose sur mon serveur apache et non nginx comme c’est présenté un peu partout sur le net, tout simplement parce qu’apache tourne déjà sur mon serveur et il était inutile de faire tourner un serveur doublon. J’ai dû modifier également le chemin d’accès par défaut de Frigate car la place était déjà prise.
Pour la configuration de Frigate avec Let’s Encrypt c’est par ici
Pour la configuration et l’utilisation de Frigate+ c’est par là
A la préhistoire d’internet j’ai créé un site internet dès 1998 à l’époque où les fournisseurs d’accès internet n’étaient pas légion. Mon premier FAI a été infini.fr qui était une petite association basée à Brest, outre l’accès il offrait des espaces pour héberger un site. Sur internet archive, je n’ai malheureusement trouvé aucune trace de mon site initial. Infini existe toujours et reste un hébergeur associatif alternatif et membre historique du collectif des CHATONS.
J’ai quitté ensuite infini.fr pour héberger mon site en passant par divers fournisseurs comme Liberty Surf ou Free. En 2000 j’ai acheté mon domaine funix.org et j’ai hébergé mon site consacré aux logiciels libres chez online.net, ça me plaisait assez bien d’aller chez un fournisseur français. On trouve sur internet archive une des premières images du site à cette époque. En 2009 j’ai acheté le domaine hoarau.org qui venait de se libérer pour y héberger mon site perso, toujours chez online.net. Voilà une des premières images du site sur internet archive, et là je me rends compte qu’il est temps que je fasse un gros toilettage car le site est resté dans son jus même si je continue à le faire évoluer. En parallèle j’ai créé également mon blog olivier.hoarau.org dont voici une des premières pages sur internet archive.
Les deux sites étaient sur l’offre mutualisé d’online.net, une formule où plusieurs utilisateurs pouvaient partager les mêmes machines, les mêmes IP avec des prestations classiques (sous domaines, mails, accès FTP, bases de données MySQL ou PostgreSQL, PHP, …).
De retour d’un week end dans les Alpes de Haute-Provence qui m’a permis de randonner en montagne et notamment sur le sentier de randonnée du lac des neufs couleurs. Cette randonnée au départ du lieu-dit de Fouillouse permet de voir pas loin de 4 lacs à une altitude qui dépasse les 2800m d’altitude.
Voici une synthèse de la randonnée avec 17,64km parcourus au total, +1093m en dénivelé positif et -1089 en négatif, le tout en 7h15 dont 3h48 en mouvement, le reste en pause, d’après mes données GPS. L’altitude est un brin optimiste sur mon GPS, je n’ai guère été plus haut que 2800m d’altitude.
Voici ma trace gpx de cette randonnée réalisée le 8 novembre avec les sommets enneigés à partir de 2500m d’altitude. Une poudreuse de 30 à 40cm d’épaisseur a rendu la progression très compliquée à partir du refuge du Chambeyron au point que nous n’avons pas pu atteindre le lac des neufs couleurs, pour ne pas avoir à rentrer à la lampe frontale. C’est clair qu’on aurait été sans doute bien mieux en raquettes pour parvenir à l’objectif.
Il en reste pas moins que ça reste une belle randonnée, pas spécialement difficile même si elle est assez longue, avec l’ascension qui se fait essentiellement dans le premier tiers. Nous avons croisé au moins 8 chamois, dont l’un au détour d’un sentier qui est d’abord venu à notre rencontre pour ensuite filer à l’anglaise comme on peut le voir sur cette vidéo.
J’ai investi dans une clé USB accélérateur Google Coral Edge TPU pour moins d’une centaine d’euros sur un célèbre site de vente en ligne. Cette clé est destinée à booster mon système personnel de vidéosurveillance aujourd’hui basé sur ZoneMinder.
Clé Google Coral branchée sur mon serveur basse consommation Lenovo ThinkCenter M92p
Jusqu’à présent dans le monde des processeurs on connaissait les CPU et les GPU, il existe maintenant aussi les TPU. TPU pour Tensor Processing Unit est une unité de calcul spécifique pour pouvoir exploiter la bibliothèque opensource TensorFlow qui est utilisée dans le monde de l’IA pour l’apprentissage automatique, les réseaux de neurones et les calculs numériques généraux sur CPU, GPU, cluster de GPU et TPU donc. Pour la petite histoire tensor, ou tenseur en français, est le nom générique pour les structures de données utilisées pour l’apprentissage automatique. Le tout est développé par Google au sein de la division dédiée à l’IA Google AI. TensorFlow n’est pas le seul moteur d’IA, pour s’en convaincre cette page recense les principaux moteurs, mais tous ne bénéficient d’une puce dédiée. L’avantage du TPU de Google est qu’il se base sur des bibliothèques libres qui ont favorisé son développement et l’ont popularisé, couplé à un coût abordable qui permet de booster un PC quelconque à moindre frais. En terme de performance, il faut savoir qu’un TPU peut être 15 à 20 fois plus performant qu’un CPU ou GPU pour des tâches d’apprentissage automatique (cf. réf).
L’installation est prévue pour les distributions Debian et Debian like comme Ubuntu comme on peut le voir sur la page officielle et il n’y a pas plus d’indications pour les autres distributions notamment celles basée sur RPM comme ma Mageia. Trois bibliothèques sont nécessaires à l’utilisation de la clé, TensorFlow évoquée plus haut, libedgetpu pour piloter les périphériques Coral et PyCoral, une bibliothèque API Python pour exploiter TensorFlow sur des périphériques Coral. A défaut de packages précompilés pour ma distribution, je suis parti dans la compilation des bibliothèques. Encore une fois je me suis fait assister par ChatGPT, mais alors qu’il m’a été d’un grand secours pour rédiger des scripts pour adresser une caméra IP dont l’adresse change régulièrement, il m’a totalement perdu. Il m’a envoyé sur un tas de chemins de traverse, souvent contradictoires entre eux, sur la base d’informations obsolètes, incomplètes voire fausses, sans prendre en compte forcément le travail déjà réalisé, il pouvait dire tout et son contraire en deux questions, pour prendre un exemple une fois il va me dire qu’il faut une version de Bazel supérieure à 8 et deux questions plus loin il faut une version inférieure à 7 ! Il y a souvent aucune logique dans l’enchaînement des réponses alors que j’avais l’impression de rester sur mon cheminement logique. Au final j’ai perdu un temps considérable à exploiter chacune des pistes, finalement j’ai arrêté les frais, pris du recul et j’y suis allé au feeling à l’ancienne, j’ai réussi à compiler TensorFlow et libedgetpu plus ou moins laborieusement car il est nécessaire de faire coïncider les versions pour que ça fonctionne et j’ai trouvé sur le net des packages fonctionnels pour PyCoral compatible avec Python 3.10 de ma distribution que quelqu’un a bien voulu partager. Tout cela est expliqué sur cette page.
Je m’étais bricolé une fixation GoPro à mon harnais pour avoir une vue à la troisième personne quand je faisais de la planche à voile. Mine de rien mon bricolage a tenu presque dix ans avant de lâcher, avec le métal mangé par la corrosion et le tube qui a fini par casser.
Mon dispositif étant assez lourd, j’ai bien tenté de le réparer avec un tube plus léger en aluminium, mais ça ne tenait pas le choc.
Finalement j’ai préféré investir dans le modèle harnessmount qu’on peut acheter via la caméra embarquée à 249€ avec un tube à la fois léger et solide en carbone.
J’ai gardé mon ancien harnais, viré ma planche à découper de cuisine qui servait de support et repercé. Le harnessmount est fourni par défaut avec juste un filetage à l’extrémité, j’ai rajouté un raccord standard de GoPro et j’ai doublé le bout de sécurité.
En marge de la tempête Benjamin , j’ai pu le tester hier, première impression, c’est bien plus léger que mon bricolage et je n’ai plus le balourd dans le dos comme auparavant, il sait totalement se faire oublier.
J’avais un soucis avec mon ancien bricolage, le caisson avait tendance à bouger sur son axe lors de réception brutale même en serrant fort, j’avais rajouté une cale anti rotation. Celui-ci a tendance également à bouger, je vais devoir réfléchir à le caler également. Au bout d’un certain temps, je me rends compte que le raccord GoPro se desserre, peut être qu’un frein filet pourrait régler l’affaire. A terme j’installerai sans doute un modèle métallique de raccord.
A part ça je suis très satisfait de mon achat et je vais pouvoir à nouveau filmer de cet angle qui est sans doute le meilleur pour une GoPro.
Je me rends compte que j’ai quasiment laissé tomber les moteurs de recherche, dont le premier d’entre eux et mon premier réflexe est maintenant d’abord de consulter chatgpt. Pourquoi chatgpt ? Simplement parce que je trouve encore les autres bien moins performants.
Je le consulte pour les petites problématiques du quotidien et du bricoleur du dimanche que je suis, quand je regarde mon historique de consultation, ça va aussi bien de la recherche d’une référence d’une pièce auto et la manière de l’installer, rattraper une anchoïade, installer un programmateur dans un tableau électrique, faire un joint d’étanchéité sous l’eau ou trouver le mode d’emploi d’un réfrigérateur ! Et dans le domaine informatique, ça couvre aussi bien des scripts bash pour divers usage et des problèmes variés rencontrés sur divers logiciels.
Tout n’est surtout pas à prendre au pied de la lettre, il y a parfois des erreurs grossières, des informations datées voire obsolètes, il lui arrive également de tourner en rond et de radoter sans avancer, mais le plus souvent il me donne les bonnes pistes et par itération successive, j’arrive très souvent à mes fins pour résoudre mon problème initial.
S’il fallait illustrer mes propos par un exemple concret, dans des précédents posts (ici, là et ici encore) j’avais évoqué que j’avais déployé chez moi un système de vidéosurveillance basé sur zoneminder. J’avais acheté un ensemble de caméras adhoc dont certaines à bas coût d’une vingtaine d’euros dont les caractéristiques semblaient intéressantes pour l’usage que je voulais en faire.
Caméras low cost ieGeek ie60 et Annke Crater Pro
A vrai dire je n’ai jamais pu installer ces caméras bas coût car l’adresse du flux vidéo change régulièrement ce qui les rend inutilisables pour les logiciels comme zoneminder ou frigate qui ne gèrent que les adresses fixes, contraignant à utiliser l’application propriétaire Android fournie avec.
J’ai buté des mois sur ce problème en tentant vainement diverses solutions et en mettant au point sans succès très laborieusement un script python. Dernièrement j’ai fait appel à chatgpt et en 2h de temps tout était en place. Chatgpt m’a aidé à créer un script qui récupère à intervalle régulier l’adresse du stream vidéo, adresse qu’il enregistre ensuite dans le fichier de configuration de mediamtx, serveur de flux vidéo qui rediffuse le flux avec une adresse fixe accessible de zoneminder ou frigate. Je ne suis pas sûr que j’y serais arrivé seul, ou alors au bout de je ne sais combien d’heure de vaines programmations. Je me rends compte que chatgpt a évolué également, car je lui avais posé la même question il y a plusieurs mois, il a été incapable d’y répondre et ne m’avait pas donné à l’époque de pistes sérieuses pour avancer.
Il en reste pas moins que ceux qui sont intéressés par ce sujet spécifique peuvent toujours consulter cette page de mon site Funix pour retrouver ces scripts python.
Il arrive que quand je télécharge la trace de ma montre GPS garmin sur Garmin Connect je me retrouve avec des points aberrants qui parasitent la trace. Exemple avec cette trace de randonnée dans un lit de rivière avec une série de baignades dans des bassins à la Réunion objet de ce post Instagram.
Dans un précédent post évoquant le passage à la version 25.04.0 de kdenlive, j’ai été confronté à un problème d’obsolescence de ma carte vidéo pour pouvoir utiliser le plugin de segmentation des objets. Il faut dire que mon ACER Predator G3-605 a dépassé les 10 ans maintenant ce qui est un age plus qu’honorable pour un PC et pourtant je continue à l’utiliser et faire tout ce que j’ai à faire, y compris le montage vidéo ou le transcodage sans que ça me pose de problèmes particuliers.
Acer Predator et ses différents périphériques avec mon mini serveur Lenovo et la box SFR
Affolé par le prix du neuf que ce soit avec un PC prêt à l’emploi ou en pièces détachées, je regarde les PC d’occasion mais je crains de tomber sur un modèle bruyant alors que le mien brille par son silence (hors calcul intensif). Je décide de changer juste la carte graphique toujours du côté de l’occasion. Ma carte mère a un slot PCI-E génération 3, on est passé maintenant aux générations 4 et 5. Même si les GPU prévus pour la génération 4 sont rétrocompatibles avec la génération antérieure avec la restriction que toutes leurs performances ne pourront être exploitées totalement, je préfère rester avec un GPU de génération 3 pour ne pas prendre de risque. Souhaitant rester dans le monde Nvidia, je jette mon dévolu sur une GeForce RTX 2070 qui est une des dernières cartes PCI-E gen 3 sortie en 2018. Ce site me donne une augmentation potentielle de puissance estimée à 235% par rapport à ma vieille GeForce GTX 760 de 2013 tout de même !
Au fil de mes recherches, je trouve sur ebay une carte RTX 2070 avec une alimentation compatible pour 226€ frais de port compris et ça tombe bien car je n’ai qu’un alimentation de 500W et la puissance minimum conseillée est de 650W.
Je viens d’installer la dernière version de kdenlive 25.04.0 dont un rapide changelog peut être consulté ici. Elle intègre une évolution pour créer des masques d’objet basés sur Segment Anything Model 2 (SAM 2) qui permet de segmenter une image et une vidéo en plusieurs objets distincts, d’où également le terme segmentation d’objet utilisé par kdenlive. Ces masques peuvent ensuite être utilisés dans la vidéo pour supprimer le fond de la vidéo ou pour appliquer un effet particulier à un objet comme on peut le voir dans la documentation.
Sauf que l’installation de SAM2 ne s’est pas passée comme prévue, car j’ai buté sur cette erreur.
j’ai créé un bug sur le tracker officiel KDE qu’on peut consulter ici visiblement ça viendrait de l’emplacement de l’option -r dans la commande pip.