HuskyLens : pilote MicroPython pour la caméra de Vision propulsée par intelligence artificielle

Bonjour à tous,

Cela faisait un moment que nous n'avions rien publié.
Alors pour bien débuter la nouvelle année, je vous propose de nous pencher sur un nouveau pilote MicroPython pour HuskyLens.

A propos de HuskyLens

HuskyLens et MicroPython

HuskyLens est un module de Vision HuskyLens propulsé par une intelligence artificielle (IA / AI) grâce au processeur Kendrite.

Grâce à ce processeur, HuskyLens propose 7 algorithmes pré-programmés:

  • Reconnaissance faciale (Face Recognition), 
  • Suivit d'objet (Object Tracking), 
  • Identification d'objet (Object Recognition), 
  • Suivit de parcours (Line Tracking), 
  • identification de couleurs (Color Recognition), 
  • Capture de Tag (Tag Recognition, il y en a plus de 500)
  • Classification
La camera 2.0 MegaPixel (OV2640) et l'écran 320*240 pixels permet de voir directement le résultat des apprentissages et des traitement du HuskyLens.

Les deux images ci-dessous, capturées depuis HuskyLens montre l'utilisation en suivi d'objet et suivi de parcours.

suivit de parcours (line tracking)

L'image ci-dessous indique clairement que l'objet a été reconnu (puisqu'il est entouré) et porte également un numéro d'indice.

Suivit d'objet (Object Tracking)

Ce qui serait intéressant, c'est de pouvoir récupérer ces données sur notre un microcontrôleur MicroPython.

Raccordement sur Pico

HuskyLens dispose d'un port de communication permettant d'établir une liaison UART ou I2C.

HuskyLens branché sur Pico via I2C
Source: Pilote HuskyLens pour MicroPython

Il faut bien entendu configurer HuskyLens (via son menu utilisateur) pour communiquer en I2C.

Bibliothèque husky.py

MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible. 

SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Notre dépôt GitHub inclus maintenant une bibliothèque, des exemples et de la documentation pour HuskyLens.

Un fois la bibliothèque installée, il est possible d'interroger le HuskyLens pour obtenir les éléments qu'il a identifié et leur position.

Voici le contenu du script simple.py réalisant justement cette tâche.

from husky import *
from machine import I2C
import time

# === Configuration ===============
# Raspberry-Pi Pico: SDA=green(T)=gp8, SCL=blue(R)=gp9
#
# 1. Vérifier le [Protocol Type] dans le HUSKYLENS via le menu
#   (General Settings >> Protocol Type >> I2C)
# 2. Vérifier le câblage en cas de problème de communication
#
i2c = I2C( 0, freq=100000 )
hl = HuskyLens( i2c=i2c )

# === Boucle principale ===========
while True:
	lst = hl.get_all() # Requête de tous les blocs et flèches

	# Rien réceptionné ?
	if not(lst):
		print( "Pas d objet receptionné depuis Huskylens!" )
		continue

	# Afficher les données réceptionnées ?
	print( "-----------------------------------" )
	for item in lst:
		# Les objets dans la liste résultante (lst) sont typés
		if type(item) is Box:
			print( "Element est un BOX. Center est %i,%i. Largeur=%i. Hauteur=%i" % ( item.center.x, item.center.y, item.width, item.height)  )
		elif type( item ) is Arrow:
			print( "Element est un Arrow. Origin est %i,%i, destubatuib est %i,%i" % ( item.origin.x, item.origin.y, item.target.x, item.target.y) )
		else:
			print( 'Element est %r' % (idx,item) ) # %r: affiche la représentation de l'objet

	# Ne pas noyer l'écran d'information
	time.sleep( 0.7 )

Alors le code est relativement simple: il interroge HuskyLens, réceptionne une liste des objets identifiés (des boîtes/Box ou des flèches/Arrow).
Il ne reste plus qu'a afficher les paramètres des Box et des Arrow.

Voici le résultat pour le suivit de parcours que l'on peut mettre en relation avec les axes et unités du HuskyLens.

Axes du HuskyLens
suivit de parcours (line tracking)
item 0 is an Arrow. Origin is 240,196, Target is 152,0
-----------------------------------
item 0 is an Arrow. Origin is 224,238, Target is 144,0
-----------------------------------
item 0 is an Arrow. Origin is 224,238, Target is 144,0
-----------------------------------
item 0 is an Arrow. Origin is 224,238, Target is 144,0
-----------------------------------
item 0 is an Arrow. Origin is 216,238, Target is 136,0
-----------------------------------
item 0 is an Arrow. Origin is 216,238, Target is 136,0

Voici ce que cela donne dans le cas du suivit d'objet.

Suivit d'objet (Object Tracking)

-----------------------------------
item 0 is a BOX. Center is 144,112. Width=134. Height=135
-----------------------------------
item 0 is a BOX. Center is 146,127. Width=131. Height=132
-----------------------------------
item 0 is a BOX. Center is 132,129. Width=132. Height=133
-----------------------------------
item 0 is a BOX. Center is 129,132. Width=131. Height=132
-----------------------------------
item 0 is a BOX. Center is 129,130. Width=133. Height=134
-----------------------------------
item 0 is a BOX. Center is 126,129. Width=135. Height=136

Encore plus

Notre dépôt GitHub contient de nombreuses autres informations et exemples n'hésitez pas à aller y jeter un oeil.

Liste d'achat

 

Aucun commentaire