Dans cet article, j'aimerais partager ma propre expérience de développement d'une caméra intelligente pour cyclistes avec un algorithme avancé de vision par ordinateur pour détecter les dangers potentiels sur la route et prévenir les collisions. J'ai brièvement décrit l'ensemble du processus de prototypage et de collecte de données vidéo à partir de zéro ci-dessous. Cela pourrait être intéressant à la fois pour les ingénieurs Embedded et Machine Learning. Un petit spoiler avant de commencer : l'ensemble de données collecté plus tard était open-source.
Je suis un cycliste passionné avec 30 ans d'expérience, dont 20 sur la voie publique. Une fois, j'ai eu un accident de la circulation sur la route : une voiture a renversé mon vélo sur le côté. Heureusement, je m'en suis sorti avec une légère contusion et une entorse. Du coup, je comprends surtout les problèmes de sécurité qu'ont les cyclistes sur la voie publique.
L'une des solutions au problème consiste à utiliser des caméras de vélo pour capturer les incidents. Faire du vélo sur la route, comme nous le savons, devient plus sûr lorsqu'il est équipé d'une caméra qui capture votre point de vue. Lors d'une altercation avec un conducteur, le fait d'avoir des images peut servir de couche de protection supplémentaire. Sans preuve, un conducteur contraire à l'éthique peut nier sa responsabilité, mais avoir une caméra pour les cyclistes peut sauver la vie dans une telle situation. Au Royaume-Uni, il existe même un site Web appelé Nextbase qui facilite la soumission de séquences de caméras d'action à la police, rationalisant le processus et réduisant les complications.
En d'autres termes, vous pouvez filmer l'accident, mais vous devez admettre qu'il est toujours préférable d'éviter une situation dangereuse. Lorsque j'ai lancé le projet, il n'existait pas de solutions proactives pour prévenir les situations dangereuses sur les routes. J'ai donc décidé de créer mon rétroéclairage de vélo intelligent avec une caméra. La mission du projet était de réduire le nombre de décès et de blessures chez les cyclistes.
À l'origine, l'appareil devait être doté d'un algorithme avancé de vision par ordinateur, souvent appelé "intelligence artificielle" dans les médias, capable de détecter les dangers potentiels sur la route pour les cyclistes. Laissez-moi vous expliquer le concept en termes simples : si le logiciel détecte un danger, l'appareil émet une lumière clignotante pour attirer l'attention des conducteurs. De plus, le système de sécurité émet un son fort au véhicule qui suit avant une collision, aidant à l'éviter.
Afin de former mon réseau neuronal de détection d'objets (partie de l'algorithme de vision par ordinateur, utilisé pour la perception), j'avais besoin de trouver un grand ensemble de données de différents scénarios de routes publiques capturés par des caméras de recul. Malheureusement, ces ensembles de données open source n'étaient pas disponibles sur le Web lorsque j'ai commencé.
Dans leur intégralité, les études du comportement de conduite sont extrêmement utiles dans l'ingénierie des transports, servant à diverses fins telles que la collecte de données pour l'analyse statistique, l'identification de modèles de conduite et l'estimation des paramètres de modélisation. Les données et les modèles peuvent être appliqués dans plusieurs domaines, notamment l'analyse de la sécurité routière, les modèles microscopiques pour la simulation, la prévision et le contrôle du trafic, et la logique de contrôle pour les systèmes avancés d'aide à la conduite.
Pour aller de l'avant, il faut dire que tout en travaillant sur ce projet, j'ai créé l'ensemble de données à partir des routes publiques ukrainiennes capturées par les caméras de recul des premiers utilisateurs de MVP en 2021.\
Comprenant totalement l'importance publique et sociale d'avoir de tels ensembles de données dans le domaine public, j'ai téléchargé les résultats de mon travail ici .
Pour apprendre au réseau de neurones à prédire les accidents, j'ai dû collecter beaucoup de données. Pour ce cas, j'avais besoin de développer des prototypes de caméras à donner à mes premiers bêta-testeurs pour enregistrer leurs trajets. Heureusement, mon réseau communautaire de cyclistes compte de nombreux militants de la sécurité routière. Il ne restait plus qu'à assembler quelques appareils pour les remettre à mes premiers utilisateurs.
Permettez-moi de décrire brièvement le processus de développement et d'expliquer la logique du choix de solutions techniques spécifiques ci-dessous.
La configuration matérielle : le boîtier a été imprimé en 3D. Le module informatique Raspberry Pi 3B + a été choisi comme plate-forme et des circuits imprimés personnalisés ont été conçus pour que le boîtier reste compact et léger.
J'ai utilisé un capteur Raspberry Pi IMX219 standard pour la caméra, mais j'ai utilisé un objectif à 120 degrés. Des lumières LED haute puissance et une lentille teintée rouge (également imprimée en 3D) ont été ajoutées pour une meilleure visibilité sur la route.
J'ai utilisé le Google Coral Edge TPU (photos incluses), un accélérateur de neurones 4 TOPs puissant et peu coûteux, pour exécuter des réseaux de neurones sur l'appareil. Le TPU était connecté via USB. \
Tous ces appareils électroniques consommaient 7 à 8 W à charge maximale (enregistrement vidéo, fonctionnement du réseau de neurones en temps réel et clignotement des LED). Une batterie Li-ion de 8 Ah (photos de l'intérieur du boîtier incluses) a été utilisée pour assurer 4 à 5 heures de fonctionnement.
Pour le système d'exploitation, j'ai utilisé le Raspbian standard car il est mieux pris en charge et tous les pilotes dont j'avais besoin ont été facilement installés sans aucun problème. Le code principal que j'ai décidé d'écrire après le démarrage du système d'exploitation était en C++.
Je ne recommande pas de commencer par cela - à des fins d'expérimentation, je pense que Python pourrait être une meilleure option pour les débutants. Cependant, si vous souhaitez contrôler efficacement et précisément toutes les ressources limitées du Raspberry Pi avec des capacités matérielles maximales, cela vaut la peine d'écrire en C/C++.
L'une des solutions les plus intéressantes que j'ai apportées dans ce projet est le mécanisme OTA (over-the-air update) et le mécanisme de collecte des enregistrements vidéo à partir d'appareils.
Le processus ressemblait à ceci : lorsqu'un utilisateur termine un trajet et rentre chez lui, il insère un adaptateur WiFi USB, qui se connecte au Wi-Fi domestique, et l'appareil commence la synchronisation.
Toutes les vidéos ont été synchronisées via Google Drive - j'ai créé un compte Google distinct pour chaque appareil. Google Drive a beaucoup d'avantages dans mon cas : j'ai pu regarder les vidéos instantanément via l'interface Web de Google Drive, il est facile de supprimer ou d'ajouter manuellement de nouveaux fichiers et, enfin et surtout, c'était gratuit pour mes expériences ( jusqu'à 20 Go pour chaque compte). ( Google , s'il vous plaît, ne soyez pas méchant, il n'y avait que quatre MVP dans ma startup naissante).
L'encodage vidéo H.264 permet de conserver des centaines de vidéos sur un Google Drive sans manquer de capacité.
Permettez-moi de décrire le processus OTA : après avoir compilé un nouveau micrologiciel, je le télécharge sur un lecteur Google. La prochaine fois lors de la synchronisation avec Google Drive, un appareil télécharge la nouvelle version du micrologiciel et remplace l'ancienne.
J'ai utilisé un simple utilitaire gdrive pour cela. Voici le code que j'utilise pour télécharger un nouveau fichier de firmware :
gdrive upload -p “gdrive folder id” “file”
Ci-dessous, je donne une ligne de code pour charger un nouveau firmware sur un appareil :
gdrive update “id” “file”
Après avoir vérifié la version du micrologiciel, la synchronisation vidéo se produit et tous les nouveaux enregistrements sont téléchargés sur Google Drive.
Voici comment les vidéos sont téléchargées sur le disque à partir d'un appareil :
gdrive sync upload “local folder” “gdrive folder id”
Une fois par jour, j'exécutais un script sur mon serveur pour synchroniser tous les Google Drive avec mes dossiers locaux et téléchargeais toutes les nouvelles vidéos.
gdrive sync download “gdrive folder id” “local folder”
Ainsi, après plusieurs mois de travail, mes appareils ont collecté plus de 200 vidéos prêtes à être labellisées.
Après avoir collecté la vidéo, je l'ai traitée, filtrée et créé le jeu de données. Ensuite, j'ai réuni une petite équipe pour l'étiquetage manuel. L'équipe comprenait 4 personnes qui ont étiqueté chaque photo.
Finalement, comme cela a été mentionné précédemment, j'ai donné l'ensemble de données à l'open source. Vous pouvez le trouver via le lien : lien GitHub.
Je crois que les ensembles de données open source sont une ressource précieuse pour la communauté de la recherche, et ils peuvent grandement contribuer au développement de nouveaux algorithmes et modèles dans le domaine de la sécurité routière.