Aller au contenu

[Projet] Script d'automatisation du stacking avec Siril - Retour d'expérience & aide au debug


Messages recommandés

Posté

Bonjour à tous,

 

Je travaille actuellement sur un script d'automatisation pour le traitement d'images astro (EAA/SaaS). Le but est de créer un pipeline "tout-en-un" qui prend des fichiers brutes en entrée et sort une image finale, sans intervention humaine, et que je compte utiliser dans un SaaS que je développe depuis quelques mois. Je me suis dis que je pouvais partager la partie empilement car elle peut être utilisée de façon indépendante de mon SaaS.

 

Le concept : Le script scanne un répertoire, identifie les caméras/filtres via les headers FITS, associe les bons masters (darks/flats/bias) et orchestre siril-cli pour le pré-traitement, l'alignement et l'empilement.

Le script est fait en langage Python, et soucis: je suis principalement un développeur PHP/Symfony/NuxtJS de métier....du coup python est un peu galère :D (pourquoi y a pas d'accolade, de point-virgules...pourquoi ce langage plante en cas de mauvaise indentation raaaah ).

Je rencontre une difficulté technique récurrente sur certains jeux de données (notamment sur des séquences typées "CLEAR" ou avec des configurations spécifiques) : une erreur Reading sequence failed dans les logs de Siril. Malgré plusieurs tentatives de normalisation des noms de fichiers, le pipeline perd parfois le fil entre l'étape de calibration et de pré-traitement.

 

Je recherche des personnes qui aimerait bien le tester (avec leurs propres données par exemple) et qui saurait m'aider à régler ce problème avec siril-cli entre les fonctions `calibrate` et `preprocess`., ainsi que fixer le fond que je trouve trop clair (dès que je modifie les arguments de `subsky` ça part en cacahouète...)

 

Le code est disponible ici : Github

Merci d'avance pour vos conseils, vos tests et retours ^^.

 

Je vous fournis 3 exemples d'images que j'ai réussi à générer

- M16, 40 lights prises en CLEAR par un collègue de mon club astro

- M1 en SHO

- NGC2359 en HOO

Les sources de M1 et NGC2359 ont été prises sur ce lien

 

 

m16_20260604-161938_full.jpg

m1_20260605-131304_full.webp

ngc2359_20260605-131539_full.webp

Posté

J'ai reussi à debug le probleme des fichiers .seq non trouvés. Je me focalise maintenant sur les traitements de qualité de rendus et de couleurs.
Par exemple pour le subsky, voici ma fonction
 

def get_subsky_command(
    master_dark_path: str = None,
    master_flat_path: str = None,
    master_bias_path: str = None
) -> str:
    """
    Adjust subsky parameters according to the available calibration quality.
    Optimized to clean residual vignetting in corners in the absence of Flat,
    while preserving the center of the image (no dark halo).
    """

    missing = []
    if not master_dark_path: missing.append("dark")
    if not master_flat_path: missing.append("flat")
    if not master_bias_path: missing.append("bias")

    has_flat = "flat" not in missing
    nb_missing = len(missing)

    # Base parameters depending on flat availability
    if has_flat:
        base_cmd = 'subsky -rbf'
        common_params = '-smooth=0.4 -samples=50'
        tolerance = 1.2 if nb_missing == 0 else 1.4
        return f'{base_cmd} -tolerance={tolerance} {common_params}'
    else:
        base_cmd = 'subsky'
        degree = 3
        if nb_missing == 1:
            tolerance, smooth, samples = 1.4, 0.70, 60
        elif nb_missing == 2:
           tolerance, smooth, samples = 1.5, 0.75, 65
        else:  # nb_missing == 3
            tolerance, smooth, samples = 1.6, 0.85, 70
        return f'{base_cmd} {degree} -tolerance={tolerance} -smooth={smooth} -samples={samples}'

En fonction du nombre de DOF présentsles valeurs changent.

Le résultat avec M16 (40 lights CLEAR + un master dark) & M1 en Sho. Je n arrive pas à comprendre ces especes de cercles présent aussi dans les .fit compilés.

 

m16_20260610-101809_full.thumb.webp.22911186b75e19ec465491565b259b95.webp

m1_20260610-103830_full.webp

Posté (modifié)
il y a 9 minutes, HamHam a dit :

J'ai reussi à debug le probleme des fichiers .seq non trouvés. Je me focalise maintenant sur les traitements de qualité de rendus et de couleurs.
Par exemple pour le subsky, voici ma fonction
 

def get_subsky_command(
    master_dark_path: str = None,
    master_flat_path: str = None,
    master_bias_path: str = None
) -> str:
    """
    Adjust subsky parameters according to the available calibration quality.
    Optimized to clean residual vignetting in corners in the absence of Flat,
    while preserving the center of the image (no dark halo).
    """

    missing = []
    if not master_dark_path: missing.append("dark")
    if not master_flat_path: missing.append("flat")
    if not master_bias_path: missing.append("bias")

    has_flat = "flat" not in missing
    nb_missing = len(missing)

    # Base parameters depending on flat availability
    if has_flat:
        base_cmd = 'subsky -rbf'
        common_params = '-smooth=0.4 -samples=50'
        tolerance = 1.2 if nb_missing == 0 else 1.4
        return f'{base_cmd} -tolerance={tolerance} {common_params}'
    else:
        base_cmd = 'subsky'
        degree = 3
        if nb_missing == 1:
            tolerance, smooth, samples = 1.4, 0.70, 60
        elif nb_missing == 2:
           tolerance, smooth, samples = 1.5, 0.75, 65
        else:  # nb_missing == 3
            tolerance, smooth, samples = 1.6, 0.85, 70
        return f'{base_cmd} {degree} -tolerance={tolerance} -smooth={smooth} -samples={samples}'

En fonction du nombre de DOF présentsles valeurs changent.

Le résultat avec M16 (40 lights CLEAR + un master dark) & M1 en Sho. Je n arrive pas à comprendre ces especes de cercles présent aussi dans les .fit compilés.

 

m16_20260610-101809_full.thumb.webp.22911186b75e19ec465491565b259b95.webp

m1_20260610-103830_full.webp

 

Hello @HamHam

 

Je n'ai pas testé ton script mais je pense que ces cercles sont dus au fait que l'image sur laquelle tu travailles est en 16 bits (au lieu de 32).

Ce genre de chose est très caractéristique d'une plage de valeurs trop limité pour afficher correctement une image linéaire. 

 

Nico

Modifié par nico1038
  • J'aime 1
Posté

J ai ajouté une détection si 16 ou 32 bits sur le premier light et je l'applique sur `save "../stacked_{filter_name}.fit" -format=XX` mais pour le moment ça n'a pas l'effet escompté 

Je joins deux logs (y a énormement de blabla dedans, mais le contenu du script .ssf généré est en début de log).

m16.logm1.log

Rejoignez la conversation !

Vous pouvez répondre maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous pour poster avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.