[Beispiel] SnapShot's from WebCam ver.: 0.8.1.3

  • Hallo Com,

    angeregt durch [ offen ] Webcam Ordner öffnen habe ich mich entschlossen ein Kleines Tool zu schreiben, um von der WebCam Schnappschüsse aufzunehmen.

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.6.1
    Author: autoBert http://www.autoit.de/index.php?page…2937#post182937
    based on http://www.autoitscript.com/forum/index.ph…ndpost&p=572154

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Demo for Webcam Udf

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------
    #include 'webcam.au3'
    #include<GDIPlus.au3>
    #Include <Misc.au3>
    #include<array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $cam_xlength = 640;Breite
    $cam_ylength = 480 ;Höhe

    [/autoit] [autoit][/autoit] [autoit]

    $sProgTitel ="SnapShot from WebCam"
    $sProgVer = "v 0.8.1.3"

    [/autoit] [autoit][/autoit] [autoit]

    $capDir = @ScriptDir & "\captures"
    If Not FileExists($capDir) Then DirCreate($capDir)

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{INSERT}", "SnapShot")

    [/autoit] [autoit][/autoit] [autoit]

    If _Singleton($sProgTitel & $sProgVer, 1) = 0 Then
    WinActivate($sProgTitel & $sProgVer)
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $gui = GUICreate($sProgTitel & $sProgVer, $cam_xlength, $cam_ylength + 20, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    $WebcamID = _WebcamOpen($gui, 0, 0, $cam_xlength + 30, $cam_ylength)
    if $WebcamID = -1 Then
    MsgBox(16,"Fehler","WebCam kann nicht initialisiert werden!")
    exit
    EndIf
    $label1 = GUICtrlCreateLabel("", 0, $cam_ylength + 5, $cam_xlength, 20)
    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    AdlibRegister("SnapShot", 10000)

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Until GUIGetMsg() = -3
    AdlibUnRegister("SnapShot")
    _WebcamClose($WebcamID)
    ConsoleWrite($WebcamID& @CRLF)
    _GDIPlus_Shutdown()

    [/autoit] [autoit][/autoit] [autoit]

    Func SnapShot()
    $nr = 1
    While FileExists($capDir & "\Bild" & $nr & ".jpg")
    $nr += 1
    WEnd
    $oFile = $capDir & "\Bild.bmp"
    $nFile = $capDir & "\Bild" & $nr & ".jpg"
    if FileExists($oFile) Then FileDelete($oFile)
    _WebcamSnap($WebcamID, $oFile)

    [/autoit] [autoit][/autoit] [autoit]

    Local $aDT = FileGetTime($oFile)
    $sInfo = $aDT[0] & "/" & $aDT[1] & "/" & $aDT[2] & " " & $aDT[3] & ":" & $aDT[4] & ":" & $aDT[5]
    ConsoleWrite($sInfo & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    $himg = _GDIPlus_ImageLoadFromFile($oFile)

    [/autoit] [autoit][/autoit] [autoit]

    $hGraphics = _GDIPlus_ImageGetGraphicsContext($himg)
    $iX = _GDIPlus_ImageGetWidth($himg)
    $iy = _GDIPlus_ImageGetHeight($himg)
    $hBrush = _GDIPlus_BrushCreateSolid(); $Color)
    $hFormat = _GDIPlus_StringFormatCreate()
    $hFamily = _GDIPlus_FontFamilyCreate("Arial")
    $hFont = _GDIPlus_FontCreate($hFamily, 20, 2)
    $tLayout = _GDIPlus_RectFCreate($iX -260, $iy -30)
    $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sInfo, $hFont, $tLayout, $hFormat)
    _GDIPlus_GraphicsDrawStringEx($hGraphics, $sInfo, $hFont, $aInfo[0], $hFormat, $hBrush)
    _GDIPlus_GraphicsDrawImage($hGraphics, $himg, $iX, $iy)
    _GDIPlus_ImageSaveToFile($himg, $nFile)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_ImageDispose($himg)
    GUICtrlSetData($label1, $nr)
    FileDelete($oFile)
    EndFunc ;==>SnapShot

    [/autoit]

    In die Schnappschüsse wird mit GDi+ Datum und Zeit geschrieben,

    anbei noch die benötigte WebCam.udf von @ludocus, er hat die webcam.au3 veröffentlicht,

    Edit: jetzt wird die richtige Dateiendung verwendet, danke Micha_he
    Edit2: Formel für die Plazierung des Textes eingebaut, dadurch ist Script leichter auf andere Abmessungen
    anpassbar
    Edit3: den Bug, dass das 1. Bild immer wieder kopiert wurde beseitigt
    Edit4: da es (zumindest bei @Fabian) vorkommt, dass sich das Programm nur einmal nestarten lässt Zwangsabbruch bei bereits laufender Instanz und fehlschlagender WebCam-Initialisierung eingefügt
    mfg (Auto)Bert

  • Schönes Beispiel, werde ich mir gleich mal wegspeichern. Kann man bestimmt mal gebrauchen.

    Nur die Funktion "_WebcamSnap()" legt BMP-Dateien an die in deinem Beispiel mit JPG-Endung versehen werden ($oFile) !

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Nettes Skript.
    Wenn ich das Skript starte, dann kann die Cam sofort ein Bild machen, aber wenn ich das dazugehörige
    Proggi öffne, dauerts erstma 10 Sek zum initialisieren :D
    Leider habe ich auch das selbe Problem wie funkey, alle Bilder sind nur Kopien.
    Zudem werden Datum und Uhrzeit nicht in das Bild eingefügt.
    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Nice, aber bei mir sehen alle Bilder gleich aus. Das erste Bild passt, danach sind alles nur noch Kopien im Ordner enthalten. ?(

    Bei mir genau das selbe und falls ich das Programm schliesse und erneut öffne krieg ich nur noch ein schwarzes Bild ?(

  • Hallo com,

    Update ist draussen 0.8.1.2 siehe Post #1

    funkey, PrideRage,

    Nice, aber bei mir sehen alle Bilder gleich aus. Das erste Bild passt, danach sind alles nur noch Kopien im Ordner enthalten. ?(

    dieser Bug ist damit beseitigt,

    @@Fabian:

    falls ich das Programm schliesse und erneut öffne krieg ich nur noch ein schwarzes Bild ?(

    diesen Fehler kann ich nicht nachvollziehen.

    @all: hätte nict gedacht, das so ein kleines Beispiel so ein grosses Interesse weckt (immerhin schon 19 Downloads), falls ihr weitere Wünsche und Anregungen habt => einfach posten,

    mfg (Auto)Bert

  • hallo @Fabian,

    was ein "schwarzes Bild" ist weis ich auch, nur tritt dieser Fehler bei mir nicht auf (ich kann ihn also nicht nachvollziehen).
    Hast du die neue Version aus Post #1 getestet, passiert dies immer noch :?:

    mfg (Auto)Bert

  • hallo @Fabian,

    was ein "schwarzes Bild" ist weis ich auch, nur tritt dieser Fehler bei mir nicht auf (ich kann ihn also nicht nachvollziehen).
    Hast du die neue Version aus Post #1 getestet, passiert dies immer noch :?:

    mfg (Auto)Bert

    Ja, leider passiert das immer noch.
    Einmal kann ich das Script ohne Probleme starten, macht auch schön die Screenshots, aber sobald ich es das zweite Mal starte kriege ich das schwarze Bild.
    Die Teil Lösung: Ein Neustart und ich kann das Script 1x problemlos ausführen, aber beim zweiten Mal habe ich wieder ein schwarzes Bild (bis ich wieder einen neustart gemacht habe).. :(

    Lg, Fabian

  • Jetzt klappts.
    Also ich muss sagen, super Skript. Könntest zwar noch nen Capture Button reinstecken aber das ist ja nicht so wichtig.
    Mir gefällts.

    @Fabian
    Geh mal diese Schritte durch:
    1. WebCam anschließen und/oder prüfen ob sie fest drinne steckt.
    2. Checken ob im Haupt Programm der WebCam das Bild da ist.
    3. Treiber updaten
    4. Vllt. OS Updates suchen.

    Ich denke mal es liegt an der Webcam. Ich hoffe für dich das du den Fehler findest ;)
    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • neues Update 0.8.1.3 siehe Post #1

    da es (zumindest bei @Fabian) vorkommt, dass sich das Programm nur einmal neustarten lässt habe ich Zwangsabbruch bei bereits laufender Instanz und fehlschlagender WebCam-Initialisierung eingefügt.

    @Fabian kannst du diese Version bitte testen. Falls es jetzt immer noch nicht klappt poste bitte deine relevanten Sytemdaten (BS + besonders die Eigenschaften der avicap32.dll und der user32.dll und die verwendete HW), damit ich im EN-Forum @Ludocus um Rat fragen kann,

    Zitat von PrideRage

    Jetzt klappts.
    Also ich muss sagen, super Skript. Könntest zwar noch nen Capture Button reinstecken aber das ist ja nicht so wichtig.
    Mir gefällts.

    Danke für die Blumen, aber wie du am Skript erkennen kannst, benutze ich die WebCam.AU3 von @ludocus aus dem EN-Forum, ihm gebührt also das Lob. Übrigens im gleichen Thread gibt es auch ein Script dass AVI's von der WebCam aufzeichnen kann. Die einzige Mühe die ich hatte war mit GDI+ die Zeit ins Bild zu schreiben, da ich dies äusserst selten benutze und (zumindest vom Lebensalter) dein Grossvater sein könnte (da lässt das Gedächtnis leider nach), aber dank der guten deutschen Hilfe (thanks to Tweaky, @doc & >Co) war das Problem ach nicht so gross,

    Edit3: PrideRage mit einfügen kannst du sofort einen SreenShot machen,

    mfg (Auto)Bert

    3 Mal editiert, zuletzt von autoBert (19. August 2010 um 00:23)

  • PrideRage

    Es handelt sich um eine Webcam die im LapTop integriert ist ;)
    Im Hauptprogramm funktioniert alles einwandfrei und es ist auch alles auf dem neusten Stand.

    @(Auto)Bert
    Hab das neue Script ausprobiert und konnte das Script problemlos 5mal hintereinander aufrufen! -> Funktioniert soweit :)

    Lg, Fabian

  • @(Auto)Bert
    Hab das neue Script ausprobiert und konnte das Script problemlos 5mal hintereinander aufrufen! -> Funktioniert soweit :)


    wundert mich, denn eigentlich hatte ich ertwartet, dass du jetzt folgende Fehlermeldung bekommst:
    autoit.de/wcf/attachment/11062/
    dann scheint

    [autoit]

    _Singleton

    [/autoit]

    zu greifen und es wird zu einer vorgehenden (noch nicht beendeten) Instanz zurückgekehrt, das heisst SnapShot.exe müsste auch nach Beenden noch im Taskmanager zu sehen sein kannst du dass bitte prüfen

    mfg (Auto)Bert ,

  • Danke für die Blumen, aber wie du am Skript erkennen kannst, benutze ich die WebCam.AU3 von @ludocus aus dem EN-Forum, ihm gebührt also das Lob.

    Er hat zwar die UDF gemacht, jedoch ist eine UDF nur ein Rohmaterial, man muss es sozusagen richtig verarbeiten.
    Dein Skript ist gut und läuft sauber, warum solltest du also keinen Lob bekommen ?

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Hallo (Auto)Bert

    Ich habe testweise eine MsgBox eingebaut

    [autoit]

    If _Singleton($sProgTitel & $sProgVer, 1) = 0 Then
    MsgBox(0,"","Bereits vorhanden")
    WinActivate($sProgTitel & $sProgVer)
    Exit
    EndIf

    [/autoit]

    Das Ergebnis: Ich bekomme bei einem neustart keine MsgBox, also greift _Singleton nicht, aber das Script funktioniert weiterhin 1A :thumbup:

    Lg, Fabian


    dann scheint

    [autoit]

    _Singleton

    [/autoit]

    zu greifen und es wird zu einer vorgehenden (noch nicht beendeten) Instanz zurückgekehrt, das heisst SnapShot.exe müsste auch nach Beenden noch im Taskmanager zu sehen sein kannst du dass bitte prüfen

    mfg (Auto)Bert ,

  • Thx aber mein Problem war das ich die Webcam.au3 nicht hatte,weswegen es den Snapshot Befehl nicht hab ^^'

  • Hallo,
    tut mir Leid das ich in diesem etwas älteren Thread noch poste, nur ich hatte das oben beschriebene Problem mit der Webcam unter Win7.
    Folgendes Script funktioniert bei mir einwandfrei, auch nach mehreren Starts - der einzige Nachteil ist, dass die Meldung bezüglich der Videoquelle auftaucht.

    geändertes Script
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.6.1
    Author: autoBert http://www.autoit.de/index.php?page…2937#post182937
    based on http://www.autoitscript.com/forum/index.ph…ndpost&p=572154

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Demo for Webcam Udf

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------
    #include 'webcam.au3'
    #include<GDIPlus.au3>
    #include <Misc.au3>
    #include<array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $cam_xlength = 640;Breite
    $cam_ylength = 480 ;Höhe

    [/autoit] [autoit][/autoit] [autoit]

    $sProgTitel = "SnapShot from WebCam"
    $sProgVer = "v 0.8.1.3"

    [/autoit] [autoit][/autoit] [autoit]

    $capDir = @ScriptDir & "\captures"
    If Not FileExists($capDir) Then DirCreate($capDir)

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{INSERT}", "SnapShot")

    [/autoit] [autoit][/autoit] [autoit]

    If _Singleton($sProgTitel & $sProgVer, 1) = 0 Then
    WinActivate($sProgTitel & $sProgVer)
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $gui = GUICreate($sProgTitel & $sProgVer, $cam_xlength, $cam_ylength + 20, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    $WebcamID = _WebcamOpen($gui, 0, 0, $cam_xlength + 30, $cam_ylength)
    $label1 = GUICtrlCreateLabel("", 0, $cam_ylength + 5, $cam_xlength, 20)
    _GDIPlus_Startup()
    $WebcamID = _WebcamOpen($gui, 0, 0, $cam_xlength + 30, $cam_ylength)
    GUISetState(@SW_SHOW)
    AdlibRegister("SnapShot", 10000)

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Until GUIGetMsg() = -3
    AdlibUnRegister("SnapShot")
    _WebcamClose($WebcamID)
    ConsoleWrite($WebcamID & @CRLF)
    _GDIPlus_Shutdown()

    [/autoit] [autoit][/autoit] [autoit]

    Func SnapShot()
    $nr = 1
    While FileExists($capDir & "\Bild" & $nr & ".jpg")
    $nr += 1
    WEnd
    $oFile = $capDir & "\Bild.bmp"
    $nFile = $capDir & "\Bild" & $nr & ".jpg"
    If FileExists($oFile) Then FileDelete($oFile)
    _WebcamSnap($WebcamID, $oFile)

    [/autoit] [autoit][/autoit] [autoit]

    Local $aDT = FileGetTime($oFile)
    $sInfo = $aDT[0] & "/" & $aDT[1] & "/" & $aDT[2] & " " & $aDT[3] & ":" & $aDT[4] & ":" & $aDT[5]
    ConsoleWrite($sInfo & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    $himg = _GDIPlus_ImageLoadFromFile($oFile)

    [/autoit] [autoit][/autoit] [autoit]

    $hGraphics = _GDIPlus_ImageGetGraphicsContext($himg)
    $iX = _GDIPlus_ImageGetWidth($himg)
    $iy = _GDIPlus_ImageGetHeight($himg)
    $hBrush = _GDIPlus_BrushCreateSolid(); $Color)
    $hFormat = _GDIPlus_StringFormatCreate()
    $hFamily = _GDIPlus_FontFamilyCreate("Arial")
    $hFont = _GDIPlus_FontCreate($hFamily, 20, 2)
    $tLayout = _GDIPlus_RectFCreate($iX - 260, $iy - 30)
    $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sInfo, $hFont, $tLayout, $hFormat)
    _GDIPlus_GraphicsDrawStringEx($hGraphics, $sInfo, $hFont, $aInfo[0], $hFormat, $hBrush)
    _GDIPlus_GraphicsDrawImage($hGraphics, $himg, $iX, $iy)
    _GDIPlus_ImageSaveToFile($himg, $nFile)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_ImageDispose($himg)
    GUICtrlSetData($label1, $nr)
    FileDelete($oFile)
    EndFunc ;==>SnapShot

    [/autoit]

    Vielleicht kannst du das ja brauchen,
    stayawayknight