5.34. Sažetak

Modul image je najveći API koji kamera izlaže, a poglavlje je upravo pokrilo njegov obris: kako je slika prikazana u memoriji, kako kamera čita i zapisuje pojedinačne piksele, kako crta u snimljene sličice, kako ih transformira aritmetički i geometrijski, kako ih klasificira pragom i filtrira, kako iz njih izdvaja mjerenja i detekcije, kako iz njih dekodira tiskane simbole, kako uspoređuje jednu sliku s drugom i kako rezultate prebacuje na kameru i s nje.

Skup alata je namjerno širok. Klasični cjevovod računalnog vida koji se izvodi na maloj ugradbenoj kameri obavlja većinu svog posla prije nego što išta dospije do modela strojnog učenja, kada on postoji – određivanje praga čisti ulaz, filtri uklanjaju šum, područja sužavaju pretragu, detektori mrlja i crta lokaliziraju kandidate, ocjenjivanje sličnosti odlučuje je li kandidat zanimljiv, a U/I sloj predaje rezultat onome što pokreće sljedeću fazu. Svaka stranica u ovom poglavlju pokrila je jednu od tih operacija; pravi cjevovod za bilo koju zadanu aplikaciju je niz njih složen redoslijedom koji problem zahtijeva.

5.34.1. Obrazac cjevovoda

Većina netrivijalnih aplikacija za kameru slijedi isti obris. Snimite sličicu sa senzora. Pretpostupak: konvertirajte formate, izjednačite histogram, zamutite šum. Lokalizirajte područja ili značajke od interesa: detekcija mrlja, detekcija crta, usklađivanje predložaka, dekodiranje koda. Analizirajte što je pronađeno: geometrijska mjerenja, ocjenjivanje sličnosti, statistika. Odlučite što učiniti na temelju analize: okidanje GPIO-a, izvještavanje korisnog tereta, snimi-i-zapiši, predaja sličice modelu strojnog učenja. Izlaz odluke ili snimljenog artefakta: spremi, kodiraj, pošalji, nacrtaj natrag u sličicu za pregled u IDE-u.

Nijedna pojedinačna stranica poglavlja nije pokrila svaki korak; poglavlje je pokrilo gradivne blokove koje cjevovod slaže. Odabir koje blokove koristiti i kojim redoslijedom je posao aplikacijske skripte.

5.34.2. Kamo poglavlje vodi

Modul image bavi se slikama kao slikama – pikselima, područjima, crtanjem, detekcijama. Mnogo posla na snimljenim podacima ne uklapa se u taj okvir. Izračunavanje statistike nad proizvoljnim numeričkim poljem, izvođenje vektorizirane aritmetike na sirovim podacima senzora, primjena prilagođene matrične transformacije koja iza sebe nema metodu modula image, priprema podataka za model strojnog učenja koji želi specifičan raspored tenzora – svi su to poslovi za biblioteku numeričkih polja, a ne za onu za obradu slika.

Sljedeće poglavlje pokriva upravo to. Modul ulab.numpy isporučen s MicroPython na kameri podskup je NumPy-ja, a dva mosta ga povezuju s modulom image: to_ndarray() kopira piksele sličice u ndarray za numerički rad, a konstruktor Image prihvaća ndarray za izgradnju nove slike iz rezultata, spremne za prikaz, spremanje ili vraćanje u biblioteku image. Dva modula se slažu – svaki radi ono što drugi ne radi, a zajedno pokrivaju numerički i slikovni rad koji aplikacija ugradbenog vida treba.