Vyzkoušíme si práci s knihovnou pro počítačové vidění OpenCV na populárním mikropočítači Raspberry Pi 4 s připojenou kamerou. Napíšeme jednoduchý detektor červené barvy a červených objektů.

Vyzkoušíme si práci s knihovnou pro počítačové vidění OpenCV na populárním mikropočítači Raspberry Pi 4 s připojenou kamerou. Napíšeme jednoduchý detektor červené barvy a červených objektů.

Vše se vejde v jazyku Python 3 na pár desítek řádků docela jednoduchého kódu.

Vše se vejde v jazyku Python 3 na pár desítek řádků docela jednoduchého kódu.

Detektor červených plavek a dalších červených objektů dnes poběží na výkonném Raspberry Pi 4 s masivním chladičem.

Detektor červených plavek a dalších červených objektů dnes poběží na výkonném Raspberry Pi 4 s masivním chladičem.

Používáme oficiální kamerový modul Raspberry Pi Camera V2 s osmimegapixelovým CCD čipem Sony IMX219

Používáme oficiální kamerový modul Raspberry Pi Camera V2 s osmimegapixelovým CCD čipem Sony IMX219

A takto vypadá profesionální průmyslová detekční kamera, která dokáže rozpoznat jednotlivé základní objekty, QR kódy apod.

A takto vypadá profesionální průmyslová detekční kamera, která dokáže rozpoznat jednotlivé základní objekty, QR kódy apod.

Detekční kamery se dnes v průmyslu používají stále častěji. Mohou být postavené jak na OpenCV, tak nad jinými technologiemi a neuronových sítích.

Detekční kamery se dnes v průmyslu používají stále častěji. Mohou být postavené jak na OpenCV, tak nad jinými technologiemi a neuronových sítích.

Průmyslová detekční kamera zpravidla zvládně běh při vysokém FPS, prinicipálně se ale zase tak neliší od toho, co si v domácích podmínkách ukazujeme v našem seriálu

Průmyslová detekční kamera zpravidla zvládně běh při vysokém FPS, prinicipálně se ale zase tak neliší od toho, co si v domácích podmínkách ukazujeme v našem seriálu

A toto je už náš první dnešní detekční program v akci. Spustili jsme jej přímo z grafického desktopu systému Raspbian na Raspberry Pi 4. Živý obraz z kamery doplnil zelený rámeček, který obtáhl červené rukojeti nářadí, jedná se totiž o detektor červené barvy.

A toto je už náš první dnešní detekční program v akci. Spustili jsme jej přímo z grafického desktopu systému Raspbian na Raspberry Pi 4. Živý obraz z kamery doplnil zelený rámeček, který obtáhl červené rukojeti nářadí, jedná se totiž o detektor červené barvy.

Knihovna OpenCV pracuje s barevným systémem BGR. Oproti klasickému RGB se naštěstí liší jen převráceným pořadím kanálů. Má to nějakou výhodu? Nemá, je to jen relikt minulosti, kdy se BGR těšilo větší popularitě třeba u výrobců kamer. 

Knihovna OpenCV pracuje s barevným systémem BGR. Oproti klasickému RGB se naštěstí liší jen převráceným pořadím kanálů. Má to nějakou výhodu? Nemá, je to jen relikt minulosti, kdy se BGR těšilo větší popularitě třeba u výrobců kamer. 

Červenou barvu budeme detekovat pomocí filtru, ve kterém si stanovíme její nejtmavší a nejsvětlejší odstín. Jakýkoliv pixel snímku, který se vejde do tohoto rozsahu, dále zpracujeme a ostatní budeme zvesela ignorovat.

Červenou barvu budeme detekovat pomocí filtru, ve kterém si stanovíme její nejtmavší a nejsvětlejší odstín. Jakýkoliv pixel snímku, který se vejde do tohoto rozsahu, dále zpracujeme a ostatní budeme zvesela ignorovat.

Vlevo náhled z kamery Raspberry Pi s ohraničením červené oblasti, vpravo pak maska červených pixelů podle flitru, který jsme si vyrobili výše

Vlevo náhled z kamery Raspberry Pi s ohraničením červené oblasti, vpravo pak maska červených pixelů podle flitru, který jsme si vyrobili výše

Jednoduchý detektor ze snímku vyseparuje pixely s barvou podle námi stanoveného rozsahu a uloží je do další vrstvy. Díky tomu známe rozměry a hrubou polohu červené plochy jako celku

Jednoduchý detektor ze snímku vyseparuje pixely s barvou podle námi stanoveného rozsahu a uloží je do další vrstvy. Díky tomu známe rozměry a hrubou polohu červené plochy jako celku

Primitivní detekční technika zabere na Raspberry Pi 4 a při malém rozlišení obrazu jen 1–2 milisekundy. Je tedy velmi rychlá, pro základní účely poměrně spolehlivá a mohla by posloužit třeba při analýze videa. S drobnou úpravou náš program najde červené objekty třeba i v MP4 videu libovolného hollywoodského trháku

Primitivní detekční technika zabere na Raspberry Pi 4 a při malém rozlišení obrazu jen 1–2 milisekundy. Je tedy velmi rychlá, pro základní účely poměrně spolehlivá a mohla by posloužit třeba při analýze videa. S drobnou úpravou náš program najde červené objekty třeba i v MP4 videu libovolného hollywoodského trháku

Jednoduchý detektor ze snímku vyseparuje pixely s barvou podle námi stanoveného rozsahu a uloží je do další vrstvy. Díky tomu známe rozměry a hrubou polohu červené plochy jako celku

Jednoduchý detektor ze snímku vyseparuje pixely s barvou podle námi stanoveného rozsahu a uloží je do další vrstvy. Díky tomu známe rozměry a hrubou polohu červené plochy jako celku

Primitivní detekční technika zabere na Raspberry Pi 4 a při malém rozlišení obrazu jen 1–2 milisekundy. Je tedy velmi rychlá, pro základní účely poměrně spolehlivá a mohla by posloužit třeba při analýze videa. S drobnou úpravou náš program najde červené objekty třeba i v MP4 videu libovolného hollywoodského trháku

Primitivní detekční technika zabere na Raspberry Pi 4 a při malém rozlišení obrazu jen 1–2 milisekundy. Je tedy velmi rychlá, pro základní účely poměrně spolehlivá a mohla by posloužit třeba při analýze videa. S drobnou úpravou náš program najde červené objekty třeba i v MP4 videu libovolného hollywoodského trháku

Primitivní detekční technika zabere na Raspberry Pi 4 a při malém rozlišení obrazu jen 1–2 milisekundy. Je tedy velmi rychlá, pro základní účely poměrně spolehlivá a mohla by posloužit třeba při analýze videa. S drobnou úpravou náš program najde červené objekty třeba i v MP4 videu libovolného hollywoodského trháku

Primitivní detekční technika zabere na Raspberry Pi 4 a při malém rozlišení obrazu jen 1–2 milisekundy. Je tedy velmi rychlá, pro základní účely poměrně spolehlivá a mohla by posloužit třeba při analýze videa. S drobnou úpravou náš program najde červené objekty třeba i v MP4 videu libovolného hollywoodského trháku

Detektor samozřejmě nefunguje jen s letními plavkami, ale s jakýmikoli červenými objekty. Třeba těmito červenými kolečky, která mohou fungovat jako identifikační značky průmyslového stroje, nebo navigační značky nalepené na zemi pro robotické autíčko

Detektor samozřejmě nefunguje jen s letními plavkami, ale s jakýmikoli červenými objekty. Třeba těmito červenými kolečky, která mohou fungovat jako identifikační značky průmyslového stroje, nebo navigační značky nalepené na zemi pro robotické autíčko

Detektor samozřejmě nefunguje jen s letními plavkami, ale s jakýmikoli červenými objekty. Třeba těmito červenými kolečky, která mohou fungovat jako identifikační značky průmyslového stroje, nebo navigační značky nalepené na zemi pro robotické autíčko

Detektor samozřejmě nefunguje jen s letními plavkami, ale s jakýmikoli červenými objekty. Třeba těmito červenými kolečky, která mohou fungovat jako identifikační značky průmyslového stroje, nebo navigační značky nalepené na zemi pro robotické autíčko

Vyzkoušíme pokročilejší detekci pomocí vyhledání jednotlivých izolovaných rudých objektů ve scéně, které obtáhneme a očíslujeme. Nejprve jsme vytvořili rudou masku, kterou jsme převedli do odstínu šedé a tu nakonec do černobílé s použitím dilatace, která slila dohromady šum, aby byly jednotlivé objekty co nejucelenější

Vyzkoušíme pokročilejší detekci pomocí vyhledání jednotlivých izolovaných rudých objektů ve scéně, které obtáhneme a očíslujeme. Nejprve jsme vytvořili rudou masku, kterou jsme převedli do odstínu šedé a tu nakonec do černobílé s použitím dilatace, která slila dohromady šum, aby byly jednotlivé objekty co nejucelenější

Druhá ukázka s využitím metody pro vyhledávání kontur už dokáže rozlišit jednotlivé červené objekty ve scéně, které pro kontrolu obtáhne zelenou linkou a připojí číselné označení. I v tomto případě se jedná o rychlou detekci, která na Raspberry Pi zabere při nižším rozlišení 5–10 milisekund

Druhá ukázka s využitím metody pro vyhledávání kontur už dokáže rozlišit jednotlivé červené objekty ve scéně, které pro kontrolu obtáhne zelenou linkou a připojí číselné označení. I v tomto případě se jedná o rychlou detekci, která na Raspberry Pi zabere při nižším rozlišení 5–10 milisekund

Ukázku opět spustíme přímo z grafického desktopu Raspbianu, ke kterému jsme se pro jednoduchost přihlásili skrze vzdálenou plochu, takže Raspberry Pi nemusí být připojené skrze HDMI k monitoru

Ukázku opět spustíme přímo z grafického desktopu Raspbianu, ke kterému jsme se pro jednoduchost přihlásili skrze vzdálenou plochu, takže Raspberry Pi nemusí být připojené skrze HDMI k monitoru

Na tomto příkladu je vidět, proč není dobré použít hledání kontur už nad surovou maskou. Motýlek je plný puntíků, maska tedy nebude příliš souvislá. Jejím postupným barevným zjednodušováním a odstraněním děr pomocí dilatace docílíme kompaktního tělesa. 

Na tomto příkladu je vidět, proč není dobré použít hledání kontur už nad surovou maskou. Motýlek je plný puntíků, maska tedy nebude příliš souvislá. Jejím postupným barevným zjednodušováním a odstraněním děr pomocí dilatace docílíme kompaktního tělesa. 

Vše se vejde v jazyku Python 3 na pár desítek řádků docela jednoduchého kódu.
Detektor červených plavek a dalších červených objektů dnes poběží na výkonném Raspberry Pi 4 s masivním chladičem.
Používáme oficiální kamerový modul Raspberry Pi Camera V2 s osmimegapixelovým CCD čipem Sony IMX219
A takto vypadá profesionální průmyslová detekční kamera, která dokáže rozpoznat jednotlivé základní objekty, QR kódy apod.
22
Fotogalerie

Programování elektroniky: Detektor (nejen) červených plavek pomocí OpenCV

  • Knihovna OpenCV je dnes standard počítačového vidění
  • Hrajeme si s ní v Pythonu na Raspberry Pi 4
  • Dnes si vyrobíme detektor červených objektů

Minule jsme si v našem prémiovém seriálu o programování elektroniky představili základy práce s knihovnou OpenCV pro počítačové vidění na populárním mikropočítači Raspberry Pi 4 s připojenou kamerkou a v jazyku Python 3. Dnes v tom budeme pokračovat.

Náš program tehdy stále dokola porovnával rozdíly mezi dvěma po sobě jdoucími filmovými políčky videa z kamery. Pokud zaznamenal dostatečně velký rozdíl, nakreslil okolo něj zelený obdélník. Nejen že jsme rozpoznávali pohyb samotný, ale na pár řádcích kódu jsme zároveň dokázali určit, v jaké oblasti obrazu k němu dochází.

Dnes budeme namísto změny detekovat konkrétní barvy a souvislé barevné plochy – objekty. Vyrobíme si totiž primitivní detektor červených puntíků, červených dámských plavek a vůbec jakýchkoliv rudých fleků, které se objeví v záběru kamery.

Pokračování článku patří k prémiovému obsahu pro předplatitele

Chci Premium a Živě.cz bez reklam Od 41 Kč měsíčně

Určitě si přečtěte

Články odjinud