Gadgets - Integrarea datelor GPS în EXIF

miahi

Wizzard
Sugar daddy
De ceva timp folosesc - for fun and profit - gadget-uri cu GPS inclus, aparate care te pot orienta pe şosea sau îţi arată cam pe unde eşti pe o hartă.

Legătura cu fotografia e simplă: dacă pot înregistra coordonatele, de ce să nu pot folosi localizarea pentru a vedea unde exact am făcut fotografiile, pentru a răspunde mai uşor la întrebarea "unde e făcută fotografia asta?". Ideea nu e nouă, există de ceva timp aparate care pot să înregistreze date GPS direct în EXIF-ul fotografiilor rezultate, însă costurile unui kit sunt foarte mari, pentru ce oferă.

Soluţia utilizată de mine foloseşte un PDA cu GPS inclus, plus câteva programe care să facă înregistrarea traseului GPS şi matching-ul între traseu şi fotografii, pe baza datei şi orei. După potrivire, coordonatele sunt salvate în datele EXIF ale imaginii.


Înregistrarea coordonatelor

Pentru înregistrare, cel mai bun program mi s-a părut Noni GPS Plot, care poate să înregistreze un parcurs, salvând inclusiv altitudinea. Una din cele mai importante funcţii este posibilitatea de a închide display-ul PDA-ului atunci când GPS-ul funcţionează (nu toate PDA-urile alimentează GPS-ul atunci când sunt în pseudo-standby, chiar dacă e folosit).

Noni GPS Plot poate exporta traseul înregistrat în diverse formate, cum ar fi Google Earth (pentru a fi importat direct în acest program) sau GPX, un format utilizat pe scară largă pentru transferul de date GPS între diferite programe, şi care este utilizat şi la matching-ul cu fotografiile.

Înainte de a porni înregistrarea coordonatelor trebuie să sincronizăm ceasurile celor două aparate; serviciul GPS se bazează pe datele de timp care sunt trimise de sateliţi, aşa că trebuie să potrivim ora aparatului foto după ora pe care o afişează device-ul GPS. Dacă sincronizarea între cele două nu s-a făcut, se poate face o modificare şi la momentul matching-ului, dacă ştim cât de cât diferenţa dintre cele două ceasuri. Cel mai simplu se poate înregistra diferenţa făcând o fotografie a ecranului GPS unde e afişată ora.

Alte programe care pot înregistra traseele (şi în timpul navigării) sunt cele bazate pe iGo, putând face export din interfaţă sau direct din baza de date iGO.db folosind iGo POI Explorer.


Scrierea coordonatelor

După ce s-a terminat şedinţa foto, avem două rezultate: un fişier .gpx exportat din NoniGPSPlot, care conţine datele GPS, şi un director cu fotografiile.

Pentru a combina cele două informaţii am folosit Happy Camel, un program care poate să salveze datele GPS în EXIF-ul fotografiilor, să includă numele locurilor din serviciul GeoNames, să se integreze cu Flickr, să salveze thumbnail-urlile fotografiilor ca fişier .kmz, care poate fi văzut folosing Google Earth sau Google Maps.

Pentru a rula Happy Camel aveţi nevoie de Python şi Python Image Library. După ce le-aţi instalat, dezarhivaţi happycamel şi intraţi în consolă (asta e, încă nu are interfaţă grafică). O rulare uzuală arată cam aşa:
Code:
E:\tracks\happycamel-v1-beta3>"c:\Program Files\Python25\python.exe"
happycamel.py -t "E:\tracks\Exp-080427-6,25km-.gpx" --clock-difference=-3600
--faster=y -x y D:\blabla\368CANON\*
iar rezultatul
Code:
Welcome to Happy Camel version 1-beta3
[ Loading track(s) ]
[ Loading photos ]
[ Looking up positions ]
No position found for photo IMG_6844.JPG
No position found for photo IMG_6845.JPG
[ Writing the metadata ]

După ce termină de scris metadata (durează destul de mult), în directorul D:\blabla\368CANON\ avem noile fişiere jpg, care conţin şi informaţia GPS, cât şi fişierele originale, având acelaşi nume dar cu sufixul _original.

Ca parametri am folosit traseul GPS dat prin fişierul .gpx, o sincronizare a ceasurilor de 3600 de secunde (ceasul aparatului foto nu fusese trecut pe ora de vară), parametrul faster=y pentru a folosi biblioteca internă de scriere EXIF şi nu programe auxiliare, şi parametrul -x y care comandă scrierea coordonatelor în EXIF-ul fotografiilor.

Pentru fotografiile care nu au corespondent în fişierul .gpx (dacă device-ul GPS a pierdut semnalul şi nu a fost înregistrată coordonata în secunda în care a fost făcută fotografia), HappyCamel poate să calculeze coordonate interpolate între cele mai apropiate în timp puncte. La fel, poate să interpoleze informaţiile despre altitudine (interpolarea altitudinii este oprită by default, informaţiile de altitudine pot fi mai rare din cauză că e nevoie de o precizie mai mare a determinării poziţiei ca să poată fi determinată corect).


Să ne bucurăm de rezultate

Cum zice şi Pieter Edelman, autorul HappyCamel, now what?

Cea mai interesantă vizualizare este cea sub formă de fişier .kmz, unde este arătat în Google Maps sau Google Earth traseul parcurs şi, pe traseu, fotografiile făcute. Un astfel de traseu vedeţi în exemplele de la Happy Camel.

Nu toate programele care citesc informaţiile EXIF pot să afişeze datele GPS. De exemplu, în datele EXIF afişate de Windows XP/2003 nu se afişează şi coordonatele. Un program care ştie să citească date GPS este ACDSee. Altul (free) este Opanda IEXIF. Avantajul Opanda este că există şi un plugin de integrare în Firefox, care poate fi downloadat de aici şi adaugă suport pentru citirea informaţiilor EXIF direct din browser şi integrarea cu Goolge Maps pentru afişarea zonei unde a fost făcută fotografia.

În exemplul de mai jos aveţi o fotografie făcută la Schitul Crasna, aproape de Măneciu, PH, iar link-ul pe care îl dă Opanda IEXIF este (după o modificare de zoom, deoarece nu există fotografii publice ale zonei la rezoluţie mare) acesta.


Alte resurse
GPS, Lightroom and Google Maps
JOBO PhotoGPS
 

Attachments

  • ACDSee.png
    ACDSee.png
    4.5 KB · Views: 167
  • kmz_example.png
    kmz_example.png
    374.2 KB · Views: 250
  • locate.png
    locate.png
    108.3 KB · Views: 181
  • opanda_iexif2.png
    opanda_iexif2.png
    36.6 KB · Views: 180
Pentru că autonomia PDA-urilor cu GPS-ul pornit nu mă mulţumea (maxim 4-5 ore), şi pentru că gadget-urile de pe piaţă care fac GPS Logging nu prea trec de 8 ore şi se încarcă pe USB (greu de găsit port USB când ai nevoie), am decis să îmi fac propriul logger.

Ce a ieşit vedeţi aici.

Principiul de funcţionare e simplu: modulul GPS raportează o dată pe secundă poziţia (latitudine, longitudine, altitudine) şi alte câteva date (viteză, azimut, oră, dată, sateliţii folosiţi). Datele sunt prelucrate de un microcontroller, care scrie datele pe un card SD şi parsează datele importante şi le trimite către display (latitudine, longitudine, altitudine, viteză, azimut, oră). Datele de pe cardul SD sunt citite pe PC (folosind dd-ul recomandat de aramdune + ceva cod custom) şi sunt exportate în format GPX, care este folosit apoi de HappyCamel.

Butonul negru aprinde backlight-ul, iar celălalt porneşte sau opreşte alimentarea aparatului. Bateria de backup (CR2032) alimentează memoria GPS-ului pentru a păstra datele despre sateliţi.

Autonomia estimată, cu un set de acumulatori: 40 de ore. Apoi schimb acumulatorii :smile:.
 
Ce fac eu când mă plictisesc? GPS trackers. Pentru că versiunea veche era prea mare pentru băgat în buzunar dacă nu am rucsac. Rezultatul are 64 de grame cu acumulator cu tot și 8x5x2cm.

IMG_1759_small.jpgIMG_1760_small.jpg

Am găsit Quectel L50 la vreo 80 de lei, și dacă tot era așa ieftin am luat vreo 3. Față de uBlox-urile pe care le foloseam până acum e mult mai ieftin și mai simplu (puține canale, puține funcții, neupgradabil), dar are antena inclusă (antenele separate sunt scumpe), e mic și consumă puțin. Se alimentează la 1.8V, așa că îi trebuie sursă separată, dar acceptă I/O de 3.3V.

Ca microcontroller am folosit un Olimexino pentru dezvoltare (Arduino industrial), pentru că are posibilitatea setării tensiunii de I/O (5V/3.3V). Forma finală folosește un Arduino Pro Mini 3.3V. E nevoie de 3.3V pentru că display-ul și cardul SD folosesc această tensiune, și tot ansamblul se poate alimenta dintr-un acumulator cu litiu (3.7V). Pentru alimentare am dremelizat un telefon Nokia vechi, am extras din el conectorul și suportul pentru acumulator, la care am adăugat un buton on/off și un divizor de tensiune pentru a putea monitoriza acumulatorul (ADC-ul Arduino nu vrea tensiune de referință peste 3.3V, așa că am împărțit tensiunea acumulatorului la 2). Display-ul și SD-ul sunt alimentate direct din sursa Arduino, iar pentru GPS am mai pus un MCP1700.

IMG_1762_small.jpgIMG_1766.jpgIMG_1761_small.jpgIMG_1763_Small.jpg

Consum total la baterie 40mA; bateria de Nokia ar trebui să țină cam 24 de ore. În testele de ieri o baterie încărcată complet a ținut 87000 de secunde până s-a oprit Ardiuno. Tensiunea acumulatorului a scăzut până la ~3.33V, sursa LDO din Arduino ține până pe la 3.35V. GPS-ul e alimentat separat și nu s-a oprit și el, așa că acumulatorul a continuat să se descarce până la 3V, când a intrat în modul de protecție. Va trebui să comand oprirea GPS-ului când scade tensiunea sub 3.5V, ca să nu distrug prea repede acumulatorii.

Încărcarea acumulatorului se face extern, cu un Lenmar PowerPort Clip, un încărcător USB universal pentru Li-Ion.

Ca de obicei, cea mai mare problemă a fost cutia. Până la urmă am băgat tot într-o cutie de pe la un servo chinezesc. Din păcate plasticul e foarte moale și se zgârie ușor, să vedem cât durează. De-asta am lipit tot cu bandă dublu adezivă, să se poată desface dacă e nevoie de mutat în altceva.

GeoSetter 532013 13510 PM.jpg
 
Cum arata tot aparatul asamblat? E mai solid decat varianta precedenta? Eu am ramas fara al meu, i l-am dat tatei pe post de cititor de pozitie (topometrie), m-ar interesa unul nou daca e mai solid; la cel vechi se mai misca cardul in slot si nu mai inregistra fix in mijlocul unei traversari de munti sau concurs de MTB, iar GPS-ul de pe telefon pierde semnalul si cand il pun in buzunar sau in tocul de pe brat. Baterii de Nokia se gasesc, chiar daca nu e cea mai buna varianta pentru mine (am mai multe baterii de S2/Xcover incarcate in rucsac cand plec prin munti), afisajul nou e mult mai prietenos si mai util decat cel vechi, versiunea 2.0alpha pare mult mai interesanta.
 
Cutia actuala e foarte subtire si clar nu tine la tavaleala, trebuie cautata alta. Am luat un slot de card microsd penru ca speram ca are clema de prindere, dar de fapt face click si pe urma poti trage de card si iese usor, nici asta nu rezista prea bine la zdruncinaturi. Va trebui sa mai caut card holdere, sau poate e al meu stricat. Daca e nevoie de reliability se poate scrie si pe doua carduri in paralel.

Partea buna e ca am luat ultimele 3 display-uri de 2x16 caractere, si ca microcontroller-ul are si ADC, asa ca se poate monitoriza bateria. Azi am pus pe display o estimare a timpului ramas, pentru ca e mai util decat procentajul.

Ca acumulator se poate folosi orice litiu, dar trebuie sa poata fi prinse ferm contactele. Eu am folosit Nokia pentru ca aveam un telefon vechi pe care l-am distrus cu ocazia asta, iar acumulatorii sunt ieftini si au protectie la descarcare.

LE: GPS-ul L50 e ieftin pentru că merită. Pe ploaia de-afară cold fix-ul se face în minute întregi, și nu are battery backup la RAM, dacă-l oprești face iar cold fix. Diferența față de uBlox 5 cu antenă mare e imensă, la uBlox cold fix (RAM resetat) în aceleași condiții a durat 30 de secunde și n-a mai pierdut poziția după asta, L50 pus lângă a făcut cold fix în 5 minute și dacă l-am mișcat un pic s-a pierdut. Să văd în pădure cum face...
 
Back
Top