Deutsch
Quelltexte/ Codesnippets

Bewegungsmelder Webcam Kamera escapi.dll prospeed.dll

 

Walter
Ein Bewegungsmelder über Webcam, einbaubar in eigene Anwendungen.
Basis ist  [...] 
und die Anregung in  [...]  bzw.  [...]  , prospeed.dll für den Vergleich der Webcam-Bilder zu verwenden.
 $H Windows.ph
' Bewegungsmelder
' Walter, 29.4.2023
' Der Bewegungsmelder zeigt am Bildschirm im Sekundentakt Bilder aus der Laptop-Kamera zur Kontrolle/Einstellung der Empfindlichkeit.
' Das jeweilige Bild wird auf Änderungen zum vorigen Bild geprüft (Toleranz für Änderung / Anzahl der geänderten Pixel).
' Wird bei mehr als der eingestellten Anzahl Pixeln die eingestellte Toleranz überschritten, erfolgt eine Meldung.
'
' Ab dem Drücken von Button START werden bei jeder erkannten Veränderung
' Bild-Nr, Datum und Uhrzeit ins Bild geschrieben und das Foto im Programmordner gespeichert.
' (Die Bilder werden nicht automatisch gelöscht, jedoch beim nächsten Start des Programms überschrieben).
' (Das alles lässt sich natürlich an die eigenen Wünsche anpassen - dazu ja die Source :+D--).
' Hier ist eingestellt 1 Bild pro Sekunde, Breite/Höhe 640*480
'
' Basis ist "https://xprofan.net/intl/de/quelltexte/webcam-laptop-kamera-snapshot-escapi-dll/"
' und die Anregung in "https://xprofan.net/intl/de/cafe/bewegungsmelder-programmieren-mithilfe-einer-webcam/" bzw. "https://xprofan.net/intl/de/anwendungen/webcam-bewegungsmelder/",
' prospeed.dll für den Vergleich der Webcam-Bilder zu verwenden.
'
' Benötigt Escapi.dll V3 Win32
'          Windows.ph
'          prospeed.dll
'
declare dll1&,AnzCam%,capture#,a%,b%,name$
declare dll2&,ZweitesBild#, x&,AnzBy&,Tol&
declare b1%,b2%,t%,ed1%,ed2%,m%
declare hBMP%,BildBuffer#
declare pfad$,i%,Startverzögerung%,Ende%,läuft%, Bewegungen%,zeit!,dauer!,HiebeProBew%
'
pfad$=GetDir$("")
Startverzögerung%=3
'
'
' Bildbuffer
AnzBy&=1228800
dim BildBuffer#,AnzBy&' 640*480*4 Byte
dim ZweitesBild#,AnzBy&
'
' Schnittstellenstruktur für escapi.dll
struct Bild=buff%%,mWidth&,mHeight&' Pointer auf den Bild-Buffer, Bildbreite, Bildhöhe
dim capture#,Bild
capture#.buff%%=addr(BildBuffer#)
capture#.mWidth&=640
capture#.mHeight&=480
'
' Escapi.dll
Def ESCAPIDLLVersion(0) !"escapi","ESCAPIDLLVersion"
Def countCaptureDevices(0) !"escapi","countCaptureDevices"
Def deinitCapture(1) !"escapi","deinitCapture"
Def doCapture(1) !"escapi","doCapture"
Def getCaptureDeviceName(3) !"escapi","getCaptureDeviceName"
Def initCOM(0) !"escapi","initCOM"
Def initCapture(2) !"escapi","initCapture"
Def isCaptureDone(1) !"escapi","isCaptureDone"
dll1&=usedll("Escapi.dll")
'
' Prospeed.dll
 $I Prospeed_Funktionen.inc
dll2&=usedll("prospeed.dll")
'
'
'
'
'-------------------------------------------
WindowTitle "Bewegungsmelder"
window 700,700
CLS ~GETSYSCOLOR(15)
'
' Toleranz
create("Text",%hwnd,"Toleranz für veränderte Pixel",20,503,200,25)
ed1%=Create("Edit",%hwnd,"200",220,500,40,20)
Create("Tooltip",%hwnd,ed1%,"Etwa 200...300 ist bei mir ein guter Wert.")
create("Text",%hwnd,"Anzahl veränderter Pixel außerhalb Toleranz",300,503,300,25)
ed2%=Create("Edit",%hwnd,"100",620,500,40,20)
Create("Tooltip",%hwnd,ed2%,"Etwa 100 ist bei mir ein guter Wert.")
t%=create("Text",%hwnd,"",20,550,400,25)
'
b2%=create("Button",%hwnd,"Start",450,550,80,25)
Create("Tooltip",%hwnd,b2%,"Ab START wird bei jeder erkannten Bewegung ein Bild gespeichert..")
'
b1%=create("Button",%hwnd,"Ende",580,550,80,25)
m%=create("Text",%hwnd,"",20,600,400,20)
'
UseFont "Arial",12,0,0,0,0
'
'
' Kamera einschalten (escapi.dll)
' messagebox(str$(ESCAPIDLLVersion()),"Escapi Version",0)
AnzCam%=countCaptureDevices()
name$=space$(1024)
' messagebox("Anzahl Kameras gefunden: "+str$(AnzCam%),"Anzahl",0)
getCaptureDeviceName(0,addr(name$),1024)' Kamera Nr. 0
' messagebox(name$,"Kamera gewählt",0)
a%=initCapture(0, addr(capture#))
'
'
'
läuft%=0
ende%=0
Bewegungen%=0
i%=1
Settimer 1000' Sekundentakt
UserMessages $10' Abbruch übers Windows-Kreuz
'
'

whilenot ende%

    waitinput

    if %UMessage = $10' Abbruch übers Windows-Kreuz

        ende% = 1

    elseif %wmtimer

        settext m%,""

        if i%>1

            ' Das vorige Bild wird in ZweitesBild# gemerkt
            ZweitesBild#=BildBuffer#

        endif

        if a%>0

            b%=doCapture(0)

        endif

        if b%>0

            while isCaptureDone(0)=0

            wend

        endif

        hBMP% = ~CreateBitmap(capture#.mWidth&, capture#.mHeight& , 1 , 32 , BildBuffer#)' Bitmap aus den Bufferdaten erzeugen
        DrawPic hBMP%, 20, 0; 0' Kontrollbild am Bildschirm
        tol&=val(gettext$(ed1%))'Toleranz einlesen

        if i%>Startverzögerung%' eingestellt sind 3 Sekunden, dann wird 1 x pro Sekunde verglichen

            '  Altes Bild wird mit neuem verglichen
            '  prospeed.dll: CompareBytes (B1,B2,A,T)
            x&=compareBytes(ZweitesBild#,BildBuffer#,AnzBy&,tol&)
            ' Auswertung

            if  x&>val(gettext$(ed2%))' Anzahl Bytes außerhalb der Toleranz

                beep
                settext m%,"Bewegung erkannt: "+str$(x&)+" Pixel sind verändert."

                if läuft%=1

                    inc Bewegungen%
                    BildBeschriftenSpeichern

                endif

            endif

        endif

        sleep 10
        ~DeleteObject(hBMP%)'Speicher von Bitmap freigeben
        inc i%

    elseif clicked(b1%)' Abbruch-Button

        ende%=1

    elseif clicked(b2%)' Start gedrückt

        läuft%=1
        settext t%,"Bei jeder erkannten Bewegung wird ein Bild gespeichert."

    endif

Wend

freigeben
end
'
'
'-------------------------------

proc BildBeschriftenSpeichern

    '-------------------------------
    ' Bild Nr, Datum und Zeit ins Bild schreiben
    ' Bild speichern
    ' Nr, Datum und Uhrzeit ins Bild schreiben
    startpaint hBMP%
    drawtext 0, 0, "Nr. "+str$(Bewegungen%) + "  " + dt("getDate",0)+"  "+dt("getTime", 2)
    endpaint
    ' Bild speichern
    savepic pfad$+"\\Bew."+format$("000.",Bewegungen%)+".jpg",hBMP%,75

endproc' BildBeschriftenSpeichern

'
'
'-------------------

proc Freigeben

    '-------------------
    killtimer
    deinitCapture(0)
    dispose capture#, Bildbuffer#, ZweitesBild#
    freedll dll1&
    freedll dll2&
    ~DeleteObject(hBMP%)

endproc' Freigeben

 
30.04.2023  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.009 Betrachtungen

Unbenanntvor 0 min.
H.Brill04.08.2024
Heiko Dix30.10.2023
Sven Bader11.08.2023
Walter12.07.2023
Mehr...

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

Walter (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie