Projekt vznikl na základě úplné finanční podpory ze strany Grantové agentury Jihočeské univerzity.
V rámci řešení projektu byl vyvinut software pro rozpoznávání hospodářských plodin. Nasbírané snímky hospodářských plodin, uložené na diskovém úložišti, je nutné předem předzpracovat. Vyloučit chybně nebo nevhodně nasnímané snímky apod. Následně data správně anotovat. Byly zvoleny základní třídy pro rozpoznávání - „plodina“, „plevel“, případně „plod“ plodiny. K anotaci byly vytvořeny podpůrné SW nástroje v jazyce Python - YOLO Labeler a ImageSegmenter.
YOLO Labeler slouží k základní anotaci obrazových dat, na základě definičních souborů jsou stanoveny třídy a v grafickém rozhraní jsou ručně anotovány obrazové soubory předem rozdělené do skupin train, test a valid.
Způsob zpracování dat, výstup anotačních souborů a práce s daty splňuje formát YOLO.
Popis formátu anotačních souborů pro síť YOLO je uveden např. zde.
-i data/sklenik.yaml -t train
Obsah souboru sklenik.yaml
:
path: /home/miroslav/YOLO_labeler/data train: ./train/images val: ./valid/images test: ./test/images names: 0: 'paprika' 1: 'plevel'
Výsledný soubor s anotacemi má následující tvar:
0 0.6757 0.2958 0.1246 0.2071 0 0.8587 0.1196 0.1624 0.1934 0 0.8905 0.3616 0.1624 0.1831 0 0.8892 0.5767 0.1409 0.1419 0 0.8767 0.8026 0.0885 0.1339 0 0.6826 0.5910 0.1177 0.1522 0 0.7118 0.8106 0.1332 0.1751
Zdrojové kódy programu jsou uchovávány v GIT repozitáři.
Vytvořený softwarový nástroj ImageSegmenter slouží k segmentování a vytváření bitmapových map pro anotování zelených rostlin v obrazu. Základ tvoří algoritmus Region Growing s upravenou metrikou pro zelenou barvu. Doplněny jsou nástroje pro ohraničení regionu růstu, dokreslení zbývajících částí apod. Anotace probíhá do jediné třídy „plodina“.
Zdrojové kódy jsou uloženy v GIT repozitáři.
Ukázka vstupního snímku a anotovaných bitmapových map pro jednotlivé rostliny je uvenena na následujících obrázcích.
Tyto bitmapové anotace slouží jako podklad pro trénování neuronových sítí.
Součástí detekčního algoritmu je neuronová síť. Pro tento případ byla zvolena neuronová síť YOLO v8. Neuronová síť byla natrénovaná na detekci dvou hospodářských plodin - ředkvičky, papriky a plevel na základě nasbíraných obrazových dat z kamer.
Nasbíraná obrazová data byla rozdělena do skupin pro trénování, validaci a testování. Pro zvýšení počtu vstupních dat bylo přistoupeno k augmentaci. Následně bylo spuštěno trénování neuronové sítě. Proběhlo celkem 200 epoch s velikostí batch 64. Trénování sítě probehlo s úspěšným výsledkem. Natrénovaný model byl uložen a byl následně použit pro detekci.
Detekční algoritmus byl implementován v jazyce Python. Skript získá aktuální obrázek z kamery, provede jeho uložení do dočasného adresáře. Nad snímkem provede detekci sítí YOLO, je vybrán natrénovaný model a provedena samotná detekce plodin.
Na snímku níže je uveden příklad výsledku detekce (pro přehlednost byla vyřazena detekce plevele). Algoritmus správně detekoval v obraze naučené plodiny, označil je popiskem a ohraničujícím rámečkem.
Na základě nasnímaných obrazových dat, jejich předzpracování a využití pokročilých algoritmů neuronových sítí bylo prokázáno, že je možné dosáhnout dobrých výsledků detekce a rozpoznávání vybraných hospodářských plodin. S využitím současných výpočetních možností je možné provádět detekci plodin ze snímané scény kamerami v reálném čase. Kvalita, přesnost a spolehlivost detekce je závislá na velikosti souboru vstupích dat a kvalitě jejich anotace.