Tello dron s OCR ovladanim - Jan Spirka
Cieľ
Vytvoriť základ pre budúcu knižnicu, ktorá bude schopná na základe spracovania obrazu ovládať pohyb drona.
Použité technológie
- Python
- OpenCV
- OCR (Tesseract)
Použité pip balíčky
- cv2
- djitellopy
- pytesseract
- time
Postup
Základom pre použitie drona Tello bude knižnica djitellopy, ktorá má v sebe zahrnuté funkcie na inicializáciu drona, komunikáciu s ním. Vďaka nej, nebude nutné ručne vytvárať sockety a posielať ich prostredníctvom UDP. Tiež nám dokáže zachytiť pakety obsahujúce video stream z drona a vyskladať nám z nich jeden celý frame, ktorý budeme môcť použiť na analýzu obrazu. Na prácu s obrazom bude použitá knižnica OpenCV a keďže dron bude ovládaný pomocou príkazov, ktoré mu budeme na kamere ukazovať, musíme doimplementovať použitie OCR systému, v našom prípade Tesseract.
Drona si musíme najprv nainicializovať, t.j. vytvoriť s ním spojenie a nastaviť mu prvotné hodnoty. Na to je potrebné zavolať funkciu initializeTello(). Inicializácia spočíva vo vytvorení inštancie drona a vytvorení spojenia pomocou príkazu connect(). Nasledujúce príkazy nastavujú počiatočnú rýchlosť drona a získanie stavu batérie. Potom je potrebné zavolať príkaz streamoff() ak už náhodou dron streamuje video a nanovo ho naštartujeme príkazom streamon().
Všetka nasledujúca funkcionalita sa bude vykonávať v nekonečnom cycle. S dronom budeme v každej iterácii udržovať spojenie pomocou príkazu connect(). Obraz z drone získame po zavolaní funkcie telloGetFrame(). V tej získame obraz predstavovaný maticou a následne ho zmenšíme pre zrýchlenie výpočtov.
Výsledný obraz si zobrazíme pre testovacie účely a začneme analýzu obrazu.
Tá spočíva z počiatočnej úpravy a to:
- prevod matice z farebného spektra na čiernobiele
- vytvorenie binárnej matice
- vyhladenie obrazu filtrom
- dilatácia vyhladenej binárnej matice
- nájdenie kontúr vo výslednej binárnej matici
Následne je potrebné odfiltrovať relevantné zhluky pixelov spraviť výrez z celkového obrazu a spúšťať OCR len v rámci týchto výrezov lebo táto operácie je veľmi náročná na výpočtové prostriedky. Pre testovacie účely bolo dobré zobraziť si medzivýsledky práce s maticami. Návratovou hodnotou funkcie je pole v obraze rozoznaných reťazcov.
Vo funkcii decodeCommand() následne prechádzame cez pole týchto reťazcov a hľadáme kľúčové slová. Princíp fungovania je jednoduchý, v prípade nájdenia zhody sa spojíme s dronom, chvíľku počkáme a spustíme potrebný príkaz pre spustenie pohybu.
Nekonečný cyklus je možné ukončiť prostredníctvom stlačenia klávesy „q“. Dron potom bezpečne pristane a nekonečný cyklus sa preruší.
Video ukážka