Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Automatisation de la création de fichiers HRD
#1
Bonjour,
utilisant très souvent la prise de vue en braketing d'exposition, je me retrouve à passer un temps fou à regrouper mes images en fichier *.dng et rejeter les images utilisées pour leur création !

Voilà j'ai créer un script lua qui va automatiser le travail. Il faut ce travail :
- Utilise la collection (toutes les images à l'écran de la table lumineuse)
- Regroupe les images prises à la suite en rafale
- Assemble ces images en fichier *.dng
- selon option case à cocher, rejette les images utilisées lors de la création
- met le style de votre choix aux images hrd produites !

Attention, ne l'utilisez pas sur des prises de vue prisent en rafale, il va assembler les images à tord !

Il s'agit d'un script *.lua, compatible avec le script-manager.
Il vous suffit de copier le fichier dans le dossier @utilisateur/AppData/Local/darktable/lua/nouveau dossier ou un autre qui sera repris dans le script-manager
Depuis la table lumineuse, en bas à gauche, activer le script depuis le module : script manager

Voilà le script : https://drive.google.com/file/d/1becYRB1...sp=sharing

Code :
local dt = require "darktable"
--local debug = require "darktable.debug"

local MOD = 'AutoHRD' --code recopié pour une utilisation dans script manager
local script_data = {}

script_data.metadata = {
  name = "AutoHDR",
  purpose = "Regroupe les images prises en rafale, puis les assemble en fichier hrd",
  author = "Alain Plomb",
  help = ""
}

script_data.destroy = nil
script_data.destroy_method = nil
script_data.restart = nil
script_data.show = nil

local mE = {}
mE.widgets = {}
mE.event_registered = false 
mE.module_installed = false

--local file = io.open("D:/Documents/Test/test-scr.txt","w")
--io.output(file)

--io.write(dt.debug.dump(dt.database[1]))
--io.close(file)

--GUI
--case à chcher pour placer les images en rejet
local rejet = dt.new_widget("check_button"){
    label = "mettre à rejetter images sources",
    value = true
}

--liste déroulante de style pour image hrd
local stl ={}
for _,s in ipairs(dt.styles) do
    table.insert(stl,s.name)
end
local comboboxStyle = dt.new_widget("combobox"){
    label = "Style pour fichier HDR",
    value = 1,
    "aucun",
    table.unpack(stl),
}

local function install_module()
    if not mE.module_installed then
        dt.register_lib(
            "AutoHDR",     -- Module name
            "AutoHDR",     -- name
            true,
            false,
            {[dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_RIGHT_CENTER", 100}},

            dt.new_widget("box"){
                orientation = "vertical",
        
                dt.new_widget("button"){
                label = "Auto HRD",
                tooltip = "Exécuter les HRD",
                clicked_callback = function (_)
                    main() --appel de la fonction principale
                end
                },
                rejet,
                comboboxStyle
            },
            nil,
            nil
        )
        mE.module_installed = true
    end
end

        
local function destroy() --fonctions de script manager
    dt.gui.libs["AutoHDR"].visible = false
end
local function restart()
    dt.gui.libs["AutoHDR"].visible = true
end            


function main() --bouton de commande AutoHRD pressé

    local function enSecondes(str) --transformer une date en seconde timestamp
        local cleaned = string.gsub(str, '[^%d]',':')
        cleaned = string.gsub(cleaned, '::*',':')  --YYYY:MM:DD:hh:mm:ss
        local year = string.sub(cleaned,1,4)
        local month = string.sub(cleaned,6,7)
        local day = string.sub(cleaned,9,10)
        local hour = string.sub(cleaned,12,13)
        local min = string.sub(cleaned,15,16)
        local sec = string.sub(cleaned,18,19)
        return os.time({year = year, month = month, day = day, hour = hour, min = min, sec = sec})
    end
    
    local tmp = {}
    for i,v in pairs(dt.collection) do
        local sec = enSecondes(v.exif_datetime_taken)
        table.insert(tmp,{id = i, fn = v.filename, sec = sec, exp = math.floor(v.exif_exposure), hdr = v.is_hdr})
    end
    
    local hdr = {}
    local securit = {}
    for _,v in ipairs(tmp) do
        local bcl = false
        local suivant = false
        for _,s in ipairs(securit) do
            if v.id == s then
                suivant = true
            end
        end
        if not suivant and not v.hdr then
            local t = v.sec + v.exp --calcul du temps pour être dans la rafale
            for _,vc in ipairs(tmp) do
                if v.id ~= vc.id then
                    if vc.sec == t or vc.sec == t + 1 then
                        if bcl then
                            table.insert(bcl, dt.collection[vc.id])
                        else
                            bcl = {dt.collection[v.id], dt.collection[vc.id]}
                        end
                        table.insert(securit, vc.id)
                        t = vc.sec + vc.exp
                    end
                end
            end --for ctrl
            
            if bcl then
                table.insert(hdr, bcl)
            end -- if bcl
        end -- suivant
    end

    local hdrexe = {}
    local nom
    for _,v in ipairs(hdr) do
        local tst = true
        for _,img in ipairs(v) do
            nom = string.sub(img.filename,1,-5).."-hdr.dng"
            for _,col in ipairs(dt.collection) do
                if col.filename == nom then
                    tst = false
                end
            end    
        end
        if tst then
            table.insert(hdrexe, v)
        end
    end

    
    for _,v in ipairs(hdrexe) do --création des fichiers regroupés hrd
        dt.gui.selection(v)
        local n = #dt.collection
        dt.gui.action("lib/image/create HDR", "", "activate", 1,000)
        while #dt.collection == n do --attente d'un nouveau fichier
            dt.control.sleep(250)
        end
    end

    if rejet then --rejetter les images de création de hrd
        for _,v in ipairs(hdrexe) do
            for _,img in ipairs(v) do
                img.rating = -1
            end            
        end
    end

    if comboboxStyle.selected ~= 1 then --si un style est sélectionné
        for _,img in ipairs(dt.collection) do
            if img.is_hdr then
                dt.styles.apply(dt.styles[comboboxStyle.selected-1], img)
            end
        end
    end
end

-- code de examples/moduleExample.lua
if dt.gui.current_view().id == "lighttable" then
  install_module()
else
  if not mE.event_registered then
    dt.register_event(
      "AutoHDR", "view-changed", 
      function(event, old_view, new_view)
        if new_view.name == "lighttable" and old_view.name == "darkroom" then
          install_module()
         end
      end
    )
    mE.event_registered = true
  end
end

script_data.destroy = destroy
script_data.restart = restart 
script_data.destroy_method = "hide"
script_data.show = restart
return script_data
Répondre


Messages dans ce sujet
Automatisation de la création de fichiers HRD - par al1pb - 28-11-24, 09:18

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)