Quand Espressif a sorti l'ESP32, il a fait un carton. Il bénéficie d'un riche environnement constitué de cartes de développement, documentation, d'outils logiciels de développement gratuits (au nombre desquels on trouve l'EDI Arduino) et des bibliothèques. À quoi s'ajoutent sa puissance de calcul et ses aptitudes à communiquer sans fil, tout ça à un coût dérisoire.
Par la suite, Espressif s'est orienté vers l'intelligence artificielle (IA) à partir de sa plateforme ESP32, dans ce qu'ils appellent AIoT. La nouvelle carte ESP-EYE est la carte de développement d'Espressif pour la reconnaissance d'images et le traitement audio dans les applications AIoT.

Qu'y a-t-il sur la carte ESP-EYE ?

ESP-EYE est une assez petite carte (40 × 20 mm), mais cela ne préjuge en rien de sa puissance. Outre l'ESP32-D0WD et une antenne 3D, on y trouve 4 Mo de mémoire flash, 8 Mo de mémoire PSRAM (RAM pseudo-statique), une caméra de 2 mégapixels, un microphone, une interface USB-UART basée sur CP2102, deux LED (rouge et blanc) et trois boutons poussoirs (Reset, Boot & Function). Il n'est pas monté, mais il y a la place pour un connecteur d'antenne IPEX. Il y a même un trou pour la fixer et quelques régulateurs de tension.

Et les connecteurs d'extension ?

Ce qui manque, ce sont les connecteurs d'extension. Les quatre pastilles (de type point de test) connectées à IO12 (DOUT), IO2 (DIN), IO0 (CLK) et IO19 (CS) appartiennent à l'interface SPI. La communication avec la carte passe soit par l'USB soit par le WiFi. C'est aussi par le port USB que l'on programme l'ESP-EYE.

Lancer un terminal de communication sérielle

Depuis le terminal, vous pouvez suivre le déroulement du démarrage de la carte. Une fois qu'elle semble prête, attendez encore un peu pour laisser à l'application principale le temps de démarrer – elle sera prête lorsque la LED rouge s'allumera. La carte émet alors un certain nombre de messages qui se terminent par celui-ci :
esp-eye: Please say 'Hi LeXin' to the board

Dites 'Hi LeXin'

Ça a l'air facile, n'est-ce pas, mais comment prononce-t-on ce nom en chinois ? J'ai essayé plusieurs fois sans succès, et j’allais abandonner quand tout d‘un coup j'ai fini par bramer une formule magique que la puce a comprise, quelque chose comme "hilaiksin" (avec le premier 'i' prononcé comme 'aïe' en français (ou 'eye' en anglais), et le 'ai' comme dans 'pays' en français ou dans 'face' en anglais). Pourquoi diable n'ont-ils pas utilisé quelque chose que tout le monde sait dire ? ('hi obi-wan'). Après ça, le démarrage du module se poursuit et la LED rouge clignote à une fréquence de 0,5 Hz.
 

Qu'est-ce qu'on fait maintenant ?

À ce stade, si vous ne lisez pas le chinois, vous allez pousser des jurons dans votre langue préférée. Moi je n’ai pas trouvé la moindre info sur la façon de démarrer dans le guide en anglais ESP-EYE getting started téléchargé sur GitHub. En revanche, la version chinoise est beaucoup plus longue que l'anglaise et contient apparemment des instructions d'installation. Les moteurs de traduction gratuits en ligne m'ont permis de comprendre qu'il était possible à ce stade de se connecter à la carte au point d'accès (AP) 'esp-eye-xxx' (où 'xxx' est un nombre).
 
http://192.168.4.1/face_stream

Essayez cette commande, vous verrez apparaître une vidéo en diffusion directe sur fond noir. La LED blanche s'allume. Une connexion naïve à l'IP standard de l'ESP AP URI 192.168.4.1 se soldera par un déni péremptoire : “This URI doesn't exist”. (D'ailleurs, une fois arrivé là, il ne paraît pas possible d'accéder à la page face_stream sans initialisation de la carte.) Et  maintenant on va s'amuser.
 
ESP-EYE recognizing faces
 « Quoi, ma gueule? Qu'est-ce qu'elle a ma gueule ? »

Demander à ESP-EYE de mettre votre visage en mémoire

Si vous pointez la caméra vers vous, votre visage apparaîtra encadré de jaune. (Pas trop vite, la cadence des images n'est que de l'ordre de deux par seconde). Appuyez sur le bouton Function, le micro-poussoir sur le côté de la carte, à côté du connecteur de la caméra, et le module enregistrera (ou enrôlera) votre visage. Quand ça marche, le message  “Hello ID 0” apparaît en vert (à supposer que ce soit la première fois que vous le fassiez). Plusieurs visages peuvent être enregistrés ainsi. Si la caméra ne reconnaît pas le visage, l'afficheur demande “WHO?” (« qui » en anglais). Une fois enrôlés, un visage est sauvegardé en mémoire morte, de telle sorte qu'après une coupure de tension ou un redémarrage l'information puisse être utilisée aussitôt.

Mettons en place l'environnement de développement

Le moment est venu de programmer vos propres applications de l'ESP-EYE. Pour cela il vous faut la chaîne d'outils ESP IDF et le paquetage ESP-WHO. Les outils, je les avais déjà, mais sans arriver à compiler (sous Windows 10), même après avoir tout réinstallationné. J'ai heureusement trouvé une solution ici (pour Linux et Mac, ça a l'air plus simple) :

Téléchargez & éxécutez https://dl.espressif.com/dl/esp-idf-tools-setup-1.2.exe

Lancer une interface à ligne de commande (CLI) et créez un dossier quelque part pour le dépôt ESP-WHO Git (vous ferez ça avec des commandes comme ‘mkdir’ et ‘cd’). Entrez dans ce dossier avec ‘cd’ puis lancez ceci : 
 
git clone --recursive https://github.com/espressif/esp-who.git

Si vous n'avez pas Git, commencez par le télécharger puis installez-le (avec les options par défaut).

Une fois le dépôt téléchargé (ça peut prendre du temps selon le débit de votre  connexion) essayez de compiler un exemple comme celui-ci :
 
cd esp-who/examples/single_chip/detection_with_command_line
idf.py build

N'oubliez pas de définir PATH

Pour que ça marche, le chemin doit être défini comme il faut. Ajoutez à Windows une variable d'environnement ‘IDF_PATH’ qui pointe vers ‘<full path>/esp-who/esp-idf’. Vous trouverez sur l'internet comment vous y prendre (astuce : ‘Settings’ -> ‘System info’ -> ‘Advanced system settings’ -> ‘Environment Variables…’ -> ‘New…’; puis je recommande chaudement d'avoir recours aux boutons ‘Browse directory…’ ). N'oubliez pas d'ajouter  ‘%IDF_PATH%\tools’ à votre chemin.

La compilation ne devrait pas poser de problème. Si ça a marché, vous pouvez reprogrammer la carte ESP-EYE avec la commande suivante (non sans avoir remplacé ‘COM42’ par votre port) :
 
idf.py -p COM42 flash

Mon bilan

La carte ESP-EYE est une voie d'accès bon marché et praticable facilement pour découvrir le monde de la reconnaissance faciale et de l'intelligence artificielle. Au moment d'écrire ces lignes, sa documentation ne m'a pas paru son point fort en raison de nombreuses imprécisions et zones d'ombre. Une fois qu'on s'est frayé un chemin, la mise au point d'applications personnalisées pour cette carte finit par paraître assez facile.