Table des matières:

Caméra AI pour Raspberry Pi/Arduino : 7 étapes
Caméra AI pour Raspberry Pi/Arduino : 7 étapes

Vidéo: Caméra AI pour Raspberry Pi/Arduino : 7 étapes

Vidéo: Caméra AI pour Raspberry Pi/Arduino : 7 étapes
Vidéo: HOW TO USE the Raspberry Pi camera module 2024, Juin
Anonim
Image
Image

Si vous avez suivi l'actualité récemment, il y a eu une explosion de start-ups développant des puces pour accélérer l'inférence et la formation d'algorithmes ML (machine learning). Cependant, la plupart de ces puces sont encore en cours de développement et ce n'est pas vraiment quelque chose que votre fabricant moyen peut obtenir. La seule exception significative à ce jour était Intel Movidius Neural Compute Stick, qui est disponible à l'achat et est livré avec un bon SDK. Il présente quelques inconvénients importants, à savoir le prix (environ 100 USD) et le fait qu'il soit au format clé USB. C'est génial si vous voulez l'utiliser avec un ordinateur portable ou un Raspberry PI, mais que faire si vous voulez faire des projets de reconnaissance d'images avec Arduino ? Ou Raspberry Pi Zero ?

Étape 1: Sipeed MAix: l'IA à la périphérie

Sipeed MAix: l'IA à la périphérie
Sipeed MAix: l'IA à la périphérie

Il n'y a pas si longtemps, j'ai mis la main sur la carte de développement Sipeed M1w K210, dotée d'un processeur RISC-V 64 bits à double cœur et d'un KPU (processeur de réseau neuronal) intégré, spécialement conçu pour accélérer CNN pour le traitement d'images. Vous pouvez lire plus de détails ici.

Le prix de cette carte m'a franchement choqué, il n'est que de 19 USD pour une carte de développement AI-on-the-edge à part entière avec prise en charge Wi-Fi ! Il y a cependant une mise en garde (bien sûr qu'il y en a): le micrologiciel micropython de la carte est toujours en développement et, dans l'ensemble, il n'est pas trop convivial pour le moment. La seule façon d'accéder à toutes ses fonctions pour le moment est d'écrire votre propre code C intégré ou de modifier certaines démos existantes.

Ce tutoriel explique comment utiliser le modèle de détection de classe Mobilenet 20 pour détecter les objets et envoyer le code d'objet détecté via UART, d'où il peut être reçu par Arduino/Raspberry Pi.

Maintenant, ce didacticiel suppose que vous connaissez Linux et les bases de la compilation de code C. Si entendre cette phrase vous a un peu étourdi:) alors passez simplement à l'étape 4, où vous téléchargez mon binaire pré-construit sur Sipeed M1 et sautez la compilation.

Étape 2: Préparez votre environnement

Préparez votre environnement
Préparez votre environnement

J'ai utilisé Ubuntu 16.04 pour la compilation et le téléchargement de code C. Il est possible de le faire sous Windows, mais je ne l'ai pas essayé moi-même.

Téléchargez la chaîne d'outils du compilateur RISC-V GNU, installez toutes les dépendances nécessaires.

git clone --recursive

sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev

Copiez la chaîne d'outils téléchargée dans le répertoire /opt. Après cela, exécutez les commandes suivantes

./configure --prefix=/opt/kendryte-toolchain --with-cmodel=medany

Fabriquer

Ajoutez /opt/kendryte-toolchain/bin à votre PATH maintenant.

Vous êtes maintenant prêt à compiler le code !

Étape 3: Compiler le code

Compiler le code
Compiler le code

Téléchargez le code depuis mon dépôt github.

Télécharger le SDK autonome Kendryte K210

Copiez le dossier /kpu de mon référentiel github dans le dossier /src du SDK.

Exécutez les commandes suivantes dans le dossier SDK (pas dans le dossier /src !)

construction de mkdir && construction de cd

cmake.. -DPROJ=nom_projet -DTOOLCHAIN=/opt/kendryte-toolchain/bin && make

où project_name est le nom de votre projet (à vous de choisir) et -DTOOLCHAIN= doit pointer vers l'emplacement de votre chaîne d'outils risc-v (vous l'avez téléchargé à la première étape, vous vous souvenez ?)

Super! Maintenant, j'espère que vous verrez la compilation terminée sans erreur et que vous avez un fichier.bin que vous pouvez télécharger.

Étape 4: Téléchargement du fichier.bin

Téléchargement du fichier.bin
Téléchargement du fichier.bin

Connectez maintenant votre Sipeed M1 à l'ordinateur et à partir du dossier /build exécutez la commande suivante

sudo python3 isp_auto.py -d /dev/ttyUSB0 -b 200000 kpu.bin

Où kpu.bin est le nom de votre fichier.bin

Le téléchargement prend généralement 2-3 minutes, une fois terminé, vous verrez le tableau exécuter la détection de 20 classes. La dernière étape pour nous est de le connecter à Arduino mega ou Raspberry Pi.

!!! Si vous venez de l'étape 2 !

Exécutez la commande suivante à partir du dossier où vous avez cloné mon référentiel github

sudo python3 isp_auto.py -d /dev/ttyUSB0 -b 200000 kpu_bin.bin

Le téléchargement prend généralement 2-3 minutes, une fois terminé, vous verrez le tableau exécuter la détection de 20 classes. La dernière étape pour nous est de le connecter à Arduino mega ou Raspberry Pi.

Étape 5: connexion à Arduino

Connexion à Arduino
Connexion à Arduino
Connexion à Arduino
Connexion à Arduino
Connexion à Arduino
Connexion à Arduino

J'ai utilisé l'Arduino Mega avec Seeed Studio Mega Shield, c'est pourquoi j'ai soudé un connecteur Grove à la carte Sipeed M1. Cependant, vous pouvez simplement utiliser des cavaliers et connecter Sipeed M1 directement à Arduino Mega, en suivant ce schéma de câblage.

Après cela, téléchargez le croquis camera.ino et ouvrez le moniteur série. Lorsque vous pointez la caméra sur différents objets (la liste des 20 classes est dans le croquis), le nom de la classe doit être affiché sur le moniteur série !

Toutes nos félicitations! Vous avez maintenant un module de détection d'image fonctionnel pour votre Arduino !

Étape 6: connexion au Raspberry Pi

Connexion au Raspberry Pi
Connexion au Raspberry Pi
Connexion au Raspberry Pi
Connexion au Raspberry Pi

J'ai utilisé le chapeau Grove Pi+ pour Raspberry Pi 2B, mais encore une fois, comme avec Arduino, vous pouvez simplement connecter directement Sipeed M1 à l'interface UART de Raspberry Pi en suivant ce schéma de câblage.

Après cela, lancez camera_speak.py et pointez la caméra vers différents objets, le terminal affichera le texte suivant "Je pense que c'est" et aussi si vous avez des haut-parleurs connectés, il prononcera cette phrase à haute voix. Plutôt cool, n'est-ce pas ?

Étape 7: Conclusion

Nous vivons une époque très excitante, avec l'IA et l'apprentissage automatique pénétrant tous les domaines de notre vie. J'attends avec impatience le développement dans ce domaine. Je reste en contact avec l'équipe Sipeed, et je sais qu'ils développent activement un wrapper micropython pour toutes les fonctions nécessaires, y compris l'accélération CNN.

Quand il sera prêt, je publierai très probablement plus d'instructions sur la façon d'utiliser vos propres modèles CNN avec micropython. Pensez à toutes les applications passionnantes que vous pouvez avoir pour une carte qui peut exécuter vos propres réseaux de neurones de traitement d'image pour ce prix et avec cette empreinte !

Conseillé: