Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: Tuxer - 20.08.13 - klo:10.07

Otsikko: SEBIA - Simple Event Based Image Archive
Kirjoitti: 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.

Otsikko: Vs: SEBIA - Simple Event Based Image Archive
Kirjoitti: Tuxer - 22.08.13 - klo:14.04
sb_scanexif.py etsii oletuksena kaikki jpeg ja tiff -kuvat, joilla on EXIF-dataa. Muutama lisäoptio:

Koodia: [Valitse]
-a --all-images  ottaa mukaan myös kuvat, joilla ei ole exif-dataa

Koodia: [Valitse]
-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:
Koodia: [Valitse]
sb_scanexif -d /home/user/Picture -a -f jpeg,jpghakee 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ä.


Otsikko: Vs: SEBIA - Simple Event Based Image Archive
Kirjoitti: Tuxer - 25.08.13 - klo:20.11
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 :)
Otsikko: Vs: SEBIA - Simple Event Based Image Archive
Kirjoitti: jekku - 26.08.13 - klo:21.41
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:

Koodia: [Valitse]

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

Otsikko: Vs: SEBIA - Simple Event Based Image Archive
Kirjoitti: Tuxer - 26.08.13 - klo:22.24

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:

Koodia: [Valitse]

ImportError: No module named pyexiv2


Tuo pitäisi löytyä nimellä python-pyexiv2

Lainaus

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.

Lainaus
- 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.


Otsikko: Vs: SEBIA - Simple Event Based Image Archive
Kirjoitti: K-Veikko - 27.08.13 - klo:10.36
Pikaisesti testasin omalla koneella.

Otsikko: Vs: SEBIA - Simple Event Based Image Archive
Kirjoitti: Tuxer - 27.08.13 - klo:13.17
  • 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:
Koodia: [Valitse]
google-chrome --allow-file-access-from-filesTätä ennen pitää sammuttaa *kaikki* käynnissä olevat Chromet.
Lainaus
  • 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ä.
Lainaus
  • 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.).
Otsikko: Vs: SEBIA - Simple Event Based Image Archive
Kirjoitti: K-Veikko - 28.08.13 - klo:21.16
> 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.)
Otsikko: Vs: SEBIA - Simple Event Based Image Archive
Kirjoitti: Tuxer - 03.09.13 - klo:22.19


options.xml näyttää tältä:
Koodia: [Valitse]
<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ä:
Koodia: [Valitse]
wget http://opendimension.org/projects/sebia/downloads/sebia_beta2.1.tar.gz- pura paketti (paketti sisältää sebia_beta2 -nimisen hakemiston)
Koodia: [Valitse]
tar xzvf sebia_beta2.1.tar.gz- siirry sebia_beta2/python -hakemistoon
- aja sb_scanexif.py ja määrittele kuvahakemisto d- optiolla:
Koodia: [Valitse]
./sb_scanexif.py -d /home/arihayri/Pictures- Kuvahakemistoon ilmestyy sebia.index -niminen hakemisto
- Luo pikkukuvat sb_thumbnails.py -skriptillä ja määrittele kuvahakemisto samoin:
Koodia: [Valitse]
./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
Otsikko: Vs: SEBIA - Simple Event Based Image Archive
Kirjoitti: Tuxer - 05.09.13 - klo:12.50
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.
Otsikko: Vs: SEBIA - Simple Event Based Image Archive
Kirjoitti: K-Veikko - 05.09.13 - klo:14.10
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
Otsikko: Vs: SEBIA - Simple Event Based Image Archive
Kirjoitti: Tuxer - 05.09.13 - klo:22.50
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