Scripte für Lens-Profil-Erstellung

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

Scripte für Lens-Profil-Erstellung

Beitragvon stefan » 10.08.2014, 15:13

Hallo zusammen,

nachdem ich CHDK nun schon einige Zeit nutze, möchte ich nun auch mehr mit den RAW Dateien machen.

Das für meine Camara passende LenseProfil möchte ich mit dem Adobe LensProfil Creater erstellen.
Um die Referenzbilder zu erstellen habe ich an ein passendes Script gedacht, und mal versuchsweise eines erstellt.

Nach meinen Vorstellungen wird ein Start Scrip laufen, und die Bilder der Mitte für die Vorgegebene Blenden machen, und alle Einstellungen in einer zweiten Datei als Folge Script schreiben.
So wie ich die Blende ändere, passe ich auch die Belichtungszeit an. Den ISO Wert würde ich hierbei fest einstellen.
Mit diesem zweiten Script können dann die Bilder für die anderen acht Positionen gemacht werden.

Im Namen des Folge scripts ist der Zoom Wert enthalten, damit die Scripte bei verschiedenen Entfernungen nicht überschrieben werden.

Hier mal mein Entwurf:
(Zum Start habe ich das Script "br_easy" als Vorlage genommen).

Code: Alles auswählen
--[[
********************************
Licence: GPL
thx Mac, Atnes
version 0.9.000
(c)stefan 14/07/2014
********************************
@title Profile erstellen
@param a Av Schritt 1/3
@default a 1
@range a 1 9
@param b Startverzögerung  in s
@default b 3
]]

function log_name()
    zoom_akt = get_zoom()
    log_path = "A/CHDK/SCRIPTS/"
    log_file_name = "LP_Z_"..zoom_akt.."_"
    log_file_ending = ".LUA"
    log_name = log_path..log_file_name..log_file_ending
    logfile=io.open(log_name,"wb")
    io.output(logfile)
end

function log(...)
    io.write(...)
    io.write("\r\n")
end

function delay(sec)
    repeat
        cls()
        print("Start in ", sec, "Sekunden")
        sleep(960)
        sec = sec - 1
    until sec==0
    cls()
end

function fastshoot()
    pic_num = pic_num + 1
    press("shoot_half")
    repeat sleep(10) until get_shooting() == true
--    repeat sleep(10) until get_focus_ok() == 1
    press("shoot_full")
    release("shoot_full")
    release("shoot_half")
    repeat sleep(10) until get_shooting() ~= true
end

function get_info()
    log("--Foto: ", pic_num)

    Bv=get_bv96()
    log("--Helligkeitswert Bv96=", Bv)

    Av=get_av96()
    log("--Blendenwert Av96=", Av)

    Sv=get_sv96()
    log("--Empfindlichkeitswert Sv96=", Sv)

    Tv=get_tv96()
    log("--Belichtungszeit Tv96=", Tv)

    Fo=get_focus()
    log("--Focus in mm get_focus()=", Fo)

    isom=get_iso_market()
    isor=get_iso_real()
    log("--ISO Market=", isom, " ISO Real=", isor)

    ndf=get_nd_present()
    log("--nd_present=", ndf)

    if pic_num == 1 then
        log("set_focus(", Fo, ")")
        log("set_sv96(", Sv, ")")
        log("set_iso_real(", isor, ")")
    end
    log("set_av96_direct(", Av, ")")
    log("set_tv96_direct(", Tv, ")")
    log("shoot()")
    log("")
end


--script start
if b < 0  or b > 10   then b = 3   end

av_step   = a * 32
delay_sec = b
max_AV96 = 576
--max_AV96 = 640
pic_num   = 0

if delay_sec > 0 then delay(delay_sec) end

log_name()
log("--Auto LenseProfil ", os.date("%d.%m.%Y %X\n"))
log("")
log("set_aflock(1)")
log("")
fastshoot()
set_aflock(1)
get_info()
set_aflock(0)

av_neu = Av
tv_neu = Tv

repeat
    print("nächste Blende")
    sleep(50)
    av_neu = av_neu + av_step
    tv_neu = tv_neu - av_step
    --set_av96(av_neu)
    set_av96_direct(av_neu)
    --set_user_av96(av_neu)
    set_tv96_direct(tv_neu)
    fastshoot()
    set_aflock(1)
    get_info()
    set_aflock(0)
    av_test = av_neu + av_step
until av_test > max_AV96

log("")
log("set_aflock(0)")
log("")
log("--Fertig: gemachte Bilder: ", pic_num)
print("Fertig: gemachte Bilder: ", pic_num)
mzs = get_zoom_steps()
az = get_zoom()
log("--get_zoom=", az, "get_zoom_steps=", mzs)
fm = get_focus_mode()
log("--get_focus_mode=", fm)
log("")


Als Ergebnis kommt dies heraus:
Code: Alles auswählen
--Auto LenseProfil 09.08.2014 17:17:29


set_aflock(1)

--Foto: 1
--Helligkeitswert Bv96=435
--Blendenwert Av96=405
--Empfindlichkeitswert Sv96=593
--Belichtungszeit Tv96=623
--Focus in mm get_focus()=977
--ISO Market=372 ISO Real=226
--nd_present=2
set_focus(977)
set_sv96(593)
set_iso_real(226)
set_av96_direct(405)
set_tv96_direct(623)
shoot()

--Foto: 2
--Helligkeitswert Bv96=434
--Blendenwert Av96=437
--Empfindlichkeitswert Sv96=594
--Belichtungszeit Tv96=591
--Focus in mm get_focus()=977
--ISO Market=375 ISO Real=228
--nd_present=2
set_av96_direct(437)
set_tv96_direct(591)
shoot()

--Foto: 3
--Helligkeitswert Bv96=433
--Blendenwert Av96=469
--Empfindlichkeitswert Sv96=595
--Belichtungszeit Tv96=559
--Focus in mm get_focus()=977
--ISO Market=378 ISO Real=229
--nd_present=2
set_av96_direct(469)
set_tv96_direct(559)
shoot()

--Foto: 4
--Helligkeitswert Bv96=434
--Blendenwert Av96=501
--Empfindlichkeitswert Sv96=594
--Belichtungszeit Tv96=527
--Focus in mm get_focus()=940
--ISO Market=375 ISO Real=228
--nd_present=2
set_av96_direct(501)
set_tv96_direct(527)
shoot()

--Foto: 5
--Helligkeitswert Bv96=434
--Blendenwert Av96=533
--Empfindlichkeitswert Sv96=594
--Belichtungszeit Tv96=495
--Focus in mm get_focus()=940
--ISO Market=375 ISO Real=228
--nd_present=2
set_av96_direct(533)
set_tv96_direct(495)
shoot()

--Foto: 6
--Helligkeitswert Bv96=434
--Blendenwert Av96=565
--Empfindlichkeitswert Sv96=594
--Belichtungszeit Tv96=463
--Focus in mm get_focus()=940
--ISO Market=375 ISO Real=228
--nd_present=2
set_av96_direct(565)
set_tv96_direct(463)
shoot()

--Foto: 7
--Helligkeitswert Bv96=433
--Blendenwert Av96=597
--Empfindlichkeitswert Sv96=595
--Belichtungszeit Tv96=431
--Focus in mm get_focus()=940
--ISO Market=378 ISO Real=229
--nd_present=2
set_av96_direct(597)
set_tv96_direct(431)
shoot()

--Foto: 8
--Helligkeitswert Bv96=435
--Blendenwert Av96=629
--Empfindlichkeitswert Sv96=593
--Belichtungszeit Tv96=399
--Focus in mm get_focus()=977
--ISO Market=372 ISO Real=226
--nd_present=2
set_av96_direct(629)
set_tv96_direct(399)
shoot()


set_aflock(0)

--Fertig: gemachte Bilder: 8
--get_zoom=26get_zoom_steps=101
--get_focus_mode=0


Soweit scheint es zu laufen.
Aber einige Fragen habe ich noch zu LUA:

- Genügt es im zweiten Script, wenn ich zwischen dem "set_aflock(1)" und dem "set_aflock(0)" nur AV und TV neu belege?
- Kann ich den Focus einfach mit set_focus() angeben? oder muss ich hier noch etwas beachten?

Geschrieben habe ich das ganze für eine PowerShot SX260.

Nächste Woche will ich mal einen Testlauf machen.

Stefan
Zuletzt geändert von msl am 10.08.2014, 20:16, insgesamt 2-mal geändert.
Grund: edit by mod: Titel angepasst
stefan
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 31.07.2014, 21:27
Kamera(s): Canon PowerShot SX260 HS
Canon IXUS 220 HS

Re: Scripe für LenseProfil erstellung

Beitragvon msl » 10.08.2014, 20:11

Hallo und Willkommen hier im Forum.

Dein Ansatz, per Skript die notwendigen Fotos für ein Lens-Profil zu erstellen, ist eine gute Idee. Da die SX260 über einen MF-Modus (manueller Fokus) verfügt, solltest du nicht set_aflock() verwenden. set_mf() (ab CHDK-Version 1.3 verfügbar) wäre die besserere Wahl.

Wenn du dann im MF-Modus bleibst, brauchst du die Objektdistanz nicht jedes mal neu zu setzen. Es reicht das Festlegen von Tv und Av.

Schematisch könnte es wie folgt aussehen:

set_mf(1)
set_focus(xxx)
-- Foto1
set_av96_direct(xxx)
set_tv96_direct(xxx)
shoot()
.. Foto 2
set_av96_direct(xxx)
set_tv96_direct(xxx)
shoot()
u.s.w.
...
set_mf(0)

set_mf(1) gibt 1 zurück, wenn das Setzen in den MF-Modus erfolgreich war. Damit könnte man noch eine Überprüfung einbauen.

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

Re: Scripte für Lens-Profil-Erstellung

Beitragvon stefan » 11.08.2014, 20:44

Hallo msl,

Vielen Dank für den Tipp.

Noch eine Frage zu set_av96_direct().
Wenn ich alles richtig verstanden habe, funktioniert dieses Kommando nur bei Cameras mit einer Irisblende.

Bei Cameras ohne Irisblende kann man also keinen Einfluss auf die Blendenzahl nehmen (außer Indirekt durch den Zoom).

Es wäre also Sinnvoll dies über die Funktion get_nd_present() abzufragen, um ein unerwünschtes Verhalten zu verhindern.

Stefan
stefan
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 31.07.2014, 21:27
Kamera(s): Canon PowerShot SX260 HS
Canon IXUS 220 HS

Re: Scripte für Lens-Profil-Erstellung

Beitragvon msl » 11.08.2014, 21:22

Hallo Stefan,

set_av96_direct() funktioniert auch bei Kameras ohne Irisblende. Allerdings werden nicht alle gesetzten Werte zum gewünschten Ergebnis führen.

Der Blendenwert lässt sich bei einer Kamera ohne Irisblende über die Zoom-Stufe und den ND-Filter beeinflussen. Über get_av96 könnte man ermitteln, welche Blendenwerte möglich sind. Dazu müsste man dann bei jeder Zoom-Stufe den ND-Filter ein- und ausschwenken.

Eine Unterscheidung mittels get_nd_present() macht Sinn.

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

Re: Scripte für Lens-Profil-Erstellung

Beitragvon stefan » 16.08.2014, 20:35

Hallo,

leider fehlte mir die letzten Tage die Zeit hier weiter zu mache.
Und jetzt geht es erst mal in den Urlaub.

Sobald das Script funktionsfähig ist, und ist das Profil fertig habe, werde ich beides hier zur Verfügung stellen.

Stefan
stefan
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 31.07.2014, 21:27
Kamera(s): Canon PowerShot SX260 HS
Canon IXUS 220 HS


Zurück zu Code-Ecke

Wer ist online?

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