Dans Commencer avec le Kit de Démarrage Vision AI Kria KV260, nous avons déballé et exploré le Kit de Démarrage Vision AI Kria KV260 de AMD Xilinx. Cette carte nous fournit un FPGA et un processeur ARM suffisamment puissants pour exécuter une distribution complète d'Ubuntu. Dans cet article, nous allons construire et exécuter l'application SmartCam en utilisant une caméra Raspberry Pi. Cette application sera capable de détecter des visages en temps réel et de le démontrer sur l'écran de votre ordinateur.
Ce tutoriel fait suite au tutoriel original réalisé par l'équipe de AMD Xilinx. Vous remarquerez qu'une grande partie de ce tutoriel est très similaire (sinon identique) au leur. Ma première réaction à ce tutoriel a été de me sentir dépassé. J'ai une expérience assez correcte dans la conception de FPGA, mais suivre leurs tutoriels, étape par étape, peut parfois être difficile et un peu intimidant. Je cherchais quelque chose d'un peu plus simple et facile à suivre. Après avoir examiné d'autres tutoriels réécrits par d'autres personnes, je n'étais pas vraiment satisfait de ce que j'ai trouvé ; d'où ma décision d'écrire le mien.
Si vous recherchez tous les détails croustillants, je vous recommande vivement de consulter le tutoriel original. Certaines étapes ne sont pas super claires, mais je tente de les franchir (ou même de les contourner) dans ce tutoriel. Plus important encore, au moment de la rédaction de cet article, l'application SmartCam de démonstration ne semblait pas fonctionner avec le dernier firmware. Dans mon répertoire forké, j'ai créé des scripts automatisés (et même les fichiers flash finaux nécessaires) pour que votre démo soit opérationnelle sans aucun problème. Avec ce tutoriel en main, j'espère que vous serez capable de vous lancer dans l'IA sur des cibles matérielles aussi rapidement que possible et de vivre ce moment "woah" que j'ai eu après avoir réussi à lancer la démo.
Bien sûr, vous aurez besoin du Kria KV260 Vision Starter Kit de chez AMD Xilinx. Vous devrez configurer votre carte, ce qui peut être fait en suivant mon tutoriel précédent, Getting Started with the Kria KV260 Vision AI Starter Kit. Vous aurez également besoin d'une Raspberry Pi Camera Module V2. La partie V2 est extrêmement importante. J'ai tenté sans succès de faire fonctionner la démo avec la version moins chère V1 de la caméra et d'autres caméras contrefaites (et je peux attester qu'elles ne fonctionnent pas avec cette démo). Vous devrez brancher le câble ruban de la caméra sur le port J9 de la carte. Enfin, vous aurez besoin d'un moniteur (ou téléviseur) compatible HDMI pour connecter votre kit KV260 (et un câble HDMI, bien sûr).
Avant de commencer la démo, vous devez avoir à la fois Docker et l'exemple SmartCam installés sur votre appareil Kria KV260 (même si nous n'utiliserons pas l'application SmartCam). Vous aurez également besoin de Xilinx Vitis (l'installation complète) version 2022.1. Notez que le numéro de version de Xilinx Vitis est très important car ce tutoriel est spécifiquement construit pour cette version.
Vous pouvez installer Docker en utilisant la méthode du Script de Commodité. Pour ce faire, ouvrez un terminal et exécutez les lignes suivantes :
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh ./get-docker.sh --dry-run sudo usermod -aG docker $USER
Pour installer le paquet d'application SmartCam, exécutez la commande suivante dans le terminal :
sudo apt install -y xlnx-firmware-kv260-smartcam
Vous aurez également besoin de cloner ma version du dépôt original :
git clone --recursive --branch rpi-camera-demo-clean https://github.com/amahpour/kria-vitis-platforms.git
Pour rendre les choses aussi simples que possible, j'ai écrit un script automatisé qui exécute le processus de construction automatiquement. Vous n'aurez pas besoin de suivre les captures d'écran du tutoriel original pour mettre à jour les conceptions de blocs ou modifier du code. Ce tutoriel tente d'exécuter la construction sans avoir à entrer dans l'interface utilisateur de Vitis. Pour exécuter le script de construction, placez-vous dans votre dépôt cloné et exécutez les commandes suivantes :
cd kv260 ./build_demo.sh
Notez que ce script a été écrit en pensant à Linux. Si vous utilisez Windows, je vous recommande vivement de configurer WSL 2 avec Ubuntu et d'y installer Xilinx Vitis (plutôt que sur Windows).
Si vous recevez une erreur indiquant que Vivado ne peut pas être trouvé, vous avez probablement oublié de charger les paramètres Xilinx. Exécutez simplement cette commande :
source /tools/Xilinx/Vivado/2022.1/settings64.sh
Exécuter le script build_demo.sh contournera complètement tout le tutoriel car j'ai inclus la conception de bloc mise à jour, le fichier de contrainte de broche et les configurations de projet dans le dossier kv260/extras/ du dépôt. Si vous souhaitez parcourir le tutoriel étape par étape, je vous recommande vivement de jeter un œil à l'original.
Si tout s'est déroulé correctement, vous devriez obtenir un fichier bitstream situé dans
kv260/overlays/examples/smartcam/binary_container_1/link/int/kv260-raspi-dpu.bit.bin.
Le processus de construction peut prendre entre 1 et 2 heures. Tout le monde n'a pas le temps pour cela, donc j'ai inclus le fichier bitstream dans le dossier kv260/extras/ en tant que sauvegarde.
À ce stade, nous sommes prêts à copier nos fichiers sur la carte KV260 et à lancer la démo. Vous pouvez transférer les fichiers via une clé USB ou via la commande SCP (copie sécurisée). Vous aurez besoin de transférer les fichiers suivants :
kv260/extras/kv260-raspi-dpu.bit.bin (ou celui généré mentionné ci-dessus)
kv260/extras/kv260-raspi-dpu.dtbo
kv260/extras/kv260-raspi-dpu.xclbin
Une fois de retour sur votre appareil KV260, nous devons déplacer ces fichiers dans la section bibliothèque où le firmware est généralement chargé :
sudo mkdir /lib/firmware/xilinx/kv260-raspi-dpu sudo mv kv260-raspi-dpu.bit.bin /lib/firmware/xilinx/kv260-raspi-dpu/ sudo mv kv260-raspi-dpu.dtbo /lib/firmware/xilinx/kv260-raspi-dpu/ sudo mv kv260-raspi-dpu.xclbin /lib/firmware/xilinx/kv260-raspi-dpu/kv260-raspi-dpu.xclbin sudo cp /lib/firmware/xilinx/kv260-smartcam/shell.json /lib/firmware/xilinx/kv260-raspi-dpu/
Nous sommes maintenant prêts à lancer l'application. Notez que cela éteindra votre moniteur, vous devriez donc exécuter cela via SSH ou via l'interface série USB (c'est-à-dire, port USB et en utilisant PuTTY ou TeraTerm):
sudo xmutil listapps sudo xmutil unloadapp sudo xmutil loadapp kv260-raspi-dpu sudo xmutil desktop_disable docker run \ --env="DISPLAY" \ -h "xlnx-docker" \ --env="XDG_SESSION_TYPE" \ --net=host \ --privileged \ --volume="$HOME/.Xauthority:/root/.Xauthority:rw" \ -v /tmp:/tmp \ -v /dev:/dev \ -v /sys:/sys \ -v /etc/vart.conf:/etc/vart.conf \ -v /lib/firmware/xilinx:/lib/firmware/xilinx \ -v /run:/run \ -it xilinx/smartcam:latest bash
Dans le conteneur Docker, nous devrons apporter une légère modification à un fichier. Cela nous obligera d'abord à installer vim :
apt-get update -y && apt-get install -y vim vim /opt/xilinx/kv260-smartcam/share/vvas/facedetect/preprocess.json
Une fois dans vim, appuyez sur "i" (pour "insertion") pour commencer à éditer le fichier. Cherchez la ligne qui pointe vers un fichier "xclbin" et mettez-la à jour avec ce chemin :
/lib/firmware/xilinx/kv260-raspi-dpu/kv260-raspi-dpu.xclbin
Appuyez sur la touche échappe. Tapez ":wq" (pour sauvegarder et quitter), puis appuyez sur entrée. Après cela, nous pouvons exécuter l'application avec la commande suivante (très longue) :
gst-launch-1.0 mediasrcbin name=videosrc media-device=/dev/media0 v4l2src0::io-mode=mmap v4l2src0::alignement-de-trame=256 ! video/x-raw, largeur=1920, hauteur=1080, format=NV12, fréquence d'images=30/1 ! tee name=t ! queue ! vvas_xmultisrc kconfig="/opt/xilinx/kv260-smartcam/share/vvas/facedetect/preprocess.json" ! queue ! vvas_xfilter kernels-config="/opt/xilinx/kv260-smartcam/share/vvas/facedetect/aiinference.json" ! ima.sink_master vvas_xmetaaffixer name=ima ima.src_master ! fakesink t. ! queue taille-max-tampons=1 fuite=2 ! ima.sink_slave_0 ima.src_slave_0 ! queue ! vvas_xfilter kernels-config="/opt/xilinx/kv260-smartcam/share/vvas/facedetect/drawresult.json" ! queue ! kmssink nom-du-pilote=xlnx id-du-plan=39 synchronisation=false superposition-plein-écran=true
Si tout a fonctionné correctement, votre moniteur (ou TV) devrait se rallumer avec le flux de votre caméra Raspberry Pi. Il placera un cadre bleu autour de tous les visages qu'il détecte dans le flux vidéo en temps réel.
Dans cet article, nous avons passé en revue le tutoriel SmartCam avec la caméra Raspberry Pi et observé les raccourcis nécessaires pour "juste le faire fonctionner." À ce stade, vous devriez maintenant avoir votre propre SmartCam opérationnelle sur le Kria KV260, détectant les visages en temps réel. Mon objectif était de simplifier le processus afin que vous puissiez vous concentrer davantage sur le plaisir de voir l'IA en action plutôt que de vous débattre avec le tutoriel original. J'espère que ce guide a rendu les choses plus claires et plus rapides pour vous afin d'obtenir ce moment "ça marche". Maintenant, c'est à votre tour de faire preuve de créativité et d'explorer ce que vous pouvez faire d'autre avec ce kit de démarrage puissant.
Note : Tout le code pour ce projet peut être trouvé dans ce dépôt.