Comment nous avons développé un appareil pour surveiller l'attention des conducteurs. Découvrez Yandex.Taxi



Le taxi doit être confortable et sûr. Et cela dépend non seulement de la qualité de la voiture et du service, mais aussi de la concentration de l’attention du conducteur, qui tombe lors d’un surmenage. Par conséquent, au niveau du service, nous limitons le temps que le conducteur passe au volant.

Mais parfois, les conducteurs sont déjà fatigués - par exemple, une personne était occupée à un autre travail toute la journée, et le soir, elle a décidé de «diriger». Que faire à ce sujet? Comment comprendre que le conducteur intervient sans changer de sommeil? Vous pouvez, par exemple, essayer d'évaluer à quel point il surveille la route et déterminer les signes de fatigue, par exemple, par la nature des clignotements. Cela vous semble-t-il simple? Tout est plus compliqué qu'il n'y paraît.

Aujourd'hui, nous allons d'abord dire aux lecteurs de Habr comment nous avons conçu et développé un appareil photo qui peut le faire.

Donc, c'est donné: la fréquence et la durée des clignements dépendent du degré de fatigue. Lorsque nous sommes fatigués, la tête est moins mobile, la direction de notre regard change moins souvent, nous clignons plus souvent et laissons les yeux fermés pendant de longues périodes de temps - la différence peut être mesurée en fractions de seconde ou plusieurs degrés de rotation, mais elle existe. Notre tâche était de concevoir un appareil qui nous permet d'analyser les clignements, ainsi que la direction de notre regard, les bâillements et les mouvements de la tête, afin d'évaluer le niveau d'attention et de fatigue du conducteur.

Tout d'abord, nous avons décidé: créons une application pour ordinateur portable, installons-la sur les bénévoles parmi les employés, et utiliserons-nous la caméra intégrée pour suivre les panneaux dont nous avons besoin? Nous allons donc immédiatement recueillir un grand nombre d'informations pour l'analyse et tester rapidement nos hypothèses.

Spoiler: rien ne s'est passé! Assez rapidement, il est devenu clair que la plupart des gens qui travaillent sur un ordinateur regardent constamment le clavier et penchent la tête. Autrement dit, les yeux ne sont pas visibles, et il n'est même pas clair s'ils sont fermés ou ouverts, une personne clignote ou regarde simplement de l'écran au clavier et vice versa.



Ensuite, nous avons réalisé que même pour fabriquer un prototype, nous avons besoin d'une sorte d'appareil. Nous avons acheté le premier modèle de caméra IP disponible, qui fonctionne dans le domaine infrarouge.

Pourquoi avons-nous besoin de l'infrarouge? L'éclairage peut être différent, parfois l'utilisateur est à l'ombre, parfois la lumière est de derrière, de dessus, ou il n'y en a pas du tout. Si nous fabriquons un appareil de mesure, il devrait fonctionner de la même manière dans toutes les conditions.

Pour l'expérience, un appareil photo assez populaire de Xiaomi est apparu - CHUANGMI.



Il s'est avéré qu'elle tire à une fréquence de 15 images par seconde, et nous en avons besoin deux fois plus: le clignotement dure de 30 à 150 ms, à 15 images par seconde, nous risquions de ne pas voir un clignotement inférieur à 60–70 ms. Par conséquent, nous avons dû modifier son micrologiciel pour activer de force l'éclairage infrarouge, obtenir un accès direct au flux vidéo et récupérer les 30 images nécessaires par seconde. Après avoir connecté la caméra à l'ordinateur portable et configuré pour recevoir le flux vidéo via le protocole RTSP, nous avons commencé à enregistrer les premières vidéos. La caméra a été placée à 15 cm sous la caméra de l'ordinateur portable, ce qui a permis de mieux "voir" les yeux de l'utilisateur.

Succès? Et encore une fois, non. Après avoir collecté plusieurs centaines de vidéos, nous avons réalisé que rien ne se passait. Le comportement de l'utilisateur d'un ordinateur portable pendant la journée est différent du comportement du conducteur: une personne peut se lever à tout moment, se déplacer pour manger, simplement marcher et se réchauffer, tandis que le conducteur passe beaucoup plus de temps en position assise. Par conséquent, ces données ne nous conviennent pas.

Il est devenu clair que la seule façon était de fabriquer ou d'acheter une caméra adaptée et de l'installer dans la voiture.

Il semblerait que tout soit élémentaire: nous achetons un DVR, nous nous tournons vers le conducteur, nous attachons dans la voiture et une fois par semaine nous récupérons des cartes SD avec des enregistrements vidéo. Mais ici, en réalité, tout s'est avéré pas si simple.

Premièrement, il est extrêmement difficile de trouver un DVR avec éclairage IR, et nous devons bien voir le visage, surtout la nuit.

Deuxièmement, tous les DVR ont un objectif grand angle, de sorte que la zone avec le visage du conducteur se révèle être assez petite et que vous ne pouvez rien distinguer sur l'enregistrement. Oui, et la distorsion de l'objectif gâche à peu près l'analyse de la position de la tête et de la direction de la vue.

Troisièmement, cette entreprise n'est pas très évolutive sur dix, cent ou plusieurs machines. Nous devons collecter de nombreuses données de différents conducteurs afin de les analyser et de tirer des conclusions. Changer manuellement des cartes mémoire sur une centaine de machines chaque semaine ou chaque jour est une énorme perte de temps. Nous avons même essayé de trouver une caméra qui téléchargerait des vidéos sur le cloud, mais il n'y avait rien de similaire sur le marché.

Il y avait même une idée pour faire "votre propre DVR" à partir du Raspberry Pi, une caméra avec éclairage IR et supports.



Le résultat n'était pas tout à fait ce que nous attendions: encombrant, il est impossible d'installer la caméra séparément de l'ordinateur. Le fait est qu'avec une longueur de câble de plus de 50 cm, des problèmes avec le signal ont commencé, et le câble CSI lui-même est assez fragile, trop large et donc peu adapté à une installation dans une machine.

Nous devons aller à Hong Kong, nous avons décidé. Le but du voyage était assez abstrait: voir ce que font les différents fabricants dans le domaine de l'analyse du comportement du conducteur, acheter des échantillons de produits si nous en trouvons et rechercher des solutions / composants techniques appropriés que nous pourrions installer dans les voitures.

Nous sommes allés immédiatement à deux expositions populaires d'électronique et de composants. Dans le pavillon de l'électronique automobile, nous avons vu une domination sans précédent des enregistreurs vidéo, des caméras de recul et des systèmes ADAS , mais presque personne n'était engagé dans l'analyse du comportement du conducteur. Les prototypes de plusieurs fabricants ont déterminé l'endormissement, la distraction, le tabagisme et les conversations téléphoniques, mais personne n'a même pensé à la fatigue.

En conséquence, nous avons acheté plusieurs échantillons de caméras et d'ordinateurs à carte unique. Il est devenu clair que 1) il n'y a pas de produits finis appropriés pour nous; 2) il est nécessaire de séparer l'ordinateur et l'appareil photo afin de ne pas obscurcir la vue du conducteur. Par conséquent, nous avons pris une carte de caméra avec une interface USB et, en tant qu'unité informatique, un ordinateur Banana Pi à carte unique, et en même temps plusieurs lecteurs Android basés sur des processeurs Amlogic.



"Pourquoi les joueurs?" - demandez-vous. En fait, le S912 et même le S905 sont assez puissants en termes de performances et ils peuvent facilement extraire l'enregistrement vidéo pour nos besoins, même avec une analyse d'image sur place. Une analyse d'image sur site était nécessaire afin de ne pas envoyer l'intégralité du flux vidéo au serveur.

Comptons: une minute de vidéo bien compressée en résolution H.264 de 640 × 480 (30 FPS) prend au moins 5 mégaoctets. Donc, dans une heure, il y aura 300 mégaoctets, et pour un quart de travail standard de 8 heures - environ 2-3 gigaoctets.

Charger 3 gigaoctets de vidéo chaque jour à l'aide d'un modem LTE est très «cher». Par conséquent, nous avons décidé d'enregistrer périodiquement des vidéos de 5 minutes, d'analyser tout ce qui se passe dans la voiture juste là et de le télécharger sur nos serveurs sous la forme d'un flux d'événements analysé: un ensemble de points faciaux, une direction de la vue, un tour de tête, etc.

Nous sommes rentrés des expositions de bonne humeur, avons apporté un tas d'ordures nécessaires (et inutiles) et avons réalisé comment nous continuerions à fabriquer le prototype.

La caméra USB que nous avons trouvée à Hong Kong était presque parfaite pour nous: taille 38 × 38 mm, lentilles standard (12 mm), possibilité de souder des illuminateurs IR directement sur la carte.



Par conséquent, nous avons immédiatement demandé au fabricant de nous faire un prototype avec les composants nécessaires. Maintenant, nous avons compris: nous avons besoin d'une caméra USB avec rétro-éclairage et d'un PC à carte unique pour le traitement vidéo. Nous avons décidé d'essayer tout ce qui était présenté sur le marché et organisé une séance de shopping sur AliExpress. Nous avons acheté quatre douzaines d'appareils photo différents, une douzaine de PC à carte unique, des lecteurs Android, une collection d'objectifs 12 mm et de nombreux autres appareils étranges.



Le problème avec le matériel a été résolu. Et les logiciels?

Assez rapidement, nous avons pu obtenir un prototype simple basé sur OpenCV , qui écrit une vidéo, trouve le visage du conducteur, l’analyse, marque 68 points clés sur le visage, reconnaît le clignotement, le bâillement, la rotation de la tête, etc.

La tâche suivante consistait à faire fonctionner notre prototype sur un PC à carte unique. Raspberry PI est tombé immédiatement: peu de cœurs, un processeur faible, plus de sept images par seconde ne peuvent pas en être retirés. Et comment écrire simultanément une vidéo, reconnaître un visage et l'analyser, cela ne faisait aucun doute. Pour les mêmes raisons, les décodeurs et ordinateurs monocarte des Allwinner (H2, H3, H5), Amlogic S905 et Rockchip RK3328 ne nous convenaient pas, bien que ce dernier soit très proche des performances souhaitées. En conséquence, nous avons encore deux SoC potentiels: Amlogic S912 et Rockchip RK3399.

Chez Amlogic, le choix des appareils était restreint: un boîtier TV ou Khadas VIM2. Tout fonctionnait de la même façon sur la TV Box et Khadas, mais le refroidissement des décodeurs TV laissait beaucoup à désirer, et la configuration de Linux sur eux n'est souvent pas un exercice pour les âmes sensibles: faire fonctionner le Wi-Fi, BT, faire voir au système d'exploitation toute la mémoire, - C'est long, difficile et imprévisible. En conséquence, nous avons choisi Khadas VIM2: il a un radiateur de refroidissement standard, et la carte est suffisamment compacte pour le cacher derrière le tableau de bord de la machine.



À cette époque, le fabricant de la carte de la caméra nous avait déjà envoyé un lot de test de cent pièces, et nous avions hâte de nous battre: fabriquer un prototype, le mettre dans une voiture et collecter des données.

Nous avions une caméra, il y avait un logiciel, il y avait un PC à carte unique, mais il n'y avait pas la moindre idée de comment mettre tout cela dans la voiture et le connecter à l'alimentation de bord.

De toute évidence, la caméra avait besoin d'un corps et d'un support. Nous avons acheté deux imprimantes 3D à la fois pour imprimer des pièces, et l'entrepreneur nous a fait le premier modèle primitif du boîtier.



Maintenant, la tâche difficile du choix a surgi: où monter la caméra dans la voiture pour obtenir une bonne image, mais pas pour obscurcir la vision du conducteur. Il y avait exactement trois options:

  1. Au milieu du pare-brise.
  2. Sur le panier gauche.
  3. Sur le rétroviseur.



À ce moment, il nous a semblé préférable de fixer la caméra directement sur le rétroviseur: elle est toujours dirigée vers le visage du conducteur, de sorte que la caméra filme exactement ce dont nous avons besoin. Malheureusement, les fabricants de rétroviseurs ne se sont pas assurés de pouvoir y attacher quelque chose de manière pratique et fiable. Les caméras ne tenaient pas bien, sont tombées et ont fermé l'examen.



Néanmoins, nous avons équipé plusieurs machines et commencé à en collecter des données. Il est devenu clair que la conception était imparfaite, et les problèmes liés aux performances et au chauffage ont grimpé tout en enregistrant et en analysant le visage.

Ensuite, nous avons décidé de monter la caméra au niveau des yeux sur le rack gauche: nous fermons moins la revue et avons un bon angle pour la caméra afin que le conducteur puisse être vu. L'affaire a dû être refaite, car les fixations avec charnières se sont révélées extrêmement peu fiables: elles se brisent lors des secousses, se cassent et les ventouses se détachent du verre.



Nous avons décidé que pour le prototype et la collecte de données, il est préférable de coller fermement les caméras au verre afin qu'aucune secousse et aucune influence extérieure ne puissent changer leur position. Nous avons légèrement modifié le boîtier et en même temps effectué des tests de charge de l'installation à l'aide d'un ruban spécial double face. Pour les tests, un équipement complexe et de haute précision a été utilisé.



En raison de problèmes de performances, nous avons décidé de changer le SoC en un plus puissant, nous avons donc choisi le PC à carte unique NanoPI M4 sur le processeur Rockchip RK3399.

Comparé au Khadas VIM2, il est environ un tiers plus productif, il a une compression matérielle et un décodage vidéo, et il se comporte beaucoup plus stable dans des conditions de température difficiles. Oui, nous avons essayé de faire fonctionner des caméras et des circuits imprimés dans le congélateur, les avons chauffés dans le four et avons effectué de nombreux autres tests inhumains.



Comme nous enregistrons des vidéos non seulement comme ça, mais en dynamique tout au long de la journée, il était important que l'heure système sur l'appareil soit précise. Malheureusement, la plupart des ordinateurs monocarte ne sont pas équipés d'une horloge auto-alimentée. Nous avons eu la chance que notre NanoPI ait un connecteur de batterie.

J'ai dû concevoir un boîtier pour un ordinateur qui le protégerait physiquement et servirait de support pour les antennes WiFi et BT. Là, nous avons également fourni un endroit pour monter la batterie de la montre avec un support.



Ensuite, nous avons prévu d'équiper une centaine de machines de prototypes qui enregistreront la vidéo et transmettront toutes les données télémétriques au cloud en ligne: y a-t-il un conducteur, à quelle fréquence et pendant longtemps il clignote, bâille, est distrait de la route, tourne la tête, etc. Tout cela ( et pas seulement) les paramètres nous permettent de former un modèle qui évalue la concentration du conducteur sur la route, qu'il soit distrait ou fatigué. Pour faire tout cela directement sur l'appareil dans la voiture, nous avons dû réécrire complètement le code, effectuer la compression vidéo matérielle, faire pivoter les journaux et les enregistrements vidéo, l'envoyer régulièrement au serveur, mettre à jour le logiciel à distance, et bien plus encore.

Dans le même temps, il est devenu clair pour nous que nos calculs et algorithmes fonctionneraient beaucoup mieux avec une analyse faciale de base plus précise. Dans les premiers prototypes, nous avons utilisé le détecteur de visage intégré à OpenCV basé sur le modèle de cascade de haar et le modèle de marquage de 68 points de visage basé sur la bibliothèque dlib . Nous avons calculé nous-mêmes la position de la tête en calculant la projection des points du visage sur le plan focal. Les solutions open source pour la reconnaissance et le marquage des visages fonctionnent bien sur les cadres où le visage est tourné de face ou de profil, mais dans des conditions intermédiaires, ils se trompent souvent.

Par conséquent, nous avons décidé de concéder sous licence une bonne solution tierce de reconnaissance faciale et de marquage - VisionLabs SDK. Comparé aux algorithmes précédents, il est plus gourmand en ressources, mais il donne une augmentation notable de la qualité de la reconnaissance faciale et du marquage, ce qui conduit à une extraction plus précise des facteurs d'apprentissage automatique. Avec l'aide de collègues de VisionLabs, nous avons pu passer rapidement à leur SDK et obtenir les performances dont nous avions besoin: 30 images / sec. à une résolution de 640x480.

Le SDK VisionLabs utilise des réseaux de neurones pour la reconnaissance faciale. La technologie traite chaque image, trouve le visage du conducteur dessus et donne les coordonnées des yeux, du nez, de la bouche et d'autres points clés. Les données obtenues sont utilisées pour créer un cadre normalisé de taille 250x250, où le visage est situé strictement au centre. Ce cadre peut déjà être utilisé pour calculer la position de la tête en degrés le long de trois axes: lacet, tangage et roulis. Pour suivre l'état des yeux du conducteur, le système analyse l'image des yeux et décide pour chaque œil s'il est fermé ou ouvert. Le système est capable de déterminer à l'aide de la technologie IR Liveness si une personne vivante est devant la caméra ou si le conducteur a joint une photo. Pour l'analyse, une trame normalisée est utilisée, et à la sortie, nous obtenons le résultat vivant ou non vivant.

Conclusion


Pendant que nous réécrivions et déboguions des logiciels, nos imprimantes 3D imprimaient des boîtiers pour caméras et PC à carte unique de jour comme de nuit. L'impression du kit (boîtier de l'appareil photo + boîtier PC) a nécessité environ 3-4 heures de fonctionnement de l'imprimante, nous avons donc dû augmenter les capacités de production: nous avons utilisé quatre imprimantes. Mais nous avons réussi à tout faire dans les délais.



En deux semaines, nous avons entièrement équipé les cent premières voitures de plusieurs flottes de taxis - partenaires Yandex.Taxi. Maintenant, avec leur aide, nous collectons des vidéos, analysons le comportement du conducteur, les signes de fatigue, améliorons les algorithmes et formons des modèles qui évaluent le niveau d'attention et de fatigue. Et ce n'est qu'après cela (en tenant compte de toutes les données, des commentaires des conducteurs et des passagers) que nous serons prêts à passer à l'étape suivante - la production de masse et la mise en œuvre.

Malheureusement, pour s'étendre à plusieurs milliers ou dizaines de milliers d'installations, la solution technique actuelle n'est pas très adaptée pour un certain nombre de raisons. Tout ce dont nous avons parlé dans cet article est une expérience rapide, dont le but était d'apprendre rapidement à collecter des données directement à partir des machines afin de former des modèles. La prochaine grande étape pour nous est de développer et de commencer à produire un appareil de mêmes dimensions, mais composé d'une seule unité: la caméra, les capteurs et le modem seront situés dans un boîtier compact, que nous installerons en masse dans des machines.

Source: https://habr.com/ru/post/fr461137/


All Articles