5.34. Récapitulatif¶
Le module image est la plus grande API exposée par la caméra, et ce chapitre vient d’en couvrir les grandes lignes : comment une image est représentée en mémoire, comment la caméra lit et écrit des pixels individuels, comment elle dessine dans les trames capturées, comment elle les transforme de façon arithmétique et géométrique, comment elle les classe par seuil et les filtre, comment elle en extrait des mesures et des détections, comment elle en décode des symboles imprimés, comment elle compare une image à une autre, et comment elle fait entrer et sortir les résultats de la caméra.
La boîte à outils est large à dessein. Un pipeline de vision par ordinateur classique exécuté sur une petite caméra embarquée effectue l’essentiel de son travail avant que quoi que ce soit n’atteigne un modèle d’apprentissage automatique, lorsqu’il y en a un – le seuillage nettoie l’entrée, les filtres débruitent, les régions restreignent la recherche, les détecteurs de blobs et de lignes localisent les candidats, le calcul de similarité décide si le candidat est intéressant, et la couche d’E/S transmet le résultat à ce qui exécute l’étape suivante. Chaque page de ce chapitre a couvert l’une de ces opérations ; le bon pipeline pour une application donnée est une séquence de ces opérations composées dans l’ordre que le problème exige.
5.34.1. Le motif du pipeline¶
La plupart des applications non triviales de la caméra suivent les mêmes grandes lignes. Capturer une trame depuis le capteur. La prétraiter : convertir les formats, égaliser l’histogramme, atténuer le bruit par flou. Localiser les régions ou caractéristiques d’intérêt : détection de blobs, détection de lignes, correspondance de modèle, décodage de codes. Analyser ce qui a été trouvé : mesures géométriques, calcul de similarité, statistiques. Décider quoi faire en fonction de l’analyse : déclencher un GPIO, signaler une charge utile, capturer-et-journaliser, transmettre la trame à un modèle d’apprentissage automatique. Produire en sortie la décision ou l’artefact capturé : enregistrer, encoder, envoyer, redessiner dans la trame pour l’aperçu de l’IDE.
Aucune page de chapitre n’a couvert chaque étape ; le chapitre a couvert les briques de base que compose le pipeline. Choisir quelles briques utiliser et dans quel ordre est le travail du script de l’application.
5.34.2. Où mène le chapitre¶
Le module image traite les images en tant qu’images – pixels, régions, dessin, détections. De nombreux travaux sur les données capturées ne rentrent pas dans ce cadre. Calculer des statistiques sur un tableau numérique arbitraire, exécuter de l’arithmétique vectorisée sur des données capteur brutes, appliquer une transformation matricielle personnalisée pour laquelle il n’existe pas de méthode du module image, préparer des données pour un modèle d’apprentissage automatique qui réclame une disposition de tenseur spécifique – tous ces travaux relèvent d’une bibliothèque de tableaux numériques, et non d’une bibliothèque de traitement d’images.
Le chapitre suivant couvre exactement cela. Le module ulab.numpy fourni avec MicroPython sur la caméra est un sous-ensemble de NumPy, et deux ponts le relient au module image : to_ndarray() copie les pixels d’une trame dans un ndarray pour le travail numérique, et le constructeur Image accepte un ndarray pour construire une nouvelle image à partir du résultat, prête à être affichée, enregistrée ou réinjectée dans la bibliothèque image. Les deux modules se composent – chacun fait ce que l’autre ne fait pas, et ensemble ils couvrent le travail numérique et d’imagerie dont une application de vision embarquée a besoin.