Expérience personnelle en utilisant des capteurs de proximité en développement

Bonne journée à tous! Je m'appelle Maxim, je suis un développeur leader chez Habilect.

Dans la vie de chaque programmeur, un moment arrive où vous voulez partager les 2/3 de votre vie - une description du travail et des projets :)

Historiquement, le domaine principal de mon activité était le développement de systèmes basés sur des capteurs sans contact.

Depuis près de 7 ans, de nombreuses options ont été essayées - Microsoft Kinect (à la fois la version pour XBOX 360 et Kinect One pour Windows), Intel RealSense (à partir de la première version disponible sur le marché - F200, poursuivant le SR300 et, pour le moment, la dernière sortie - D435), Orbbec (Astra et Persee), Leap Motion (dont j'ai même parlé ici sur le traitement des gestes personnalisés). Naturellement, il ne pourrait pas se passer de webcams ordinaires - analyse d'images, OpenCV, etc.

Ceux qui sont intéressés - je demande un chat.

Juste au cas où, un bref programme éducatif sur ce sujet des capteurs sans contact:

Imaginez une situation dont vous avez besoin pour suivre par programme les actions d'une personne en particulier.

Bien sûr, vous pouvez utiliser une webcam classique, qui peut être achetée dans n'importe quel magasin. Mais avec ce cas d'utilisation, vous devez analyser les images, ce qui est gourmand en ressources et, franchement, important (le problème d'allocation de mémoire dans le même OpenCV est toujours d'actualité).

Par conséquent, il est plus optimal de reconnaître les personnes non pas comme faisant partie de l'image de la caméra, mais comme un «squelette» obtenu par un capteur spécialisé utilisant des télémètres actifs. Cela vous permet de suivre une personne (ou plusieurs personnes) et de travailler avec des parties individuelles du "squelette".

Dans la terminologie du SDK Microsoft Kinect, ces parties individuelles sont appelées «Joints». Dans le cas d'un capteur par défaut, leur état est mis à jour toutes les 30ms.

Chaque joint contient:

  • des données sur la position du point squelette correspondant dans l'espace (coordonnées X, Y et Z) par rapport à l'axe optique du capteur,
  • état de la visibilité du point (déterminé, non déterminé, position calculée par le capteur),
  • quaternion de rotation par rapport au point précédent

La figure montre les joints traités par Kinect v2 en utilisant l'homme de Vitruve de Leonardo Da Vinci comme exemple.

KinectV2Joints

Ainsi, en travaillant avec un capteur sans contact, le développeur a la possibilité d'analyser les actions d'une personne ou d'un groupe de personnes (par exemple, avec Kinect, il est possible de suivre simultanément 6 personnes dans un cadre). Et que faire de la matrice de données reçue dépend de l'application spécifique.

Les applications de ces capteurs sont infinies. Les principaux domaines de mon travail sont la publicité et la médecine.

Considérez la direction de la publicité . Désormais, pour le fonctionnement des stands publicitaires interactifs, plusieurs modules de base sont nécessaires, à savoir:

  1. Matériel publicitaire lui-même
  2. Collecte de statistiques sur le degré d'attraction de l'attention des visiteurs sur l'affichage d'une publicité particulière, ce qui est intéressant pour l'annonceur
  3. Possibilité de configuration à distance d'un stand publicitaire
  4. L'effet attrayant qui distingue un support interactif des téléviseurs conventionnels avec des publicités et des bannières imprimées

Si tout est clair avec le matériel publicitaire lui-même, alors des capteurs sont utilisés pour collecter des statistiques. Par exemple, un annonceur souhaite savoir combien de personnes ont prêté attention à sa publicité? Hommes, femmes ou enfants? À quelle heure s'arrêtent-ils le plus souvent? Combien de temps regardent-ils les publicités et ne se tiennent-ils pas juste à côté du stand, creusant dans le téléphone? À l'aide d'un capteur, cela peut être suivi et un rapport rédigé sous une forme pratique pour l'annonceur.

Pour la configuration à distance, le modèle le plus simple et le plus évident est probablement utilisé - Google Agenda. Chaque calendrier est attaché à un stand spécifique et, étant à Saint-Pétersbourg, vous pouvez gérer des stands partout dans le monde.

Et l'effet attractif est la fonctionnalité même, à cause de laquelle le stand est appelé interactif. Vous pouvez créer un jeu dirigé par une personne avec le logo du sponsor, réaliser un son de bienvenue lorsqu'une personne apparaît dans le champ de vision du capteur, créer un code QR avec un coupon de réduction dans la boutique de l'annonceur si, par exemple, une personne est restée une minute et a regardé une publicité. Les options sont limitées principalement par la fantaisie et non par la technologie.

Pourquoi utiliser des capteurs en médecine ? La réponse à cette question est simple et simple - le coût des examens et de la rééducation est réduit tout en maintenant la précision.

L'un des exemples frappants est le développement dans le domaine de la stabilométrie - la science des déviations du centre de gravité lors de la marche, qui affecte la posture, la colonne vertébrale et la bonne fonction musculaire. Vous pouvez vous rendre dans des centres spéciaux pour des simulateurs spéciaux, ce qui est une procédure très coûteuse, qui n'est cependant pas toujours fournie. Et vous pouvez acheter un capteur et un logiciel à domicile, vous connecter à un téléviseur et effectuer des tests de diagnostic, dont les résultats sont automatiquement envoyés à votre médecin.

Un autre exemple est la réadaptation à domicile. Ce n'est un secret pour personne qu'il y a deux principaux problèmes de réadaptation: l'appel coûteux d'un médecin à la maison (ce qui doit être fait plusieurs fois par semaine) et la réticence d'une personne réadaptée à effectuer des exercices similaires pendant une longue période. Pour cela, plusieurs postulats de base du système ont été développés, à savoir:

  1. Compilation à distance des programmes de réadaptation par un médecin pour le suivi à distance de la mise en œuvre. Par exemple, un médecin de Saint-Pétersbourg peut surveiller à distance le déroulement des exercices prescrits pour un patient de Vladivostok, et si nécessaire, changer les exercices, augmenter ou diminuer la complexité et l'intensité des cours, étudier les statistiques en temps réel, etc.
  2. Processus d'exercice ludique. Si les simulateurs modernes sont principalement axés sur l'exécution de mouvements de base pour développer des muscles et des articulations endommagés, le système de rééducation interactif vous permet d'effectuer des exercices, littéralement, sans effort. Par exemple, avec l'aide du célèbre Tetris, qui, au lieu d'appuyer sur les boutons, est contrôlé par les mouvements prescrits par le médecin (lever la main gauche, déplacer la jambe droite, incliner la tête vers l'avant, etc.).
  3. Mise en place de critères de performance d'exercice. Lorsque vous travaillez avec le patient, le médecin surveille l'exercice à l'aide de conseils et d'une aide tactile (par exemple, vous ne pouvez pas plier votre bras au niveau du coude lorsque vous éloignez votre bras - cela affecte le travail de l'articulation de l'épaule). Le système interactif estime les angles relatifs entre les articulations et, en cas de dépassement de la plage acceptable, avertit l'utilisateur et ne tient pas compte de la mauvaise exécution de l'exercice.

Un tel système vous permet de réduire à la fois le temps (à la fois le médecin et le patient - de voyager l'un pour l'autre), et de maintenir la précision des exercices nécessaires pour progresser.

Pour la mise en œuvre de projets utilisant la pile technologique .NET. Je travaille sous Windows uniquement :). Oui, à cause de cela, j'ai dû écrire plusieurs fois des wrappers pour le SDK natif (à titre d'exemple, j'ai créé des adaptateurs pour le SDK Intel RealSense, car à l'époque il ne s'agissait que de code non managé). Cela a coûté beaucoup de temps, de nerfs et de cheveux gris, mais a permis de connecter la bibliothèque à divers projets développés sur la plate-forme Windows.

Il convient de noter que les principaux capteurs (Kinect et RealSense) nécessitent une résolution x64 pour le développement.

Pour simplifier le travail des applications clientes, un service séparé a été implémenté, fonctionnant avec un capteur, emballant les données dans un format qui nous convient et envoyant des données aux abonnés à l'aide du protocole TCP. Soit dit en passant, cela nous a permis de créer un système qui fonctionne avec plusieurs capteurs, ce qui peut améliorer considérablement la précision de la reconnaissance.

KinectMultiSensorModel
Le diagramme simplifié montre les avantages de l'utilisation de plusieurs capteurs pour suivre un objet. Les points bleus (articulations) sont déterminés de manière stable par les premier et second capteurs, verts - uniquement par le second. Naturellement, la solution développée est implémentée sous le "modèle N-sensor".

KinectMultiSensorWorkflow
Un processus détaillé de traitement des données de plusieurs capteurs est présenté dans le diagramme ci-dessus.

Avec presque tout développement, l'un des principaux critères pour un artiste est l'intérêt. Après, pendant plusieurs années consécutives, j'ai implémenté le même type d'application Web en ASP.NET et PHP, je voulais quelque chose de nouveau et plus, disons, intelligent. En développement web (à de rares exceptions près), tout a déjà été inventé. Bien site, bien service, bien base de données. Dans le cas du travail avec des capteurs, des tâches intéressantes et controversées se posent toujours, par exemple, "comment pourrais-je transmettre la vidéo HD du capteur via TCP afin que cela ne bloque pas le système?" (un exemple de la vie, bien que cela ait été fait il y a très longtemps). Et il est difficile de prévoir que les éléments suivants seront nécessaires pour améliorer et développer le système. Il est clair qu'il existe un sprint de développement principal où des améliorations globales et pré-planifiées sont décrites. Mais ces sous-tâches locales sont l'une des plus intéressantes dans le métier de programmeur.

Un tel travail n'est certainement pas routinier. Si quelqu'un souhaite apprendre plus en détail ou si quelqu'un veut savoir par où commencer dans ce domaine, je suis ouvert à la communication. Prêt à répondre à toutes vos questions :) Et que la force soit avec vous!

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


All Articles