[uBasic] Bewegungserkennung (motion detection)

CHDK-Skripte, CHDK-Entwicklung, PC-Zusatzprogramme, Informationen für Tüftler

Bewegungserkennung (motion detection)

Beitragvon msl » 11.04.2008, 16:16

Hier mal ein Skript zur Bewegungserkennung. Es ist universell einsetzbar. Die wichtigen Parameter sind kommentiert. Zu beachten ist auch eine Unterscheidung von DigicII und DigicIII Kameras. Voreingestellt ist DigicIII.


Code: Alles auswählen
rem orig. Johan Van Barel 02-04-2008

@title Bewegungserkennung
@param a Spalten
@default a 6
@param b Reihen
@default b 4
rem Schwellwert: 10=Blitz, 12=sonnig, 24=wolkig, 36=dunstig
rem Der Schwellwert ist die Epfindlichkeit der Bewegungserkennung
rem Blitz steht für Gewitterfotografie
@param c Schwellwert(0-255)
@default c 24
@param d Interval (mSek.)
@default d 1
rem Verzögerung: 0=sehr schnell(Blitz), 16=normal, 32=langsam
@param e Verzögerung(.1 Sek.)
@default e 0
@param f Blockgröße
@default f 8
rem Modus U bzw.V=chroma Y=luma
@param g Modus(U=0,Y=1,V=2)
@default g 1
@param h Anfangsverzögerung (Sek.)
@default h 1

if a<1 then a=1
if b<1 then b=1
if c<0 then c=0
if e<0 then e=0
if f<1 then f=1
if g<0 then g=0
if g>5 then g=5
if r<0 then r=0
if h<0 then h=0

e=e*100

rem Startzeit in ms
x=5000

sleep h*1000

i=0
while 1
    t=0
    if e=0 then
        press "shoot_half"
        do
            rem Digic II 205 Digic III 206
            get_prop 206 p
        until p=1
    endif
    md_detect_motion a, b, g, x, d, c, 1, t, 0, 1, 1, a, b, 0, f, e
    if t>0 then
        click "shoot_full"
        i=i+1
        print "Bild", i, "(Blocks="; t; ")"
        if e=0 then
            do
                rem Digic II 205 Digic III 206
                get_prop 206 p
            until p<>1
        endif
    endif
wend


Dank gilt dem Originalautor Johan van Barel

Viel Spaß beim Testen

msl
Zuletzt geändert von msl am 24.10.2008, 18:10, insgesamt 2-mal geändert.
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon Gast » 18.04.2008, 08:54

Ab jetzt lass ich die Digicam den ganzen Tag an und lass ma überwachen was sich hier so in meiner Wohnung tut im Bezug auf Katzenbewegungen :-D

Einfach geil!
Gast
 

parse error 43

Beitragvon Gast » 18.04.2008, 17:25

Hallo Forum,


ich bekomme mit dem Script immer "Parse Error 43".
Wenn ich das alles richtig verstanden habe mag er also etwas in Zeile 43 nicht.

Hat jemand eine Idee woran das liegt?


Grüße
Gast
 

Beitragvon Gast » 18.04.2008, 17:35

Vielleicht weil DigicIII eingestellt ist und Deine Kamera den DigicII hat?!
Gast
 

Beitragvon CHDKLover » 18.04.2008, 17:39

Da genau EmP hat recht du musst nach "get_prop" suchen (2x) und den Wert "206" zu "205" ändern!

CHDKLover
A610 100e CHDK-DE: aktuelle Version
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 18:25
Wohnort: Dresden
Kamera(s): a610 100e

Beitragvon Gast » 18.04.2008, 20:07

EmP hat geschrieben:Vielleicht weil DigicIII eingestellt ist und Deine Kamera den DigicII hat?!


CHDKLover hat geschrieben:Da genau EmP hat recht du musst nach "get_prop" suchen (2x) und den Wert "206" zu "205" ändern!

CHDKLover



ist 2x auf 205 wie in der Anleitung und in den Script-Kommentaren angegeben

Ich weis ja nicht, wie die Kamera das Skript abarbeitet, aber Zeile 43 liegt auch vor den beiden "get_prop 205 p"-Zeilen.


das war's leider nicht

Hat sonst noch jemand eine S2IS bei dem das läuft? Muss ich noch irgend welche sonstigen Einstellungen an der Kamera machen?

Gruß
Gast
 

Beitragvon msl » 18.04.2008, 20:49

Hallo Silentsurfer,

spezielle Einstellungen brauchst Du nicht zu machen. Es ist nicht garantiert, dass alle Skripte in allen Kameras funktionieren - leider. :shock:

Ich gehe davon aus, dass Schreibfehler ausgeschlossen sind.

Also müssen wir das Problem systematisch angehen. Es ist zu vermuten, dass Deine Kamera bei get_prop aussteigt. Demzufolge wirst Du solche Funktion erstmal auschließen müssen.

Diese Skript hat keine ProperCase-Variablen. Probier es aus.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon Gast » 18.04.2008, 21:21

msl hat geschrieben:Diese Skript hat keine ProperCase-Variablen. Probier es aus.
Gruß msl


vorab schonmal "Danke" für's "an die Hand nehmen"

also
Das Skript lässt sich starten. (unten links im Display steht "** GESTARTET ***")
Egal ob sich vor der Kamera etwas bewegt oder nicht, es passiert 11 Sekunden lang nichts.
(Das Display zeigt währenddessen (wie in der normalen Vorschau auch) was sich vor der Kamera befindet.)
Dann schaltet sich die Kamera komplett aus.
Wenn ich die Kamera dann anschalte sind keine (neuen) Bilder auf dem Chip (Die Kamera hat ja auch keine Bilder gemacht).


Ich habe jetzt schon viele Skripte ausprobiert. Bei den meisten erhalte ich entweder einen Parse Error oder die Kamera schaltet sich ab oder die Kamera geht aus und wieder an.
Diese Skript ist eines der wenigen, die funktionieren.

Ich bin ratlos.

Gruß
Silentsurfer
Gast
 

Beitragvon msl » 18.04.2008, 21:52

Wenn das Interval-Skript funktioniert, ist prinzipiell erstmal alles in Ordnung. :)

Zurück zum MD-Skript:

Hast du mal die Parameter verändert. Z. B. ist c (Treshold) die Empfindlichkeit.

Im CHDK-Wiki gibt es einige MD-Skripte, einfach probieren und mit den Parametern spielen.

Verlier nicht die Geduld. Bei mir hat es auch gedauert. Ich schau mich auch mal noch um.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon Gast » 18.04.2008, 23:08

msl hat geschrieben:
Also müssen wir das Problem systematisch angehen. Es ist zu vermuten, dass Deine Kamera bei get_prop aussteigt. Demzufolge wirst Du solche Funktion erstmal auschließen müssen.

Diese Skript hat keine ProperCase-Variablen. Probier es aus.

Gruß msl


Hallo nochmal,

ich habe obiges Skript mit Debug-Ausgaben versehen, hier ein Ausschnitt:


print "Debug1"
let d=d+e
print "Debug2"
rem This is the timeout in msecs. After this period, the motion trap is rearmed.
print "Debug3"
let T=600000
print "Debug4"


Das Skript läuft los, und kommt bis zur Ausgabe "Debug3". Dann passiert 11 Sekunden lang nichts und die Kamera geht aus (manchmal startet sie auch neu nach dem Ausgehen).

Ich habe alle Skripte, die auf meiner S2IS laufen durchgeschaut und festgestellt, dass keines davon Großbuchstaben als Variablen verwendet. Und hier steigt die Kamera bei Variable "T" aus. Hilft das, um das Problem einzugrenzen?

Gruß
Silentsurfer
Gast
 

Beitragvon Gast » 18.04.2008, 23:19

Hallo Forum,

habe die DISKBOOT.BIN auf der SD-Karte mit der auf meiner Festplatte verglichen und siehe da: nicht identisch. Neu drauf kopiert und jetzt scheint es zu funktionieren....

Jetzt weiß ich mal wieder warum man Datenträger aushängen soll, bevor man sie vom Rechner trennt......

mea culpa und vielen Dank für die Hilfeversuche

Gruß
Silentsurfer
Gast
 

Beitragvon procyon » 01.05.2008, 14:34

Silentsurfer hat geschrieben:
Hat sonst noch jemand eine S2IS bei dem das läuft? Muss ich noch irgend welche sonstigen Einstellungen an der Kamera machen?

Gruß


Ich habe - bei mir lief es aber nur mit Änderung der beiden Werte schon.
Habe allerdings die 100f-Version (macht das groß einen Unterschied?)

----
edit:
ich bin doof, hab nicht weitergelesen :oops:
Benutzeravatar
procyon
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 81
Registriert: 21.04.2008, 16:51
Wohnort: Erzgebirge

Re: Bewegungserkennung (motion detection)

Beitragvon trichtex » 20.05.2008, 08:54

Moin!

msl hat geschrieben:Hier mal ein Skript zur Bewegungserkennung.


Gelegentlich möchte man festlegen können, in welchem Bildbereich Bewegungen erkannt werden sollen. In meiner Scriptversion kann deshalb nach der Festlegung der Zeilen und Spalten des Gitters ein Fenster aktiviert werden, innerhalb dessen Bildänderungen erfaßt werden. Nachfolgend wird festgelegt, welche Zeilen und Spalten das Fenster umfaßt.

Das Fenster läßt sich auch invertiert aktivieren. Dann wird alles außerhalb der festgelegten Zeilen und Spalten auf Bildänderungen gepüft.

Munter bleiben... TRICHTEX

Code: Alles auswählen
rem Autor Trichtex
rem Für A610 mit Allbest Build #50


@title Bewegungsauslöser
@param a Zeilen Gitter
@default a 4
@param b Spalten Gitter
@default b 6
@param c Gitter zeigen (0=Nein 1=Ja)
@default c 1
@param d Fenster (0=Aus 1=Ein 2=Inv)
@default d 1
@param e Erste Zeile des Fensters
@default e 2
@param f Letzte Zeile des Fensters
@default f 3
@param h Erste Spalte des Fensters
@default h 3
@param i Letzte Spalte des Fensters
@default i 4
@param j Prüfmethode (0-U,1-Y,2-V)
@default j 1
@param k Empfindlichkeit (Pixel)
@default k 6
@param r Lichtschwellwert (0-255)
@default r 10
@param l Vergleichsintervall (ms)
@default l 1
@param m Auslöseverzögerung (0.1s)
@default m 1
@param o Timeout-Periode (s)
@default o 170
@param n Zahl Serienbilder
@default n 5
rem s Wert: D=Direktauslösung, oN=Auslösung ohne Neufokussierung, S=Serienauslösung ohne Neufokussierung
@param s Auslöseart (0=D/1=oN/2=S)
@default s 1
@param u Vor-Fokus (0=Nein 1=Ja)
@default u 1

if c<0 then c=0
if c>1 then c=1

if e>a then e=a
if e<1 then e=1

if f>a then f=a
if f<1 then f=1

if h>b then h=b
if h<1 then h=1

if i>b then i=b
if i<1 then i=1

if s<0 then let s=0
if s>2 then let s=2
get_prop 0 x
if x=18 then let s=3
get_prop 6 y
if s<>2 and y=1 then
   let s=2
else if s=2 and y<>1 then
   let s=0
endif
if s=0 then let g=1 else let g=0
m=m*100
o=o*1000
print "Beenden: Auslöser drücken"
while 1
   if x<>18 and u<>0 then gosub "fokussieren"
   md_detect_motion b, a, j, o, l, r, c, t, d, h, e, i, f, g, k, m
   if t>0 then print t, " Felder erkannt"
   if t=0 then gosub "wecken"
   if t>0 and u=0 and s=2 then gosub "fokussieren"
   if t>0 and s=1 then click "shoot_full"
   if t>0 and s=2 then gosub "Serienaufnahme"
   if t>0 and s=3 then gosub "Filmaufnahme"
   if t>0 and x<>18 then
      do
         get_prop 205 p
      until p<>1
      let t=0
   endif
wend

:fokussieren
    press "shoot_half"
    do
      get_prop 205 p
    until p=1
return

:Serienaufnahme
      press "shoot_full"
      sleep n*1000
      release "shoot_full"
return

:Filmaufnahme
      click "shoot_full"
      sleep n*1000
      click "shoot_full"
return

:wecken
  release "shoot_half"
  if x<>18 and u=0 then
   click "set"
   click "set"
  endif
return

end


Und hier mal ein Bild, das in ein paar Minuten mit dem Bewegungsauslöser bei Sonnenlicht gemacht wurde (einige Versuche, weil Tropfen nicht immer so fallen, wie gewünscht). Scipteinstellung: Empfindlichkeit 4 Pixel, Auslöseverzögerung 0, Lichtschwellwert 8, alles andere Defaultwerte. Belichtung 1/1250, kürzer wäre möglich und besser gewesen, aber für einen "Schuß aus der Hüfte" ist das schon beeindruckend. Ich möchte mir gar nicht vorstellen, sowas irgendwie manuell zu versuchen.

Bild
Dateianhänge
Bewegungsausl.bas
(3.82 KiB) 3111-mal heruntergeladen
Zuletzt geändert von trichtex am 21.05.2008, 09:38, insgesamt 3-mal geändert.
trichtex
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 44
Registriert: 20.05.2008, 08:32

Beitragvon msl » 20.05.2008, 12:16

Hallo trichtex,

sehr gute Arbeit.

Ich habe das Skript (ohne Kommentierung) in Deinen Beitrag eingefügt, damit alle sehen können, wovon wir sprechen. :D

Die Datei im Anhang enthält eine umfangreiche Kommentierung. Man sollte noch erwähnen, dass das Skript für DigicII-Kameras gedacht ist. Bei Nutzung mit DigicIII-Kameras muss der get_prop-Wert 205 in 206 geändert werden (2x).

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon jolo » 05.06.2008, 15:17

Hallo msl

Wo befindet sich der Anhang mit der Kommentierung zu dem oben gezeigten Skript? Hat schon jemand das Skript auf der A 710IS probiert?
Danke im Voraus für Deine Info.

Viele Grüße

Jolo
jolo
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 3
Registriert: 05.06.2008, 15:06

Nächste

Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste