Pracovní nabídkyFreelanceřiFirmyCeník#Neřešíme

Draft

Nezaradené

Botanista — Story behind leaf recognition

Tomáš Nagy, 26.7.2021

Pred niekoľkými rokmi som pracoval v rámci mojej magisterskej práce na mobilnej aplikácii. V nej som sa venoval problému rozpoznávania stromov z fotografie ich listov.

Ako som riešil tento problém?
Bolo možné vyriešiť všetky časti len v JavaScripte?
O tom je tento Use Case článok.

Problém – Klasifikácia obrázkov

V mojej práci som sa venoval rozpoznávaniu stromu z fotografie jeho listu. Tomuto problému sa venovalo už viac prác na svetových univerzitách, vždy sa však venovali len rozpoznávaniu laboratórnych fotografií na bielom pozadí. Ja som sa rozhodol spraviť multiplatformovú mobilnú aplikáciu, pomocou ktorej budete môcť rozpoznať strom v prírode, mimo laboratória a bieleho pozadia.

Computer Vision – OpenCV

Prvou myšlienkou, bolo skúsiť tento problém riešiť pomocou počítačového videnia a knižnice OpenCV. Behom tvorby tejto časti, vznikol môj článok Computer vision in Node.js. Cielom tohto riešenia bolo vyhľadať hlavnú kontúru listu a pomocou metód furierových descriptorov porovnať jej signáli so vzorkami iných listov. Pristupoval som k tomu ako k experimentu, ktorý skončil so záverom, že aj veľmi odlišné listy majú žial podobný signál a nie je možné určiť ani len kategóriu do ktorej danný list spadá.

Znázornenie krokov rozpoznania listu pomocou počítačového videnia

Neural network – Tensorflow

Neurónové siete sa často používajú na klasifikáciu obrázkov, a tak som sa rozhodol ju použiť pre môj projekt. Konkrétne som zvolil implementáciu Tensorflow od spoločnosti Google. Na klasifikáciu som použil natrénovaný model Inception V3, ktorému som pretrénoval finálnu vrstvu na základe môjho data setu. Žiaľ sa mi nepodarilo získať vhodný dataset listov stromov, ktorý by bol fotografovaný v rôznych prostrediach mimo laboratória. Rozhodol som sa tak vytvoriť si dataset pre validovanie mojej myšlienky. V súčasnosti dataset tvoria stovky fotografií len z pár stromov. Pri trénovaní a testovaní môjho datasetu, som zaznamenal najlepšie výsledky, pokiaľ som dataset rozdelil v pomere 10% – validation, 10% – testing, 80% – training a trénoval s 18 000 krokmi. Vďaka správnemu nastaveniu trénovania, som dokázal pri niektorých fotografiách zlepšiť presnosť z 73% až na 85%.

Architektúra

Celý projekt je rozdelený na viac častí:

– mobilná aplikácia – React Native
– databáza, file storage, auth – Firebase
– OpenCV preprocessing, email, … – Node.js / Heroku
– Tensorflow + Flask server – Python / Amazon EC2

Architektúra aplikácie

Mobilná aplikácia (JavaScript / React Native)

Mobilnú aplikáciu som sa rozhodol vytvoriť pomocou React Native. Veľmi dobré rozhodnutie! Aplikácie v React Native majú dobrý výkon, stabilitu a vývoj je veľmi rýchli. Dizajn aplikácie som sa rozhodol navrhnúť tak ako všetko tiež sám.

Na nasledujúcich screenshotoch môžete vidieť a spoznať hlavné časti aplikácie a proces jej fungovania. Pri fotografovaní listu je nutné dodržiavať pozíciu listu podla placeholderu umiestneného nad kamerou.

Záver

Projekt po skončení magisterského štúdia žiaľ ostal uspatý, avšak s dobrými výsledkami rozpoznávania (niekoľkých) stromov a hotovou ‚beta‘ verziou aplikácie so základnými funkciami. Žiaľ najzložitejšia čast projektu ostala nedokončená – zozbierať obrovské množstvo listov všemožných stromov.

Ak vás projekt zaujal, zdrojový kód si môžete prezrieť v nasledujúcich repozitároch:
Mobilná aplikácia – React Native
Neurónová sieť – rozpoznanie listov z datasetu a python API
Počítačové videnie – rozpoznanie listu pomocou počítačového videnia