Re!
on a fait aujourd'hui avec Pascal la
recherche de cible rouge en local à l'aide de SYRTools et ca
fonctionne plutot bien.
Le taux d'acquisition d'image de la
webcam atteint les 30 images/seconde pour le serveur de SYR lorsque
l'éclairage est suffisament élevé.
Par contre il peut descendre à
8 si l'éclairage est insuffisant (problème de temps
d'exposition certainement...)
(je parle ici en utilisant qu'une
seule Webcam)
Le programme fait à l'aide de
SYRTools fonctionne comme suit:
Après avoir choisi de se
connecter en local (sur la caméra directement) ou à
distance (via le serveur) on peut règler la détection de
rouge sur l'onglet correspondant.
Filtrage HLS (voir document Yves) et
seuillage en sont les deux mamelles. Voir la vidéo
ci-jointe (RèglageRouge.avi)
Lorsque l'on règle les
paramètres le programme utilise directement les filtres
donnés par SYRTools et là (rien n'est optimisé -
DLL écrite en VB) on descend en dessous de 1 image/seconde (sur
SYR!).
Ensuite on passe sur l'onglet
Recherche cible et là on peut règler les
paramètres de la recherche.
Au passage il y a création d'un
tableau "Combien c'est rouge" (construit à l'aide des
fonctionnalités de SYRTools) comme Yves avait utilisé
lors de son succès au 1er défi permettant un
traitement plus rapide (3-4 images par seconde)
L'algorithme est celui d'Yves à
savoir:
- si je ne vois pas de rouge je cherche
dans la dernière direction où j'ai détecté
du rouge. (rotation sur soi même - moteurs dans deux directions
opposées à la vitesse "Vitesse Recherche"
- si je
vois du rouge mais que ce n'est pas centré dans une bande d'une
largeur règlable au centre de l'image ("Largeur Bande") alors je
cherche à centrer le rouge (les deux moteurs dans des sens
opposés à la vitesse "Vitesse Centrage").
- si je vois du rouge et qu'il se trouve dans la bande ci dessus
défini alors je "track" la cible (les deux moteurs dans le meme
sens à la vitesse "vitesse tracking" avec un différentiel
proportionnel à l'écart par rapport au centre
de l'image et multiplié du facteur "sensibilité
tracking".
- lorsque la quantité
de rouge est supérieur à un certain pourcentage de
l'image ("seuil") alors la cible est considéré comme
détectée.
On peut
aussi, au cas où SYR ne décolle pas, donner une impulsion
à 200 d'une durée règlable ("Impulsion (ms)")
Ci-joint
pour l'exemple une petite vidéo (SYRLocal.avi)...
Vous
remarquerez que le robot à tendance à aller dans le
buisson de temps en temps...
C'est
parce qu'au sol il y a des feuilles qu'il considère comme rouge.
Ce n'est
donc qu'un problème d'algorithmique qui devrai nous orienter sur
la détection de "Blob" et aussi de règlage des
paramètres.
Il y a
quelques problème liés à la puissance des moteurs
aussi.
Autant la vitesse de tracking de pose
pas de problème et peut être assez élevée
autant la vitesse de recherche ou de centrage ne doit pas être
trop élevée (dans ces deux cas les moteurs tournent en
sens inverse) d'où le problème:
Vitesse trop élevée
=> on dépasse la cible
Vitesse trop basse => on ne
décolle pas
Yves avait opté pour une
recherche par accoup (moteur à fond mais pendant un laps de
temps court) et c'est certainement ce qu'il faudrait implémenter.
Mais en terme de principe ca
fonctionne!
On a aussi fait, et là je crois
qu'on peut mettre une croix dans le calendrier, la première
recherche de cible avec cerveau déporté!
et ca marche aussi!
Pour ce faire j'ai créé
vite fait (2 minutes max) un client-serveur sur mon ordinateur à
l'aide de SYRTools.
Celui ci demande aussi rapidement que
possible des images à SYR.
Ainsi mon ordinateur dispose des
images pour que le programme de recherche puisse fonctionner.
En effet SYRTools fonctionnant de
manière séquentielle si j'ai dans un même programme:
Acquisition de l'image depuis Benodet
puis
Envoie des commandes à Benodet
alors le taux de rafraichissement sera
faible (1 image par seconde) du fait des temps de transfert entre
l'allemagne et Benodet en sus des temps de traitements.
Par contre si j'ai deux "process"
tournant en parallèle l'un (le client-serveur) demandant les
images à Benodet et l'autre (le programme de recherche de cible)
envoyant les commandes à Benodet et récupérant les
images en local sur le client-serveur alors le temps est moindre et on
peut obtenir des taux de rafraichissement de l'ordre de 2-3 images/s!
Bref! Je pouvais facilement
règler les paramètres, laisser SYR chercher ou reprendre
la main pour le guider... (sur mon ordi même lors du
règlages des paramètres de détection de
rouge j'avais plusieurs 10aines de traitement par seconde),
On s'est bien amusé et cela
m'amène à faire quelques modifs avant publication...
Il faudra notamment que je retravaille
un peu le protocole de communication pour qu'après on y touche
plus et que n'importe qui, quel que soit le langage puisse l'utiliser.
Il faudra aussi tester si SYRTools est
utilisable en C++
bref! un peu de pain sur la planche
mais j'espère que bientôt tout un chacun pourra
implémenter ces propres algorithmes...
Bises
Nico