5.8 KiB
Appelez votre détecteur d'objets depuis votre appareil IoT - Wio Terminal
Une fois votre détecteur d'objets publié, vous pouvez l'utiliser depuis votre appareil IoT.
Copier le projet de classificateur d'images
La majorité de votre détecteur de stock est identique au classificateur d'images que vous avez créé dans une leçon précédente.
Tâche - copier le projet de classificateur d'images
-
Connectez votre ArduCam à votre Wio Terminal, en suivant les étapes de la leçon 2 du projet de fabrication.
Vous pourriez également vouloir fixer la caméra dans une position stable, par exemple, en suspendant le câble sur une boîte ou une boîte de conserve, ou en fixant la caméra à une boîte avec du ruban adhésif double face.
-
Créez un tout nouveau projet Wio Terminal en utilisant PlatformIO. Appelez ce projet
stock-counter
. -
Reproduisez les étapes de la leçon 2 du projet de fabrication pour capturer des images depuis la caméra.
-
Reproduisez les étapes de la leçon 2 du projet de fabrication pour appeler le classificateur d'images. La majorité de ce code sera réutilisée pour détecter des objets.
Modifier le code d'un classificateur à un détecteur d'images
Le code que vous avez utilisé pour classifier des images est très similaire à celui pour détecter des objets. La principale différence réside dans l'URL appelée, que vous avez obtenue depuis Custom Vision, et les résultats de cet appel.
Tâche - modifier le code d'un classificateur à un détecteur d'images
-
Ajoutez la directive d'inclusion suivante en haut du fichier
main.cpp
:#include <vector>
-
Renommez la fonction
classifyImage
endetectStock
, à la fois le nom de la fonction et l'appel dans la fonctionbuttonPressed
. -
Au-dessus de la fonction
detectStock
, déclarez un seuil pour filtrer les détections ayant une faible probabilité :const float threshold = 0.3f;
Contrairement à un classificateur d'images qui ne retourne qu'un seul résultat par étiquette, le détecteur d'objets renverra plusieurs résultats. Il est donc nécessaire de filtrer ceux ayant une faible probabilité.
-
Au-dessus de la fonction
detectStock
, déclarez une fonction pour traiter les prédictions :void processPredictions(std::vector<JsonVariant> &predictions) { for(JsonVariant prediction : predictions) { String tag = prediction["tagName"].as<String>(); float probability = prediction["probability"].as<float>(); char buff[32]; sprintf(buff, "%s:\t%.2f%%", tag.c_str(), probability * 100.0); Serial.println(buff); } }
Cette fonction prend une liste de prédictions et les affiche dans le moniteur série.
-
Dans la fonction
detectStock
, remplacez le contenu de la bouclefor
qui parcourt les prédictions par ce qui suit :std::vector<JsonVariant> passed_predictions; for(JsonVariant prediction : predictions) { float probability = prediction["probability"].as<float>(); if (probability > threshold) { passed_predictions.push_back(prediction); } } processPredictions(passed_predictions);
Cette boucle parcourt les prédictions, compare la probabilité au seuil, et ajoute toutes les prédictions ayant une probabilité supérieure au seuil à une
list
, qui est ensuite transmise à la fonctionprocessPredictions
. -
Téléversez et exécutez votre code. Pointez la caméra vers des objets sur une étagère et appuyez sur le bouton C. Vous verrez la sortie dans le moniteur série :
Connecting to WiFi.. Connected! Image captured Image read to buffer with length 17416 tomato paste: 35.84% tomato paste: 35.87% tomato paste: 34.11% tomato paste: 35.16%
💁 Vous devrez peut-être ajuster le
threshold
à une valeur appropriée pour vos images.Vous pourrez voir l'image capturée, ainsi que ces valeurs dans l'onglet Predictions de Custom Vision.
💁 Vous pouvez trouver ce code dans le dossier code-detect/wio-terminal.
😀 Votre programme de compteur de stock est un succès !
Avertissement :
Ce document a été traduit à l'aide du service de traduction automatique Co-op Translator. Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.