[Info] Alles rund um das Shooting beim Skripten

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

Re: Alles rund um das Shooting beim Skripten

Beitragvon c_joerg » 16.12.2014, 17:17

Hallo,

ich habe da noch mal ein paar Verständnisfragen zum Schooting.

1) Kann man bei Methode(5) das sleep(2000) durch eine Abfrage ersetzen?

2) Ich benutze in meinem Script den folgenden Code (nach Methode(4)), den ich in einem anderen Script gefunden habe:


Code: Alles auswählen
    
press("shoot_half")
repeat
 until get_shooting() == true

KameraTv = get_tv96()
set_tv96_direct(MyTv)
     
press("shoot_full")
release("shoot_full")
release("shoot_half")
repeat
 until get_shooting() ~= true


Wenn ich die obige Beschreibung richtig gelesen habe, dann würde hier doch auch ein set_tv96() genügen. Macht man mit dem set_tv96_direct() an dieser Stelle einen Fehler?

3) Handelt es sich bei dem Befehl set_tv96_direct() um ein Overwrite. Ich meine irgendwo gelesen zu haben, das Overwrites nicht in die EXIF Daten kommen. Ich finde meine Werte aber in den EXIF Daten wieder.

4) Wenn ich nach dem ersten Aufruf einer Funktion nach Methode(4) ein set_aflock(1) durchführe, geht dann das Einmessen beim zweiten Aufruf schneller?

Schon mal vielen Dank für eure Hilfe.

Grüße Jörg
c_joerg
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 334
Registriert: 14.08.2014, 07:50
Wohnort: Bremen
Kamera(s): S110 103a
IXUS30 100k
2 * S45
2 * G1X 101a, 100e
SX230 101a
SX50hs 100c
IXUS160 100a
EOS M3 101a

Re: Alles rund um das Shooting beim Skripten

Beitragvon msl » 18.12.2014, 18:33

Hallo Jörg,

scheint sich wohl niemand anders zu trauen, eine Antwort zu schreiben. ;)

zu 1.
Ja, selbstverständlich. Es wäre sogar sinnvoller, eine Abfrage einzufügen.

zu 2.
Ja, mit der Direktvariante wird ein Überschreiben der kamerainternen Vorgabe oder Berechnung vor dem Shooting eingeleitet. Das entspricht der CHDK-Menü-Funktion Ersetzen bzw. Override. Dies hat zur Folge, dass der hier verwendete Skript-Code das nächste Shooting beeinflusst.

zu 3.
(siehe zu 2.) So lange sich die Tv-Werte beim Override im Bereich der nativen Kamerawerte befinden, werden auch die korrekten Exifdaten in die JPGs eingetragen. Wird z.B eine Belichtungszeit von 60 Sekunden verwendet, wird man den maximalen nativen Wert (meistens 15 Sekunden) in den Daten finden. In den CHDK-DNGs werden immer die richtigen Exif-Daten geschrieben.

zu 4.
Vermutlich ja. Das ist aber kameraabhängig. In Sachen Fokus verhalten sich die Kameras je nach Ausstattung unterschiedlich. Da hilft nur Experimentieren.

Ich hoffe, ich konnte etwas helfen.

Gruß msl

edit zu 2.: Ich hatte mir noch mal den Quellcode angeschaut. Die beiden Direkt-Befehle können mittlerweile auch wie in deinem Beispiel angewendet werden. Das wurde mit Revision 3149 eingeführt. Es wird also berücksichtigt, ob der Befehl vor oder während des Shootings ausgeführt wird.
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4512
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Alles rund um das Shooting beim Skripten

Beitragvon c_joerg » 19.12.2014, 13:17

Hallo msl,

vielen Dank für deine Hilfe.

zu 1) Also kann man das sleep in Methode(5) durch

Code: Alles auswählen
repeat
   until get_shooting() ~= true


ersetzen.

Macht denn ein sleep in irgendeinem shooting überhaupt sinn?

zu 2)
Also kann ich das mit dem set_tv96_direct() so lassen.

Grüße Jörg
c_joerg
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 334
Registriert: 14.08.2014, 07:50
Wohnort: Bremen
Kamera(s): S110 103a
IXUS30 100k
2 * S45
2 * G1X 101a, 100e
SX230 101a
SX50hs 100c
IXUS160 100a
EOS M3 101a

Re: Alles rund um das Shooting beim Skripten

Beitragvon msl » 19.12.2014, 13:52

Hallo Jörg,

das Sleep macht schon Sinn. Es soll zeigen, dass man sich um den zeitlichen Ablauf beim Shooting kümmern muss. Je nach Belichtungszeit kann das Shooting dauern. In uBASIC würde ein Skript stur im 10ms-Zeilentakt weiterlaufen, obwohl das Shooting vielleicht noch im Gange ist, was bei Intervallaufnahmen irgendwann fatal wäre. Im einfachsten Fall lässt sich das mit einem Sleep abfangen.

Eine Abfrage mit get_shooting() ist genauer und sollte zumindest bei einem Lua-Skript dem einfachen Sleep vorgezogen werden. sleep() ist aber ein guter Helfer bei der Skriptentwicklung.

Gruß msl
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4512
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Alles rund um das Shooting beim Skripten

Beitragvon c_joerg » 23.12.2014, 09:17

Hallo msl,

ich dachte eigentlich, ich hätte das mit dem shooting jetzt vollständig verstanden :( .
Ich habe Methode (5) wie folgt verändert. Die Abbruchbedingung in der inneren Schleife habe ich aus Übersichtsgründen entfernt.

Code: Alles auswählen
z = 0
loop_stop = false

press("shoot_half")
repeat
  until get_shooting() == true

repeat

  press("shoot_full")
  release("shoot_full")

  repeat
    until get_shooting() ~= true
 
  z=z+1
 
until loop_stop

release("shoot_half")

print("z=",z)


Nachdem ich 17 Bilder gemacht habe, stand z bei 115. Das sagt mir eigentlich, das

Code: Alles auswählen
  repeat
    until get_shooting() ~= true



keine Wirkung zeigt. Mache ich hier einen Denkfehler?
Oder liegt es daran, das ich nicht click("shoot_full_only") verwende?

Grüße Jörg
c_joerg
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 334
Registriert: 14.08.2014, 07:50
Wohnort: Bremen
Kamera(s): S110 103a
IXUS30 100k
2 * S45
2 * G1X 101a, 100e
SX230 101a
SX50hs 100c
IXUS160 100a
EOS M3 101a

Re: Alles rund um das Shooting beim Skripten

Beitragvon msl » 26.12.2014, 12:51

Hallo Jörg,

wenn du hintereinander Press und Release verwendest, kannst du auch gleich Klick verwenden. Dann werden die Operationen auch kameraspezifisch sauber abgearbeitet. Bei manchen Kameras enthält der Klick-Befehl ein notwendiges Delay, um die Press/Release-Folge kameragerecht abzuarbeiten. Das wird aber nicht Ursache für dein Zählergebnis sein.

Ich denke, die Repeat/Until-Schleifen sind zu schnell. Da sollte wenigstens ein Delay von 10ms bis 50ms eingefügt werden (sleep(10)).

Gruß msl
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4512
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Alles rund um das Shooting beim Skripten

Beitragvon Werner_O » 26.12.2014, 16:03

Hallo Jörg,

ich habe dieses Jahr einige Lua-Skripte entwickelt, bei denen die korrekte Wahl des verwendeten Befehls zum Auslösen entscheidend für ein korrektes Funktionieren des Skriptes war.
Bei einigen Skripten werden dabei unterschiedliche Auslöse-Methoden je nach Skript-Voreinstellungen verwendet.

1) Was quasi immer funktioniert ist der Befehl "shoot()"
Der simuliert das Drücken des Auslösers, wobei dann a) die Belichtung neu berechnet wird und b) bei aktiviertem AF der automatische Fokus neu ermittelt wird.
Nachteil:
Kann kein korrekter AF-Fokus gefunden werden wird trotzdem irgendwann ausgelöst mit dann zweifelhaften Ergebnissen und möglicherweise völlig unscharfem Bildergebnis.

2) Alternativ: press/release "shoot_full_only()"
Diese Methode ist sinnvoll, wenn vorher via Befehl "half_shoot()" gemachte Messergebnisse zu AF und/oder AE im Kameraspeicher bleiben sollen für mehrere Aufnahmen mit gleichen Voreinstellungen.

3) Alle anderen von mir ausprobierten Auslösemethoden habe ich inzwischen verworfen, weil die Ergebnisse nicht zu 100% nachvollziehbar waren, etwa:
a) press/release "shoot_full" (macht in der Praxis keinen Sinn)
b) click "shoot" sollte alternativ eigentlich zwar auch funktionieren, aber dann kann man ja auch gleich den Befehl shoot() verwenden

Fazit:
Insbesondere bei noch recht einfachen Skripten ist der simple Befehl shoot() oft die beste Auslösemethode.
Fast alle alternativen Auslöse-Befehle sind deutlich schwieriger zu handhaben.

Frohe Weihnachten
Werner_O
Benutzeravatar
Werner_O
CHDK-Legende
CHDK-Legende
 
Beiträge: 1014
Registriert: 22.10.2010, 14:12
Wohnort: Köln
Kamera(s): SX20 1.02d
SX240 1.01a
S100 1.01a
S3 1.00a

Re: Alles rund um das Shooting beim Skripten

Beitragvon c_joerg » 27.12.2014, 20:15

Hallo

msl:

Ich denke, die Repeat/Until-Schleifen sind zu schnell. Da sollte wenigstens ein Delay von 10ms bis 50ms eingefügt werden (sleep(10)).


Das Sleep hat nichts an dem Ergebnis geändert. Warum hätte es denn was ändern sollen? Es wird doch vermutlich nur ein Flag abgefragt und da ist die Abfragegeschwindigkeit vermutlich egal.


Werner_O:

Grundsätzlich benutze ich immer nur Methode(4). Bei dieser Methode kann ich dann die Belichtung konstant halten und trotzdem die von der Kamera gemessenen Werte protokolliere. Mit dieser Methode komme ich dann maximal auf 1,8 Sekunden pro Bild. Das erreiche ich auch, wenn man nur shoot() verwendet. Egal, ob ich AE Lock verwende oder nicht.

Ich wünschte mir aber manchmal, noch schneller zu sein. Ich mache es jetzt wie in deinem Skript:

Code: Alles auswählen
            count = get_exp_count()
            press("shoot_full_only")
            repeat sleep(10) until get_exp_count() ~= count
            release("shoot_full_only")


Damit komme ich nun auf 1,2 Sekunden pro Bild.

Vielen Dank für eure Hilfe

Grüße Jörg
Zuletzt geändert von c_joerg am 30.12.2014, 10:55, insgesamt 1-mal geändert.
c_joerg
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 334
Registriert: 14.08.2014, 07:50
Wohnort: Bremen
Kamera(s): S110 103a
IXUS30 100k
2 * S45
2 * G1X 101a, 100e
SX230 101a
SX50hs 100c
IXUS160 100a
EOS M3 101a

Re: Alles rund um das Shooting beim Skripten

Beitragvon Werner_O » 28.12.2014, 00:09

Hallo Jörg,

der von mir zitierte Code kann zu doppelten Auslösungen führen.

Probiere darum alternativ mal:
Code: Alles auswählen
count = get_exp_count()
press("shoot_full_only")
sleep(50)
release("shoot_full_only")
repeat sleep(10) until get_exp_count() ~= count


P.S.:
Ich verstehe Deine Ausführungen nicht so ganz weil 1,8 Bilder/sec schneller als 1,2 Bilder/sec sind.

Liebe Grüße
Werner_O
Benutzeravatar
Werner_O
CHDK-Legende
CHDK-Legende
 
Beiträge: 1014
Registriert: 22.10.2010, 14:12
Wohnort: Köln
Kamera(s): SX20 1.02d
SX240 1.01a
S100 1.01a
S3 1.00a

Re: Alles rund um das Shooting beim Skripten

Beitragvon msl » 28.12.2014, 12:48

Hallo,

c_joerg hat geschrieben:Das Sleep hat nichts an dem Ergebnis geändert. Warum hätte es denn was ändern sollen? Es wird doch vermutlich nur ein Flag abgefragt und da ist die Abfragegeschwindigkeit vermutlich egal.
...
Ich wünschte mir aber manchmal, noch schneller zu sein.


So egal ist das nicht. Erstmal laufen diverse Prozesse in verschiedenen Tasks. Da kann es durchaus zu Timing-Problemen kommen. get_shooting() liest bei der S110 die PropertyCase-Variable 303 aus. Ich hatte übersehen, dass du get_shooting() bereits nach dem Release von "shoot_full" abfragst. Das macht wenig Sinn. Du kannst dir ja mal den Wert von PropertyCase 303 zu dem Zeitpunkt anzeigen/protokollieren lassen. Jedenfalls ist in dem Fall die Abfrage von get_exp_count() die richtige und zuverlässige Abfrage.

Warum verwendest du nicht die Serienbild deiner Kamera, wenn es schneller sein soll. Die S110 verfügt doch sogar über einen High-Speed-Modus. Um per Skript auf die Ergebnisse von Serienbildaufnahmen Einfluss zu nehmen, kann man auch die bisher wenig dokumentierten Funktionen rund um die "Shooting Hooks" verwenden. Mehr dazu hier: http://chdk.wikia.com/wiki/Script_Shooting_Hooks

Gruß msl
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4512
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Alles rund um das Shooting beim Skripten

Beitragvon c_joerg » 30.12.2014, 11:10

Hallo,

Werner_O:

der von mir zitierte Code kann zu doppelten Auslösungen führen



Das ist mir bisher nicht aufgefallen. Anzahl der Bilder und Zähler waren immer identisch.
Aber eine kleine Verzögerung kann sicher nicht schaden...

Ich verstehe Deine Ausführungen nicht so ganz weil 1,8 Bilder/sec schneller als 1,2 Bilder/sec sind.


OK, mein Fehler, ich meinte 1,8 / 1,2 Sekunden pro Bild.


msl:

Warum verwendest du nicht die Serienbild deiner Kamera, wenn es schneller sein soll. Die S110 verfügt doch sogar über einen High-Speed-Modus.


Ich war immer der Meinung, dass die Serienbild Funktion immer nur für eine bestimmt Anzahl von Bildern funktioniert (Bei der S110 sind es 10 Bilder).

Der Grund hierfür ist, dass die Daten erst in einem Zwischenspeicher landen bevor sie auf der SD gespeichert werden. Ich kann mir nicht vorstellen, dass man das umgehen kann.
Ich werde mir das aber nochmal genauer ansehen.

Grüße Jörg
c_joerg
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 334
Registriert: 14.08.2014, 07:50
Wohnort: Bremen
Kamera(s): S110 103a
IXUS30 100k
2 * S45
2 * G1X 101a, 100e
SX230 101a
SX50hs 100c
IXUS160 100a
EOS M3 101a

Re: Alles rund um das Shooting beim Skripten

Beitragvon Werner_O » 30.12.2014, 20:47

Hallo Jörg,

laut PDF-Handbuch Seiten 179 und 335 kommt die S110 nur im Reihenaufnahmemodus "Fortlaufend" auf ~ 2,1 Bilder/sec (~ 0,5 sec/Bild), wobei dann bereits beim Antippen des Auslösers sowohl ein AF-Lock als auch AE-Lock ausgeführt wird. Bei den anderen normalen Reihenmodi sind nur 0,9 Bilder/sec möglich, was Deinen besten bisher gemessenen Werten von 1,2 sec/Bild in etwa entspricht.

Zum Testen möchte ich Dich darum auf mein Skript IntervWO.lua hinweisen:
1) Bei Intervallzeit 0 sec löst das wie eine Reihenaufnahme schnellstmöglich aus und zeigt bei Skriptende sogar an der Konsole die gemessenen Bilder/sec an.
2) Es ermöglicht vielfältige Kombinationen aus Programm- und Fokuseinstellungen bis hin zu MF oder bspw. auch kombiniertem AF-/AE-Lock uvam.
Insofern ist dieses Skript ideal dafür geeignet diejenigen Kameraeinstellungen zu ermitteln, bei welchen schnellstmögliche "normale" Reihenaufnahmen (ohne HighSpeedMode) an der jeweiligen Kamera möglich werden.

Über die Details zu den vom Skript verwendeten Auslösemethoden können wir uns dann später noch unterhalten.
Die besonders schnelle Methode press/release ("shoot_full_only") kann ja leider nur dann sinnvoll verwendet werden, wenn Fokus und Belichtung bereits vor dem Auslösen vom Skript selber oder auf eine andere Art bereits korrekt eingestellt wurden.

Liebe Grüße
Werner_O
Benutzeravatar
Werner_O
CHDK-Legende
CHDK-Legende
 
Beiträge: 1014
Registriert: 22.10.2010, 14:12
Wohnort: Köln
Kamera(s): SX20 1.02d
SX240 1.01a
S100 1.01a
S3 1.00a

Re: Alles rund um das Shooting beim Skripten

Beitragvon c_joerg » 31.12.2014, 15:18

Hallo Werner_O

laut PDF-Handbuch Seiten 179 und 335 kommt die S110 nur im Reihenaufnahmemodus "Fortlaufend" auf ~ 2,1 Bilder/sec (~ 0,5 sec/Bild), wobei dann bereits beim Antippen des Auslösers sowohl ein AF-Lock als auch AE-Lock ausgeführt wird. Bei den anderen normalen Reihenmodi sind nur 0,9 Bilder/sec möglich, was Deinen besten bisher gemessenen Werten von 1,2 sec/Bild in etwa entspricht.


OK, wer lesen kann ist klar im Vorteil :)
Die Kamera schafft wirklich 2,1 Bilder/sec ohne Aussetzer.
Die Einschränkung auf 10 Bilder ist nur im HQ Modus bei 10 Bilder/sec!

Zum Testen möchte ich Dich darum auf mein Skript IntervWO.lua hinweisen:


Wie du an den Kommentaren ja sehen kannst, hatte ich mich ja schon ausführlich mit deinem Script beschäftigt. Da ich mich aber im Wesentlichen auf Zeitrafferaufnahmen im Wattenmeer beschränke, habe ich ganz andere Prioritäten. Mir ist es wichtig, nur wenig Einstellparameter zu haben, um Fehlbedienungen vorzubeugen. Auch möchte ich alle Werte (TV, Temperatur, Spannung) protokolliere und bei zu hohen Temperaturen automatisch abschalten.

Die besonders schnelle Methode press/release ("shoot_full_only") kann ja leider nur dann sinnvoll verwendet werden, wenn Fokus und Belichtung bereits vor dem Auslösen vom Skript selber oder auf eine andere Art bereits korrekt eingestellt wurden.


Das Aufnehmen schneller Bilder für Zeitraffer ist aber eher eine Ausnahme für mich und dann auch nur über einen relativen kurzen Zeitraum. Aus meiner Sicht ist es dann auch nur ein Vorteil, wenn Fokus und Belichtung bereits vor dem Auslösen feststehen.

Die nun gefundenen Möglichkeiten an schnellen Bildfolgen sind nun ausreichend für mich. Ich möchte mich hiermit noch einmal für deine tatkräftige Unterstützung bedanken.

Grüße Jörg

Nachtrag:

ich hatte ganz vergessen zu sagen, das der folgende alternative Code von dir

Code: Alles auswählen
count = get_exp_count()
press("shoot_full_only")
sleep(50)
release("shoot_full_only")
repeat sleep(10) until get_exp_count() ~= count


auf der S110 nicht funktioniert. Beim ersten Durchlauf wird noch ein Bild erstellt.
Beim zweiten mal blinkt auf dem Display unten links nur ein rotes Kamerasymbol und dann kommt nichts mehr...
c_joerg
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 334
Registriert: 14.08.2014, 07:50
Wohnort: Bremen
Kamera(s): S110 103a
IXUS30 100k
2 * S45
2 * G1X 101a, 100e
SX230 101a
SX50hs 100c
IXUS160 100a
EOS M3 101a

Re: Alles rund um das Shooting beim Skripten

Beitragvon Fliega » 05.01.2015, 13:22

Hallo Zusammen,

bin ein absoluter Neuling zum Thema Scripte und CHDK. Ich habe mit großem Interesse euere Ausführungen gelesen. Aber ehrlich gesagt, ganz durchsteigen kann ich nicht 8-[
Mein Anliegen liegt darin, dass ich mit dem Copter Bilder und Videoaufnahmen mache und zu diesem Zweck mir eine CANON SX200is geholt habe. Die Kamera möchte ich überwiegend zum fotografieren verwenden, da die Video-Auflösung nur 1280x720p ist. Hatte beim Kauf übersehen, dass sie kein Full-HD kann. Was soll's für den Anfang tut's das auch. Habe für Full-HD eine Actioncam, die ich parrallel dazu nutzen könnte. Nun zu meiner eigentlichen Frage:

Kann ich über einen 3-Stufen-Schalter die Funktionen Einzelbild, Serienbilder (im 1-2 Sek. Intervall) und Videoaufnahmen oder 2-Stufen-Schalter Serienbilder (im 1-2 Sek. Intervall) und Videoaufnahmen verwirklichen (focussieren sollte jeweils vorher erfolgen)?

Das ganze wird beim mir über einen Arduino Pro Mini angesteuert. Mit diesem habe ich schon erfolgreich Einzelbildaufnahmen (focussieren und auslösen) hinbekommen. Mein erster Erfolg nach langem probieren. Ich würde mich sehr über euere Hilfe freuen.

LG Fliega
Benutzeravatar
Fliega
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 4
Registriert: 28.12.2014, 19:53
Kamera(s): CANON SX200IS

Re: Alles rund um das Shooting beim Skripten

Beitragvon Belichter » 05.01.2015, 19:11

Hallo Fliega,
willkommen im Forum.

Kennst Du dieses Script schon aus dem englischsprachigen Forum?
Hier gibt es Anregungen.

Und bei Google mit mit CHDK / KAP / COPTER finden.

CHDK ist gerade in diesem Fotobereich sehr gut vertreten.

bis dann
IXUS 970 IS 100b
Belichter
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 170
Bilder: 11
Registriert: 21.05.2009, 10:21
Wohnort: Solingen
Kamera(s): ixus 970 IS 100b

Vorherige

Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 2 Gäste