acquisition vidéo

Sujets variés concernant le développement en PureBasic
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

acquisition vidéo

Message par wolfjeremy »

Salut,

Quelqu'un connait une lib ou autre, permettant de faire de l'acquisition vidéo via une carte usb ?

D'avance je vous remercie pour votre réponse.

P.S.: Le but est de relié une caméra de surveillance au pc via une carte externe en usb, et de récupéré l'image dans un programme à moi.
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Recherche Twain sur le forum.
J'ai un lien là pour capturer une image depuis une Webcam : http://basicunivers.free.fr/index.php?p ... hp&file=30.

Le problème avec cette DLL, c'est qu'il faut une validation pour capturer l'image (il me semble), elle ne se fait pas automatiquement. Par contre, une version payant existe et contient toutes les fonctions nécessaire pour acquérir et sauvegarder dans les formats vidéos de ton choix tes images capturées...

Mais regarde déjà par là. Si ça correspond, tu peux télécharger la version complète (version évaluation de x jours) sur le site officiel avant d'aviser si tu veux payer pour la version complète ou non...

Lio :wink:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: acquisition vidéo

Message par Backup »

wolfjeremy a écrit :Salut,

Quelqu'un connait une lib ou autre, permettant de faire de l'acquisition vidéo via une carte usb ?

D'avance je vous remercie pour votre réponse.

P.S.: Le but est de relié une caméra de surveillance au pc via une carte externe en usb, et de récupéré l'image dans un programme à moi.
essaye moi ça pour voir :D

Code : Tout sélectionner

; code original de je sais plus qui
; modifié par Dobro

UseJPEGImageEncoder()
UseJPEGImageDecoder()
Enumeration
  
  #Window_0
  #Button_capture
  #Button_quit
  #Button_affiche
  #Button_4
  #viewer1
  #gadget1
  #counter
  #counter1
  #name
  #takebut
  #viewbut
  #quitbut
EndEnumeration

Dim snapshot.l(50)
Global  saver$
i=1
If OpenWindow(#Window_0, 100, 100, 408, 338, "Little Camera", #PB_Window_SystemMenu |  #PB_Window_MinimizeGadget     )
  If CreateGadgetList(WindowID(#Window_0)) 
    ButtonGadget(#Button_capture, 150, 280, 50, 25, "Capture")
    ButtonGadget(#Button_quit, 250, 280, 50, 25, "Quit")
    ButtonGadget(#Button_affiche, 200, 280, 50, 25, "Show")
  EndIf 
EndIf
 
Global hWndC.l
Global snapshot.l
Procedure.b initcam()
  pcvs.b = 0
  CreateImage(0,400,400)
  #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
  If OpenLibrary(0, "avicap32.dll")
    *capAddress = GetFunction(0, "capCreateCaptureWindowA")
    hWndC = CallFunctionFast(*capAddress, "My Capture Window", #WS_CHILD | #WS_VISIBLE, 50,38, 310, 230, WindowID(0),0)
    
    SendMessage_(hWndC, #WM_CAP_DRIVER_CONNECT, 0, 0)
    SendMessage_(hWndC, #WM_CAP_SET_PREVIEW, #True, 0)
    SendMessage_(hWndC, #WM_CAP_SET_PREVIEWRATE, 1, 0)
    SendMessage_(hWndC, #WM_CAP_SET_SCALE, #True, 0)
    pcvs = 1   
    ; ;............................................(pour afficher l'option)
    ; #WM_CAP_START = #WM_USER
    ; #WM_CAP_DLG_VIDEOSOURCE = #WM_CAP_START + 42
    ; ;............................................
    ; SendMessage_(hWndC, #WM_CAP_DLG_VIDEOSOURCE, 0, 0)
  EndIf
  ProcedureReturn pcvs
EndProcedure
Procedure.b capcam()
  pcvs.b = 0
  SendMessage_(hWndC, #WM_CAP_EDIT_COPY, 0, 0)
  snapshot = GetClipboardImage(#PB_Any)
  If snapshot
    saver$= "snapshot.jpg"
    SaveImage(snapshot,saver$,#PB_ImagePlugin_JPEG,10)
    ;FreeImage(snapshot)
    pcvs = 1
  EndIf
  ProcedureReturn pcvs
EndProcedure
Procedure destroycam()
  SendMessage_(hWndC, #WM_CAP_STOP, 0, 0)
  SendMessage_(hWndC, #WM_CAP_DRIVER_DISCONNECT, 0, 0)
  DestroyWindow_(hWndC)
  CloseLibrary(0)
EndProcedure
initcam()

 ;HideWindow(0,1)
Repeat
  Event=WaitWindowEvent(10)
  
  Select Event
    
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button_capture 
          capcam() 
        Case #Button_quit
          SendMessage_(hWndC, #WM_CAP_STOP, 0, 0)
          SendMessage_(hWndC, #WM_CAP_DRIVER_DISCONNECT, 0, 0)
          DestroyWindow_(hWndC)
          CloseLibrary(0)
          End 
        Case #Button_affiche 
          If OpenWindow(#viewer1, 10, 10, 340, 270, "ImageGadget", #PB_Window_ScreenCentered|#PB_Window_BorderLess    )
            StickyWindow(#viewer1, 1)
            If CreateGadgetList((WindowID(#viewer1)))
              
              existimage=  LoadImage(0, saver$)     ;Path/filename of the image
              If existimage
                ImageGadget(#gadget1,  10, 10, 310, 230, ImageID(0),#PB_Image_Border)                      ; imagegadget standard
              Else
                ResizeWindow(#viewer1,#PB_Ignore ,#PB_Ignore ,10,10)
                
                MessageRequester("No Image", "image doesn,t exist",#PB_MessageRequester_Ok)
                CloseWindow(#viewer1)
                Quit=1
              EndIf
              
            EndIf
            
            Repeat
              Event2=WaitWindowEvent()
              bugger=EventType()
              Select bugger
                Case #PB_EventType_RightClick
                  CloseWindow(#viewer1)
                  Quit=1
                  
              EndSelect
            Until Quit=1
          EndIf
          Quit=0
          
      EndSelect
  EndSelect
  
  
  
Until Event = #PB_Event_CloseWindow

destroycam()

End

et si tu retire les ";" de ce code

Code : Tout sélectionner

; ;............................................(pour afficher l'option)
    ; #WM_CAP_START = #WM_USER
    ; #WM_CAP_DLG_VIDEOSOURCE = #WM_CAP_START + 42
    ; ;............................................
    ; SendMessage_(hWndC, #WM_CAP_DLG_VIDEOSOURCE, 0, 0) 
tu pourra choisir la source de ta capture :D
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Arf j'ai pas de webcam pour tester ça.
Merci Dobro pour ce code ! Ca me servira sans doute !
Lio :D
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Merci beaucoup Dobro.
Et merci lionel_om :wink:

Je teste ça déjà que j'ai reçus la caméra de surveillance et la carte d'acquisition.
Répondre