Pozdravljeni developerji 👋!

V tej objavi si lahko preberete report o ideji in izdelavi aplikacije sliki.se, ki vam omogoča da se s telefonom slikate za osebne dokumente.


Izvir ideje 💡

Lansko leto poleti sem rabil sliko za nov osebni dokument. Presenetilo me je, da foto booth (v Domžalah) stane 10€ za tri poizkuse slikanja in štiri natisnjene slike. Pogooglal sem še cene profesionalnih fotografov, ki za slike za osebne dokumente računajo okoli 15-20€. Vse skupaj se mi je zdelo drago, saj mislim, da se lahko s telefonom slikam vsaj enako dobro kot me slika foto booth.

Potem pa sem dobil idejo - profesionalni fotografi imajo dostop do sistema e-fotograf, kamor lahko nalagajo slike, strankam pa nato izdajo potrdilo iz sistema e-fotograf. Te fotografije so potem na voljo delavcem na upravnih enotah, tako da ne rabiš s seboj prinesti slike v fizični obliki.

Kaj če bi naredil aplikacijo, ki bi se povezala s sistemom e-fotograf. Uporabnik bi se lahko slikal s svojim telefonom, za ustrezne slike (in nekaj denarja) pa bi uporabniku izdal potrdilo iz sistema e-fotograf.

Res me je žulilo, da se ne moram slikat kar z mojo 200MP kamero na Xiaomiju :D, zato sem si zavihal rokave in šel na delo…

V glavi sem imel enostavno idejo:

  • Dobim dostop do sistema e-fotograf.
  • Naredim selfie app, s katerim se lahko slikaš s telefonom.
  • Selfie app povežem s sistemom e-fotograf.
  • Profit 💰

Flow chart sliki.se

alt text

Pridobitev dostopa do sistema e-fotograf

Za pridobitev dostopa do sistema e-fotograf, moraš opraviti izobraževanje na daljavo. Na izobraževanju izveš nekaj zanimivih stvari - npr. retuširanje slik je prepovedano… ( :( say bye bye to AI background removers).

Izdelava aplikacije - izbrane tehnologije

Aplikacijo sem sestavil iz naslednjega tech stack-a:

Backend:

  • django REST framework - za REST API.
  • SQLite3 - kjer beležim nakupe.
  • Selenium + geckodriver - za crawlanje po e-fotografu.

Frontend:

  • Flutter - mobile app (Android only dokler mi Apple ne odobri razvijalskega računa.)
alt text

Povezava med e-fotografom in mojo aplikacijo

E-fotograf je JSF aplikacija, s PrimeFaces komponentami.

Povezavo med e-fotografom in mojim backendom bi lahko implementiral na dva načina:

  • Pošiljanje direktnih requestov na e-fotograf backend, kot jih pošlje efotograf frontend.
  • Crawlanje po e-fotografu preko Selenium-a.

Zaradi enostavnosti drugega pristopa sem se za začetno implementacijo odločil za integracijo s Selenium crawlerjem. Dve slabosti tega pristopa:

  • Višja poraba RAMa na strežniku, saj vsak delavec na backendu spawn-a svojo instanco firefox-a.
  • Več sistemskih dependencijev. (geckodriver + firefox)

Prednost:

  • Simplicity

V prihodnjosti imam plan komunikacijo z e-fotografom prestaviti na request-e.

Preverjanje ustreznosti fotografij

Preden preko sistema e-fotograf izdam potrdilo se moram prepričati, da je slika kvalitetna.
Sistem e-fotograf sam preverja če je naložena slika primerna in za neprimerne slike vrne napake v berljivem formatu.

Torej v teoriji bi lahko sliko ki jo uporabnik zajame, direktno naložil na e-fotografa, da mi pove če je slika OK. Sem se pa odločil, da bom minimiziral število requestov na sistem e-fotograf, zato sem tudi na svoj backend dodal preverjanje fotografij, preden se te fotografije naložijo na e-fotografa.

Za preverjanje fotografij uporabljam nevronsko mrežo icaonet. icaonet je super, in znatno zniža število requestov s slabimi slikami, ki pridejo do sistema e-fotograf, ni pa perfekten, predvsem sem opazil da ima težave s false pozitivi - npr. je 80% prepričan, da imaš za seboj ne-enakomirno ozadje čeprav stojiš pred popolnoma enobarvno steno. Zaradi tega so pragovi (threshold) icaonet-a za sprejem fotografije postavljeni na precej nizke vrednosti.

PS: Ker bi rad izboljšal performance icaonet-a; prosim označite, “Da”, ko vas aplikacija vpraša če lahko vaše slike shranim za namene izboljšave aplikacije. :)

Cena

Za slike računam 5€ na izdano potrdilo. Potrdilo se po nakupu shrani na vašo napravo, priporočam pa, da ob nakupu podate še svoj email, da vam potrdilo pošljem še tja. Za samo slikanje imate na voljo seveda neomojeno število poizkusov!

Še nekaj splošnih filozofij, ki sem jih imel pri izdelavi aplikacije sliki.se

No Login

sliki.se nima login-a. Ko prvič odpreš aplikacijo moraš samo enkrat klikniti Da ali Ne, ko te app vpraša za dovoljenje za shranjevanje slik za namene izboljšave aplikacije.

Lokalno shranjevanje

sliki.se izdano potrdilo shrani na uporabnikovo napravo. Po želji lahko uporabnik ob nakupu vpiše svoj email naslov, na katerega bo dostavljeno potrdilo.

Straight to the point

Ko odpreš aplikacijo vidiš nekaj podobnega, kot da bi odprl camera app. Uporabnik se takoj lahko slika.

Preverjanje slik

sliki.se preveri, če je slika primerna, še preden se slika naloži na sistem e-fotograf, kjer jo sistem sam še enkrat preveri.