Reconnaissance d'objet WebCam

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Dumli
Messages : 75
Inscription : dim. 14/févr./2010 22:28
Localisation : Sud de la France

Reconnaissance d'objet WebCam

Message par Dumli »

Salut tout le monde,
Nous voulons utiliser la Webcam pour reconnaître un objet remarquable. Après plusieurs recherches, nous ne savons pas comment "analyser" la séquence vidéo prise par la WebCam pour quelle trouve l'objet en question. Le but final est que la webcam connaisse la position de cette objet en X, et en Y en temps réel. Connaissez-vous une solution ?
Peut-être faudrait il commencer par l'analyse d'une simple image ?
PS : L'objet remarquable pourrait être une lumière (de type LED) Rouge, Verte, Bleu ou autre ...

Help ! 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
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 »

La fonction Point() renvoit quoi exactement ? Parce qu'on obtient une suite de chiffre mais qui ne correspond pas forcément à la valeur RGB de la couleur. (exemple : 255 216 106)
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 :La fonction Point() renvoit quoi exactement ? Parce qu'on obtient une suite de chiffre mais qui ne correspond pas forcément à la valeur RGB de la couleur. (exemple : 255 216 106)
la fonction point renvoi la couleur du point ciblé !!
cependant, il faut cibler le bon Device context (DC)

par defaut Point va permettre de connaitre la couleur d'un point de l'écran
(voir startdrawing)

d'autre part dans windows (le bureau par ex) ;les couleurs renvoyé par point sont en (Bleu,vert,rouge)
et non pas (rouge ,vert,bleu) , il faut donc faire une inversion du rouge et du bleu !! ;)

si tu reçois un nombre , il corresponds bien a une couleur
pour retrouver les composant rouge,vert,bleu
il te faudra utiliser les fonctions

red(nombre)
blue(nombre)
green(nombre)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Reconnaissance d'objet WebCam

Message par G-Rom »

Pour reconnaitre des Forme , cherche du coté de perceptron sur google.
Pour une led , un traitement sur l'image peut être fait , passage en noir & blanc , joué avec la luminosité / contraste afin de ne voir que la led , tu as intérêt d'être calé dans l'optimisation de tes algos , car ca va ramé un max... :mrgreen:
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Re: Reconnaissance d'objet WebCam

Message par Progi1984 »

Ou OpenCV...
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 »

Il faudrait que le logiciel différencie le Bleu du Rouge pour la LED donc le passage en Noir et blanc est a éviter... Sinon c'est quoi OpenCV
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 :Il faudrait que le logiciel différencie le Bleu du Rouge pour la LED donc le passage en Noir et blanc est a éviter... Sinon c'est quoi OpenCV

le probleme avec point() c'est que ça va te sortir le taux de rouge d'une couleur... pas forcement rouge !

par exemple rgb(255,22,10) aura le meme taux de rouge que (255,0,0)
pourtant il s'agit de 2 couleurs differences :)

faudra donc lui préciser qu'elle est la couleur exacte , que tu veux detecter.
(en tenant compte des autres composante...)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Reconnaissance d'objet WebCam

Message par G-Rom »

OpenCV est une librairie spécialisé dans ce que tu veut faire , des CV open sources :D

http://www.dailymotion.com/video/xcp0c2 ... cv-bi_tech
cirederff
Messages : 54
Inscription : ven. 15/mai/2009 19:57

Re: Reconnaissance d'objet WebCam

Message par cirederff »

Salut si ça peut t'aider, pomper sur le forum, mais je sais plus ou

pour PB 4.31

Code : Tout sélectionner

EnableExplicit

;{ CAP constants
#WM_CAP_START = #WM_USER
#WM_CAP_DRIVER_CONNECT = #WM_CAP_START + 10
#WM_CAP_DRIVER_DISCONNECT = #WM_CAP_START + 11
#WM_CAP_DRIVER_GET_CAPS = #WM_CAP_START + 14
#WM_CAP_EDIT_COPY = #WM_CAP_START + 30
#WM_CAP_SET_PREVIEW = #WM_CAP_START + 50
#WM_CAP_SET_PREVIEWRATE = #WM_CAP_START + 52
#WM_CAP_STOP = #WM_CAP_START + 68
#WM_CAP_SET_SCALE = #WM_CAP_START + 53
#WM_CAP_START = #WM_USER
#WM_CAP_DLG_VIDEOSOURCE = #WM_CAP_START + 42
;}
#Main=0
#camWidth = 640
#camHeight = 480
#w16 = 40
#h16 = 30

Structure avg
  r.l
  g.l
  b.l
EndStructure

Global hWndC
Define Ccam_lib1, *capAddress

Procedure rotate90(*MemoryTarget,W,H,size)
  Protected X,Y,Target, Origin, *MemoryOrigin = AllocateMemory(size)
  CopyMemory(*MemoryTarget,*MemoryOrigin,size)
  For Y = 0 To H - 1
    For X = 0 To W - 1
      Origin = (Y * W + X) << 2
      Target = ((H - Y - 1) + (X * H)) << 2
      PokeL(*MemoryTarget + Target, PeekL(*MemoryOrigin + Origin))
    Next
  Next
  FreeMemory(*MemoryOrigin)
EndProcedure



Procedure greyScale(*Memory,MemorySize)
  Protected Counter, Color
  For Counter = 0 To MemorySize - 1 Step 4
    Color = PeekL(*Memory + Counter)
    Color = (Red(Color) + Green(Color) + Blue(Color)) / 3
    PokeL(*Memory + Counter, RGB(Color, Color, Color))
  Next
EndProcedure



Procedure captureImage(dummy)
  Protected image, bmp.BITMAP, imageID, imageSize, *bits, pos
  Protected Dim prev.avg(#w16,#h16)
  Protected x,y,yy,xx, avg.avg, color, diff
 
  Repeat
    SendMessage_(hWndC,#WM_CAP_EDIT_COPY,0,0)
    image = GetClipboardImage(#PB_Any,32)
    imageID = ImageID(image) ;maybe flip it first
   
    GetObject_(imageID,SizeOf(BITMAP),@bmp.BITMAP)
    imageSize = bmp\bmWidthBytes * bmp\bmHeight
    *bits = bmp\bmBits
   
    StartDrawing(WindowOutput(0))
    DrawImage(imageID,0,0);____________________________________________ici
    DrawingMode(#PB_2DDrawing_Outlined)
   
    For x=0 To #w16-1
      For y=0 To #h16-1
        avg\r = 0: avg\g=0: avg\b=0
        For xx=x*16 To x*16+16-1
          For yy=y*16 To y*16+16-1
            pos = (yy * bmp\bmWidth + xx) << 2
            color = PeekL(*bits+pos)
            avg\r + Red(color)
            avg\g + Green(color)
            avg\b + Blue(color)
            ;Plot(xx,479-yy,color)
          Next
        Next
        avg\r = avg\r / 256
        avg\g = avg\g / 256
        avg\b = avg\b / 256
        ;Box(x*16,y*16,16,16,RGB(avg\r,avg\g,avg\b))
        diff = 0
        diff + Abs(prev(x,y)\r - avg\r)
        diff + Abs(prev(x,y)\g - avg\g)
        diff + Abs(prev(x,y)\b - avg\b)
        If diff > 40
          Box(x*16,464-y*16,15,15,#Green)
          ;Circle(x*16+8,464-y*16+8,8,#Green) or circles if you want
        EndIf
        prev(x,y)\r = avg\r
        prev(x,y)\g = avg\g
        prev(x,y)\b = avg\b
      Next
    Next
   
      ;DrawImage(imageID,0,0)
    StopDrawing()
    FreeImage(image)
   
    ;Delay(2000)
  ForEver
EndProcedure



If OpenWindow(#Main,0,0,640,480,"Webcam Motion Detector by JLC",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  Ccam_lib1 = OpenLibrary(#PB_Any, "avicap32.dll")
  If Ccam_lib1
    *capAddress = GetFunction(Ccam_lib1, "capCreateCaptureWindowA")
    hWndC = CallFunctionFast(*capAddress, "My Capture Window", #WS_CHILD | #WS_VISIBLE, 0,0, 1 , 1, WindowID(#Main),0)
    SendMessage_(hWndC, #WM_CAP_DRIVER_CONNECT, 0, 0)
    SendMessage_(hWndC, #WM_CAP_SET_OVERLAY, #True, 0)
    SendMessage_(hWndC, #WM_CAP_SET_PREVIEW, #True, 0)
    SendMessage_(hWndC, #WM_CAP_SET_PREVIEWRATE, 1, 0)
  EndIf
EndIf


CreateThread(@captureImage(),0)

Repeat
  Delay(10)
Until WaitWindowEvent() = #PB_Event_CloseWindow

SendMessage_(hWndC,#WM_CAP_STOP,0,0)
SendMessage_(hWndC,#WM_CAP_DRIVER_DISCONNECT,0,0)
DestroyWindow_(hWndC)
CloseLibrary(Ccam_lib1)
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 »

OpenCV ça correspond à quel langage ? C ? Et sinon, je rencontre un nouveau problème qui est le suivant, pour le moment j'arrive à repérer du rouge dans une image BMP, mais pour une vidéo je ne sais pas comment faire à part décomposer la vidéo Image par Image puis de les analyser une par une, ce qui serait très long et très lent. :(
Donc ? Une idée ?
Merci en tout cas pour vos réponses ! :wink:
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 »

.......................
Dernière modification par Backup le dim. 20/mars/2011 13:44, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Reconnaissance d'objet WebCam

Message par Ar-S »

Dommage que ma quickcam 3000 ne marche pas sous 7 (merci du non suivi des pilotes Mr Logitech de mes 2 sphères...)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
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 »

Merci pour le code, je vais l'étudier et sinon pour OpenCV vous savez quoi sur ça ?
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
PBW32
Messages : 19
Inscription : mer. 15/sept./2010 21:37

Re: Reconnaissance d'objet WebCam

Message par PBW32 »

ImageJ en java fais cela et bien plus : http://fr.wikipedia.org/wiki/ImageJ
ImageJ peut visualiser, éditer, traiter, et analyser les images ou des piles d'images (stack) en 8-bits, 16-bits, 32-bits et les images couleur. ImageJ est capable ouvrir et sauver des images dans de nombreux formats, notamment en TIFF, PNG, GIF, JPEG, BMP, DICOM, FITS, mais aussi des images en format brut (raw).

ImageJ est un logiciel libre : le code source est en accès libre et peut être modifié. C'est un logiciel multiplateformes, en raison de son fonctionnement sur une machine virtuelle Java. Ses fonctions sont extensibles ; de nombreux plug-ins existent, qui abordent des domaines jusque là réservés aux logiciels commerciaux comme Aphelion : manipulation et visualisation d'images tridimensionelles, filtrages médians et morphologiques 3D, contours actifs (snakes), filtres diffusifs... Par ailleurs, il est possible de combiner les fonctions natives ou ajoutées en créant des macros - la maîtrise de Java n'est pas alors nécessaire. La foisonnante diversité des plug-ins disponibles - plus d'une centaine - en fait son avantage principal, mais peut dérouter les néophytes : il est parfois difficile de trouver rapidement une fonction correspondant à un besoin précis.
Liens externes [modifier]
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Reconnaissance d'objet WebCam

Message par Ollivier »

@PBW32

C'est à en boucher le trou de la sécu!!! Merci pour ce lien!

Ollivier
Répondre