Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: Tuxer - 20.08.13 - klo:10.07
-
huomio:tämä tuskin kiinnostaa graafisten käyttöliittymien ystäviä!
SEBIA - Simple Event Based Image Archive
Valokuvasekamelska alkoi olla omalla koneella jo mahdoton, joten jotain piti tehdä. Halusin hyvin simppelin systeemin, jolla kuvia voisi järjestää ajallisesti ja joka myös takaisi että tiedot on käytettävissä tulevaisuudessa.
Systeemi on todellakin simppeli, joten ei kannata odottaa hienouksia. (tosin yksinkertaisuus != helppokäyttöisyys )
Idea
Python-skripti kaivaa esiin *EXIF-dataa sisältävät* kuvat annetusta hakemistosta ja laittaa tiedot XML-tiedostoon. Toinen skripti luo pikkukuvat yhteen hakemistoon. Näistä tuotetaan selattava sivusto XSL-muunnoksilla. Sivusto sisältää linkit alkuperäisiin kuviin.
Sivustoa katsellaan *lokaalisti* normaalilla selaimella. Näkymiä on kaksi, hakemistot ja tapahtumat.
HUOM. Chrome ja Chromium vaativat käynnistämisen --allow-file-access-from-files optiolla
Tapahtumat
Tapahtuma (event) on esimerkiksi matka Roomaan. Sen alla on "kuvaussessioita" (session), joilla on begin ja end -arvo. Näin voidaan tallentaa esimerkiksi talon remontti, lomamatka, synttärit yms.
- Tapahtumat määritellään *käsin kirjoittamalla* events.xml-tiedostoon.
- Käytännössä siis hakemistonäkymästä kopioidaan halutut EXIF-aikaleimat begin ja end -arvoiksi. Katso readme.txt
Vaatimukset:
- SEBIA käyttää seuraavia python moduuleja: pyexiv2 ja pil
- palvelinta, Mysql-tietokantaa yms. *EI* tarvita
Lataus
readme.txt löytyy tuolta
http://opendimension.org/projects/sebia/readme.txt
Tuolta voi ladata beta-version:
http://opendimension.org/projects/sebia/
Omalla vastuulla voi kokeilla, jos jotain tällainen lähestymistapa kiinnostaa.
Parempaa dokumentaatiota on tarkoitus kirjoitella.
Kommentteja ja palautetta otetaan vastaan mielihyvin.
-
sb_scanexif.py etsii oletuksena kaikki jpeg ja tiff -kuvat, joilla on EXIF-dataa. Muutama lisäoptio:
-a --all-images
ottaa mukaan myös kuvat, joilla ei ole exif-dataa
-f --formats <format1,format2>
voi määrittää mitä päätteitä hyväksytään. Tuo on siis pääte, ei kuvatyyppi, joten esim. jpeg pitää kirjoittaa muodossa [jpg,jpeg]
Esimerkki:
sb_scanexif -d /home/user/Picture -a -f jpeg,jpg
hakee kaikki jpegit riippumatta onko niillä exif-dataa vai ei. Tapahtumia ei tietenkään voi käyttää näiden kuvien kanssa.
Kuvien selailussa on usemman sekunnin viive kun kuvia > 200 000, mutta silti ihan käytettävissä.
-
Kirjoittelin vähän kotisivun tapaista:
http://opendimension.org/projects/sebia/
Jos jotakuta kiinnostaa mutta englanti ei taivu, niin voin suomeksi tänne kirjoitella. Mutta oletettavasti mahdollinen käyttäjäkunta on sen verran pieni, ettei siihen montaa suomenkielistä mahdu :)
-
Ehdottomasti tervetullut lisä tarjolla olevien ohjelmien täydentäjäksi!
Mutta pikaisesti vilkaisin tuon sb_scanexif.py:n läpi (juuei, en osaa Pythonia, korkeintaan perusteiden alkeet ;)
Enkä saanut kokeiltua kun tältä konelta puuttuu ilmeisen tärkiä moduli:
ImportError: No module named pyexiv2
Pari kysymystä nousi hetioitis mieleeni:
- onko tuolle palikalle jpg ja JPG sama asia?
Aika moni kamera tuuppaa nimettynä *.JPG.
- onko Pythonille vastaavaa funktiota kuin bashin 'file'?
(Kun nimeen en oikein osaa luottaa...)
Esim:
../sebia$ file jouko2.10.08.2013*
jouko2.10.08.2013: JPEG image data, JFIF standard 1.01
jouko2.10.08.2013.jpg: JPEG image data, JFIF standard 1.01
jouko2.10.08.2013.JPG: JPEG image data, JFIF standard 1.01
-
Mutta pikaisesti vilkaisin tuon sb_scanexif.py:n läpi (juuei, en osaa Pythonia, korkeintaan perusteiden alkeet ;)
Enkä saanut kokeiltua kun tältä konelta puuttuu ilmeisen tärkiä moduli:
ImportError: No module named pyexiv2
Tuo pitäisi löytyä nimellä python-pyexiv2
Pari kysymystä nousi hetioitis mieleeni:
- onko tuolle palikalle jpg ja JPG sama asia?
Aika moni kamera tuuppaa nimettynä *.JPG.
jpg ja jpeg, isolla tai pienellä, kaikki käy.
- onko Pythonille vastaavaa funktiota kuin bashin 'file'?
(Kun nimeen en oikein osaa luottaa...)
Käytän imghdr-moduulia, joka tekee juurikin saman kuin file. Tosin se tunnisti .3DS -tiedoston tiff-tiedostoksi, joten skripti katsoo ensin päätteen ja sitten etsii EXIF-dataa vain jos imghdr sanoo että kuva on jpeg tai tiff.
-
Pikaisesti testasin omalla koneella.
- Itselläni tuon index.html sivun sisältö on tyhjä.
- Kätevästi sillä saa tehtyä thumbnailit.
- Useamman eri sijainneissa olevien kuvahakemistojen indeksointi ei onnistu.
- Jos polut olisivat suhteellisia, voisi tuo skripti (sitten lopullisessa versiossa) sijaita [kuvakansion juuressa], jolloinka kuvakansion siirtely paikasta toiseen kuljettaisi mukanaan tämän indeksoinnin.
-
- Itselläni tuon index.html sivun sisältö on tyhjä.
Mitä selainta käytät? Luultavasti selain ei anna avata lokaaleja tiedostoja. Voit kokeilla esi. Chromen käynnistämistä seuraavasti:
google-chrome --allow-file-access-from-files
Tätä ennen pitää sammuttaa *kaikki* käynnissä olevat Chromet.
- Kätevästi sillä saa tehtyä thumbnailit.
- Useamman eri sijainneissa olevien kuvahakemistojen indeksointi ei onnistu.
Tätä pähkäilin jonkin verran. Itse olen käyttänyt tuota esimerksi niin, että ulkoisella kovalevyllä olevat kuvat on indeksoitu eri hakemistoon koneen levyllä. Voisi kyllä olla järkevää, että voisi ajaa tavallaan yhteen kuvia useista lähteistä.
- Jos polut olisivat suhteellisia, voisi tuo skripti (sitten lopullisessa versiossa) sijaita [kuvakansion juuressa], jolloinka kuvakansion siirtely paikasta toiseen kuljettaisi mukanaan tämän indeksoinnin.
Juurikin näin. Tarkoitus on lisätä vielä skripti, jolla voisi tehdä tehdä erilaisia versioita (esitys, online, käyttökuva yms.).
-
> Mitä selainta käytät? Luultavasti selain ei anna
> avata lokaaleja tiedostoja. Voit kokeilla esi.
> Chromen käynnistämistä seuraavasti:
Kokeilin operalla, firefoxilla ja tällä google-chrome --allow-file-access-from-files
- index.html on tyhjä, otsikot näkyy
Osa kuvatiedostoistani ei sisällä mitään exif -tietoja, ovat skannattuja ja gimp yms. kuvia
> Jos polut olisivat suhteellisia, voisi tuo
> skripti (sitten lopullisessa versiossa) sijaita
> [kuvakansion juuressa]
Tarkemmin ajatellen tuo skripti saa olla missä vain, mutta se tekisi valitun kuvakansion juureen tuon index.html tiedoston sekä thumbnail hakemiston. + ehkä "root" index.html tiedoston sinne missä skripti ajetaan. Tässä olisi linkit kuvakansioissa oleviin index.html tiedostoihin.
Mielestäni tämän kaltainen kuvien indeksoitiohjelma on erinomainen idea. Jopa niin hyvä, että joku on jo joskus tullut tehneeksi samankaltaisen skriptin – löytyisiköhän repositoreista? En ole tutkinut asiaa.
Edit:
google-chrome --allow-file-access-from-files antoi sittenkin alihakemistolinkin!
Tosin olin jo siirtänyt kuvat tällä välin pitkäaikaisvarastointiin ulkoiselle kovalevylle, joten en osaa toimivuudesta nyt sanoa sen enempää.
(– Juuri tämän pitkäaikaisvarastoinnin takia toivonkin noiden polkujen olevan suhteellisia.)
-
Beta 2 sisältää seuraavaa:
- uusi aikaperusteinen selailumahdollisuus (vuosi/kuukausi)
- hakemistonäkymässä on nyt sivutus, jonka kokoa voi muuttaa (kts. options alla)
- linkit alkuperäisiin kuviin voivat ollat suhteellisia tai absoluuttisia (kts. options alla)
- indeksointi luodaan *annettuun kuvahakemistoon* sebia.index -nimiseen hakemistoon
- options.xml, jossa voi määritellä :
-- pikkukuvien koon (ajonaikainen, näin systeemi "muistaa" kuvien koon)
-- käytetäänkö suhteellisia vai absoluuttisia polkuja (selailunaikainen)
-- sivutus eli kuinka monta kuvaa hakemistonäkymässä näytetään kerrallaan (selailunaikainen)[/li]
options.xml näyttää tältä:
<options>
<!-- path: relative or absolute -->
<path>relative</path>
<!-- thumbnailsize: max thumbnail size (height or width) in pixels -->
<thumbnailsize>300</thumbnailsize>
<!-- path: how many images are presented per page in directory view -->
<pagersize>100</pagersize>
</options>
miniohje:
- hae SEBIA esim. wgetillä:
wget http://opendimension.org/projects/sebia/downloads/sebia_beta2.1.tar.gz
- pura paketti (paketti sisältää sebia_beta2 -nimisen hakemiston)
tar xzvf sebia_beta2.1.tar.gz
- siirry sebia_beta2/python -hakemistoon
- aja sb_scanexif.py ja määrittele kuvahakemisto d- optiolla:
./sb_scanexif.py -d /home/arihayri/Pictures
- Kuvahakemistoon ilmestyy sebia.index -niminen hakemisto
- Luo pikkukuvat sb_thumbnails.py -skriptillä ja määrittele kuvahakemisto samoin:
./sb_thumbnails.py -d /home/arihayri/Pictures
- avaa selaimella kuvahakemistosta index.html hakemistosta sebia.index
Firefox toimii paremmin kuin Chrome/Chromium. Chromen XSLT-tuki on vähän buginen ja hidas. Muista selaimista en tiedä.
Edelleen, omalla vastuulla voi kokeilla. Kokemuksia ja palautetta otetaan mielellään vastaan.
Testattu: Debian Wheezy, Iceweasel, Chrome Version 29.0.1547.57 ja Chromium
-
Beta 2.1
- lisätty -o (--output) optio sb_scanexif.py -skriptiin. Näin voi määrittää indeksoinnin sijainniksi jonkin muun kuin kuvahakemiston. Samalla polut asetetaan absoluuttisiksi. Tämä pitää sitten antaa sitten sb_thumbnails.py -skriptille hakemistoksi optiolla -d
- piilotiedostoja (.) ei enää indeksoida
Output tuli tarpeelliseksi kun ulkoinen kovalevy meni kesken skannauksen (joka kesti aika kauan) read-only tilaan.
-
Kokeilin skriptiä hakemistoon, jossa oli myös muita kuin kuvahakemistoja. ./sb_scanexif.py -d pysähtyi tähän:
Traceback (most recent call last):
File "./sb_scanexif.py", line 226, in <module>
main(sys.argv[1:])
File "./sb_scanexif.py", line 94, in main
readDir(imgDir, imgTypes, allImages)
File "./sb_scanexif.py", line 134, in readDir
utf8_fileName = unicode(fileName, 'utf-8')
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe2 in position 31: invalid continuation byte
-
Kiitos raportista!
Onnistuin saamaan saman virheen aikaan kun vaihdoin tiedoston tai hakemiston nimen joksikin muuksi kuin UTF-8 -merkistöä käyttäväksi.
Nyt SEBIAn pitäisi yksinkertaisesti vain ohittaa tuollaiset tiedostot:
http://opendimension.org/projects/sebia/downloads/sebia_beta2.1b.tar.gz