ZaZet.
← Projekti
Projekt · Jadranska obala · Računalni vid

Kako kamera u luci postaje semafor za trajektni red

Nautivia čita javne kamere hrvatskih luka i pretvara ih u zeleno, žuto i crveno — a da nikada ne ispiše nijedan broj o vozilima. Priča o tehnologiji iza toga.

Stojite u koloni na Valbiski i postavljate jedno pitanje: hoću li stati na idući brod ili čekam još jedan? Raspored vam na to ne odgovara. Odgovor je u kameri koja tu kolonu gleda već godinama — samo što ga nitko nije čitao.

Zašto nikada ne ispisujemo broj automobila

Prva verzija brojala je vozila. Brojka je izgledala uvjerljivo i bila je kriva — na toj udaljenosti, pod tim kutom, s automobilima koji se međusobno zaklanjaju. A kriv broj gori je od nikakvog broja: netko na temelju njega odluči krenuti.

Zato proizvod nikada ne pokazuje brojku. Pokazuje boju i vrijeme:

Sužavanje onoga što smijemo tvrditi bilo je najvažnija odluka u cijelom projektu. Sve ostalo slijedi iz nje.

Uska grla nisu bila tamo gdje smo mislili

Dugo se činilo da je problem u optici: kamera je predaleko, slika je premalena, luka je u protusvjetlu. Ispostavilo se da je problem bio model. Na istoj snimci jedan je detektor vidio dva automobila, a drugi petnaest.

Pouka koja se isplatila: prije nego što okrivite uvjete snimanja, zamijenite model. Jeftinije je i češće točno.

Ne brojimo automobile — mjerimo cestu

Konačni pristup uopće ne pokušava prepoznati vozilo. Za svaku luku i svaki sat u danu postoji referentna slika prazne površine. Živa slika uspoređuje se s njom i mjeri se koliko je te površine zauzeto nečim što tamo inače nije.

To rješava sve ono zbog čega brojanje pada: sjene, sunce, magla, kamion koji zaklanja pet automobila. Ne treba nam znati što je na cesti — treba nam znati koliko je ceste pokriveno.

0 brojeva o vozilima
Proizvod tvrdi samo ono što kamera pouzdano pokazuje: boju, vrijeme očitanja i procjenu do popunjenja. Ništa više.

Od kamere do zaslona u dvije i pol minute

Prva izvedba zapisivala je očitanja u git i čekala da se stranica ponovno izgradi. Slika na zaslonu bila je stara gotovo dvadeset minuta — za odluku o ukrcaju, beskorisno.

Sada očitanje ide u objektno spremište, a stranica ga čita funkcijom na rubu mreže. Od trenutka snimanja do trenutka kad ga vidite prođe oko dvije i pol minute: obrada, kratka predmemorija i osvježavanje otvorene kartice.

Tri tisuće stranica iz jedne baze

Vozni redovi, luke, prijevoznici i cijene žive u jednoj bazi koja se puni iz službenog registra linija. Iz nje se generira cijela stranica — 3.336 datoteka na pet jezika — kao statični HTML.

Bez poslužitelja koji renderira, bez baze na kritičnom putu, bez pada u špici. Jedino što je uživo jest očitanje kamere, i ono ima svoj vlastiti, odvojeni put do stranice.

Dvije stvari koje bismo prenijeli na svaki sljedeći projekt

Slike dolaze iz javnih kamera Hrvatskog autokluba (HAK) i učitavaju se izravno s njihovih poslužitelja — ne čuvamo kopiju onoga što gledate. Vozni redovi dolaze iz službenog registra linija i svaka tvrdnja nosi datum zadnje provjere.

Česta pitanja

Odakle dolaze slike iz luka?
Iz javnih kamera Hrvatskog autokluba (HAK). Učitavaju se s njihovih poslužitelja, a mi ne pohranjujemo kopiju onoga što gledate.
Zašto se ne prikazuje broj automobila u koloni?
Jer na toj udaljenosti broj nije pouzdan, a kriv broj gori je od nikakvog. Prikazuje se boja — zeleno, žuto ili crveno — i procjena vremena do popunjenja.
Koliko je slika stara kad je vidite?
Očitanje se radi svakih deset minuta, a od kamere do zaslona prolazi oko dvije i pol minute obrade i predmemorije.
Može li se isto primijeniti drugdje?
Da. Referentna prazna slika, mjerenje zauzete površine i prag izveden iz podataka prenosivi su na svako mjesto gdje postoji javna kamera i red čekanja — parkiralište, rampa, granični prijelaz.
Trebate slično?

Imate kameru koja već sve vidi

Ako negdje postoji red čekanja i kamera koja ga gleda, iz toga se gotovo uvijek da izvući upotrebljiv podatak — bez novog hardvera.

Pišite na WhatsApp → Zagreb · odgovaram isti dan · možete pisati na hrvatskom · pogledajte usluge →