Webcam Bild Automatisch speichern

  • Hallo

    ich komme aus der SPS s7 Welt. Ich habe eine Haussteueurng auf der über einen
    Videoserver das Kamerabild der Haustüre angezeigt wird. Leider kommt es des Öfteren
    vor das ich am HMI nicht sehe wer an der Türe steht weil die Kamera in der
    Sprechanlage eingebaut ist.

    Ich würde mir gerne ein Programm erstellen das das Kamerabild in eine Datei
    speichert. Somit könnte ich mir am HMI das zuletzt gespeicherte Bild ansehen.
    Das Speicher würde durch den Aufruf des Programmes erfolgen. Dies könnte ich
    bei Klingeln mit der SPS realisieren.

    Leider habe ich keinen Ansatz hierfür.

  • Bin mir nicht sicher ob ich dich richtig verstanden habe, aber ich glaube du soltest dich mal in GDI+ einlesen in der hilfe gibt es viele beispiele für automatische Screenshots von Fenstern oder Bildschirmregionen.

  • howdy

    ich hab mir da vor ner zeit mal was gezogen von Ludocus

    UDF:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.2.11.7 (beta)
    Author: Ludocus

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

    Script Function:
    Webcam Udf

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here
    #include <WindowsConstants.au3>
    #include-once
    $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
    #include <GUIConstants.au3>
    $avi = DllOpen("avicap32.dll")
    $user = DllOpen("user32.dll")

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

    ;===============================================================================
    ;
    ; Description: Open's a webcam preview screen in your gui
    ; Syntax: _WebcamOpen($sHwnd, $sLeft, $sTop, $sWidth, $sHeight)
    ; Parameter(s): $sHwnd - The handle of the gui
    ; $sLeft - Left coord. of the preview screen
    ; $sTop - Top coord. of the preview screen
    ; $sWidth - Width of the preview screen
    ; $sHeight - Height of the preview screen
    ; Requirement(s): A webcam
    ; Return Value(s): On Success - Returns id needed for other controls
    ; On Failure - Returns -1
    ; Author(s): Ludocus
    ; Note(s): None
    ;
    ;===============================================================================
    func _WebcamOpen($sHwnd, $sLeft, $sTop, $sWidth, $sHeight)
    $cap = DllCall($avi, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD,$WS_VISIBLE), "int", $sLeft, "int", $sTop, "int", $sWidth, "int", $sHeight, "hwnd", $sHwnd, "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)
    if @error then return -1
    return $cap[0]
    EndFunc

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

    ;===============================================================================
    ;
    ; Description: Creates a Snapshot from a webcam
    ; Syntax: _WebcamSnap($sId, $sFile)
    ; Parameter(s): $sId - Id (returned from _WebcamOpen)
    ; $sFile - File to save the snapshot to (*.bmp)
    ; Requirement(s): A webcam
    ; Return Value(s): On Success - Returns 1
    ; On Failure - Returns 0
    ; Author(s): Ludocus
    ; Note(s): None
    ;
    ;===============================================================================
    Func _WebcamSnap($sId, $sFile)
    DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SET_CALLBACK_FRAME, "int", 0, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_GRAB_FRAME_NOSTOP, "int", 0, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_FILE_SAVEDIBA, "int", 0, "str", $sFile)
    if @error Then
    return 0
    Else
    return 1
    EndIf
    EndFunc

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

    ;===============================================================================
    ;
    ; Description: Closes the preview screen created with _WebcamOpen
    ; Syntax: _WebcamClose($sId)
    ; Parameter(s): $sId - Id (returned from _WebcamOpen)
    ; Requirement(s): A webcam
    ; Return Value(s): On Success - Returns 1
    ; On Failure - Returns 0
    ; Author(s): Ludocus
    ; Note(s): None
    ;
    ;===============================================================================
    Func _WebcamClose($sId)
    DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_END, "int", 0, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_DRIVER_DISCONNECT, "int", 0, "int", 0)
    DllClose($user)
    if @error Then
    return 0
    Else
    return 1
    EndIf
    EndFunc

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

    ;===============================================================================
    ;
    ; Description: Starts recording the webcam to a file
    ; Syntax: _WebcamRecordStart($sFile, $sId)
    ; Parameter(s): $sId - Id (returned from _WebcamOpen)
    ; $sFile - File to save the movie to (*.avi)
    ; Requirement(s): A webcam
    ; Return Value(s): On Success - Returns 1
    ; On Failure - Returns 0
    ; Author(s): Ludocus
    ; Note(s): Stop recording by: _WebcamRecordStop($Id)
    ;
    ;===============================================================================
    Func _WebcamRecordStart($sFile, $sId)
    DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_FILE_SET_CAPTURE_FILEA, "int", 0, "str", $sFile)
    DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SEQUENCE, "int", 0, "int", 0)
    if @error Then
    return 0
    Else
    return 1
    EndIf

    EndFunc

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

    ;===============================================================================
    ;
    ; Description: Stops recording.
    ; Syntax: _WebcamRecordStop($sId)
    ; Parameter(s): $sId - Id (returned from _WebcamOpen)
    ; Requirement(s): A webcam
    ; Return Value(s): On Success - Returns 1
    ; On Failure - Returns 0
    ; Author(s): Ludocus
    ; Note(s): None
    ;
    ;===============================================================================
    Func _WebcamRecordStop($sId)
    DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_STOP, "int", 0, "int", 0)
    if @error Then
    return 0
    Else
    return 1
    EndIf
    EndFunc

    [/autoit]

    und hier das testscript:

    [autoit]

    #include <Webcam.au3>

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

    $GUI = GUICreate("webcamtest",800,600,-1,-1)
    _WebcamOpen($GUI, 5, 5, 790, 590)
    While 1
    sleep(10)
    WEnd

    [/autoit]

    habs grad nicht getestet weil keine cam angeschlossen ist, müsste aber funktionieren.. damit kannst du die übertragung live anzeigen lassen und schnappschüsse machen


    mfg
    sgtigram

    • Offizieller Beitrag

    das Bild sollte von einer IP Cam gespeichert werden. Wo muss die IP eingetragen werden ?


    Nun, eine IP-Cam ist keine Web-Cam im klassischen Sinn. Somit ist die angeführte UDF mit Verwendung der "avicap32.dll" sehr wahrscheinlich nicht anwendbar.
    Aber schau mal bei den Software-Tools, ob nicht was Passendes bei ist:
    http://www.freeware-base.de/freewares-kategorie592.html
    http://www.hsinlin.com/software/webcams.html

  • Habes es hiermit hin bekommen
    InetGet("http://192.168.178.24/Jpeg/CamImg*.jpg","C:\Kamera\Bild.jpg",1)

    Wie kann ich das Bild in einem in einem Ringspeicher abspeichern ? So das immer das 10 Bild gelöscht wird ?

    • Offizieller Beitrag

    Wie kann ich das Bild in einem in einem Ringspeicher abspeichern ? So das immer das 10 Bild gelöscht wird ?


    Schreib dir eine Speicherfunktion:
    - Dateien im Ordner mit _FileListToArray einlesen
    - Zielordner hat weniger als 10 Bilddateien? ==> nur speichern
    - sonst ==> durch Array iterieren und älteste Datei ermitteln - diese löschen, neue Datei speichern

  • Hallo
    ich habe mir ja ein Prgramm erstellt mit dem ich Bilder von einer IP Cam speichern kann.
    Jetzt wollte ich ein Bild mit der endung cgi speichern . Dies geht aber nicht. Was müsste ich in der Funktion ändern das ich jpg als auch cgi Bilder Speichern kann als jpg ?

    jpg Pfad = "http://192.168.178.24/Jpeg/CamImg*.jpg"
    cgi Pfad = http://192.168.178.29/snapshot.cgi


    [autoit]


    Func _BildAufnahmen()

    ; Neues Bild in Zwischenspeicher Speichern
    InetGet($Pfad, @ScriptDir & "\Bilder\Bild.jpg",0)
    ;Bilder verschieben
    For $i = $Anzahl to 2 Step -1
    FileDelete(@ScriptDir & "\Bilder\Bild"&$i&".jpg")
    FileMove(@ScriptDir & "\Bilder\Bild"&$i-1&".jpg",@ScriptDir & "\Bilder\Bild"&$i&".jpg")
    Next
    ; Neues Bild in Bild1 Verschieben
    FileMove(@ScriptDir & "\Bilder\Bild.jpg",@ScriptDir & "\Bilder\Bild1.jpg")
    ;Zwiachenspeicher Löschen
    FileDelete(@ScriptDir & "\Bilder\Bild.jpg")
    $NeueAufnahme=1

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

    EndFunc

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

    Einmal editiert, zuletzt von emilio20 (30. April 2014 um 18:37)

  • Dir ist schon klar, dass "snapshot.cgi" sehr sicher kein exotisches Bildformat, sondern ein serverseitiges Script ist, welches ein Bild erzeugt?

    Verwende inetread, lass dir den Quelltext der zurückgelieferten HTML Seite in die Scite console ausgeben und such dir den Bildlink raus, der sehr sicher auf dieser zurückgegebenen HTML Seite zu finden ist. Sofern dieses halb-manuelle Vorgehen zum Erfolg führt brauchst du eben noch diverse Stringfunktionen um den Link automatisiert aus dem Quelltext zu extrahieren um dann mit inetget das Bild herunterzuladen.

  • Hallo
    danke für die Antwort.
    habe es mit dem Befehl versucht. script hat auch soweit bei Webseiten funktioniert. Leider wird kein Quellcode beid der Camera angezeigt.
    Ich dachte es gibt eine Möglichkeit die universell bei cgi zu nutzen. Somit wäre es ja besser wenn ich im vorfeld herausfinde wie die jpg adresse ist.

    Als Webcam verwend ich eine
    http://www.pollin.de/shop/dt/NDE3Nz…1_Pan_Tilt.html

    leider könnte ich noch nicht herausfinde wie die jpg adresse des Kamerabildes ist.

  • Keiner eine lösung ?
    Wollte mir eine Sprechanlagenprogramm schreiben. Wenn geklingelt wird wird das Programm in den Vordergrund eingeblendet. Dort wollte ich das Livebild einer IP Kamera sehen .
    Türe öffnen geht über Libnodave da eine SPS im Haus verbaut ist. Von dort kommt auch das Klingelsignal.

    Über die Micro und Lautsprecher komunikation muss ich mir noch gedanken machen.

  • Ohne Bibliothek (nach der ich auch erst Suchen müsste, ich denke, es gibt sie aber bestimmt) würd ich sagen, dass du die Bilder ausliest und kopierst. Dann könntest du sie mit

    [autoit]

    GuiCtrlCreatepic()GuiCtrlSetImage()

    [/autoit]


    anzeigen lassen. Je nachdem, wie viele Bilder das sind würde es aber vermutlich flackern...

    Ansonsten hab ich nach kurzem suchen bei Google das hier gefunden:
    http://www.autoitscript.com/forum/topic/14…-stream-record/


    Dabei geht es um die Aufnahme einer Ip Kamera. Ich denke da könntest du dir das passende Raussuchen und umschreiben.

    Viel Glück noch!