Jump to content

pySiriL


Recommended Posts

Bonjour,

 

je viens de créer une librairie python étendant les capacités de script de SiriL. Elle se nomme "pySiril" et s'adresse aux personnes qui écrivent des scripts Siril et qui sont obligées de jongler avec des shells (ou bat  sous windows).

Elle permet dans un script Python d'appeler les commandes de SiriL.

Elle offre donc :

  • la possibilité de faire des tests et boucles ( if, else , for ... )
  • la possibilité de créer facilement des fonctions
  • la possibilité de récupérer les valeurs retournées par des fonctions telles que stat, bg, cdg, bgnoise ...

Cette librairie fonctionne sous les 3 OS : Windows , Linux et MAC OS ( à tester).

 

Elle est disponible : https://gitlab.com/free-astro/pysiril/-/releases

L'installation se fait en tapant : python -m pip install pysiril-0.0.4-py3-none-any.whl

Et pour désinstaller la version précédente: python -m pip uninstall pysiril

 

Astronomicalement,

        M27 trognon de  pomme

 

Un premier exemple récupérant les infos de quelques fonction de SiriL:

import sys
import os

from pysiril.siril   import *
from pysiril.wrapper import *
from pysiril.addons  import *

# ==============================================================================
# Example of functions which return values
# ==============================================================================
app=Siril()
try:
    cmd=Wrapper(app)
    fct=Addons(app)
    #app.Display(bLog=True,bInfo=False)
    #app.MuteSiril(True)
    app.Open()
    
    if sys.platform.startswith('win32'): 
        app.Execute("cd 'D:/_TraitAstro/20-SiriL/work/TestSirilMono'")
        app.Execute("load result")
        app.Execute("load 'D:/_TraitAstro/20-SiriL/work/M101/M101_c.fit'")
    else:
         app.Execute("cd '/home/barch/siril/work'")
         app.Execute("load M31_DSLR")
    
    if False :
        cmd.help()
        cmd.help("stat")
        cmd.help("xxx")
    
    print("BG:" ,cmd.bg())
    print("BGNOISE:" ,cmd.bgnoise())
    print("STAT:" ,cmd.stat())
    print("CDG:" ,cmd.cdg())
    print("ENTROPY:" ,cmd.entropy())
    
    app.Script("basic.ssf")
except Exception as e :
    print("\n**** ERROR *** " +  str(e) + "\n" )    

app.Close()
del app

 

un second exemple de traitement:

import sys
import os

from pysiril.siril   import *
from pysiril.wrapper import *
from pysiril.addons  import *

# ==============================================================================
# EXAMPLE DSLR with a functions wrapper
# ==============================================================================

def master_bias(bias_dir, process_dir):
    cmd.cd(bias_dir )
    cmd.convert( 'bias', out=process_dir, fitseq=True )
    cmd.cd( process_dir )
    cmd.stack( 'bias', type='rej', sigma_low=3, sigma_high=3, norm='no')
    
def master_flat(flat_dir, process_dir):
    cmd.cd(flat_dir )
    cmd.convert( 'flat', out=process_dir, fitseq=True )
    cmd.cd( process_dir )
    cmd.preprocess( 'flat', bias='bias_stacked' )
    cmd.stack( 'pp_flat', type='rej', sigma_low=3, sigma_high=3, norm='mul')
    
def master_dark(dark_dir, process_dir):
    cmd.cd(dark_dir )
    cmd.convert( 'dark', out=process_dir, fitseq=True )
    cmd.cd( process_dir )
    cmd.stack( 'dark', type='rej', sigma_low=3, sigma_high=3, norm='no')
    
def light(ligth_dir, process_dir):
    cmd.cd(ligth_dir)
    cmd.convert( 'light', out=process_dir, fitseq=True )
    cmd.cd( process_dir )
    cmd.preprocess( 'light', dark='dark_stacked', flat='pp_flat_stacked', cfa=True, equalize_cfa=True, debayer=True )
    cmd.register(   'pp_light')
    cmd.stack(      'r_pp_light', type='rej', sigma_low=3, sigma_high=3, norm='addscale', output_norm=True, out='../result')
    cmd.close()
    
# ============================================================================== 
# run Siril Dev
app=Siril("C:/awin/msys64/mingw64/bin/siril.exe", False)
workdir  = "D:/_TraitAstro/20-SiriL/work/TestSiril"

try:
    cmd=Wrapper(app)
    app.Open()

    process_dir = '../process'
    cmd.set16bits()
    cmd.setext('fit')
    master_bias(workdir+ '/biases' ,process_dir)
    master_flat(workdir+ '/flats'  ,process_dir)
    master_dark(workdir+ '/darks'  ,process_dir)
    light(      workdir+ '/lights' ,process_dir)
    
except Exception as e :
    print("\n**** ERROR *** " +  str(e) + "\n" )    

app.Close()
del app

 

Edited by m27trognondepomme
** mise à jour pysiril-0.0.4-py3-none-any.whl ***
  • Merci / Quelle qualité! 2
Link to comment
Share on other sites

Le même exemple mais écrit d'une autre façon ( ça permet une certaine souplesse d'écriture  )

import sys
import os

from pysiril.siril   import *
from pysiril.wrapper import *
from pysiril.addons  import *

# ==============================================================================
# EXAMPLE DSLR with a Execute function without wrapper functions
# ==============================================================================

def master_bias(bias_dir, process_dir):
    app.Execute("cd " + bias_dir )
    app.Execute("convert bias -out=" + process_dir + " -fitseq" )
    app.Execute("cd " + process_dir )
    app.Execute("stack bias rej 3 3  -nonorm")
    
def master_flat(flat_dir, process_dir):
    app.Execute("cd " + flat_dir + "\n"
                "convert flat -out=" + process_dir + " -fitseq"   + "\n"
                "cd " + process_dir  + "\n"
                "preprocess flat  -bias=bias_stacked"  + "\n"
                "stack  pp_flat rej  3 3 -norm=mul")
    
def master_dark(dark_dir, process_dir):
    app.Execute(""" cd %s
                    convert dark -out=%s -fitseq
                    cd %s
                    stack dark rej 3 3 -nonorm """ % (dark_dir,process_dir,process_dir) )
    
def light(ligth_dir, process_dir):
    app.Execute("cd " + ligth_dir)
    app.Execute("convert light -out=" + process_dir + " -fitseq"  )
    app.Execute("cd " + process_dir )
    app.Execute("preprocess light -dark=dark_stacked -flat=pp_flat_stacked -cfa -equalize-cfa -debayer" )
    app.Execute("register pp_light")
    app.Execute("stack r_pp_light rej 3 3 -norm=addscale -output_norm -out=../result")
    app.Execute("close")
    
# ==============================================================================
# run Siril Dev
workdir     = "/home/barch/siril/work/TestSiril"
try:
    app.Open(  )
    process_dir = '../process'
    app.Execute("set16bits")
    app.Execute("setext fit")
    master_bias(workdir+ '/biases' ,process_dir)
    master_flat(workdir+ '/flats'  ,process_dir)
    master_dark(workdir+ '/darks'  ,process_dir)
    light(      workdir+ '/lights' ,process_dir)
except Exception as e :
    print("\n**** ERROR *** " +  str(e) + "\n" )    
    
app.Close( )
del app

 

Link to comment
Share on other sites

un dernier exemple sur des fonctions annexes (Addons)  pouvant être utiles ( à enrichir au fur et à mesure des besoins )

 

import sys
import os

from pysiril.siril   import *
from pysiril.wrapper import *
from pysiril.addons  import *

# ==============================================================================
# Example of addons functions 
# ==============================================================================
app=Siril()
try:
    cmd=Wrapper(app)
    fct=Addons(app)
    
    
    # Create a seqfile
    
    workdir     = "D:/_TraitAstro/20-SiriL/work/TestSiril"
    processdir  = workdir + "/" + "xxxx"
    
    fct.CleanFolder(processdir,ext_list=[ ".cr2",".seq"])
    
    fct.MkDirs(processdir)
    
    NbImage= fct.GetNbFiles(workdir+ '/lights/*.CR2')
    print( "CR2 number:",NbImage)
    
    number=fct.NumberImages(workdir+ '/lights/*.CR2',processdir,"offsets",start=10,bOverwrite=True)
    
    if number == NbImage  :
        fct.CreateSeqFile(processdir+"/toto.seq", number )
    else:
        print("error of images number:",number, "<>",NbImage)
        
except Exception as e :
    print("\n**** ERROR *** " +  str(e) + "\n" )    
    
app.Close()
del app

 

Link to comment
Share on other sites

j'ai fait un petite mise à jour pour que l'aide en ligne soit fonctionnelle. Il me reste à finir l'aide du Wrapper de fonction . Cependant elle est disponible via la commande cmd.help()

 

Un exemple montrant les différentes façon pour obtenir une aide basique:

import sys
import os

from pysiril.siril   import *
from pysiril.wrapper import *
from pysiril.addons  import *

app=Siril()
cmd=Wrapper(app)

help( Siril )           # 1) pour la doc des fonctions de base de la librairie
help( Wrapper )         # 2) pour l'aide des fonctions wrapper *** pas encore fini ***
help( Addons )          # 3) pour l'aide des fonctions annexes

cmd.help()              # 4) liste de toutes les fonctions SiriL
cmd.help( 'convertraw') # 5) pour l'aide d'une fonction Siril

app.Close()
del app

 

  • J'aime 1
Link to comment
Share on other sites

  • 2 months later...

@m27trognondepomme

 

Aurais-tu plus d'info pour faire fonctionner PySiril sur Win10?

Faut il installer un python (au chaud dans sa Windows en hiver)?

 

Apparemment, c'est dans ta paroisse que l'on peut faire des bon script Siril... vu que la fonction "répertoire de travail" n'est pas dispo dans SIRIL.

Merci,

 

En ce moment, j'explore en suivant ce lien: Mise en place Python/VS_Code....

Edited by Sebriviere
Link to comment
Share on other sites

oui, pour utiliser la librairie pysiril, il faut au préalable télécharger Python : https://www.python.org/downloads/release/python-390

 

Ensuite, un simple éditeur tel que notepad++ est suffisant mais tu peux charger des environnements complets de développement qui permettent de faire du débug en  mode pas à pas:

  • eclipse + plugin pydev
  • spyder
  • pydev
  • idle
  • Edupython
  • ...

Un des avantages de la librairie en plus de la programmations avancées (if, else for etc...)  est la possibilité de récupérer les valeurs retournées par des fonctions telles que stat, bg, cdg, bgnoise.

 

Les exemples ci-dessus  montrent  différents styles de script d'écriture possibles avec la librairie.

 

N'hésites pas à me contacter si tu bloques dans tes premiers scripts.

 

Je te met aussi le lien :

 

la  librairie est sur gitlab:  https://gitlab.com/free-astro/pysiril

 

pour l'installation de la librairie,  il faut taper dans une console :

python -m pip install pysiril-0.0.5-py3-none-any.whl

 

Edited by m27trognondepomme
Link to comment
Share on other sites

il y a 11 minutes, Cissou8 a dit :

Si tu as des questions pour faire le setup de vscode pour python, n'hésite pas a me demander.

Ça va viendre, c'est sûr....

Va y avoir matière...

Je vais déjà explorer les exemples de @m27trognondepomme et les tiens...

voir structure/code... puis quand je chercherai a faire ma sauce.... il se pourrait fort que ça fuse...

  • Haha 1
Link to comment
Share on other sites

Bon, ben en fait facile....

Ctrl C puis Ctrl V et hop... PySiril c'est loché...

il voulait que j'update pip, pareil, Ctrl C, Ctrl V essai transformé....

Facile le Python.... sortez les Anaconda.....

 

@Cissou8, sympa, elle a mis un pdf....

 

En fait, mal au crâne.... bobo la tête.

Va y avoir de la lecture....et de la vidéo a digérer.

Link to comment
Share on other sites

@m27trognondepomme & @Cissou8

Pour bien démarrer entre python, VSCode et PySiril (Et Puis Siril), quelle serait la structure de répertoire la plus appropriée, ou mettre les telechargement, repertoire travail, script....

Bon tuto ou video?

J'aimerai eviter de faire un gros bordel de débutant sur mon PC....

 

Edited by Sebriviere
Link to comment
Share on other sites

Salut, j'ai envie de te dire que le rangement, c'est un peu une histoire de préférences personnelles...

Pour Siril et python, rien a faire, ils se sont installes et ils sont bien ranges. Pysiril, c'est bien range aussi. Le fait que @m27trognondepomme ait fait un whl, ça va le ranger proprement et le rend appelable par n'importe quel script que tu écrirais, par une commande d'import (regarde ses exemples ou le mien, y a toujours un from pysiril.siril import * etc).

Pour ce que tu vas vouloir écrire toi, ben je te dirais de te faire un répertoire de travail ou ça te fait plaisir. Dans lequel tu vas aller benner tous les morceaux de bidouille que tu vas écrire. Ce répertoire de travail, tu peux le déclarer dans VS code comme Workspace, et faire des configs de debug generiques et des specifiques a certains .py que tu ecrirais (cf la: https://code.visualstudio.com/docs/python/debugging). Puis quand tu veux faire un projet en particulier, tu lui fais un répertoire spécifique sous ton répertoire de travail...Pareil pour les modules que tu aurais été téléchargés. Mais bon, je sais pas si ça t'avance beaucoup tout ça. 

Link to comment
Share on other sites

@Cissou8  & @m27trognondepomme

 

Ok, doucement, je pars de super loin.... la première fois que j'ai codé, c'était en Hexa sur Videopac 52.... la dernière fois sur oric atmos/C64....

Depuis, vide spatial, en dehors d'une instal AstroLinux / KStar....

Donc j'apprivoise encore cette nouvelle fenêtre de VSCode et ce que je vais bien pouvoir en faire, Pro & Cons... où plutôt revoir mon idée d'avoir le PC faire plus... 

C'est pas non plus comme si en Bretagne, on avait des ciels nocturnes qui tuent toutes les nuits, donc des jours et des jours de photos à processer....

 

  • Haha 2
Link to comment
Share on other sites

il y a 18 minutes, m27trognondepomme a dit :

J'ai commencé sur ZX81

Mon premier truc electro, en fait était un ping/pong... en... Ouh la...fin 70...

Sinclair (Spectrum...) J'avais a cette epoque un Texas Instrument Ti99...

  • un microprocesseur 16 bits cadencé à 3,3 MHz (le TMS9900) ;
  • 16 Ko de RAM ;
  • 26 Ko de ROM.
  • Résolution graphique : 256 × 192 pixels ;
  • 16 couleurs ;

Et pour les jeunes.... non, il n'y a pas d'erreur dans les specs, on est bien en Ko et pixel......

 

Et il a encore fallu presque 10 ans après, pour que les premiers PC (a max quoi, 50/100 Mhz...), puis arrivent disques dur que, dixit vendeurs,  jamais vous ne réussirez à remplir ... pour un bras, vous aviez 20 Mo, si vous rajoutiez une jambe, ca montait a 40Mo....

 

Vous dire... Apple France a même fait faillite a l'époque... 

Edited by Sebriviere
Link to comment
Share on other sites

Le 15/11/2020 à 11:04, m27trognondepomme a dit :

N’hésites pas à décrire ton besoin à l'aide  d'un script ssl en mettant en commentaire les commandes qui te manques.

... à partir de ça, je te retranscris en python

 

Le premier, pas de script ssl, car rien dans SIRIL pour le faire.

Un module d'importation de fichier de la clé USB/SSD vers répertoire de travail sur PC.

 

Tu t'attendais à ca, ou on s'égare dès le début?

Projet Python_Importation module.pdf

 

Ajout: A-t-on un moyen en plus dans l'importation des Light de faire un tri des meilleurs XX%, mettre de côté les passages de nuages?

 

How, et voila la partie Calibration et Light.

 

Projet Python Calibration_Light Module.pdf

 

Probable que celle-ci puisse bénéficier du travail de  @Cissou8  ou une adaptation....

Des script Siril ou instructions existent, pas sur si mieux d'utiliser python pour les "formater" ou si faire via script.ssl

 

Bon, ben désolé.... c'est pas rien?... ou ca peut se faire "finger in the noze" (enfin pour coder, mieux sur le clavier....)?

Edited by Sebriviere
Link to comment
Share on other sites

Salut,

 

j'ai jete un oeil a la partie calibration/register/stack. Oui c'est a peu pres ce que fait GSS. Pour les entrées, l'adaptation a faire serait de crawler ton arbo et en fonction de ce qu'il trouve, ecrire un fichier cfg additionel (voir dans le pdf) qui overloade tes options de base. Du style, s'il a pas trouve de flats, mettre ppflat=False etc... Et ensuite tu peux passer ca a GSS. Sur ce qui est du filtrage apres alignement (FWHM/roundness) pour l'empilement, j'aime pas passer ca en auto, donc je l'ai pas prevu. Ca veut pas dire que je le ferai jamais, mais pour le moment, GSS en auto stacke tout ce qu'il y a a stacker. Je repasse ensuite en manuel (il ne reste plus que l'etape d'empilement) pour decider de qui je garde et qui je garde pas, dans un second temps. Par contre, je suis en train de faire une suite a GSS qui permettrait d'analyser les logs d'alignement...mais c'est encore work in progress.

Link to comment
Share on other sites

Il y a 9 heures, Sebriviere a dit :

Ajout: A-t-on un moyen en plus dans l'importation des Light de faire un tri des meilleurs XX%, mettre de côté les passages de nuages?

Ca siril le fait pendant l'alignement avec la fwhm pondérée.

Link to comment
Share on other sites

il y a 14 minutes, lock042 a dit :

Ca siril le fait pendant l'alignement avec la fwhm pondérée.

J'ai vu oui, dans les filtres.... repris aussi dans Sirilic pour les criteres.

 

On en serait pas là si tu avais fait un module Importation/Biblio en amont de Siril, comme Lightroom pour Photoshop...

😅😂🤣

 

Serieux, je boutade... bien conscient du job derriere Siril deja, enfin je dis conscient, comme beaucoup, c'est du domaine de l'imaginaire...car rien que gratter les débuts de Python m'inquiète.

Link to comment
Share on other sites

13 minutes ago, Papalima said:

C’est à la limite du HS mais @Cissou8, quand tu parles de GSS, c’est bien Green Swamp Software ?

@PapalimaNon...je connaissais pas Green Swamp Software, j'en ai entendu parler pour la première fois hier...Si j'avais su, j'aurais donne un autre nom! Donc non, GSS c'est une bibliothèque de fonctions python basées sur pySiril pour automatiser certaines parties du traitement. @m27trognondepomme a donne le lien vers mon post a ce sujet un peu plus haut.

 

1 hour ago, Sebriviere said:

Et la partie importation? 

 

Jouable, tendu ou sans intérêts?

@SebriviereJe te dirais que si tu as pris la peine d'en faire un workflow, c'est que tu y voies un intérêt pour ton utilisation. Donc, c'est une des meilleures motivations pour se lancer...

Link to comment
Share on other sites

il y a 8 minutes, Sebriviere a dit :

faut que le neurone suive.

Y a 8 ans, quand j'ai commencé Siril, le C et moi on n'était pas copain .... Mais alors pas du tout.

Mais comme je voulais un programme qui tourne sous Linux, j'ai trouvé la motivation pour aider @vinvin. Et depuis ...

Link to comment
Share on other sites

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.