Mosstack - Itse koodaamani pinoamissofta Linuxille (ent. PyAstroStack)

Aloittaja micko, 22.02.2014, 12:31:32

« edellinen - seuraava »

micko

Hei

Muutama kuukausi sitten haastoin itseni ja lähdin kirjoittamaan tähtikuvien pinoamissoftaa Linuxille. Silloin ei vapaan koodin stäkkeriä löytynyt mistään ja se olikin osa motivaatiotani. Koodata osasin jonkun verran, nykyään hitusen enemmän, mutta amatööritasolla mennään edelleen. Sainkin melkoisen nopeasti koodattua keskeiset toiminnallisuudet eli kuvien rekisteröinnin ja pinoamisen. Ihmettelin jo että olikos tämä näin helppoa.

Ongelmia alkoi tulla vastaan kun aloin kirjoittaa käyttöliittymää. Sellaisesta ei ollut etukäteen juurikaan käryä toisin kuin matemaattisesta puolesta. Ongelmia tuli myös debayeroinnissa ja muistinkäytössä, kuten irkissä monet ehkä ovat kiroilustani havainneet...

Mutta nyt alkaa koodi olla siinä kunnossa, että kehtaisin julkaista ensimmäisen version. Tai no aika rumaa se itse koodi on, mutta omien testailujeni mukaan saattaisi jopa toimia.


PyAstroStack (kun en parempaakaan nimeä vielä keksinyt...)

Koodi on open source (GPLv3) ja se on nähtävissä BitBucketissa https://bitbucket.org/mikko_laine/pyastrostack. Samasta osoitteesta myös voi käydä lataamassa asennuspaketin.

Olen yrittänyt käyttää mahdollisuuksien mukaan valmiita kirjastoja ja apusovelluksia, mutta tämän asennusohjeita kirjoittaessa se ei enää tuntunutkaan niin hyvältä idealta. Jos lähdette asentamaan, niin lukekaa paketissa oleva INSTALL.txt. Gentoossa olen tehnyt kehitykseni ja siellä kaikki osat asentuivat helposti, mutta Ubuntussa oli vähäsen ongelmia OpenCL:n kanssa.

Koodi on Pythonia, koska sitä itse osaan parhaiten. Olen käyttänyt NumPy:ä, pyOpenCL:ää ja Cythonia nopeuttamaan raskainta laskentaa ja monilta osin laskut menevätkin suhteellisen vauhdikkaasti. Kirjoitan nopeustestejä tänne myöhemmin.

Mitä tällä saa aikaan? En tiedä. Minulla ei ole oikein ollut kovinkaan laadukasta dataa, millä testata. Omat kuvani ovat vähän niin ja näin. Tässä nyt kuitenkin esimerkkikuva:

pyAstroStack 0.1 demo image by micko_laine, on Flickr

(Tässä samasta datasta Iriksellä tehtynä, jos haluaa vertailla http://www.flickr.com/photos/96700120@N06/11826494784/in/set-72157634344389164)

Apua?

Koodaan koodini itse. Tämä on mulle harrastus, millä pidän aivoni käynnissä ollessani hoitovapaalla lapsen kanssa kotona. Tarvitsisin kuitenkin vähän apua lähdemateriaalin suhteen. Minulla on vain Canon 1100D -kamera ja olen toistaiseksi rajoittunut sen kuvien säätämiseen. Tarvitsisin toisenlaisella kameralla otettuja kuvia testimateriaaliksi. En myöskään osaa ottaa oikeanlaisia kalibraatiokuvia, varsinkaan flättejä. Listana kaikki mitä haluaisin:

  • Sarjan kunnollisia raakakuvia, ainakin valot ja flätit
  • Yksittäisiä raakakuvia erilaisista kameroista, jotta voin testata debayerointeja
  • Tietoa erilaisten järjestelmäkameroiden bayermatriiseista. En oikeasti löytänyt netistä millään tietoa tästä. DCRaw kertoo 1100D:n raakakuvasta Filter patternin olevan RGGBRGGBRGGBRGGB. Tehkää raakakuvallenne esim. "dcraw -v -i kuva | grep Filter" ja kertokaa mulle tulostus ja kameran malli
  • Olisi myös kiva, jos joku oikeasti kokeilisi asentaa softaa ja kertoisi mulle, mitä kaikkea temppuja INSTALL.txt:ssä listaamieni lisäksi pitää tehdä.  :oops:
Mikko Laine
Mosstack, koodaamani tähtipinoamissofta
Blogini
Kaikki kuvani on otettu yhdistelmällä Canon EOS 1100D, 200/2.8L II USM ja Eq3-2 ellen ole toisin sanonut.

JVO

90% kameroissa bayermatriisi on tuo RGGB..., lisäksi on muutama olympus joissa matriisi on RG1G2B (kaksi lievästi erisävyistä vihreää) sekä tietysti fujin kikkailut superccd:n ja xtransin kanssa.

micko

Lainaus käyttäjältä: JVO - 22.02.2014, 13:27:20
90% kameroissa bayermatriisi on tuo RGGB..., lisäksi on muutama olympus joissa matriisi on RG1G2B (kaksi lievästi erisävyistä vihreää) sekä tietysti fujin kikkailut superccd:n ja xtransin kanssa.

Olen ymmärtänyt, että tuosta RGGB:stä löytyy eri päin olevia variaatioita. Eli siis tästä kuvasta neljä vasemmanpuoleisinta


Ainakin OpenCV:n debayerointialgoritmille tuo järjestys piti kertoa, Regimillä menee oletuksena nuo välillä sekaisin ja DSS:kin tarvitsi päivityksen, että osasi 1100D:n kuvat debyaeroida oikein. Saan tietenkin itse koodissani kysyttyä tuon järjestyksen vaikka kirjoittamallani dcraw -v -i:llä, mutta kysynkin tätä juuri siksi, että mihin kaikkiin järjestyksiin minun tulee varautua.
Mikko Laine
Mosstack, koodaamani tähtipinoamissofta
Blogini
Kaikki kuvani on otettu yhdistelmällä Canon EOS 1100D, 200/2.8L II USM ja Eq3-2 ellen ole toisin sanonut.

kvahlman

Canon 450D ainakin antaa epäyllättävästi vastaavan bayermatriisin.

Ubuntu 12.04:ssä ei ole vielä ainakaan astropy:tä eikä configparseria eli jouduin asentamaan ensin python-dev:in (kääntötyökalut oli jo, että en tiedä osaako python-dev vetää mukanaan tarvittavia kaluja) ja sitten asentamaan pipillä nuo.

OpenCL ei tällä hetkellä toimi (varmaan kun graffa-ajurina on vielä ajossa nv eikä nvidian binääriblopit jotka python-pyopencl toi mukanaan), mutta testin vuoksi laitoin debayerin juoksemaan sillä python-only implementaatiolla. Tuntuu kestävän ihan oman aikansa  :tongue:

Pitää kohta käynnistellä nvidian ajureilla ympäristöä jos OpenCL alkaisi toimia, mutta sellaisen huomion tein jo että komentojen nimissä saa olla tarkkana, "addir" vs "adddir" virhettä ei ollut ihan helppo huomata kun ohjelma ei siitä huomauttanut vaan oli tyytyväisen hiljainen vaikka olisi komentanut että "AstroStack.py nönnönnöö"  :grin:

Mutta olen kovasti kiinnostunut stackaysohjelmasta Linuxille, kun tuli StarToolsin lisenssi hankittua (PI olisi vähän kallis ja varmaan turhan täynnä fiitsöjä omiin kykyihin verrattuna) ja tällä hetkellä ainut sopiva työkalu jonka olen löytänyt on DSS winen läpi, eikä se tosiaankaan ole kovin optimaalinen kokemus. Joten testaus yms apua voinee odottaa saapuvan tältä suunnalta :)

micko

Kiitos palautteesta.

Kokeilin itse Ubuntu 13.10:llä ja siinä oli astropy ja configparser mukana. Pipillä tosin olen joutunut välillä päivittämään itsekin ties mitä, kun esimerkiksi paketinhallinnan Numpy päätti, ettei tykkääkään Lapackista, Atlaksesta tai Blasista tai jostain vastaavasta ja heitti aina vain virheen ladatessa. Kuvittelin, että tämä johtui vain omista säädöistä sillä puhtaassa virtuaalikoneasennuksessa tuota ei tullut vastaan.

OpenCL:stä ongelmana mulla oli vielä, ettei paketinhallinnan nvidia-ajurit osanneet OpenCL 1.2:ta jota pyopencl taas ilmeisesti vaatii saada käyttää. Siihen auttoi sudo add-apt-repository ppa:xorg-edgers/ppa, uusimmat ajurit ja sen jälkeen paketin ocl-icd-opencl-dev asentaminen.

Oli säätö jopa sen verran hankalaa, että alkoi kaduttaa koko OpenCL:n käyttö vaikka sen kanssa kyllä debayerointi on todella vauhdikasta. 0,2 sekunttia per kuva.

Käyttöliittymän kökköydet korjasinkin jo. Pitää laittaa kohta päivitetty versio jakoon. Nyt valittaa vääristä inputeista ja selkeyden vuoksi vaihdoin adddir ja addfile muotoon dir ja file.
Mikko Laine
Mosstack, koodaamani tähtipinoamissofta
Blogini
Kaikki kuvani on otettu yhdistelmällä Canon EOS 1100D, 200/2.8L II USM ja Eq3-2 ellen ole toisin sanonut.

explo

#5
Hienoa että joku on tältä osin tarttunut toimeen, Linuxille ei toistaiseksi tosiaan ole varsinaisesti liikaa natiivisoftia tällä sektorilla. Pikaisena minimaalisena apuna kuittaan dcrawin kertovan, että Canon 5D mk III:n patterni on se sama kovin suosittu RGGBRGGBRGGBRGGB.

Mellon

Todella mielenkiintoinen hanke! Todella upeaa harrastussoftan kehityshenkeä tässä porukassa. Kaikki halostackit, astrotortillat, vahticlientit ja muut kehittäjien omasta tarpeesta alkaneet devausprojektit ilahduttavat todella paljon.

Vielä kun säitä sais.

micko

Versio 0.1.1

https://bitbucket.org/mikko_laine/pyastrostack/downloads/pyAstroStack-0.1.1.tar.gz

Korjailin bugeja, selkeytin komentoja, ja lisäsin mahdollisuuden valita käytettävä algoritmi.

Rekisteröintialgoritmissa oli pahakin bugi, joka ei kuitenkaan näyttänyt vaikuttavan sen toimintaan negatiivisesti. Korjasin, ja siitä tuli monta kertaa hitaampi. Jes. Pienellä säätämisellä tuosta sai vielä suurimman osan lisääntyneestä ajasta viilattua pois.

Haluan lisätä mahdollisuuksia säätää parametreja monessa paikkaa ja alkaa komentorivi-ui tuntua kankealta siihen. Ehkä seuraavaksi alan opettelemaan vihdoin PyQt:tä. Tarkoituksena on säilyttää komentorivi kuitenkin osana ohjelmaa, joskin silloin parametrien ja monen muun asian säätö tapahtuu projektifileä muokkaamalla. Ennen GUI:ta pitää kuitenkin saada monta muuta suunnitteilla olevaa juttua valmiiksi.
Mikko Laine
Mosstack, koodaamani tähtipinoamissofta
Blogini
Kaikki kuvani on otettu yhdistelmällä Canon EOS 1100D, 200/2.8L II USM ja Eq3-2 ellen ole toisin sanonut.

micko

Versio 0.1.999
Melkein 0.2. Toiminnallisuus on oikeastaan pysynyt samana, mutta olen tehnyt kaikenlaista valmistelevaa työtä GUI:ta varten. Se olisi suunnitteilla seuraavaksi. Tässä pre 0.2:ssa toimii ainoastaan yksi metodi joka vaiheesta, eli yksi rekisteröinti, yksi debayerointi jne... 0.2:ssa ovat kaikki kunnossa ja niistä voi jopa valita haluamansa ilman koodin puukotusta. :)

Lupailin nopeusvertailua ja muuta statistiikkaa. Sitäkin on lisää tulossa jahka saan ajanotot säädettyä joka vaiheeseen, mutta nyt kokonaisprosessin kesto:

30 light framea, 6 flättiä, 10 biassia ja koko käsittelyn kesto (automatisoituna) oli 27min. Rekisteröinti yhtenä aikaavievimmistä osuuksista otti noin 10min. Sitä pitäisi parantaa. Tähtienmätsäysalgoritmista on jo viilattu pois, mitä on viilattavissa, mutta jos affinimuunnokset saisin toimimaan oman koodin sisällä numpy.array:lle, niin pois jäisi useita minuutteja levy-io:ta. Nyt joudun lukemaan fitsin, kirjoittamaan sen kolmeksi tiffiksi (python-imaging ei osaa rgb 16bit tiffejä ja imagemagick ei tajua fitsiä oikein) lukemaan nuo kolme levyltä ja kirjoittaa ne uudestaan fitsiksi. Stäkkäys nopeutuu tietenkin, jos otetaan lisää muistia käyttöön. Nyt tuo on säädetty melko maltilliseksi muistinkulutuksen suhteen.

Ongelmia on tullut vastaan myös OpenCL:n kanssa. Näköjään se ei toimi uusimmilla Nvidian ajureilla vaan pitää ottaa toiseksi uusimmat. Huoh... Pitäis kait hankkiutua eroon siitä kokonaan.
Mikko Laine
Mosstack, koodaamani tähtipinoamissofta
Blogini
Kaikki kuvani on otettu yhdistelmällä Canon EOS 1100D, 200/2.8L II USM ja Eq3-2 ellen ole toisin sanonut.

micko

Versio 0.2
Linkki: https://bitbucket.org/mikko_laine/pyastrostack/downloads

Ja niitä nopeustestejä vähän...

OpenCL tuottaa edelleen ongelmia. Ubuntu 14.04 betassa näyttäisi olevan sopivat versiot kaikesta tarvittavasta, mutta en ole testaillut vielä. Olisi tosi hyvä, niin olisi tuosta OpenCL-tuesta iloa muillekin kuin mulle. Pitänee koodata jokin muu nopea menetelmä debayerointiin, esim Cythonilla (mitä käytänkin jo jonkin verran muualla) tai ihan erillinen ohjelma C:llä. Puhtaalla Pythonilla kestää 5 min kuvaa kohti. Se on vähän liikaa. OpenCL:llä menee viidessä sekunnissa, josta 4,8s on levy-io:ta ja muuta overheadia. 0,2s itse debayerointia. Siinä syy, miksi tuota haluaisin käyttää...

Otin aikaa Bashin time-komennolla ja sen tuloksista kohta "real", joka käsittääkseni on juurikin kelloaikaa. Prosessin eri osien kestot pylväskaaviona:


Ja samat vertailuna piirakkakaaviossa:


Analyysiä: Rekisteröinti vie ihan hullusti aikaa. Kaikkeen muuhun olen melkoisen tyytyväinen. En ole ottanut aikaa DSS:stä tai IRIS:stä, mutta perstuntumalla tämä pääsee samoihin lukemiin. Rekisteröintiä lukuunottamatta siis. Sen algoritmin olen kirjoittanut Cythonilla, mikä nopeutti jonkin verran puhtaaseen Pyyttoniin nähden, mutta siltikään tuosta ei kovin vauhdikasta tullut. OpenCL:lle en osaa tuota antaa laskettavaksi algoritmin luonteesta johtuen. Vähän tuota voisi nopeuttaa rinnakkaislaskennalla. Nyt tuo laskee kaikki yhdellä prossuytimellä peräjälkeen. Taitaa tänäpäivänä neljä corea olla minimi, joten siitä saisi nopeutta jonkin verran.

Kuvien laadusta en osaa sanoa. Omista testikuvistani saan irikseen verrattavaa jälkeä, mutta mun data nyt on mitä on. Pitäisi päästä paremmalla datalla testaamaan.
Mikko Laine
Mosstack, koodaamani tähtipinoamissofta
Blogini
Kaikki kuvani on otettu yhdistelmällä Canon EOS 1100D, 200/2.8L II USM ja Eq3-2 ellen ole toisin sanonut.

micko

Versio 0.3.0

Innostuin ja viimeisen viikon aikana koodia tullut varmaan enemmän kuin ennen tätä yhteensä. Tosin suurin osa on vanhan parantelua ja varmistelua. Uutta ei paljoakaan ole.

Tärkeimpänä kuitenkin:


  • Ei enää PyOpenCL riippuvuutta. Tuetaan edelleen ja nopeampaa se on kuin oletuksena oleva Cython, mutta ei enää välttämätöntä
  • Pitäisi toimia Ubuntussa paketinhallinnasta löytyvillä riippuvuuksilla. Ei ylimääräistä säätöä vaan asennusohjeista löytyvä apt-get onelineri. En ole kylläkään testannut 13.10:llä, vaan ensi viikolla julkaistavalla 14.04:llä.
  • Nopeutusta rekisteröintiin. 30 kuvan sarja rekisteröityy nyt vajaassa 5 minuutissa aikaisemman 12min sijaan. Toki riippuu koneen tehoista nopeus.
  • Muistinkäyttö pitäisi pysyä vihdoin kurissa. Kuvittelin tämän olleen kunnossa, mutta rekisteröinnistä löytyi vielä pahoja muistivuotoja.

Sain vihdoin käsiini Nikonin (D5100 näyttäis olevan) raakakuvan, niin voin lisätä tuen niillekin kuville. Ei siis ole vielä tässä versiossa. Näyttäisi onnistuvan ihan kertomalla ohjelmalle tuo NEF-tiedostopääte. Sisältö lienee sopivassa muodossa.
Mikko Laine
Mosstack, koodaamani tähtipinoamissofta
Blogini
Kaikki kuvani on otettu yhdistelmällä Canon EOS 1100D, 200/2.8L II USM ja Eq3-2 ellen ole toisin sanonut.

micko

Kokeilin Ubuntun/Debianin asennuspaketin tekemistä ja taisin jopa onnistua jotenkin. Itse softa asentuu kivasti, mutta riippuvuuksista en ole vielä varma. Kokeilen tyhjällä asennuksella lähiaikoina.

https://bitbucket.org/mikko_laine/pyastrostack/downloads/pyastrostack_0.3.0-1_amd64.deb

Lähdekoodista asennettava paketti löytyy https://bitbucket.org/mikko_laine/pyastrostack/downloads/pyAstroStack-0.3.0.tar.gz
Mikko Laine
Mosstack, koodaamani tähtipinoamissofta
Blogini
Kaikki kuvani on otettu yhdistelmällä Canon EOS 1100D, 200/2.8L II USM ja Eq3-2 ellen ole toisin sanonut.

micko

Nyt olisi tämän softan asentaminenkin helpompaa. Gentoolle lötyy ebuildi science overlaysta ja Ubuntulle (vain tänään julkaistava 14.04 tuettu) löytyy paketti täältä.

Lisää aiheesta: http://mikkolaine.blogspot.fi/2014/04/pyastrostack-now-with-easier.html
Mikko Laine
Mosstack, koodaamani tähtipinoamissofta
Blogini
Kaikki kuvani on otettu yhdistelmällä Canon EOS 1100D, 200/2.8L II USM ja Eq3-2 ellen ole toisin sanonut.

kurja


micko

On tarkoitus jahka ehdin perehtyä ppa:n tekemiseen. Nyt olen koodaillut GUI:ta tuolle ja siitä alkaa ensimmäinen raakaversio olla valmis. Ei kyllä yhtään mukavaa puuhaa tuo GUI-räpellys. Komentorivi tulee näillä näkymin olemaan vielä se pääasiallinen käyttöliittymä.

Uudessa versiossa sitten mukana myös sigma clipping ja sigma mediaani pinot.
Mikko Laine
Mosstack, koodaamani tähtipinoamissofta
Blogini
Kaikki kuvani on otettu yhdistelmällä Canon EOS 1100D, 200/2.8L II USM ja Eq3-2 ellen ole toisin sanonut.