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
#2
Merci du partage.
Un script Lua existe déjà : https://www.multimedia4linux.de/index.ph...ofessional
Répondre
#3
Ce n'est pas la même chose !
Celui que vous proposez utilise un programme externe : Enfuse, et ne s'utilise que image par image, comme le bouton "Créer HDR" de darktable. Du même style il y a aussi un script pour HDRmerge ou Hugin ...
Ce que fait mon script est un regroupement automatique des photos, puis la création des HDR avec la fonction de darktable. Si la collection contient 30 prises de vue de 3 photos chacune, mon script va créer directement les 10 fichiers HDR sans sélectionner aucune photo !
Je l'ai créer pour gagner du temps et ne plus avoir de tâche répétitive à faire !
Répondre
#4
Avec darktable, la création de HDR exige des prises alignées. Enfuse pro utilise effectivement un programme externe mais dans un script, il y a une partie qui aligne les prises ! Oui HDRmerge et Hugin le font aussi et juste pour un HDR !
Répondre
#5
(28-11-24, 14:07)jpg54 a écrit : Avec darktable, la création de HDR exige des prises alignées. Enfuse pro utilise effectivement un programme externe mais dans un script, il y a une partie qui aligne les prises ! Oui HDRmerge et Hugin le font aussi et juste pour un HDR !

Oui exactement, mais vu que je fais mes photos sur trépied, avec souvent des longues pauses, l'assemblage HRD de darktable me convient très bien, en plus, j'aime bien son rendu et il est assez rapide !
Mes photos sont visibles sur insta : https://www.instagram.com/urbex.meetoooo/ Je suis un fan d'urbex et de photo !
Répondre
#6
Merci pour ce partage de ton travail en HDR. Je te propose ce pano sur 2 EV fait avec Hugin et post-traité avec darktable : https://www.flickr.com/photos/113336874@...ateposted/
Répondre
#7
Thumbs Up 
Merci du partage, superbe urbex.
Mes photos
dt compilé en local, dernière version officielle et master
Répondre


Atteindre :


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