Reconnaissance simultanée de la couleur et de la forme
Tutoriel vidéo 18 - Combinaison d'algorithmes : https://singtown.com/learn/50029/
Cette section explique comment effectuer simultanément la reconnaissance de couleur et la reconnaissance de forme. Prenons comme exemple la reconnaissance d'un cercle rouge. Nous effectuons d'abord la reconnaissance de cercles, puis des statistiques de couleur dans la zone circulaire détectée pour déterminer si la couleur la plus fréquente dans la zone est le rouge.
import csi, image, time
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QQVGA)
csi0.snapshot(time = 2000)
csi0.auto_gain(False) # doit être désactivé pour le suivi de couleur
csi0.auto_whitebal(False) # doit être désactivé pour le suivi de couleur
clock = time.clock()
while(True):
clock.tick()
img = csi0.snapshot().lens_corr(1.8)
for c in img.find_circles(threshold = 3500, x_margin = 10, y_margin = 10, r_margin = 10,
r_min = 2, r_max = 100, r_step = 2):
area = (c.x-c.r, c.y-c.r, 2*c.r, 2*c.r)
# area est la zone du cercle détecté, c'est-à-dire son rectangle englobant
statistics = img.get_statistics(roi=area)# statistiques de couleur des pixels
print(statistics)
# (0,100,0,120,0,120) est le seuil de couleur rouge, donc lorsque le mode (c'est-à-dire la couleur la plus fréquente) de la zone se situe dans ce seuil, cela indique qu'il s'agit d'un cercle rouge.
# l_mode, a_mode, b_mode sont les valeurs modales des canaux L, A et B.
if 0<statistics.l_mode<100 and 0<statistics.a_mode<127 and 0<statistics.b_mode<127:# si le cercle est rouge
img.draw_circle((c.x, c.y, c.r), color = (255, 0, 0))# le cercle rouge détecté est entouré d'un cercle rouge
else:
img.draw_rectangle(area, color = (255, 255, 255))
# les cercles non rouges sont entourés d'un rectangle blanc
print("FPS %f" % clock.fps())