Rozpoznávanie obrazu

Ďalší obyčajný pracovný deň. Potom prišla požiadavka na program od klienta, ktorý potrebuje zistiť výšku napadaného snehu. No dobre - ale ako niečo také spraviť? To bola otázka pre mňa.

ZADANIE

Mame nádobu, do ktorej sneží a táto nádoba sa každý deň vyprázdňuje. Má na sebe poznačené mierky výšky napadaného snehu a je na ňu nasmerovaná online kamera. Mnou vytvorený program mal zistiť, koľko snehu do nádoby napadá každých 5 minút, hodnotu zaznačiť do grafu a ráno poslať zamestnancom SMS s notifikáciou, koľko snehu pribudlo.

PROTOTYP

Ako prvé mi napadlo použiť nejaké voľne dostupné neurónové rozpoznávanie obrazu. Problém však bol taký, že celý proces musí bežať na slabom Raspberry Pi. Ešte väčším problémom bolo to, že program musel zaznamenať výšku napadaného snehu v rozsahu 1 centrimetra. Keď som použil voľne dostupné knižnice, výsledok nebol ani zďaleka dostačujúci. Síce som dostával odpovede v percentuálnom zastúpení snehu na obrázku, tieto údaje však boli pre moju potrebu nepresné.

RIEŠENIE

Prišiel som síce k primitívnejšiemu riešeniu, no oveľa spoľahlivejšiemu. Zobral som snímok z kamery, narovnal a orezal som obraz podľa nastavení a opravil perspektívu tak, aby som dostal kolmý obraz z kamery. Následne som ho prešiel vlastným algoritmom, ktorý na obrázku našiel poznačené miery. Prepočítal som ho podľa reálnej výšky nádoby a získal som tak správnu mieru. Potom som spracoval výšku snehu. V skratke - prešiel som pixel po pixeli, celý obrázok od hora dole.

Bolo potrebné vykonať aj meranie na viacerých miestach, pretože sa sneh zhlukuje na jednej strane podľa smeru vetra. Meranie muselo byť vykonávané aj v noci po tme, kedy kamera beží na infračervenom móde. Do algoritmu som tak musel zapracovať aj rozpoznávanie rôznych farieb podľa aktuálneho režimu kamery. Výsledný algoritmus mi vypočítal výšku nameraného snehu s presnosťou 5 milimetrov - a to všetko už do pár milisekúnd!

FINALIZÁCIA

Potom už len stačilo zariadiť, aby môj algoritmus spracoval obraz každých 54 minút a výsledok uložil do databázy. Následný graf bol už iba maličkosťou.

Poslednou vecou bolo to, aby zamestnanci dostávali spoľahlivé SMS notifikácie o výške napadaného snehu, a to každé ráno. Vyriešil som to cenovo dostupnou internetovou SMS bránou.

Spustil som test, dorobil som dodatočné úpravy a projekt bol do dvoch týždňov úspešne finalizovaný.