Hé! Vous semblez être en United States, souhaitez-vous utiliser notre site English ?
Switch to English site
Skip to main content

Préparez-vous au soulèvement des machines…

Pour ceux d'entre nous qui étaient de adolescents dans les années 80’s, la première introduction au concept de vision machine vient sans doute du film Terminator dans lequel nous avons découvert la vision rouge en réalité augmentée du Terminator T-800.

Terminator_AR_40c31db00b1b41ffd25b02fcca815af8ddf3f938.jpg

(Pour ceux qui étaient vifs d'esprit et familiers avec le jeu d'instructions, car ils avaient déjà programmé leur Atari 800 ou dans le cas présent, un Apple II, pouvaient voir que le T-800 s'exécutait sur le code d'assemblage 6502.)

 Dans cette vision, nous pouvions voir le robot acquérir des données d'image, les traiter en temps réel et prendre des décisions basées sur des informations pertinentes extraites du flux de données. C’est d’ailleurs, ces capacités qui ont sans doute permis aux machines dans le film de devenir  conscientes. Alors petit conseil destiné aux concepteurs et plus particulièrement aux ingénieurs militaire: si votre intention est de développer des robots meurtriers avec des processeurs de réseaux de neurones, capables d'apprendre, ne leur donnez pas accès à leur propre code source, car il est sûr et certain qu'ils vont s'en emparer ! Tout au moins, supprimez les commentaires et masquez le code. Ces premiers conseils pourraient bien faire partie du premier chapitre du Evil Programming for Dummies « la programmation du mal pour les nuls » ...

Mais je m'écarte du sujet. Je disais que le Terminator possédait tous les composants d'une application de vision machine en temps réel dans la mesure où il était doté d'acquisition d'image stéréoscopique dans les caméras oculaires et imagerie multi-spectrale permettant une perception de la profondeur et une vision à faible visibilité. Les techniques de traitement d'image numérique étaient alors employées dans des réseaux de neurone « unité d’apprentissage » pour extraire les informations requises de l'environnement afin de permettre au robot de prendre des décisions, ce qui était alors proche du fonctionnement des systèmes de conduite autonome d’aujourd’hui.

Évidemment, le robot du film n'avait pas besoin de l'incrustation de réalité augmentée (RA) sur les données d'image (elle était là pour nous, le public), mais elle était presciente d’une autre orientation de la technologie de vison machine, et de comment les lunettes RA seraient utilisées dans un futur proche pour fournir plus de données de contexte sur l'environnement aux personnes obligées de travailler dans le monde réel. Le secteur militaire est le premier utilisateur incontestable de la RA sous forme de visualisation tête haute (VTH) dans les opérations aérospatiales depuis des années, et les bénéfices peuvent être étendus aux forces d'infanterie. Toutefois, un équilibre doit être déterminé lors de l’affichage des informations, pour éviter que le perfectionnement ne devienne une distraction dangereuse.

Au-delà de tout cela et jusqu’à récemment, une telle technologie n’était disponible uniquement si vous disposiez de votre propre laboratoire de recherche. Ce type de ressources était accessible que dans des secteurs précis comme l'inspection industrielle automatisée ou le guidage des robots industriels. Bonne nouvelle, la vision machine abordable est quelque chose que vous pouvez obtenir maintenant sans besoin attendre l'apocalypse nucléaire de "Terminator, le jugement dernier".

Présentation de la caméra Intel RealSense™ ZR300

La caméra ZR300 est un peu comme votre propre laboratoire d'imagerie informatique à portée de main attaché à votre Intel Joule, car elle est pleine de fonctions. Éléments à connecter à l'imagerie ASIC intégrée dans l'unité :

  • Caméra couleur RGB Full HD 1080p
  • Paire de caméras IR VGA gauche et droite (640 x 480) pour imagerie stéréoscopique
  • Projecteur laser IR (pour déterminer la profondeur de champ dans les scènes à faible texture, par exemple, avec de grandes surfaces lisses comme des murs intérieurs)

Également :

  • Caméra Fisheye monochrome VGA (640 x 480)
  • Unité de mesure d'inertie à six degrés de liberté (6DoF)
  • Synchronisation d'horodatage à une horloge de référence 50 µs

À l'intérieur du boîtier ZR300, ces fonctions se présentent comme suit :

ZR300_casing_layout4_fde62594ad27f056125456489314de25317024d2.jpg

 

Tout cela signifie que vous pouvez, avec une seule unité, implémenter des applications pour :

  • Reconnaissance, localisation et suivi d'objets
  • Reconnaissance de personnes, suivi et reconnaissance de gestes
  • Localisation simultanée et cartographie 6DoF SLAM)

En gros, tout ce dont vous avez besoin pour commencer à construire votre système de vision de nuit à la Terminator ; le châssis de combat en hyper-alliage recouvert de tissus vivant n'est pas fourni, vous devez donc vous le procurer vous-même. Par contre, nous ne savons pas où se cache le connecteur USB 3.0 d'un Terminator…

Connexion de la ZR300 à votre Intel Joule

Comme nous l'avons vu plus haut, un kit Intel Joule est facile à connecter. Cela nous donne accès à d'excellents logiciels d'échantillonnage qui utilisent les API de la bibliothèque d'objets RealSense, la bibliothèque de personnes et la bibliothèque SLAM d'Intel pour la ZR300. Celles-ci fournissent un démarrage rapide prodigieux pour tous les projets de robotique devant être conscients de leurs environnements (pour un fonctionnement autonome dans cet environnement) et/ou devant reconnaître les objets ou personnes qu'ils sont susceptibles de rencontrer.

Si vous avez déjà lu ma publication précédente, vous êtes probablement en mesure de configurer votre Intel Joule pour exécuter Ubuntu 16.04 LTS. Cette fois, nous allons construire un mod matériel et un mod BIOS pour commencer nos projets d'imagerie.

Mod matériel

Les applications de traitement d'image qui vont s'exécuter sont des applications de calcul intenses et elles exigeront toutes les capacités de votre processeur Atom sans modifier le dissipateur passif livré avec le kit pour une solution de refroidissement active, par exemple, un dissipateur avec un ventilateur. Une fois ce mécanisme installé, en vous assurant que le débit d'air est dirigé vers le bas dans le dissipateur pour forcer l'air dans les ailettes, vous serez prêt à installer les autres composants, y compris :

  • La ZR300 – connectez-la au connecteur USB A sur la carte de développement Joule à l'aide du cordon USB 3.0 inclus dans le kit ZR300. À l'arrière de la ZR300, un aimant permet de fixer 2 raccords fournis avec le kit de caméra, dont l'un est un bloc pour monter la ZR300 sur un trépied standard. Plusieurs orifices de vis permettent également de fixer un support inclus dans le kit (voir les images ci-dessous).
    Labelled_RZ300_15_4c851d1888a840e946106caa5c6c681cf35d1377.jpg
























    Labelled_RZ300_23_c5126d1c9833064b3676a1794f0de1ae2a84a81c.jpg
























  • Ici, nous allons connecter notre concentrateur USB alimenté (pour le clavier, la souris et tout autre périphérique USB) dans le connecteur USB-C, ce qui signifie que nous aurons besoin d'un adaptateur USB A vers USB C standard, non fourni dans le kit.
  • Pour terminer, vous aurez besoin également du cordon et/ou des adaptateurs corrects pour connecter votre moniteur à un connecteur micro HDMI sur la carte Joule, ainsi que d'une alimentation fournissant au moins 3 A à 12 V.

Mod BIOS

  • Une fois le matériel configuré, il est nécessaire de monter la puissance à 11, ou plutôt à 8 puisque nous configurons la limite de puissance dans le BIOS :

    • À la mise sous tension, avant le début du chargement d'Ubuntu, appuyez sur la touche [F5] pour accéder au gestionnaire de périphériques du BIOS.
    • Suivez l'arborescence du menu : System Setup > CPU Configuration > CPU Power Management.
    • Ensuite, assurez-vous que "Power Limit 1 Enable" est défini sur <Enabled> :

    Screen_Grab_14_225e9494b360d8eab6a3bcca8bfd1ce8e760d257.jpg
























  • Puis descendez de deux lignes et définissez l'option "Power Limit 1 Power" sur le mode de vitesse démesurée ou 8 :
    Screen_Grab_24_ad3bc76f33ccf1555424419f9f715643e5ee03ae.jpg


























  • Enfin, nous enregistrons ces paramètres et nous redémarrons pour ouvrir une nouvelle dimension de divertissement.

Installation du kit de développement logiciel RealSense

Une fois ces mods terminés, nous sommes presque prêts. Nous avons seulement besoin du kit de développement logiciel et de son logiciel d'échantillonnage. 

Heure

Tout d'abord, assurez-vous que votre Joule est configuré sur l'heure correcte pour votre région. Le Joule n'est pas livré avec une batterie d'horloge en temps réel, de sorte que vous devez configurer Ubuntu pour mettre à jour automatiquement l'heure et la date à partir d'Internet pendant l'installation. Pour bien vous assurer que cela est le cas pour votre Joule, cliquez simplement sur l'option de paramètres système, en général la dernière icône par défaut dans la barre de démarrage. Au bas de la fenêtre des paramètres système (sous Système) se trouve l'option d'heure et de date :

Screen_Grab_32_e390a7964c09f286a2ab6cdb597c14ad1cbfdbc5.jpg

 

Cliquez dessus et assurez-vous que le bouton radial de mise à jour automatique à partir d'Internet est défini sur la propriété "Set the time" (Définir l'heure) :

Screen_Grab_4.jpg3_df08f1215500297c18772b3d3c0ad18ac53119b7.png

 

Si vous souhaitez définir l'heure manuellement, vous pouvez le faire dans cette fenêtre ou dans la ligne de commande en suivant le format ci-dessous :

$ sudo date –s “13:20 7/31/2017”

Cette commande indique également à quel jour de la semaine correspondra une date future que vous définissez…

Référentiel

L'étape suivante consiste à ajouter le référentiel RealSense au gestionnaire de paquets Ubuntu :

$ echo 'deb "http://realsense-alm-public.s3.amazonaws.com/apt-repo" xenial main' | sudo tee /etc/apt/sources.list.d/realsense-latest.list

$ sudo apt-key adv --keyserver keys.gnupg.net --recv-key D6FB2970

$ sudo apt update

Installation de l'environnement d'exécution et des échantillons

Pour cela, il suffit d'installer le paquet à partir du référentiel que nous venons d'ajouter :

$ sudo apt install librealsense-samples beignet-opencl-icd

À cette étape, vous pouvez également installer les utilitaires d'accès à la caméra :

$ sudo apt install librealsense-utils

Pour cela, il suffit d'installer le paquet à partir du référentiel que nous venons d'ajouter :

$ cpp-capture

Pour terminer, nous pouvons installer le kit de développement logiciel RealSense pour développer nos applications :

$ sudo apt install librealsense-object-recognition-dev librealsense-persontracking-dev librealsense-slam-dev

... et cloner le logiciel d'échantillonnage à partir de Github pour vérifier le code source et voir comment ces exemples ont été assemblés et les construire nous-même. Commencez par installer Git et les autres éléments prérequis :

$ sudo apt install git cmake libjpeg-dev libopencv-dev

Il est en général déjà installé, mais vous devrez éventuellement ajouter build-essential à la liste d'installation ci-dessus si vous ne parvenez pas à compiler le logiciel d'échantillonnage. Ensuite, nous devons cloner les échantillons à partir de Github. J'ai placé tous ces éléments dans un dossier nommé "Projects" :

$ mkdir Projects

$ cd Projects

$ git clone http://github.com/IntelRealSense/realsense_samples

$ cd realsense_samples

Si vous le souhaitez, vous pouvez ensuite créer les exemples suivants : 

$ mkdir build

$ cd build

$ cmake ..

$ make

Une fois la compilation terminée, nous pouvons connecter notre ZR300 et utiliser la magie de la vision machine.

Logiciel d'échantillonnage

Le jeu complet de logiciels d'échantillonnage a été préconçu à partir du kit de développement RealSense (ces exécutables sont disponibles dans /usr/bin), de manière que vous pouvez les exécuter sans avoir à tout construire vous-même. Le préfixe rs_ a été ajouté à chaque nom d'exemple de ces exécutables : ainsi, l'exécutable précompilé pour l'exemple "slam_tutorial_1_web" est "rs_slam_tutorial_1_web".

Si vous compilez ces exemples vous-même, chaque nouveau exécutable se trouve dans le dossier contenant le code source de cet exemple, sous le dossier "build". Ainsi, dans mon exemple, l'exécutable "slam_tutorial_1_web" se trouve dans : /Projects/realsense_samples/build/samples/slam_tutorial_1_web.

Différents ensembles d'échantillons utilisant la bibliothèque des objets, la bibliothèque de personnes et la bibliothèque SLAM sont disponibles. Chaque ensemble d'échantillons commence par une application de tutoriel de base indiquant comment utiliser les fonctions des bibliothèques. À la suite, d'autres applications de tutoriel s'appuient sur les informations précédentes pour arriver, à la fin des séries d'échantillonnage de chaque bibliothèque du kit de développement logiciel, à une visibilité de la machine impliquée ou un calcul de perception spatiale. Les bibliothèques, ainsi que les exemples de logiciels d'échantillonnage, sont tous écrits en C++.

Examiner tous les exemples sortirait du cadre de ce document, mais nous pouvons jeter un bref regard sur un exemple multimode qui rassemble plusieurs ressources de la ZR300 dans une application basée sur un navigateur Web. Cela vous donnera une idée de ce que vous pouvez réaliser dès le premier jour avec la ZR300 attachée à votre Intel Joule.

slam_or_pt_tutorial_1_web

Cet exemple représente un flux en direct de la caméra couleur et du Fisheye. En même temps, la sortie de page Web dans le navigateur affiche une grille d'occupation SLAM de la zone avec données d'entrée et de suivi IPS (images par seconde) pour la caméra Fisheye, la caméra de profondeur, le gyroscope et l'accéléromètre. Si vous disposez du

code source pour cela dans /realsense_samples/build/samples/slam_or_pt_tutorial_1_web

nous pouvons démarrer l'exécutable préliminaire pour l'exemple à partir de la ligne de commande depuis n'importe quel répertoire, comme suit :

$ rs_slam_or_pt_tutorial_1_web

Cela démarre un serveur Web que vous utiliserez plus tard pour vous connecter manuellement à un navigateur Web :

Screen_Grab_5.jpg3_1d77dcf9f950b9b21c490e130edcd23df843eeb0.png

 

En plaçant la souris sur l'adresse Web en surbrillance (http://172.30.44.97:8000/view.html dans l'image ci-dessus) et en cliquant sur le bouton droit, vous pouvez choisir d'ouvrir le lien dans le menu qui s'affiche pour accéder à cette adresse dans votre navigateur par défaut.

Une fois que le serveur a un client, l'exemple s'emploie à identifier des objets et à les consigner dans le terminal. En même temps, les transmissions en direct passent au navigateur Web, ainsi que les données de cartographie SLAM locales devant la caméra (la grande carte en haut à gauche). Les vitesses de transmission des capteurs apparaissent en haut à droite du navigateur. La ZR300 continue à transmettre des données. Aucune négociation n'est possible. Aucun raisonnement n'est possible. Ni pitié, ni remord, ni peur ne sont ressentis. Et surtout, elle ne s'arrête pas... jamais, jusqu'à ce que vous appuyiez sur la touche [Échap] ou [Ctrl] C dans le terminal.

Screen_Grab_61_ee2df1300c2a724d9b97a04e0259aab25bf625d1.jpg

 

Carte SLAM

Cette carte est générée en déplaçant la caméra. Un "cône" indique le champ de vision de la caméra en temps réel et en 3D, de sorte que lorsque vous déplacez la caméra dans l'espace, le cône se déplace également. La carte se définit là où des obstacles se trouvent devant la caméra (les zones grises, tachées sur la carte) et aux endroits où chaque objet identifié (à partir de la transmission d'images couleur) se trouve dans l'espace. Cela s'effectue en 3 dimensions comme vous pouvez le constater sur la carte dans l'image suivante :

Screen_Grab_72_f730026bbdf816e374c8f45b994940721eb6f63e.jpg

 

Reconnaissance d'objets

En même temps que la carte SLAM est définie, le logiciel associe les éléments qu'il détecte dans la diffusion vidéo couleur à sa bibliothèque d'objets et détermine un pourcentage de confiance d'identification précise (et d'étiquetage) de chaque objet. Simultanément, il détermine des coordonnées relatives de lui-même quant à l'emplacement de l'objet.

Le code source de cet exemple et d'autres est un excellent point de départ pour vos applications de reconnaissance d'objets, de personnes et faciale et/ou d'applications nécessitant que le système acquière une connaissance des zones environnantes.

Conclusion

En termes de la technologie requise pour permettre à un Terminator de retrouver son chemin, le futur est déjà là. Skynet n'aura même pas à se soucier de parler au service des finances : pour les vrais amateurs de visibilité de la machine, l'ensemble Intel Joule et ZR300 est suffisamment bon marché pour permettre aux clubs de créateurs disposant de petits budgets de l'acquérir, sans parler des systèmes informatiques maléfiques de plusieurs milliards de dollars.

Comme si cela ne suffisait pas, d'innombrables exemples sont disponibles pour démarrer Skynet rapidement, ainsi qu'un soutien communautaire au cas où vous vous retrouveriez bloqué sur un problème particulièrement délicat, par exemple l'identification d'un annuaire téléphonique avec la page contenant toutes les entrées "S Connor" déchirée – après tout, qui dispose d'une bibliothèque d'objets d'annuaire téléphonique ? Personne n'en a vu un depuis plusieurs décennies !

Mark completed his Electronic Engineering degree in 1991 and worked in real-time digital signal processing applications engineering for a number of years, before moving into technical marketing.
DesignSpark Electrical Logolinkedin