
Detekce předmětů, zvířat nebo osob. To lze dnes jednoduše zvládnout díky AI. Michal Ševčík napsal tento článek pro svůj projekt OnlyBirds – detekce ptáků. Stejné znalosti ale jde využít na detekci jiných zvířat či předmětů. Tady se dozvíte, jak na to.
Článek napsal Michal Ševčík, autor projektů TMEP.cz, ŽivýObraz.eu a OnlyBirds.cz.
Za článek děkuji.
OnlyBirds.cz je web, který zobrazuje fotografie ptactva z průmyslové kamery. Zajímavý je svou velmi dobrou kvalitou fotek. Čím by šel ale vylepšit je detekce ptáků. A proč nevyzkoušet AI? A když už budu používat AI, tak by to mohla napsat taky AI. Jak na to a jak moc je něco takového složité?
Celý projekt má jednoduchou logiku.
Web OnlyBirds.cz zobrazuje ptáky na krmítku. Fotografie ptáků jsou zaznamenány kamerou, která fotografie pošle na FTP server.
Kamera
Kamera je hotové řešení od Hikvisionu, konkrétně Hikvision DS-2DE2A404IW-DE3/W. To, že je kamera otáčecí (PTZ) se skvělým zoomem se ukázalo být obrovskou výhodou. Často jsem zkoušel různé úrovně přiblížení a záběru scény. Na začátku jsem chtěl jít do nějakého RPi (raději úspornějšího Zero), ale zároveň jsem chtěl co nejvyšší kvalitu fotek a po hodině hledání jsem to vzdal.
Buď kamera nebyla kompatibilní s deskou, nebo se softwarem co jsem chtěl použít. A jít do jednořádkových příkazů přes půl obrazovky a doufat, že vše poběží v pohodě se mi nechtělo. Tady to bylo bez trápení (kromě prázdné peněženky) a už fotky šly na server.

Řazení fotografií na serveru
Obrázky na serveru tedy máme, script periodicky prochází složku s uploady a nalezené fotografie hodí do složky podle dne kdy byly pořízené + vygeneruje náhledový obrázek. Já si otevřu stránku se všemi náhledy v lepším rozlišení, proscrolluju, označím fotografie které chci nechat + ty které se dle mého úsudku vymykají běžné kvalitě označím jako TOPové. Následně nechám smazat vše zbylé.
A takhle to dělám téměř každý den. Je to celkem relax, už po pár takových dnech to jde rychle a navíc vím, co se v krmítku děje.

AI přichází
Nicméně – máme 21. století, AI všude, co to zautomatizovat? A přidat díky tomu novou funkcionalitu? A taky statistiky?
Preferoval jsem lokální model – přijde mi obecně dost plýtvání prostředky, kdybych měl fotky posílat na nějaké API. Už dřív mě napadlo, jak moc těžké to může být a díval se po nějakém hotovém modelu.
Problémy proč nepoužít již existující model
Problémy byly tři zásadní:
- Hotový model úplně nepočítal s našimi evropskými druhy a nebyl vytrénovaný na větším množství fotografií všech druhů.
- Nezbytné je, aby vzorek fotografií byl co největší a zachycoval různé scény. Navíc když se vám pták postaví jinak nebo zády, tak to také hraje svoji roli.
- Moje scéna a kamera jsou dost specificky nastavené tak, aby často byl vidět co největší detail opeřence. Ve výsledku to znamená, že mám průměrně daleko většího ptáka, než většina ostatních co dělají něco podobného, takže jsou data zkrátka jiná.
Více jsem se do toho tehdy nevrtal, ale pořád jsem to někde v hlavě měl, že by taková detekce byla fajn. Teď jsem se k tomu vrátil a přišlo mi to jako super úloha pro vyzkoušení Gemini 3 od Googlu. To poradilo solidní základ:

Trénování modelu
A postupně poradilo jak na to s tím, že je vhodné vzít fotky, nahrát do Label studia, tam je označit, vyexportovat a natrénovat model.
Vše v rámci Pythoního balíčkovacího ekosystému, takže přes “pip install label-studio” jsem nainstaloval a následně spustil SW pro anotaci fotografií, založil tam projekt, nastavil jaké třídy budu detekovat a začal fotografie označovat:

Takto jsem udělal postupně přes 1000 fotografií. Opět – jakmile v tom dostanete grif, tak to jde poměrně rychle a zjistil jsem, že když se snažím, tak zvládnu udělat 20 ptáků za minutu.
Celkově to ale pár hodin zabralo. Pro co nejlepší výsledky je vhodné udělat zónu s označeným objektem co nejpřesnější, aby obdélník zbytečně nezabíral okolí. Ideální je možnost využívat klávesové zkratky, takže zmáčknete číslo/písmeno třídy, natáhnete zónu, trochu upravíte a enterem se přesunete na další položku.
Následně jsem provedl export včetně obrázků:

Ke stažení je ZIP soubor, kde jsou dvě složky “images” a “labels” se stejně pojmenovanými soubory, které se liší jen koncovkou. Ty je potřeba předhodit softwaru Ultralytics (opět Python záležitost), ten ale očekává specifickou datovou strukturu pro trénink:

Claude.ai pro psaní scriptu
Jak na to? Na kódování používám Claude.ai, konkrétně Opus 4.5 v rámci předplatného GitHub Copilot a celkově bych tento projekt ani nezkoušel natož dotáhnul, kdyby AI ve všem významně nepomohla, nebo to neudělala za mě.
Na jednu stranu mám pocit, že s každou vteřinou používání AI hloupnu, protože musím zapojovat minimální snahu, ale zároveň bych si čas na tohle všechno nikdy nenašel. Takže jsem Opusu zadal, ať vytvoří Python script na toto roztřídění do složek. V následující iteraci jsem ho ještě požádal, ať fotky statisticky rozdělí podle klasifikační třídy tak, aby bylo co nejvíce rovnoměrně rozložené.
Vše zvládl na jedničku na první dobrou, takže jsem mohl spustit učení modelu. Jak na něj nastínilo už Gemini v rámci free limitu, ale protože mám předplacené Perplexity (kódem v akci za 30 Kč na rok), tak jsem se zeptal jaké jsou různé vstupní parametry příkazu na učení a jak ho nastavit pro co nejlepší výsledek:

Trénování modelu přes ultralytics YOLO
To mi vysvětlilo všechno na co jsem se doptával a nakonec jsem skončil s příkazem:
yolo detect train data=data.yaml model=yolov8s.pt epochs=60 imgsz=640 batch=16 workers=8 device=0 patience=30
Yolo nabízí možnost učit se na vícero modelech, typicky nás zajímají yolov8 N a S – nano a small. Nano by měl stačit pro spouštění na embedded zařízeních, small už je o něco větší kanón na vrabce (pun intended). Na CPU (Intel i7 14. generace) trénování trvalo asi hodinu, na GPU (GeForce 3080) přibližně 20 minut.
AI píše web
Co se týká na straně webu, bylo potřeba a opět z 95% udělalo AI:
- Vytvořit skript pro API, který umožní vráti fotky, které AI neprojelo a zároveň uložit výsledek pro zpracovanou fotografii.
- Přidat zobrazování štítků na fotografiích pro fotografie, kde byl zjištěný opeřenec s určitou minimální jistotou modelu.
- Přidat možnost vyfiltrovat fotografie podle ptačího druhu.
- Přidat stránku se statistikami, ať se můžu kochat kolikrát se kdo stavil na semeno.

Na straně PC pro změnu bylo potřeba vytvořit skript, který si z API vytáhne seznam fotek ke zpracování, prožene je modelem a vrátí na server výsledek.
AI opět na první dobrou a ještě samo přidalo parametry ke skriptu včetně “loop”, takže ho stačí spustit a on periodicky zjišťuje, jestli je potřeba zpracovat nové fotografie.

Takhle jsem nechal projet všech 13+ tisíc fotografií na serveru, to zabralo cirka hodinu (při jednom vlákně a využití modelu small) a kochal se výsledky. Ty byly velice dobré a chybných detekcí bylo lehkým odhadem pod 3%. Štítky u fotek mě v tu chvíli ohromně potěšily:

Opakované učení AI
Ručně jsem sjel podle kategorií ptactva fotky a tam kde byl vidět jiný pták, jsem si fotku stáhnul pro další učení. Nakonec jsem z databáze vytáhnul ty fotky, kde míra jistoty modelu byla pod 75%. Celkem jsem dostal dalších více než 500 fotek, které jsem nahrál do Label studia a znovu je všechny označil.
Jednalo se zejména o fotky, kde byl pták zachycený z jiného úhlu a vzdálenosti, v nezvyklé pozici, v jiných světelných podmínkách a třeba i s celkově jinou kompozicí fotografie. Stejně tak jsem přidal více fotek, kde žádný pták nebyl.

Výsledný vytrénovaný model jsem opět spustil nad celou databází fotek pro jejich klasifikaci a výsledek byl výborný, drtivá většina chyb je pryč a OnlyBirds teď budou těžit z AI detekce.
Díky vedení AI a toho, že místo úloh na několik hodin jsem mohl pokračovat za pár minut, nebyl problém tuto funkcionalitu dodělat a projekt opět o kousek posunout.
Vlastní model a detekce se určitě vyplatí – jakmile máte solidní vzorek dat, tak bude jeho úspěšnost vysoká a děláte-li spíše specifickou věc, pak je to správná cesta.
Článek napsal Michal Ševčík, autor projektů TMEP.cz, ŽivýObraz.eu a OnlyBirds.cz.
Za článek děkuji.







Komentáře na sítích