Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Automatisation de la création HDR de fichiers *.dng
#1
Bonjour, je passe un temps de fou quand je rentre de prise de photos HRD à 3 expositions différentes...
Y a-t-il possibilité de pondre un script *.lua qui ferait le job, à moins qu'il existe déjà ?
Fonction à faire : repérer les photos prises à la suite, les assembler en *.dng, mettre en rejeté les photos originales, ajouter un style au *.dng qui corrige l'exposition !
Je ne trouve que très peu de documentation pour créer des scriptes lua, si c'est possible, bien sûr !
Merci de votre aide.
Répondre
#2
J'utilise à titre personnel un script <script.py> écrit en python, pour HDRMerge.

https://jcelaya.github.io/hdrmerge/

Code :
import os
from os import listdir
from os.path import isfile, join
import pyexiv2
import numpy as np
import colored
from pathlib import Path

print()
Dossier = input("Input Dossier RAWs - Entrée pour continuer : ")
#print("\n", "Dossier : ", Dossier, "\n")        # Dossier :  '/home/vieux_loup/Images/.Workflow/Travaux photos/Test_batch_hdrmerge/10_RAW'

raws = sorted([f for f in listdir(Dossier) if isfile(join(Dossier, f))])
#print("Photos : ", raws, type(raws), "\n")

Photos = len(raws)
#print("Nombre de photos : ", Photos, type(Photos), "\n")

Item = raws[:]
def ExposureTime(raw):
    img = os.path.join(Dossier, raw)
    md = pyexiv2.ImageMetadata(img)
    md.read()
    exposuretime = float(md['Exif.Photo.ExposureTime'].value)
    #exposuretime = ("{}".format(exposuretime))
    return(exposuretime)
ExTi = list(map(ExposureTime, Item))
#print("Exposure Time : ", ExTi, type(ExTi), "\n")

Bkt = len(set(ExTi))
#print("Braketting : ", Bkt, " expositions", type(Bkt), "\n")                    # https://www.delftstack.com/fr/howto/python/python-print-colored-text/

if Photos % Bkt > 0:
    input("Erreur - 1 pile incomplète - Entrée pour quitter")
    exit()
#print(f'{colored.fg(1)} Texte en rouge')

dictionnary = dict(zip(raws, ExTi))
#print("Dictionnaire : ", dictionnary, type(dictionnary), "\n")

trie_dictionnary = dict(sorted(dictionnary.items(), key=lambda item:item[1],reverse=True))      # reverse
#print("Trie par Exposure Time : ", trie_dictionnary, type(trie_dictionnary), "\n")

Trie_photos = list(trie_dictionnary.keys())
#print("Photos triées : ", Trie_photos, type(Trie_photos), "\n")

Photos_par_exposuretime = [Trie_photos[i : i + int(Photos/Bkt)] for i in range(0, len(Trie_photos), int(Photos/Bkt))]
#print("Photos par exposition : ", Photos_par_exposuretime, type(Photos_par_exposuretime), "\n")

Panorama = np.asarray(Photos_par_exposuretime)
#print("Panorama : ", Panorama, type(Panorama), Panorama.shape, "\n")

Piles = Panorama[0, :].tolist()
#print("Tableau Colonne 1 : ", Piles, type(Piles), len(Piles), "Piles", "\n")

Pile_1 = Panorama[:, 0].tolist()
print()
Message = ("Pile 1 pour contrôle : ", Pile_1, "Entrée pour continuer")
input(Message)

os.chdir(Dossier)
#print("Dossier Directory : ", os.getcwd(), "\n")

for pile in Piles:
    Index_pile = Piles.index(pile)
    #print(Index_pile)
    Pile_list = Panorama[:, Index_pile].tolist()
    Pile = ' '.join(Pile_list)
    #Cde_HDRMerge = str("hdrmerge -v --batch -a -g 10 -b 32 --no-crop " + Pile)
    #Cde_HDRMerge = str("hdrmerge -v --batch -a -g 10 -b 24 -p half --no-crop " + Pile)
    #Cde_HDRMerge = str("hdrmerge -v --batch -a -g 10 -b 16 --no-crop " + Pile)
    Cde_HDRMerge = str("hdrmerge -v --batch -a -m %od/%of_mask.png -g 10 -b 16 --no-crop " + Pile)
    #Cde_HDRMerge = str("hdrmerge -v --batch -a -m %od/%of_mask.png -g 10 -b 16 " + Pile)    # Autopano pas OK - .dng tailles différentes
    print("\n", "Pile ", Index_pile+1, " : ", Cde_HDRMerge)
    os.system(Cde_HDRMerge)

Je ne suis pas développeur, je n'avais jamais écrit de script, je ne possède donc pas les compétences pour aller plus avant.
Le script est opérationnel avec Kubuntu 22.04.

Si cela peux servir de base de départ.

HDRmerge peut être utilisé directement en mode CLI, pour peu que les prises de vue brackettées soit prises avec qqs sec de décalage.
Dominique
Kubuntu 22.04
Nikon D5500 - Objectif Nikkor AF-S DX 35 mm f/1.8G

Cordialement
Répondre
#3
(19-11-24, 11:27)Dominique38 a écrit : J'utilise à titre personnel un script <script.py> écrit en python, pour HDRMerge.

https://jcelaya.github.io/hdrmerge/

Code :
import os
from os import listdir
from os.path import isfile, join
import pyexiv2
import numpy as np
import colored
from pathlib import Path

print()
Dossier = input("Input Dossier RAWs - Entrée pour continuer : ")
#print("\n", "Dossier : ", Dossier, "\n")        # Dossier :  '/home/vieux_loup/Images/.Workflow/Travaux photos/Test_batch_hdrmerge/10_RAW'

raws = sorted([f for f in listdir(Dossier) if isfile(join(Dossier, f))])
#print("Photos : ", raws, type(raws), "\n")

Photos = len(raws)
#print("Nombre de photos : ", Photos, type(Photos), "\n")

Item = raws[:]
def ExposureTime(raw):
    img = os.path.join(Dossier, raw)
    md = pyexiv2.ImageMetadata(img)
    md.read()
    exposuretime = float(md['Exif.Photo.ExposureTime'].value)
    #exposuretime = ("{}".format(exposuretime))
    return(exposuretime)
ExTi = list(map(ExposureTime, Item))
#print("Exposure Time : ", ExTi, type(ExTi), "\n")

Bkt = len(set(ExTi))
#print("Braketting : ", Bkt, " expositions", type(Bkt), "\n")                    # https://www.delftstack.com/fr/howto/python/python-print-colored-text/

if Photos % Bkt > 0:
    input("Erreur - 1 pile incomplète - Entrée pour quitter")
    exit()
#print(f'{colored.fg(1)} Texte en rouge')

dictionnary = dict(zip(raws, ExTi))
#print("Dictionnaire : ", dictionnary, type(dictionnary), "\n")

trie_dictionnary = dict(sorted(dictionnary.items(), key=lambda item:item[1],reverse=True))      # reverse
#print("Trie par Exposure Time : ", trie_dictionnary, type(trie_dictionnary), "\n")

Trie_photos = list(trie_dictionnary.keys())
#print("Photos triées : ", Trie_photos, type(Trie_photos), "\n")

Photos_par_exposuretime = [Trie_photos[i : i + int(Photos/Bkt)] for i in range(0, len(Trie_photos), int(Photos/Bkt))]
#print("Photos par exposition : ", Photos_par_exposuretime, type(Photos_par_exposuretime), "\n")

Panorama = np.asarray(Photos_par_exposuretime)
#print("Panorama : ", Panorama, type(Panorama), Panorama.shape, "\n")

Piles = Panorama[0, :].tolist()
#print("Tableau Colonne 1 : ", Piles, type(Piles), len(Piles), "Piles", "\n")

Pile_1 = Panorama[:, 0].tolist()
print()
Message = ("Pile 1 pour contrôle : ", Pile_1, "Entrée pour continuer")
input(Message)

os.chdir(Dossier)
#print("Dossier Directory : ", os.getcwd(), "\n")

for pile in Piles:
    Index_pile = Piles.index(pile)
    #print(Index_pile)
    Pile_list = Panorama[:, Index_pile].tolist()
    Pile = ' '.join(Pile_list)
    #Cde_HDRMerge = str("hdrmerge -v --batch -a -g 10 -b 32 --no-crop " + Pile)
    #Cde_HDRMerge = str("hdrmerge -v --batch -a -g 10 -b 24 -p half --no-crop " + Pile)
    #Cde_HDRMerge = str("hdrmerge -v --batch -a -g 10 -b 16 --no-crop " + Pile)
    Cde_HDRMerge = str("hdrmerge -v --batch -a -m %od/%of_mask.png -g 10 -b 16 --no-crop " + Pile)
    #Cde_HDRMerge = str("hdrmerge -v --batch -a -m %od/%of_mask.png -g 10 -b 16 " + Pile)    # Autopano pas OK - .dng tailles différentes
    print("\n", "Pile ", Index_pile+1, " : ", Cde_HDRMerge)
    os.system(Cde_HDRMerge)

Je ne suis pas développeur, je n'avais jamais écrit de script, je ne possède donc pas les compétences pour aller plus avant.
Le script est opérationnel avec Kubuntu 22.04.

Si cela peux servir de base de départ.

HDRmerge peut être utilisé directement en mode CLI, pour peu que les prises de vue brackettées soit prises avec qqs sec de décalage.

Et bien, je ne connais pas HDRMerge, mais j'ai trouvé un lua pour Darktable...
Je vais essayer et un peu étudier.

Etant sur Windows, je ne sais pas si je peux utiliser le script proposé, mais en regardant en gros, il utilise les exifs pour savoir si les photos ont été prises en rafale, c'est l'idée que j'avais !

Merci beaucoup pour votre réponse.
Répondre
#4
J'ai créer un script lua, à voir sur le forum à ce sujet :
https://forums.darktable.fr/showthread.php?tid=6827
Répondre


Atteindre :


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