Reconnaissance d'objet WebCam

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
PBW32
Messages : 19
Inscription : mer. 15/sept./2010 21:37

Re: Reconnaissance d'objet WebCam

Message par PBW32 »

En fait, ImageJ c'est plutot pour l'imagerie médicale, OpenCV a l'air de mieux convenir : http://opencv.willowgarage.com/wiki/

Image

Et un tuto en français : http://www.siteduzero.com/tutoriel-3-85 ... #ss_part_1
Avatar de l’utilisateur
Dumli
Messages : 75
Inscription : dim. 14/févr./2010 22:28
Localisation : Sud de la France

Re: Reconnaissance d'objet WebCam

Message par Dumli »

Pouvez-vous nous donner quelques précisions sur le fonctionnement principal du code de Dobro ? :?
Windows 7 Ultimate 64-Bit | Intel Core i5 CPU 750 @ 2.67GHz | 4,0 GB RAM | Sapphire Vapor-X ATI Radeon HD 4890 | 2,5 TeraOctet 7200 RPM
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Reconnaissance d'objet WebCam

Message par Backup »

Dumli a écrit :Pouvez-vous nous donner quelques précisions sur le fonctionnement principal du code de Dobro ? :?
c'est un peut vague comme question non ? :lol:
Avatar de l’utilisateur
Dumli
Messages : 75
Inscription : dim. 14/févr./2010 22:28
Localisation : Sud de la France

Re: Reconnaissance d'objet WebCam

Message par Dumli »

C'est bien la tout le centre du problème :lol: Non, en réalité ce que j'ai compris c'est :
Initialisation de la WebCam
Analyse de l'image
Repérage des couleurs
Comparaison ?
Affichage dans la fenêtre Windows

Et je crois que c'est tout ... Pour le moment je voudrais surtout comprendre le fonctionnement principal du programme. Voila :mrgreen:
Merci en tout cas Dobro pour avoir Mis à Jour le code ! :wink: Et Merci pour le reste de la troupe pour toutes vos réponses :D
Windows 7 Ultimate 64-Bit | Intel Core i5 CPU 750 @ 2.67GHz | 4,0 GB RAM | Sapphire Vapor-X ATI Radeon HD 4890 | 2,5 TeraOctet 7200 RPM
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Reconnaissance d'objet WebCam

Message par Backup »

Dumli a écrit : Initialisation de la WebCam
Analyse de l'image
Repérage des couleurs
Comparaison ?
Affichage dans la fenêtre Windows
ben c'est exactement ça !!

il y a des procedures qui ne servent pas dans l'exemple ;
comme la rotation,
et la transformation en niveau de gris

ce qui prends du temps dans ce prg c'est la mise en tableau de l'image
a chaque boucle ...
ce prg exemple , teste si il y a changement sur l'ensemble de l'image
capturé !!

ce pourrai etre utile pour un test de caméra de surveillance , par exemple
le moindre truc qui change dans l'image, déclencherai une alerte
en l'état , ce prg peut faire ça ! :)


par contre , c'est trop lourd pour une exploitation en jeux
ou la , il faudrait faire une détection, que sur une portion de l'image
ou alors , sur toute l'image , mais une seule couleur précise (en ne regardant qu'une composante , on multiplie par trois la vitesse d'analyse) etc ...

voir , resizer la taille de l'image , de façon a avoir moins de point a mettre en tableau
là, il y aurai moyen de faire un truc plus rapide :)

bref , tu as une bonne base pour développer dessus, l'imagination au pouvoir :)
Avatar de l’utilisateur
Dumli
Messages : 75
Inscription : dim. 14/févr./2010 22:28
Localisation : Sud de la France

Re: Reconnaissance d'objet WebCam

Message par Dumli »

Ok mais la partie comparaison je ne comprends pas. Il met chaque pixel de l'image dans un tableau et après il compare chaque case du tableau ? Mais comment ? Et c'est quoi les variables xx ? yy ? Plein de questions comme ça que nous n'arrivons pas à résoudre ...
Windows 7 Ultimate 64-Bit | Intel Core i5 CPU 750 @ 2.67GHz | 4,0 GB RAM | Sapphire Vapor-X ATI Radeon HD 4890 | 2,5 TeraOctet 7200 RPM
Avatar de l’utilisateur
Dumli
Messages : 75
Inscription : dim. 14/févr./2010 22:28
Localisation : Sud de la France

Re: Reconnaissance d'objet WebCam

Message par Dumli »

Salut,

Comment adapter cette procédure de scan à une vidéo de type AVI ? Il faut prendre des capture d'images de la vidéo et scanner image par image ? Je précise qu'il faut que le résultat soit en "temps réel". :? Une idée ?

Merci d'avance :D
Windows 7 Ultimate 64-Bit | Intel Core i5 CPU 750 @ 2.67GHz | 4,0 GB RAM | Sapphire Vapor-X ATI Radeon HD 4890 | 2,5 TeraOctet 7200 RPM
Ghost
Messages : 4
Inscription : lun. 25/oct./2010 22:24

Re: Reconnaissance d'objet WebCam

Message par Ghost »

Bonsoir, je travaille avec Dumli sur ce programme depuis le début, et aujourd'hui nous sommes un peu bloqués.
Nous avons analysé le code fournit par Dobro (merci à toi), mais concrètement on galère un peu ^^"
On arrive à détecter les pixels qui ont une certaine couleur et à afficher des carrés vert là où ils sont, mais uniquement dans une image, maintenant nous souhaiterions passer à une vidéo.
Dumli pense qu'il faudrait lancer la vidéo dans une fenêtre windows, et analyser les pixels en temps réel, ce que je pense pour ma part irréalisable: on met déjà un certain temps pour une image, on arrive à diminuer le temps, heureusement, mais pas assez pour analyser 20 ou 30 images par secondes... De plus il faudrait ensuite afficher les carrés vert, et les effacer juste après, cela me semble très compliqué... Je pensais plus à directement nous servir des constantes #WM_... mais on ne s'y connait pas trop, et Dumli préférerait donc utiliser autre chose. D'après ce que j'ai compris ce sont des constantes de windows qui permettent aux différentes applications de communiquer entre elles, pas très bien compris la nature des informations qu'elles échangent, un peu de tout si j'ai bien compris, valeur numérique, chaîne de caractères.. Donc j'ai tenté d'analyser les constantes utilisées dans le code de Dobro:
#WM_USER : Il s'agit de la valeur à partir de laquelle on peut créer ses constantes personnalisés, mais normalement les valeurs peuvent déjà avoir été utilisées par d'autres applications, non? Il me semble que d'après ce que j'ai compris il valait mieux utiliser RegisterWindowMessage...
#WM_CAP_START : Définit le moment où on commence à envoyer des messages à windows, me semble...
#WM_CAP_DRIVER_CONNECT : Connecte le driver, utilisé quand on ouvre la fenêtre pour afficher les résultats
#WM_CAP_DRIVER_DISCONNECT : Déconnecte le driver
#WM_CAP_DRIVER_GET_CAPS : Permet visiblement de dire si la capture d'image est connectée à la capture d'image du périphérique du driver ou quelque chose du genre... Enfin j’interprète ça comme "vérifie si la capture d'image est bien celle de la webcam", pour notre cas
#WM_CAP_EDIT_COPY : Capture d'image de la video, dans le presse papier (Décompose la video en images et les met dans le presse papier?)
#WM_CAP_SET_PREVIEW : Transfère les captures faites dans la mémoire système d'après ma traduction, dans la ram quoi?
#WM_CAP_SET_PREVIEWRATE : Sert pour l'affichage, fixe le taux d'affichage d'image en mode de prévisualisation, donc fixe le nombre d'images qui s'affichent dans la fenêtre windows
#WM_CAP_STOP : Stoppe les captures de la video
#WM_CAP_SET_SCALE Le message WM_CAP_SET_SCALE active ou désactive le redimensionnement des images vidéo de prévisualisation. Si l'échelle est activée, l'image vidéo capturée est étendu aux dimensions de la fenêtre de capture -> ça a le mérite d'être clair x)
#WM_CAP_START : Redit, pour remettre la valeur d'origine du programme une fois finit? Pas vraiment compris...
#WM_CAP_DLG_VIDEOSOURCE : Ce qui sert pour choisir la source, la webcam en l'occurence, dans une petite fenetre de dialogue avec l'utilisateur (Youhou ça j'ai compris! xD)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Reconnaissance d'objet WebCam

Message par djes »

Le sujet là dessus sur le forum anglais (où Dobro a posté son code) : http://www.purebasic.fr/english/viewtop ... 12&start=0
et un article avec du code facile à comprendre (mais pas à convertir) ;) http://www.codeproject.com/KB/audio-vid ... ction.aspx
J'avais trouvé un super truc là dessus il y a quelques mois, mais je doute de remettre jamais la main dessus... Heureusement, c'est un sujet très à la mode dans les universités, et les bons papiers ne manquent pas.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Reconnaissance d'objet WebCam

Message par G-Rom »

je ne sais pas ce que vous voulez faire.
mais à priori , vous êtes parti pour du "pure software".

Donc, vous arrivez à traiter une image , à repérer quelque chose dedans.
Imaginons que vous voulez "suivre" un carré vert dans votre vidéo.

- La première étape consiste à "accrocher" ce carré vert , en analysant TOUT les pixels de votre image. ( pour un gain de temps , mais perte en qualité , analysez 1 pixel sur 2. ).

- Une fois que vous avez "accrocher" ce carré vert , vous avez forcement les coordonnées pixel et la taille.
- Admettons que le carré vert est en 100x100 px et qu'il fait une taille de 30x30 px
- il est inutile maintenant d'analyser toute l'image , juste la surface qui commence en 100x100 d'une taille de 30x30 pixel avec une tolérance de quelques pixel ( plus la tolérance est grande , plus c'est long , mais précis dans le suivi )
- Si jamais la tolérance ne suffit pas ( l'objet se déplace plus vite que la tolérance ) , il faut relancer une séquence d'accrochage pour retrouver le carré vert en analysant les pixels de toute l'image.

Voilà , c'est de la théorie , mais c'est de cette manière que j'aurais procéder.

@+ ;)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Reconnaissance d'objet WebCam

Message par Backup »

je dois ajouter que ce n'est pas mon code

je l'ai juste mis en version 4.51 (utilisation des prototypes)

rien de plus ;)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Reconnaissance d'objet WebCam

Message par Backup »

Dumli a écrit :Ok mais la partie comparaison je ne comprends pas. Il met chaque pixel de l'image dans un tableau et après il compare chaque case du tableau ? Mais comment ?

ben c'est simple :)

je ne prends pour l'exemple que la composante rouge

d'abord il prends la couleur rouge presente a l'instant dans la cam (enfin dans l'image scanné)

Code : Tout sélectionner

Pos = (yy * bmp\bmWidth + xx) << 2 ; ceci correspond a la fonction point(x,y)
Color = PeekL(*bits+Pos) ; ceci aussi !!
avg\r + Red(Color) ; met le resultat dans la structure avg
un peut plus loin il opère un petit calcul pour réduire le chiffre
qui va lui permettre de mettre en évidence la Différence

Code : Tout sélectionner

avg\r = avg\r / 256
diff + Abs(prev(x,y)\r - avg\r); la comparaison a lieu ici , on compare a l'ancienne image du tableau prev()
cette différence (Diff) ; il la compare a l'image précédente qu'il avait gardé précédemment
(dans le tableau prev(x,y)\r )

ensuite il faut bien noter la nouvelle image qui a changé , pour la confronter a la futur image
qui changera , donc il la met en tableau pour la prochaine comparaison

Code : Tout sélectionner

 prev(x,y)\r = avg\r
voila , ceci est reproduit avec les 3 composantes RVB :)
Ghost
Messages : 4
Inscription : lun. 25/oct./2010 22:24

Re: Reconnaissance d'objet WebCam

Message par Ghost »

Nous cherchons à détecter des pixels de couleur rouge (on ajustera ensuite pour la couleur, pas le plus compliqué) présent sur l'image que renvoie la cam, et pour afficher qu'on la détecte on affiche des carrés vert comme dans le programme que Dobro a adapté en 4.51 (c'était pour le designer qu'on disait que c'était le tien ^^"), et il faudrait que cela soit fait en temps réel. Concernant l'optimisation du code, on a trouvé comment faire, ce que l'on veut maintenant c'est se servir d'une video ou de la cam directement pour détecter les pixels de couleur rouge, et non pas d'une image comme on le fait depuis un moment déjà. D'où ma question concernant les constantes #WM_...
Merci pour l'explication :)
Avatar de l’utilisateur
Dumli
Messages : 75
Inscription : dim. 14/févr./2010 22:28
Localisation : Sud de la France

Re: Reconnaissance d'objet WebCam

Message par Dumli »

Désolé les Modo mais .... UP ! :mrgreen:
Non sérieusement, on reprend la partie Programmation Lundi donc on a vraiment besoin de comprendre avant. :?
Windows 7 Ultimate 64-Bit | Intel Core i5 CPU 750 @ 2.67GHz | 4,0 GB RAM | Sapphire Vapor-X ATI Radeon HD 4890 | 2,5 TeraOctet 7200 RPM
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Re: Reconnaissance d'objet WebCam

Message par Cls »

Ça a l'air intéressant comme projet. Perso je ferais comme G-Rom à expliqué plus haut.

D'après ce que j'ai compris, vous souhaitez suivre un objet sur des images. Je vois déjà 5 chantiers :
1. récupérer le flux vidéo
2. découper image par image (peut être fusionné au 1)
3. analyser les images comme décrit par G-Rom
4. gérer l'affichage du carré vert
5. interfaces et traitements annexes

Aucune idée de ce que vous cherchez précisément mais je pense qu'il faut creuser chaque partie séparément (en même temps je ne suis pas expert du traitement des images alors... :roll:) !
Répondre