Jump to content
Sign in to follow this  
capacitor

Gravar e tirar foto com webcam

Recommended Posts

Bom tenho pesquisado bastante sobre o assunto de tirar foto e fazer gravação com webcam.Consegui um script que faz isso ,fiz algumas modificações as minhas necessidades .

Esta até funcionando mais quando coloco para finalizar a gravação ele não para ,só saindo do

programa "script" .E quando vou ver a gravação a mesmo trava quando chega ao final.

O script e muito bom ,queria que os amigos testem e veja se encontra o problema.Valeu.

#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
#include <GUIScrollBars.au3>
#include <ScrollBarConstants.au3>
#include <ScreenCapture.au3>
#include <webcam.au3>
#include <GUIConstants.au3>
 
Opt("GUIOnEventMode", 1)
$avi = DllOpen("avicap32.dll")
$user = DllOpen("user32.dll")
$snapfile = @ScriptDir & "\scrshot.jpg"
$moviefile = @ScriptDir & "\moviecam.avi"
 
$Main = GUICreate("WebCam - Ready",@DesktopWidth,@DesktopHeight)
GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")
$cap = DllCall($avi, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD,$WS_VISIBLE), "int", 0, "int", 0, "int", @DesktopWidth, "int", @DesktopHeight, "hwnd", $Main, "int", 1)
 
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DRIVER_CONNECT, "int", 0, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_SCALE, "int", 1, "int", 0)
;DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_OVERLAY, "int", 1, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEW, "int", 1, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEWRATE, "int", 30, "int", 0)
 
$Combo = GUICtrlCreateCombo("","",270,140,"")
;GUICtrlSetData(-1,"Video Display|Video Format|Compression","Video Source")
;$Button = GUICtrlCreateButton("Show",170,270,100,21)
;GUICtrlSetOnEvent(-1,"Button")
;
GUISetState(@SW_SHOW)
 
HotKeySet("{INSERT}", "SnapShot"); Press 'Insert' to make a SnapShot !
HotKeySet("{HOME}", "StartRecording"); Press 'Home' to start recording !
 
Func Quit()
;DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_CALLBACK_FRAME, "int", 0, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_END, "int", 0, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DRIVER_DISCONNECT, "int", 0, "int", 0)
;DllClose($avi); crashing, no one knows why...
    DllClose($user)
    Exit
EndFunc
 
 
While 1
    Sleep(1)
Wend
 
Func SnapShot()
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_GRAB_FRAME_NOSTOP, "int", 0, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_FILE_SAVEDIBA, "int", 0, "str", $snapfile)
EndFunc
 
Func StartRecording()
    WinSetTitle($Main, "", "WebCam - Capturing...")
    HotKeySet("{HOME}", "StopRecording")
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_FILE_SET_CAPTURE_FILEA, "int", 0, "str", $moviefile)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SEQUENCE, "int", 0, "int", 0)
EndFunc
 
Func StopRecording()
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_STOP, "int", 0, "int", 0)
    WinSetTitle($Main, "", "WebCam - Ready")
    HotKeySet("{HOME}", "StartRecording")
EndFunc

Edited by JScript
Adicionada a tag code!

Share this post


Link to post
Share on other sites

Olá!

 

1- Qual o SO que você está usando?

2- A versão do SO (32 ou 64)?

3- Existem várias "versões' de UDF para WebCams, onde está o link dessa UDF #include <webcam.au3> ?

 

JS

Share this post


Link to post
Share on other sites

1- Qual o SO que você está usando? Windos xp

2- A versão do SO (32 ou 64)? 32

3- Existem várias "versões' de UDF para WebCams, onde está o link dessa UDF #include <webcam.au3> ?UDF Abaixo

#include-once
#include <GUIConstants.au3>

;~ #####################################################
;~ ###												 ###
;~ ###					Webcam UDF					 ###
;~ ###												 ###
;~ ### Functions : _WebcamInit()					 ###
;~ ###			   _Webcam()						 ###
;~ ###			   _WebcamStop()					 ###
;~ ###			   _WebcamSnapShot()				 ###
;~ ###												 ###
;~ ###			      Made by L|M|TER				 ###
;~ ### --------------------------------------------- ###
;~ ###												 ###
;~ ###			 Copyright ©2008 - L|M|TER			 ###
;~ ###												 ###
;~ #####################################################

;~ Declaring Variables

$WM_CAP_START = 0x400
$WM_CAP_UNICODE_START = $WM_CAP_START +100
$WM_CAP_PAL_SAVEA = $WM_CAP_START + 81
$WM_CAP_PAL_SAVEW = $WM_CAP_UNICODE_START + 81
$WM_CAP_UNICODE_END = $WM_CAP_PAL_SAVEW
$WM_CAP_ABORT = $WM_CAP_START + 69
$WM_CAP_DLG_VIDEOCOMPRESSION = $WM_CAP_START + 46
$WM_CAP_DLG_VIDEODISPLAY = $WM_CAP_START + 43
$WM_CAP_DLG_VIDEOFORMAT = $WM_CAP_START + 41
$WM_CAP_DLG_VIDEOSOURCE = $WM_CAP_START + 42
$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_DRIVER_GET_NAMEA = $WM_CAP_START + 12
$WM_CAP_DRIVER_GET_NAMEW = $WM_CAP_UNICODE_START + 12
$WM_CAP_DRIVER_GET_VERSIONA = $WM_CAP_START + 13
$WM_CAP_DRIVER_GET_VERSIONW = $WM_CAP_UNICODE_START + 13
$WM_CAP_EDIT_COPY = $WM_CAP_START + 30
$WM_CAP_END = $WM_CAP_UNICODE_END
$WM_CAP_FILE_ALLOCATE = $WM_CAP_START + 22
$WM_CAP_FILE_GET_CAPTURE_FILEA = $WM_CAP_START + 21
$WM_CAP_FILE_GET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 21
$WM_CAP_FILE_SAVEASA = $WM_CAP_START + 23
$WM_CAP_FILE_SAVEASW = $WM_CAP_UNICODE_START + 23
$WM_CAP_FILE_SAVEDIBA = $WM_CAP_START + 25
$WM_CAP_FILE_SAVEDIBW = $WM_CAP_UNICODE_START + 25
$WM_CAP_FILE_SET_CAPTURE_FILEA = $WM_CAP_START + 20
$WM_CAP_FILE_SET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 20
$WM_CAP_FILE_SET_INFOCHUNK = $WM_CAP_START + 24
$WM_CAP_GET_AUDIOFORMAT = $WM_CAP_START + 36
$WM_CAP_GET_CAPSTREAMPTR = $WM_CAP_START + 1
$WM_CAP_GET_MCI_DEVICEA = $WM_CAP_START + 67
$WM_CAP_GET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 67
$WM_CAP_GET_SEQUENCE_SETUP = $WM_CAP_START + 65
$WM_CAP_GET_STATUS = $WM_CAP_START + 54
$WM_CAP_GET_USER_DATA = $WM_CAP_START + 8
$WM_CAP_GET_VIDEOFORMAT = $WM_CAP_START + 44
$WM_CAP_GRAB_FRAME = $WM_CAP_START + 60
$WM_CAP_GRAB_FRAME_NOSTOP = $WM_CAP_START + 61
$WM_CAP_PAL_AUTOCREATE = $WM_CAP_START + 83
$WM_CAP_PAL_MANUALCREATE = $WM_CAP_START + 84
$WM_CAP_PAL_OPENA = $WM_CAP_START + 80
$WM_CAP_PAL_OPENW = $WM_CAP_UNICODE_START + 80
$WM_CAP_PAL_PASTE = $WM_CAP_START + 82
$WM_CAP_SEQUENCE = $WM_CAP_START + 62
$WM_CAP_SEQUENCE_NOFILE = $WM_CAP_START + 63
$WM_CAP_SET_AUDIOFORMAT = $WM_CAP_START + 35
$WM_CAP_SET_CALLBACK_CAPCONTROL = $WM_CAP_START + 85
$WM_CAP_SET_CALLBACK_ERRORA = $WM_CAP_START + 2
$WM_CAP_SET_CALLBACK_ERRORW = $WM_CAP_UNICODE_START + 2
$WM_CAP_SET_CALLBACK_FRAME = $WM_CAP_START + 5
$WM_CAP_SET_CALLBACK_STATUSA = $WM_CAP_START + 3
$WM_CAP_SET_CALLBACK_STATUSW = $WM_CAP_UNICODE_START + 3
$WM_CAP_SET_CALLBACK_VIDEOSTREAM = $WM_CAP_START + 6
$WM_CAP_SET_CALLBACK_WAVESTREAM = $WM_CAP_START + 7
$WM_CAP_SET_CALLBACK_YIELD = $WM_CAP_START + 4
$WM_CAP_SET_MCI_DEVICEA = $WM_CAP_START + 66
$WM_CAP_SET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 66
$WM_CAP_SET_OVERLAY = $WM_CAP_START + 51
$WM_CAP_SET_PREVIEW = $WM_CAP_START + 50
$WM_CAP_SET_PREVIEWRATE = $WM_CAP_START + 52
$WM_CAP_SET_SCALE = $WM_CAP_START + 53
$WM_CAP_SET_SCROLL = $WM_CAP_START + 55
$WM_CAP_SET_SEQUENCE_SETUP = $WM_CAP_START + 64
$WM_CAP_SET_USER_DATA = $WM_CAP_START + 9
$WM_CAP_SET_VIDEOFORMAT = $WM_CAP_START + 45
$WM_CAP_SINGLE_FRAME = $WM_CAP_START + 72
$WM_CAP_SINGLE_FRAME_CLOSE = $WM_CAP_START + 71
$WM_CAP_SINGLE_FRAME_OPEN = $WM_CAP_START + 70
$WM_CAP_STOP = $WM_CAP_START + 68
$cap = ""
$avi = ""
$user = ""
$snapfile = @ScriptDir & "\snapshot.bmp"

;~ ##########################################################
;~ Function Name : _WebcamInit()
;~ Description : Starts the webcam image capturing session
;~ Author : L|M|TER
;~ ##########################################################

Func _WebcamInit()
$avi = DllOpen("avicap32.dll")
$user = DllOpen("user32.dll")
EndFunc

;~ ##########################################################
;~ Function Name : _Webcam($gui,$h,$w,$l,$t)
;~ Description : Creates a webcam preview window
;~ Parameter(s):
;~ 	$gui - The gui where the webcam window should be created
;~ 	$h - The height of the webcam window
;~ 	$w - The width of the webcam window
;~ 	$l - The left position of the webcam window
;~ 	$t - The top position of the webcam window
;~ NOTE : All parameters required !
;~ Author : L|M|TER
;~ ##########################################################

Func _Webcam($gui,$w,$h,$l,$t)
$cap = DllCall($avi, "int", "capCreateCaptureWindow", "str", "cap", "int", "", "int", $l, "int", $t, "int", $w, "int", $h, "hwnd", $gui, "int", 1)

DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DRIVER_CONNECT, "int", 0, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_SCALE, "int", 1, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_OVERLAY, "int", 1, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEW, "int", 1, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEWRATE, "int", 1, "int", 0)
EndFunc

;~ ##########################################################
;~ Function Name : _WebcamStop()
;~ Description : Closes the webcam image capturing session
;~ Author : L|M|TER
;~ ##########################################################

Func _WebcamStop()
        DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_END, "int", 0, "int", 0)
        DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DRIVER_DISCONNECT, "int", 0, "int", 0)
        DllClose($user)
		DllClose($avi)
EndFunc

;~ ##########################################################
;~ Function Name : _WebcamSnapShot($file)
;~ Description : Takes a snapshot
;~ Parameter(s):
;~ 	$file (Optional) - The path to the file where the snapshot will be saved (Default : @ScriptDir & "\snapshot.bmp")
;~ Author : L|M|TER
;~ ##########################################################

Func _WebcamSnapShot($file = $snapfile)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_GRAB_FRAME_NOSTOP, "int", 0, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_FILE_SAVEDIBA, "int", 0, "str", $file)
EndFunc

 

Estou usando uma webcam em HD da Microsoft modelo HD3000 reconhece automaticamente sem necessidade de instalar driver.

http://www.360bin.com/lifecam-hd-3000-pakistan.html#.URj1Xx3WKOY

Share this post


Link to post
Share on other sites

Como eu uso o Windows 7 64, não tenho como testar o código devido ao fato da dll avicap32.dll ter vindo com algum bug! Isso mesmo que você leu, desde a versão Vista que a dll não é compatível com os comandos usados...

 

Em seu lugar, eu usaria o código da seguinte forma:

#include <GUIConstants.au3>
#include <GUIScrollBars.au3>
#include <ScreenCapture.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
#include <ScrollBarConstants.au3>
;
#include "webcam.au3"

Opt("GUIOnEventMode", 1)

_WebcamInit()

;$snapfile = @ScriptDir & "\scrshot.jpg"
$moviefile = @ScriptDir & "\moviecam.avi"

$Main = GUICreate("WebCam - Ready", @DesktopWidth, @DesktopHeight)
GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")

_Webcam($Main, @DesktopWidth, @DesktopHeight, 0, 0)

$Combo = GUICtrlCreateCombo("", "", 270, 140, "")
;GUICtrlSetData(-1,"Video Display|Video Format|Compression","Video Source")
;$Button = GUICtrlCreateButton("Show",170,270,100,21)
;GUICtrlSetOnEvent(-1,"Button")
;
GUISetState(@SW_SHOW)

HotKeySet("{INSERT}", "_WebcamSnapShot"); Press 'Insert' to make a SnapShot !
HotKeySet("{HOME}", "StartRecording"); Press 'Home' to start recording !

Func Quit()
	_WebcamStop()
	Exit
EndFunc   ;==>Quit


While 1
	Sleep(1)
WEnd

Func StartRecording()
	WinSetTitle($Main, "", "WebCam - Capturing...")
	HotKeySet("{HOME}", "StopRecording")
	DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_FILE_SET_CAPTURE_FILEA, "int", 0, "str", $moviefile)
	DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SEQUENCE, "int", 0, "int", 0)
EndFunc   ;==>StartRecording

Func StopRecording()
	DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_STOP, "int", 0, "int", 0)
	WinSetTitle($Main, "", "WebCam - Ready")
	HotKeySet("{HOME}", "StartRecording")
EndFunc   ;==>StopRecording
JS

  • Like 1

Share this post


Link to post
Share on other sites

O primeiro include esta sendo procurado na pasta onde o script se encontra e o segundo na pasta includes do diretório de instalação do Autoit.

Share this post


Link to post
Share on other sites

De acordo com o help do AutoIt:

 

The filename of the current script to include. Path is optional. This must be a string--it cannot be a variable.
If "..." is used, the filename is taken to be relative to the current script.
If <...> is used the filename is taken to be relative to include library directory (usually
C:\Program Files\AutoIt3\Include). The include library contains many pre-written user-functions for you to use!

 

JS

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×