Vizuální inspekce se stává stále běžnější součástí systémů
průmyslové automatizace. S novou generací kamer a především díky
současnému programovému vybavení je sice realizace těchto aplikací
snadnější, než tomu bylo kdykoliv dříve, ale na druhé straně se touto
činností také zabývá stále rostoucí počet lidí, pro které je
problematika strojového vidění pouze okrajovým zájmem. Proto se v
tomto oboru setkáváme výrazně vyšším počtem neúspěšných řešení, než v
ostatních oblastech průmyslové automatizace.
Pro úspěšné řešení zakázkového systému je důležitá volba základních
principů a koncepce. I zkušenému odborníkovi může značně pomoci
rezerva klíčových parametrů. Často se velmi vyplatí použití kamery s
pokud možno co nejkvalitnějším obrazem, kvalitního softwarového
systému strojového vidění a také je dobré nechat si rezervy ve
výpočetním výkonu zařízení, na kterém běží algoritmy úlohy.
Systém strojového vidění VisionLab se trvale rozvíjí a
postupně do něj přibývají stále náročnější a složitější algoritmy
zpracování obrazu. Mnoho často používaných algoritmů lze rozumně
implementovat jen díky využívání mohutného masivně paralelního výkonu
současných grafických procesorů. Při řešení úloh strojového vidění
musíme nepřetržitě hlídat čas, který naše úloha spotřebovává. Významně
zjednodušit objektivně složité algoritmy není vždy možné a tak nám
často nezbývá nic jiného, než použít výkonnější hardware. Vývoj v
oblasti grafický procesorů si naštěstí zachovává již dlouhodobě
vysokou dynamiku. Je sice pravda, že je poháněn průmyslem počítačových
her a nikoliv oborem strojového vidění, ale to nám při využívání
schopnosti současných GPU vůbec nevadí. I s běžným počítačem s cenově
velmi dostupným grafickým adaptérem máme k dispozici systém, kterému
se datovou propustností a masivně paralelním výkonem v plovoucí řádové
čárce nevyrovná prakticky žádné jiné dostupné zařízení. A v poměru
cena/výkon je situace ještě více jednoznačná.
Jedním z nejnáročnějších požadavků v aplikacích strojového vidění
bývá spolehlivá identifikace objektů v obraze. Nalezení a rozpoznání
požadovaných objektů můžeme považovat za podstatnou složku vedoucí k
„porozumění“ obsahu obrazu strojem. Algoritmy identifikace objektů
jsou často hodně náročné na spotřebu výpočetního výkonu a některé z
nich jsou rozumně použitelné jen díky využití mohutného masivně
paralelního výkonu současných grafických procesorů.
Jednotlivé algoritmy se sice hodně liší svým zaměřením, neexistuje
jeden společný postup, který by řešil vše od čtení textu až po
rozpoznávání obličejů, ale několik základních požadavků mají všechny
postupu společné. Obvykle je nutné, aby spolehlivost rozpoznávání
nebula ovlivňována jasem a kontrastem obrazu, často také potřebujeme
objekty detekovat nezávisle na jejich velikosti a natočení vzhledem k
souřadnému systému obrazu. Optimální algoritmy tedy musejí být
invariantní vzhledem k jasu, měřítku i rotaci. Právě tyto požadavky a
komplikace algoritmů s nimi spojené pak s stojí za již zmiňovanou
potřebou značného výpočetního výkonu. Systém strojového vidění
VisionLab nám pro kvalitní vyřešení těchto požadavků poskytuje řadu
nástrojů.
Jednoúčelové hledání specifických objektů
Zde patří mnoho často používaných metod, které nejsou
opravdovou obecnou indentifikací libovolných objektů.
Nejjednodušší, ale hojně používaná je i prostá extrakce barevných
nebo jasových skvrn či textur. Takto získané objekty mohou být
popsány např. pomocí souřadnic svého těžiště a mohutnosti.
Obr. 1: Nalezení specifických objektů podle
barvy
Za identifikaci objektů můžeme do určité míry považovat i např.
nalezení obrazců čárových a datamatrix kodů v ploše obrazu.
Obdobnou úlohou je i nalezení písmen a přečtení textů. Speciálně
zaměřeným hledáním a identifikací písmen a číslic je i krok pro
čtení registračních značek automobilů. Také zde je třeba v širokém
rozsahu jasů, měřítek a natočení značku nalézt a poté spolehlivě
přečíst všechny znaky.
Obr. 2: Identifikace obrazce datamatrix kódu
Nyní ale již pojďme o obecným identifikacím (téměř) libovolných
objektů.
Obr. 3: Vyhledání pozice a regionu registrační
značky
Hledání podle geometrických útvarů
Jako ostatně vše, má tato metoda rozpoznávání objektů své
přednosti i nevýhody. Nejprve je nutno ze vzorového obrazu
extrahovat množinu jednoduchých geometrických tvaru, které objekt
dostatečně identifikují. Nelze tedy použít barevný či šedotónový
obraz, přesněji řečeno, během zpracování obrazu dochází k jeho
prahování. V binárním obraze je nutno nejprve extrahovat hrany, a
z nich vybrat ty, které lze považovat za obrysy hledaných
geometrických útvarů. Nejčastějšími útvary jsou úsečky a kružnice
včetně kruhových oblouků. Zásadní nevýhodou je omezení na binární
obraz, předností je naopak přirozená invariance vůči měřítku a
rotaci.
Obr. 4: Identifikace geometrických útvarů a jejich
vzájemných relací
Pro hledání objektů podle geometrických útvarů nabízí prostředí
VisionLab krok geometric_matching.
Hledání podle bitmapových vzorů
Jedná se o v současnosti nejčastěji používaný postup.
Algoritmus pattern matching mají k dispozici téměř všechny
nástroje pro strojové vidění. Bývá implementován i v tzv.
inteligentních kamerách. V obraze je hledán bitmapově definovaný
vzor pomocí normalizované křížové korelace. Normalizace zde řeší
invarianci vzhledem k jasu. Potíž je ale v tom, že výpočet
korelačního koeficientu je natolik náročný, a to dokonce i pro
nejvýkonnější současné GPU, že nemůže být dělán hrubou silou pro
všechny body vzoru ani pro všechny body prohledávaného obrazu. Zde
musí nastoupit nejrůznější aproximace a optimalizace, které
výsledek do určité míry poškozují. Právě tyto postupy optimalizací
si dodavatelé pečlivě chrání. I systém VisionLab má ve svých
víceprůchodových algoritmech řadu unikátních optimalizací, které
uspoří spoustu výpočetního výkonu při minimalizovaném vlivu na
kvalitu a reprodukovatelnost identifikace objektů. Opravdové
potíže s požadavky na výpočetní výkon nastanou u většiny
implementací tehdy, budeme li požadovat také invarianci vzhledem k
větším rozsahům měřítek a rotací.
Obr. 5: Výkonná identifikace bitmapových vzorů pomocí
GPU
Možnosti hledání bitmapových vzorů jsou hodně široké, ale tento
algoritmus také není vhodný pro všechny typy objektů. Není dobré
jej používat pro černobílé objekty se strmými kontrastními hranami
a problémy často přinášejí i objekty s periodicky se vyskytujícími
obrazci (např. nožičky integrovaných obvodů atd.). Tou hlavní
potíží je zůstává náročnost na výpočetní výkon.
V systému VisionLab je implementace pro CPU algoritmu hledání
vzorů k dispozici v krocích pattern_match_monochrome
a pattern_match_color. Masivně paralelní řešení s
podporou GPU je obsaženo v kroku gpu_pattern. U
moderních grafických adaptérů může být tento krok i
několikanásobně rychlejší než na vícejádrových CPU.
Hledání podle deskriptorů v okolí významných bodů
Tyto moderní algoritmy se dostávají ke slovu teprve v
posledních několika letech. Přinášejí mnoho skvělých vlastností,
nicméně jsou také velice náročné na výpočetní výkon. Rozumná
implementace se neobejde bez co největšího využití výkonu GPU.
Obr. 6: Ukázka nalezených významných bodů včetně jejich
orientací a měřítek na jednoduchém testovacím obrazci
Základní myšlenkou je nezkoumat obrazové body celého obrazu,
ale omezit se pouze na pixely v okolí tzv. významných bodů. A
navíc ani v tomto okolí nepoužíváme normalizovanou křížovou
korelaci bodů obrazů, ale vzájemně porovnáváme vektory čísel tzv.
deskriptorů. Pro identifikaci objektů tedy postačí zapamatovat si
pouze určitý nevelký počet těchto deskriptorů. Proces identifikace
se pak již více podobá hledání podobnosti číselných řad v
databázích.
Obr. 7: Identifikace obálek knih i na nekvalitním
snímku metodou deskriptorů významných bodů
Nejprve ale musíme významné body o obraze najít. Obvykle jsou
to body, v jejichž okolí dochází ke změnám jasu ve více směrech.
To zní celkem jednoduše, ale podstatnou komplikací je nutnost
vyhledat významné body co nejrychleji v mnoha měřítcích obrazu.
Pro každý bod zjistíme i jeho úhlovou orientaci jako vektor
největšího gradientu jasu v jeho okolí úměrném měřítku. Tato
informace nám zajišťuje invarianci vzhledem k rotaci. Pro oblasti
kolem detekovaných významných bodů již jen vypočteme vektory čísel
deskriptorů. Deskriptory charakterizují směry a dynamiku gradientů
jasu obrazové funkce kolem významných bodů.
Obr. 8: Nalezení a identifikace požadovaných obličejů
ve skupině lidí pomocí deskriptorů
Při vyhledávání objektů pak již jen postačí identifikovat
zapamatované deskriptory s nově nalezenými.
Obr. 9: Spolehlivé nalezení požadované osoby i na
nekvalitně snímané fotografii
V systému strojového vidění VisionLab jsou pro využití těchto
algoritmů k dispozici kroky gpu_keypoint, gpu_feature_save,
gpu_feature_match a gpu_multiple_feature_match.
Možnosti těchto kroků jsou překvapující. Kromě samozřejmé
invariance vzhledem k jasu, měřítku a neomezené rotaci umožňují s
vysokým výkonem vyhledávat a identifikovat prakticky veškeré typy
a velikosti objektů. Metoda je velmi odolná i proti obrazovému
šumu, změnám ostrosti obrazu a částečnému skrytí objektů. Lze
jejím prostřednictvím s velkou spolehlivostí identifikovat např. i
lidské obličeje atd.
Společná softwarová platforma pro strojové vidění i
průmyslovou automatizaci
Díky několika principům, který jsou využití čistých a
stabilních syrových obrazových dat z kamer DataCam,
jednotná softwarová platforma Control Web
a systém VisionLab s implementací pokročilých
algoritmů využívajících vícejárdové CPU i masivně paralelní GPU,
mají autoři zakázkových aplikací k dispozici systém, který
významně zvyšuje pravděpodobnost úspěšného řešení i u velmi
složitých úloh
RC
Článek tak, jak vyšel
v magazínu Automa je v PDF podobě zde: Automa_08_2015.pdf.
rc
|