Mendelova univerzita v Brně Provozně ekonomická fakulta
Analýza obrazu a jeho vyhodnocení Bakalářská práce
Vedoucí práce: Dr. Ing. Radovan Kukla
Michal Hammerschmiedt
Brno 2011
Tímto bych rád poděkoval vedoucímu mé práce, panu Dr. Ing. Radovanu Kuklovi, za cenné rady, vstřícný přístup a odborné vedení při vypracovávání této práce.
Prohlašuji, že jsem bakalářskou práci na téma Analýza obrazu a jeho vyhodnocení vypracoval(a) samostatně s použitím odborné literatury a pramenů, uvedených na seznamu, který tvoří přílohu této práce.
V Brně 23.května 2011
....................................................
4
Abstract Hammerschmiedt, M. Image Analysis and evaluation. Bachelor thesis. Brno: Mendelu univerzity v Brně, 20111 The work deals with issues of vision systems and is focusing on the evaluation of logical problems captured by the system. The work includes information on the necessary hardware and software for pattern recognition and it also has described implementation of the procedure for creating applications in Visual Basic 6.0 and Web Control 6.1 The goal is to create an effective application for capturing and evaluating the image. The work resulted in the identification and resolution of the Sudoku image in the ActiveX component.
Abstrakt Hammerschmiedt, M. Analýza obrazu a jeho vyhodnocení. Bakalářská práce. Brno: Mendelova univerzita v Brně, 2011. Práce pojednává o problematice strojového vidění se zaměřením na vyhodnocení logické úlohy. Práce obsahuje informace o potřebném hardwaru a softwaru pro realizaci rozpoznávání obrazu a popsaný postup tvorby aplikace v prostředí Visual Basic 6.0 a Control Webu 6.1. Cílem práce je vytvořit efektivní aplikaci pro sejmutí obrazu a jeho vyhodnocení. Výsledkem práce je rozpoznání obrazu sudoku a jeho vyhodnocení v ActiveX komponentě.
5
OBSAH
Obsah 1 Úvod
8
2 Cíl práce
9
3 Úlohy řešené ve strojovém vidění 3.1 Nalezení povrchových vad . . . . . . . 3.2 Rozpoznání, nalezení polohy a počítání 3.3 Měření a kontrola tolerancí . . . . . . . 3.4 Identifikace barev . . . . . . . . . . . . 3.5 Čtení kódů a textů . . . . . . . . . . . 3.6 Závěr kapitoly . . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
10 10 10 11 11 12 12
4 Principy strojového vidění 4.1 Úvod . . . . . . . . . . . . . . . . . . . . . . 4.2 Digitální obrazy . . . . . . . . . . . . . . . 4.2.1 Reprezentace obrazu . . . . . . . . . 4.2.2 Digitální pořízení obrazu . . . . . . 4.2.3 Funkce CCD . . . . . . . . . . . . . . 4.2.4 Analýza obrazu . . . . . . . . . . . . 4.3 Zařízení . . . . . . . . . . . . . . . . . . . . 4.3.1 Kamery . . . . . . . . . . . . . . . . 4.3.2 Osvětlovací prostředky . . . . . . . . 4.3.3 Konstrukce . . . . . . . . . . . . . . 4.4 Používaný Software . . . . . . . . . . . . . . 4.4.1 Control Web 6.1 (modul VisionLab) . 4.4.2 RoboRealm . . . . . . . . . . . . . . 4.4.3 A1 Inspector . . . . . . . . . . . . . 4.4.4 National instrument (Vision Builder) 4.5 Závěr kapitoly . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
13 13 13 13 14 14 14 15 15 16 19 20 20 20 21 21 22
5 Metodika 5.1 Práce v Control Web . . . . . . . . . 5.1.1 Aplikace řízené časem . . . . 5.1.2 Datově řízené aplikace . . . . 5.1.3 Runtime aplikace . . . . . . . 5.1.4 Modul VisionLab . . . . . . . 5.2 Tvorba ActiveX komponenty . . . . . 5.2.1 Visual Basic 6.0 . . . . . . . . 5.2.2 Další využití Visual Basic 6.0 5.2.3 Závěr kapitoly . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
23 23 23 23 24 24 24 25 25 27
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
6
OBSAH
6 Vlastní práce 6.1 Tvorba ActiveX komponenty . . . . . . . . . . . . . 6.1.1 ActiveX komponenta obecně . . . . . . . . . 6.1.2 Princip sudoku . . . . . . . . . . . . . . . . 6.1.3 Tvorba designu aplikace . . . . . . . . . . . 6.1.4 Řešení sudoku . . . . . . . . . . . . . . . . . 6.1.5 Registrace ActiveX komponenty . . . . . . . 6.2 Control web - VisionLab . . . . . . . . . . . . . . . 6.2.1 Základní nastavení projektu v Control Web 6.2.2 VisonLab . . . . . . . . . . . . . . . . . . . 6.2.3 Použití funkcí ActiveX komponenty . . . . 6.3 Závěr kapitoly . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
28 28 28 28 28 29 31 31 31 32 36 37
7 Závěr 7.1 Shrnutí práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Zhodnocení výsledků . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3 Možná vylepšení . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38 38 38 39
8 Literatura
40
Přílohy
41
A Ukázka vytvořené aplikace ve Visual Basic 6.0
42
B Ukázka vytvořené aplikace ve Control Web
43
C Ukázka hotové aplikace před vyřešením
44
D Ukázka hotové aplikace po vyřešením
45
E Obsah CD
46
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
OBSAH
7
Seznam zkratek OLE (Object Linking and Embedding) - technologie integrace programů, kterou lze využít ke sdílení informací mezi programy COM (Component Object Model) - komponentní technologie CMOS (Complementary Metal-Oxide-Semiconductor) - technologie používaná na převážnou většinu integrovaných obvodů. Používá se na výrobu čipů CCD (Charge-Coupled Device) - elektronická součástka používaná pro snímání obrazové informace LED (Light-Emitting Diode) - je elektronická polovodičová součástka obsahující přechod P-N MSDN (Microsoft Developer Network) - program společnosti Microsoft určený především vývojářům
Orientace v textu Příklad kódu - takto jsou v práci značeny ukázky kódu Procedura - takto jsou v práci značeny názvy procedur, funkcí a proměnných
1
1
ÚVOD
8
Úvod
Už odedávna se snaží lidé co nejvíce zautomatizovat a zefektivnit výrobu, jedním z průkopníků u nás byl Emil Škoda, který při výrobě automobilu měřil časovou náročnost jednotlivých úseků a posléze se snažil co nejvíce zdokonalit výrobu a tím urychlit jednotlivé výrobní úseky. Postupným vývojem se výroba posunovala od čistě manuální práce dělníků až po dnešní již plně automatizované výrobní linky. Při plné automatizaci nastal problém, jak nahradit výstupní kontrolu výrobků. Proto v sedmdesátých letech dvacátého století, kdy konečně výpočetní kapacita tehdejších počítačů dovolila zpracovávat velké objemy obrazových dat a mohl vzniknut nový obor zvaný počítačové vidění (computer vision), tak se nazývá obor obecně. Může se obecně zabývat rozpoznáváním tváří, zavazadel atd. . Použití počítačového vidění v průmyslové automatizaci dalo vzniknout podmnožině s názvem strojové vidění (maschine vision), které může být použito nejen na výrobní lince, ale také pro roboty a pro jejich orientaci v prostoru. Tato technologie za pomoci kamer s vysokým rozlišením a specializovaného softwaru může snadno analyzovat např.: součástku s velkou přesností, což by člověku s měřidlem trvalo mnohem delší dobu. V dnešní době se tato technologie stává velice populární z toho důvodu, že se společnosti snaží o maximální uspokojení zákazníka v rámci kvality a rychlosti výroby. Zvýšila se také dostupnost zařízení pro strojové vidění a to díky výrobě cenově přijatelných a kvalitních čipů s vysokým výpočetním výkonem.
2
2
CÍL PRÁCE
9
Cíl práce
Tato práce si klade za cíl, že se seznámím s prací v programech Cotrol Web s použitým modulem VisionLab určeným pro strojové vidění. Úkolem je rozpoznání obrazu a následné vyhodnocení logické úlohy.V dnešní době se strojové vidění využívá pro řešení rozličných úloh, většinou se kontroluje kvalita produktů, aby byla zaručena jejich naprostá dokonalost, což v praxi znamená to, že se po provedení určitých úkonů na lince provede kontrola jejich správného provedení.
3
ÚLOHY ŘEŠENÉ VE STROJOVÉM VIDĚNÍ
3 3.1
10
Úlohy řešené ve strojovém vidění Nalezení povrchových vad
Nalezení povrchových vad je užitečné pro materiál vstupující do linky, kde se hodnotí jeho kvalita a tím se vyřazuje potencionálně špatný výrobní materiál. Tuto techniku využijeme i při výstupní kontrole již hotových výrobků a to např.: při kontrole správnosti provedení nástřiku barvy na výrobek. Dalším příkladem z praxe je nalezení mezery v tmelu před spojením dvou součástek k sobě, čímž by došlo k netěsnostem viz obr.1.
Obr. 1: Příklad nalezení povrchové vady(Ing. Havle, CSc., 2011)
3.2
Rozpoznání, nalezení polohy a počítání
Tyto úlohy mohou nabývat mnoha podob, nejčastější využití strojového vidění je při kontrole správného umístění součástí. Například před provedením operace zalisování je nutné se přesvědčit, zda jsou k zalisování připraveny všechny díly ve správné poloze. Totéž je třeba udělat po skončené operaci - chybu v zalisovaném konektoru ukazuje obr. 2. Další možnosti využití jsou při identifikaci deformované části, otřepů po stříhání, nevyvrtaného otvoru nebo poškozené hrany. Počítání množství se uplatní při kontrole naplněné přepravky v potravinářství nebo blistru ve farmaceutickém průmyslu. (Ing. Havle, CSc., 2011)
3.3
Měření a kontrola tolerancí
11
Obr. 2: Příklad nalezení pozice(vlevo)a příklad počítaní(vpravo) (Ing. Havle, CSc., 2011)
3.3
Měření a kontrola tolerancí
Úloha měření prostupuje celou výrobní operací. Měří se tolerance vstupních dílů, poloha dílů před operací i tolerance hotového výrobku. (Ing. Havle, CSc., 2011)
Obr. 3: Kontrola tolerance kulového čepu (Ing. Havle, CSc., 2011)
3.4
Identifikace barev
Barvy je třeba rozpoznávat při vstupní nebo výstupní kontrole, může jít např. o jeden ze znaků při identifikaci typu materiálu. V potravinářství může barva potraviny (plísně, hniloba atd.) signalizovat sníženou kvalitu produktu vstupujícího do operace vyskladnění. (Ing. Havle, CSc., 2011)
3.5
3.5
Čtení kódů a textů
12
Čtení kódů a textů
Kódy, ať již čárové nebo maticové, se čtou hlavně v první a druhé fázi výrobní operace, kdy je zjišťováno, zda je k operaci připraven správný díl na správném místě. V průběhu operace někdy bývá vytvořen další kód, jenž se verifikuje v poslední fázi operace. Čtení nebo verifikace kódů jsou málokdy samostatnou úlohou strojového vidění ve výrobní operaci, ale je-li tomu tak, je výhodnější svěřit ji specializované čtečce. Vykonává-li však systém strojového vidění v dané operaci více úloh, je výhodné použít ho i pro čtení kódů a textů. (Ing. Havle, CSc., 2011) Čtení textů je typické rovněž pro první a poslední fázi operace. V první fázi se používá čtení textů pro identifikaci dílů, v poslední pro kontrolu vytvořených identifikačních znaků, např. potisků s typem a datem expirace výrobku. Příklad čtení je zobrazen na obr. 4. (Ing. Havle, CSc., 2011)
Obr. 4: Příklad rozpoznávaní textu (Ing. Havle, CSc., 2011)
3.6
Závěr kapitoly
Po dlouhém přemýšlení padla má volba na řešení sudoku, kde zkombinuji problematiku rozpoznávání textů s řešením logické úlohy. V této době se řešením sudoku zabývá velké množství uživatelů. Někoho může unavovat opakované a zdlouhavé zadávání hodnot do různých sudoku „solveruÿ a následně dlouhé čekání na výsledek, který nezpůsobuje malý výpočetní výkon ale omezení webových serverů, které jsou určeny pro jiné účely než na výpočetní výkon. Principielně se bude jednat o aplikaci, která se postará o sejmutí obrazu sudoku s hodnotami za pomocí inteligentní kamery. Následné doplnění scházejících hodnot a tím vyřešení sudoku bude provedeno za pomoci kliknutí pouze na jediné tlačítko.
4
PRINCIPY STROJOVÉHO VIDĚNÍ
4 4.1
13
Principy strojového vidění Úvod
Kamera je univerzální senzor a zprostředkovává informace, které umožňují automatizovat procesy. Systém strojového vidění optické inspekce dělá svou práci při správném návrhu aplikace neomylně.Potřebný je zkušený autor aplikace, který vhodně zvolí prostředky potřebné k realizaci projektu. (R. Bílý, 2011)
4.2
Digitální obrazy
Při zpracování obrazů pracujeme s digitálními obrazovými daty, ta jsou uložena ve dvourozměrných maticích. Prvky těchto matic jsou tzv. pixely (z anglického picture element). Souřadnice a hodnoty jsou obvykle označeny celými čísly. (R. Bílý, 2011) Kvalita digitálního obrazu je definována plošným, jasovým a časovým rozlišením.
Obr. 5: Souřadnice obrazových bodů v matici (R. Bílý, 2011)
Plošné rozlišení je dáno vzdáleností pixelů, čím větší množství pixelů, tím větší rozlišení. Jasové rozlišení je dáno počtem kvantizačních úrovní jasu. Časové rozlišení je dáno časovými intervaly mezi jednotlivými snímky. (R. Bílý, 2011) 4.2.1
Reprezentace obrazu
Pokud chceme tvořit aplikace pro strojové vidění, musíme zajít až za hranice zpracování obrazu. Budeme s obrazem pracovat jako s relací teorie signálů, kde se s obrazem pracuje jako s pozicemi pixelu ve dvourozměrném souřadném systému. Strojové vidění spadá spíše do UI (umělé inteligence). Snažíme se tím napodobit funkci lidského oka a určité lidské zkušenosti, toto nám však komplikují velké ob-
4.2
Digitální obrazy
14
jemy dat, neurčitost zkoumaného obrazu a malá robustnost používaných algoritmů. (R. Bílý, 2011) 4.2.2
Digitální pořízení obrazu
Dnes se na pořízení obrazu používá technologie, Solid-state detektor (elektronický snímač vyrobený technologií CCD nebo CMOS). Snímače vyrobené technologií CMOS jsou výrazně levnější než CCD, protože jim výrobní proces dovoluje integrovat další pomocné obvody. Proto k nim není třeba přidávat takové množství pomocné elektroniky jako k CCD. Při bližším porovnání s CCD mají vždy nižší citlivost a vyšší šum, což vede naši volbu spíše k CCD. (R. Bílý, 2011) 4.2.3
Funkce CCD
Princip CCD je poměrně jednoduchý. Pokud světlo přechází přes polovodič, tak v něm vytváří el.náboj. Na čipu jsou vytvořeny negativní potenciálové valy, proto se elektrony nemohou volně po čipu pohybovat . Systém vodorovných elektrod, rovněž s negativním nábojem, vytváří na čipu mřížku „potenciálových studníÿ, z nich elektrony nemohou uniknout. Každá studna reprezentuje jeden obrazový bod. CCD má oproti lidskému oku tu výhodu, že dokáže nahromadit světlo i z opravdu slabých zdrojů. (R. Bílý, 2011)
Obr. 6: Schéma FF čipu (počet vertikálních a horizontálních elektrod se liší v závislosti na architektuře čipu) (R. Bílý, 2011)
4.2.4
Analýza obrazu
Pokud chceme obraz analyzovat, zjišťujeme vlastně jeho globální vlastnosti. Budeme se teď zajímat o statistické hodnocení jasů a pixelů a nikoliv o porozumění obrazu nebo vztahů mezi nimi. Mezi základní nástroje analýzy obrazu patří např. histogram, monitor šumu, jasový profil linky a filtrace barev. (R. Bílý, 2011)
4.3
Zařízení
4.3
15
Zařízení
Zařízení potřebné k využití strojového vidění v průmyslové automatizaci jsou v podstatě jen tři. Jedná se o tzv. inteligentní kameru s kvalitní optikou, přičemž se kamera pohybuje v cenové relaci cca od 11 000 do 30 000 Kč a optika cca od 3 000 do 15 000 Kč. Pro kvalitní snímání obrazu je dále nutné pozorovanou scénu co nejlépe osvětlit a o to se starají osvětlovače. Poslední komponentou je pevná konstrukce, na které je kamera bezpečně umístěna. 4.3.1
Kamery
Smart kamera (inteligentní kamera) je specializovaným prostředkem pro realizaci strojového vidění (machine vision). První inteligentní kamery se objevily přibližně před dvaceti lety. Byly odpovědí na požadavek přiblížit komplikované a drahé systémy strojového vidění technice běžných senzorů, např. optických. Vznik inteligentní kamery právě v této době umožnilo spojení dvou relativně nových prvků: polovodičového snímače obrazu a mikroprocesoru. Inteligentní kamera je kompaktní zařízení schopné zpracovávat úlohy strojového vidění. (Ing. Havle, CSc., 2011)
Obr. 7: Schéma systému strojového vidění (Ing. Havle, CSc., 2011)
Schéma inteligentní kamery je zobrazeno na obr. 7. V dnešní době se kamery podobají běžně používaným kamerám v průmyslu obr.8(vlevo). Společnosti se snaží do sebe integrovat kamery i osvětlovací prostředky obr.8(vpravo). Kamera obsahuje: • prvky snímání a digitalizace • výpočetní část • vstupy a výstupy, komunikační rozhraní
4.3
Zařízení
16
Obr. 8: Typické provedení kamery (vlevo) a kamery s vestavěným osvětlovačem (vpravo) (Ing. Havle, CSc., 2011)
4.3.2
Osvětlovací prostředky
Osvětlovací prostředky jsou prvky umožňující nejpřesnější sejmutí obrazu z daného předmětu. Pro správné osvětlení objektu, je třeba analyzovat vlastnosti snímaného objektu. Analyzují se tyto vlastnosti: • velikost absorpce nebo odrazivosti světla v zájmových místech objektu, která určuje kontrasty a lesky (souvisí rovněž s barvou objektu) • struktura povrchu v zájmových místech objektu, kterou je někdy nutné zvýraznit, jindy potlačit • členitost objektu (výstupky, otvory atd.), vyžadující různé způsoby vytvoření či potlačení kontrastu v obraze • tvar a velikost objektu pro určení velikosti a vzdálenosti osvětlovače • průsvitnost a průhlednost částí objektu, které mohou být využity nebo musí být potlačeny. Pozadí objektu může působit rušivě • možná změna polohy nebo případný pohyb objektu (Ing. Havle, CSc., 2011) Osvětlovací prostředky dělíme do 6 kategorii : Plošná osvětlovací pole Plošná osvětlovací pole (obr. 9) většinou poskytují směrované světlo. Rozptýlení je dáno vyzařovacím úhlem použitých diod LED. V nenáročných úlohách mohou nahradit i nákladnější osvětlovače pro osvětlení s jasným obrazovým polem a rozptýleným světlem. Často se používají jako zdroje směrovaného světla pro osvětlení s temným zorným polem. Malá a speciální pole se využívají i jako pomocná světla nebo jako zdroje pro složitější osvětlovací soustavy.(Ing. Havle, CSc., 2011)
4.3
Zařízení
17
Obr. 9: a) reálná fotka b) princip (Ing. Havle, CSc., 2011)
Kruhové osvětlovače Kruhový osvětlovač (obr. 10) poskytuje více rozptýlené světlo směřující od objektivu kamery. V principu jde o osvětlovač pro osvětlení s jasným obrazovým polem a rozptýleným světlem, nemá ovšem zcela ideální vlastnosti, zvláště v provedení jednoduchého kruhu LED, který výrobci někdy přidávají okolo objektivu kamery.(Ing. Havle, CSc., 2011)
Obr. 10: a) reálná fotka b) princip (Ing. Havle, CSc., 2011)
Kopulové osvětlovače Kopulové osvětlovače (obr. 11) se používají pro osvětlení s jasným obrazovým polem kdy je nezbytně nutné osvětlit objekt světlem skutečně rozptýleným. To je, například, úloha čtení tištěných nápisů na zmačkané lesklé fólii. Rozptýlené světlo se v osvětlovači vytváří difuzním odrazem na vnitřní ploše polokoule. Osvětlení se někdy říká bezestínové (shadowless). (Ing. Havle, CSc., 2011)
4.3
Zařízení
18
Obr. 11: a) reálná fotka b) princip (Ing. Havle, CSc., 2011)
Osvětlovače DOAL Osvětlovač DOAL (Diffused ON Axis Lighting) poskytuje specifické osvětlení s jasným obrazovým polem, a rozptýleným světlem (obr. 12). Použitý difuzor zaručuje lepší rozptýlení světla. Díky konstrukci s polopropustným zrcadlem světlo dopadá rovnoměrně z celé plochy nad objektem, tedy i z prostoru před objektivem kamery. Nevýhodou je vyšší cena a omezené zorné pole.(Ing. Havle, CSc., 2011)
Obr. 12: a) reálna fotka b) princip (Ing. Havle, CSc., 2011)
Osvětlovače dark-field Z názvu vyplývá, že poskytuje přední osvětlení s temným zorným polem (obr. 13). Realizuje je jako světlo směrované v rovině téměř kolmé k ose objektivu kamery. Typickým příkladem využití osvětlovače dark-field je zdůraznění gravírovaných nebo laserem vypálených značek či nápisů. Osvětlovač dark- -field používaný pro takové účely je obvykle tvořen kruhem LED diod s úzkou vyzařovací charakteristikou, které svítí téměř v rovině kruhu do jeho středu. (Ing. Havle, CSc., 2011)
4.3
Zařízení
19
Obr. 13: a) reálná fotka b) princip (Ing. Havle, CSc., 2011)
Osvětlovače backlight Zadní rozptýlené světlo neboli backlight (obr. 14) je nejčastěji používaný typ zadního osvětlení. Je vhodné především při měřeních, kde je třeba zobrazit obrys měřené součásti. Dalším typickým příkladem je úloha rozpoznání nebo nalezení polohy součásti v průhledném pouzdru - kontrola vlákna žárovky. Osvětlovač backlight je konstruován jako pole LED diod s předřazeným velkoplošným rozptylovačem (difuzorem). Při volbě osvětlovače je třeba vzít v úvahu, že měření obrysu vyžaduje zcela homogenní zadní světlo. (Ing. Havle, CSc., 2011)
Obr. 14: a) reálná fotka b) princip (Ing. Havle, CSc., 2011)
4.3.3
Konstrukce
Příklad konstrukce pro umístění inteligentní kamery (obr. 15). Tato je od výrobce Moravia instrument. Jinak kamery bývají přímo integrovány do výrobních linek, kde je zajištěna jejich ochrana před vnějšími vlivy a v případě poruchy je snadné ji vyměnit.
4.4
Používaný Software
20
Obr. 15: Stojan pro kamery DataCam(Moravia instrument, 2011)
4.4
Používaný Software
Na dnešním trhu je velké množství softwarů, které se zabývají strojovým viděním. Zde se pokusím přiblížit několik programů pro tento účel. 4.4.1
Control Web 6.1 (modul VisionLab)
První Software , který zde popíši a zhodnotím, je české výroby. Jedná se o Control Web s rozšiřujícím modulem VisionLab, sloužící k nastavování strojového vidění. V tomto prostředí jsem strávil nejdelší dobu a to z toho důvodu, že jsem v něm realizoval aplikační řešení zadaného problému. Program je velice uživatelsky přívětivý nejen pro to, že je lokalizován v českém jazyce, ale i z hlediska podpory tzv. dvoucestného programování. Grafické rozhraní při vložení nového přístroje přidá jeho interpretaci do kompilovatelného kódu. Pokud je člověk zdatný programátor, nemusí vkládat přístroje v grafickém prostředí, ale může psát ihned jednotlivé příkazy. Můžeme si zvolit, jestli napíšeme kód přístroje, či přístroj vložíme manuálně. Tyto způsoby lze libovolně kombinovat.Výhodu vidím i v tom, že každý přístroj má předem definované procedury, do kterých stačí přidat jen to, co s nimi chceme udělat. Ocenil jsem možnost vložení ActiveX prvku vytvořeného ve Visual Basic. Modul VisionLab dokáže rozpoznávat barvy, text, tvary, transformace obrazu a spoustu dalších věcí. Celkově bych zhodnotil program jako povedený, po odstranění některých drobných chybiček bude tento program vynikající. 4.4.2
RoboRealm
Program určený výhradně pro strojové vidění a úpravy obrazu z kamery a po připojení správného modulu, je schopný přímo ovládat Lego robota. Dále má možnosti rozpoznávání barev, textu , transformace obrazu atd. . Program je jednoduchý a in-
4.4
Používaný Software
21
tuitivní, ale při použití operace, která není pro daný obraz podporována, program celý spadne. 4.4.3
A1 Inspector
Patří do skupiny programů, které jsou předdefinované pro určité operace (např. hledání chybějících součástek na plošných spojích), což je výhodné pro podniky, které řeší běžné problémy. Výhodami jsou nižší náklady, není potřeba programátor, zavedení do provozu je velice rychlé a program je jednoduchý na obsluhu. 4.4.4
National instrument (Vision Builder)
Program je založený na platformě LabVIEW, ve kterém není nutné umět programovat. Vše se provádí v krocích, které se následně provedou a obraz se vyhodnotí. Výhody Vision Builder : Vývoj • Shodné API pro všechny aplikace (od vývoje až po výrobu) • Rychlý vývoj Nasazení • Nízké náklady na software (možnost kompilace, VBAI run-time) • Možnost výběru platformy (PC, PXI, CVS, EVS) • Standardní komponenty (PC, VGA, Gigabit Ethernet, kamery) Technická podpora • 200 aplikačních inženýrů NI • Zkušení systémoví integrátoři • Kompatibilita s různými kamerami a různými operačními systémy (Nationa instriment, 2011)
4.5
Závěr kapitoly
22
Obr. 16: Příklad tvorby programu (Nationa instriment, 2011)
4.5
Závěr kapitoly
V této kapitole jsme se seznámili s principem strojového vidění a základními komponentami potřebnými pro strojové vidění. Základním kamenem strojového vidění jsou inteligentní kamery s kvalitní optikou a CCD snímačem, které mohou v dnešní době vypadat jako běžně používané průmyslové kamery. Pro dobré zanalyzování snímaného předmětu je nutné jej dobře osvítit vhodným typem osvětlovače. Pro zapojení do výroby je nutné zvolit úzce specializovaný software pro rozpoznávání obrazu, což zaručuje požadovaný výsledek celé analýzy.
5
METODIKA
5
23
Metodika
Pro tvorbu programu bude použito objektové programovaní v prostředí Control Web a VisionLab. Samotné řešení logické úlohy se bude odehrávat v activex komponentě vytvořené ve Visual Basic 6.
5.1
Práce v Control Web
Control Web (dále jen CW) je software určený pro vývoj aplikací, které jsou schopny ukládat, vyhodnocovat data a zobrazovat výsledky. V CW lze vytvořit dva druhy aplikací, jedny řízené časem a druhé řízené datově. Bližší funkce již byly popsány v kapitole Software pro strojové vidění. 5.1.1
Aplikace řízené časem
Aplikace pracují v reálném čase, autor má tedy jejich chod plně pod svojí kontrolou.Funkčnost takto navržených programů závisí na kvalitě návrhu. Programy takto vytvořené jsou tedy vhodné pro přímé řízení strojů a regulaci. (R. Bílý, 2011) 5.1.2
Datově řízené aplikace
Volně běžící systém je vhodný pro operátorské a vizualizační aplikace. Systémové časování je plně řízeno daty. Funkčnost takto navržených programů nezávisí na kvalitě návrhu. (R. Bílý, 2011) Z pohledu programátora se program skládá ze tří základních části : • Textový editor - zde se dá naleznout zdrojový kód včetně kódu jednotlivých přístrojů • Datové inspektory - v této sekci se nachází manager veškerých proměnných. Zde se dají vytvářet globální proměnné, do kterých „vidíÿ; veškeré přístroje a mohou si díky tomu mezi sebou předávat potřebná data. Sekce obsahuje : konstanty, proměnné, kanály, výrazy, plánované datové elementy, archivované datové elementy, sledované datové elementy a archivované a sledované datové elementy. • Grafický editor - zde je vidět, jak výsledná aplikace bude ve skutečnosti vypadat. Díky podpoře grafického programování může programátor vkládat jednotlivé přístroje a ty se vzápětí přepisují do spustitelného kódu. Po dvojkliku na učený přístroj se zobrazí inspektor přístroje, kde jsou specifikovány jeho vlastnosti a jeho vlastní kód.
5.2
Tvorba ActiveX komponenty
5.1.3
24
Runtime aplikace
Runtime verze systému Control Web je určena pouze pro spouštění aplikací, které jsou vytvořeny za pomocí vývojové verze. Lze spustit aplikace ve formátu ’cwx’ (binární kód). Runtime verze nemá k dispozici vývojové prostředí, což znamená, že aplikaci spuštěnou pod runtime verzí není možno upravovat. (R. Bily, 2011) Výhody spuštění v run time verzi : • vytvořený soubor není možné již změnit, což výrazně zvyšuje bezpečnost • spuštění aplikace ze souboru ve formátu ’cwx’ je rychlejší, stabilnější a nezpůsobuje pády programu Runtime je nutné doinstalovat není obsažena ve vývojové verzi Web controlu . Na počítači můžeme mít současně nainstalovánu jak vývojovou, tak runtime verzi. Každá z verzí ovšem musí být umístěna v samostatném adresáři. (R. Bily, 2011) Je-li vytvořená a odladěná aplikace ve vývojové verzi, můžeme přistoupit k vytvoření runtime verze aplikace. Tato činnost spočívá ve vygenerování souboru ’cwx’. Toho dosáhneme tak, že z menu Soubor vybereme položku Generovat CWX soubor. Pomocí okna výběru souborů zvolíme cestu a zadáme jméno runtime aplikace. Tlačítkem OK se vygeneruje a uloží nový soubor. (R. Bily, 2011) Při tvorbě aplikace ve vývojovém prostředí je nutné si uvědomit, že cílová runtime aplikace může pracovat na zcela jiném počítači, který má rozdílnou adresářovou strukturu, jiné pojmenování disků a podobně. Na tyto věci je třeba myslet již při návrhu aplikace a přizpůsobit tomu skladbu a umístění jejích součástí. Proto je výhodné nepoužívat plné cesty a aplikaci s jejími soubory umístit pouze do jednoho adresáře nebo do adresáře a jeho podadresářů. Přenos souborů na cílový počítač pak bude jednodušší a pravděpodobnost, že se runtime aplikace rozběhne hned napoprvé, bude vyšší. (R. Bily, 2011) 5.1.4
Modul VisionLab
Modul VisionLab je určený, jak už jeho název napovídá, pro rozpoznávání obrazu. Za pomocí tohoto modulu se dají do Control Web přidávat přístroje (kamery), které v krocích analyzují obraz a vrací parametry reprezentované rozpoznanými hodnotami na pozorovaném snímku. Vkládané a zobrazované regiony se taktéž ihned přepisují do textového editoru jako kompilovatelný kód.
5.2
Tvorba ActiveX komponenty
Z důvodu implementačních omezení programu Control Web bylo nutné zvolit jiný, vhodnější a efektivnější způsob vyhodnocování logické úlohy (sudoku). Zvolil jsem tvorbu
5.2
Tvorba ActiveX komponenty
25
ActiveX komponenty. Po mých předchozích zkušenostech ze střední školy jsem zvolil dnes již postarší vývojový nástroj Visual Basic 6.0. 5.2.1
Visual Basic 6.0
Tento nástroj je dnes již popravdě velice zastaralý, ale po mém zkoumání jeho nástupce, Visual Basicu 2008(dále už jen VB 2008), který je pro mě dostupný z MSDN, jsem zjistil, že VB 2008 nepodporuje tvoru grafických AktiveX komponent, jejichž použití je pro můj projekt klíčové, proto jsem se vrátil k Visual Basic 6.0. VB 6.0 je nástroj, který vyvinula a vlastní společnost Microsoft. Byl původně vytvořen za účelem zjednodušení tvorby programů pro systém Windows. Základem jazyka je starší programovací jazyk BASIC, byl vytvořen profesory John a Thomas Kurtz Kemeny. Visual Basic je často označován za použití pouze iniciály, VB. Visual Basic je snad nejpoužívanější programovací prostředí v historii softwaru. Tento softwarový nástroj nevytváří jen programy pro Windows, ale také ho plně využívá grafickým způsobem, že nechá programátory ”nakreslit” jejich program myší na počítači. To je důvod, proč se jmenuje ”Vizuální” Basic. (2011, Dan Mabbutt) Visual Basic nabízí jedinečnou a kompletní softwarovou architekturu. ”Architektura” je způsob, jak počítačové programy, jako jsou Windows a VB , mohou pracovat společně. Jedním z hlavních důvodů, proč je Visual Basic tak úspěšný, je to, že obsahuje vše, co je nezbytné pro vytváření programů pro Windows. (Dan Mabbutt, 2011) Programování ve VB 6.0 je také dvojcestné jako v Control Web, lze přidávat komponenty v kombinaci s vkládáním potřebného kódu a psaním vlastních procedur. Syntaxe je odvozena od programovacího jazyku Basic. Pro představu ukázka syntaxe if-elseis-else. If < P odminka > Then < kod > ElseIf< P odminka > Then < kod > Else < kod > End If 5.2.2
Další využití Visual Basic 6.0
Výhody spuštění v run time verzi : „ DLL knihovna není nic jiného než „kontejnerÿ pro vaše funkce, které si pak z vašeho programu můžete volat.ÿ(Libor, 2011)
5.2
Tvorba ActiveX komponenty
26
Výhody DLL :
Využívá méně prostředků Používá-li více programů stejné funkce můžeme využitím DLL snížit duplicitu kódu, čímž ušetříme místo na disku a fyzické paměti. Tyto faktory mohou výrazně ovlivnit výkon jednotlivých programů spuštěných v popředí, ale také dalších programů, které jsou spuštěny v operačním systému Windows. (Microsoft, 2011) Modulární architektura S DLL je možné vyvíjet modulární programy. To je výhoda pro tvorbu velkých projektů, které vyžadují více jazykových verzí, nebo programy vyžadující modulární architekturu. Například modulární účetní program, který má mnoho modulů, jež lze dynamicky načíst ihned při jeho spuštění. (Microsoft, 2011) Usnadňuje zavedení a instalaci Zavádění a instalace knihovny DLL nevyžaduje, aby se k programu znovu připojili DLL. Pokud více programů používá stejné DLL, tak při aktualizaci nebo opravě budou tyto výhody vyžívat všechny programy. Tato situace může nastat častěji při použití knihovny DLL od druhé strany, která je pravidelně aktualizuje. (Microsoft, 2011) Příklad funkce z dll Public Function HelloWorld() As String HelloWorld = ”Hello World” End Function Tvorba maker v sadě Microsoft office Mnoho úloh, jako například zadávání údajů o prodeji za určitý den nebo přidávání vzorce do listu, je prováděno v aplikaci Excel pouze jednou. Jiné úlohy, například změna formátu rozsahu buněk, se opakují a lze je provést rychle pomocí nástrojů aplikace Excel. Často však uživatelé používají jednu nebo dvě úlohy, které je nutné provést opakovaně a které se sestávají z mnoha kroků. (Microsoft,2011) Budete-li chtít například zvýraznit několik důležitých buněk v listu vždy, když chcete někomu představit určitou sestavu, můžete místo ručního provádění dlouhé řady kroků vytvořit makro, což je řada zaznamenaných akcí, kterými budou požadované kroky provedeny. V případě, že jste obeznámeni s programovacím jazykem Microsoft Visual Basic, můžete přímo napsat vlastní makro. V obou případech mů-
5.2
Tvorba ActiveX komponenty
27
žete makro po vytvoření podle potřeby spustit, upravit nebo odstranit. (Microsoft, 2011) Pokud potřebujeme do buňky vložit složitější vzorec, který může být v tomto případě velice nepřehledný a proto zvolíme taktéž tvorbu makra a tím si usnadníme práci. Příklad makra pro změnu vlastnosti textu v buňkách
Obr. 17: Příklad makra pro změnu vlastnosti textu v buňkách (Microsoft, 2011)
5.2.3
Závěr kapitoly
Kapitola nastínila vlastnosti Control Web (VisionLab) a Visual Basic, programů potřebných pro realizaci řešeného problému. Vzhledem k počtu potřebných dat a vlastnostem Control Web pro zadávání dat a kódu zvolím převážně zadávání v textovém režimu. Pro rozložení komponent, aby výsledná ergonometrie byla co nejvzhlednější, použiji výhody grafického režimu. S vývojovým nástrojem Visual Basic 6.0 jsem pracoval již na střední škole, proto jsem seznámen s jeho vlastnostmi i syntaxí. VB 6.0 dokáže vytvářet soubory s příponou .ocx (ActiveX komponenty), které je možné po vložení do registrů vkládat do CW a jiných programů.
6
VLASTNÍ PRÁCE
6 6.1
28
Vlastní práce Tvorba ActiveX komponenty
Tvorba activeX komponenty je poměrně zdlouhavá a náročná cesta, která nemusí vždy vést k vyhovujícímu výsledku. Program vybraný (Visual Basic 6.0 dále jen VB) pro její tvorbu je však velice uživatelsky přívětivý díky svému vývojovému prostředí. 6.1.1
ActiveX komponenta obecně
ActiveX je technologie vyvinutá společností Microsoft, která slouží ke sdílení dat mezi aplikacemi. Tato technologie využívá technologie OLE A COM. Dala by se přirovnat k Java apletům, ale ActiveX na rozdíl od nich má plný přistup do OS. Díky těmto faktům byly tyto komponenty používány pro útoky na počítače uživatelů. Proto společnost Microsoft zvolila systém registrace komponent za pomocí CLSID do registrů počítačů. 6.1.2
Princip sudoku
Cílem je doplnit chybějící čísla 1 až 9 v částečně vyplněné tabulce, která je rozdělena na 9x9 polí, která jsou dále sekupena do 9 čtverců o velikosti 3x3. K předem vyplněným hodnotám je třeba doplnit čísla tak, aby platilo, že v každé řadě, sloupci a v každém z devíti čtverců byla použita vždy všechna čísla 1 až 9. Na pořadí čísel nezáleží. Čísla se v sloupci, řádku a čtverci nesmí opakovat. Obtížnost Sudoku není dána počtem políček , která jsou předem vyplněna, ale jejich vzájemnými vazbami, které na první pohled nejsou vidět. 6.1.3
Tvorba designu aplikace
Založíme nový projekt File -> New project -> ActiveX kontrol. Tím se nám vytvoří prázdný form, do kterého vložíme 81 tlačítek (button), jež budou reprezentovat jednotlivé hodnoty sudoku.
6.1
Tvorba ActiveX komponenty
29
Obr. 18: Ukázka pole tlačítek
Dále budeme potřebovat tlačítko, po jehož zmáčknutí se celé sudoku vyhodnotí a label se statickým nápisem „Vyhodnocujiÿ, který bude primárně neviditelný a bude se zobrazovat až při vyhodnocování sudoku. Po zmáčknutí tlačítka vyhodnoť se provede kód, v němž se zavolají funkce pro vyhodnocení sudoku a zobrazení lablu vyhodnocuji. Private Sub vyhodnot Click() waitlbl.Visible = True DoEvents If zkontroluj = True Then hodnoty1 hodnoty2 hodnoty3 If zkontroluj = False Then GoTo kk: If Pridej vysledek = False Then MsgBox ”Špatná čísla zkusteznovu” EndIf kk: waitlbl.Visible = False vyhodnot.Visible = True End Sub 6.1.4
Řešení sudoku
V první řadě je důležité vložené hodnoty zkontrolovat, jestli se opravdu jedná o řešitelné sudoku. O tuto kontrolu se stará funkce s názvem zkontroluj, která převede jednotlivé řádky, sloupce a čtverce do polí stringů, které se posléze vyhodnocují tak, že se zjišťuje, jestli se v jednotlivých elementech některé číslo nenachází vícekrát a pokud ano vypíše se varování : „Je nutné zkontrolovat jednotlivá čísla, v tuto chvíli není možné nalézt řešeníÿ.
6.1
Tvorba ActiveX komponenty
30
Ukázka kódu, vyhodnocení správnosti řádků: For s = 1 To 9 If Len(txt1(s)) > 1 Then For m = 1 To 9 a = InStr(txt1(s), m): b = InStrRev(txt1(s), m) If a <> b Then zkontroluj = False: GoTo xxxx: Next End If Next Nyní můžeme přistoupit k samotnému řešení sudoku, což je řešeno ve třech funkcích s názvem hodnoty1 až hodnoty3. Ve funkci hodnoty1 se nalézají vhodná řešení do čtverců , ve funkci hodnoty2 se řeší vhodné hodnoty pro řádky a ve funkci hodnoty3 se řeší vhodné hodnoty pro sloupce. Ve funkcích hodnoty2 a hodnoty3 se opětovně kontroluje správnost řešení ve čtvercích. Funkce, najdi hodnotu, je volána v každé z funkcí hodnoty1 až hodnoty3 a nalézá pro ně správné hodnoty. Není možné zde uvádět ukázky kódu, protože by se jednalo o fragmenty kódu vytržené z kontextu, proto celý kód nalezneme v CD příloze. Pro nás jsou mnohem důležitější funkce, které jsou „vidětÿ z vnějšku ActiveX komponenty. Jedná se o funkci pridej, která přidává hodnoty na zvolenou pozici za pomocí parametrů. Ukázka: Public Function Pridej(x As Byte, y As Byte, hodnota As Byte) nevyresene(x, y) = hodnota End Function Pro přehlednost a ukázku funkčnosti funkcí v ActiveX komponentě jsem ponechal veřejnou i funkci pridej cisla na tlacitka, která pouze na jednotlivá tlačítka přidá hodnoty z pole, do kterého jsme vložili hodnoty v předchozí funkci. Public Function pridej cisla na tlacitka() Dim p, o, k As Byte p=0 For o = 1 To 9 For k = 1 To 9 If nevyresene(o, k) > 0 Then pozice(p).Caption = nevyresene(o, k) End If p=p+1 Next k
6.2
Control web - VisionLab
31
Next o End Function 6.1.5
Registrace ActiveX komponenty
Pokud máme celou ActiveX komponentu vytvořenu, musíme nyní ve Visual Basicu vytvořit soubor s příponou *.ocx . Ve VB zvolíme nabídku file a make sudoku.ocx. Tímto jsme vytvořili soubor potřebný k zanesení do registrů. Nejprve spustíme cmd.exe (shell v operačním systému Microsoft Windows), je potřeba, aby bylo cmd spuštěno v režimu administrator, jinak se soubor do registrů nezanese. Dostaneme se na cestu C:\}Windows\}system32\}regsvr.exe, ke kterému přidáme cestu k námi vytvořenému souboru sudoku.ocx viz obr.18. Po odentrováni budeme informováni o provedení operace a založení ActiveX komponenty do registrů Windows.
Obr. 19: CMD a registrace komponenty
6.2
Control web - VisionLab
V této kapitole se budeme zabývat podrobným popisem tvorby aplikace od samotného rozpoznávání snímaného obrazu až po jeho výsledné vyhodnocení za pomocí přidané ActiveX componenty. 6.2.1
Základní nastavení projektu v Control Web
• Spustíme program Control Web. • založíme nový projekt, který nastavíme následovně • vzhledem k tomu, že vytváříme aplikaci určenou pro automatizaci, zvolíme aplikaci pracující v reálném čase • v nastavení ponecháme základní rozměry • konfigurace panelů aplikace : pro naše účely bude stačit pouze jeden panel • ostatní nastavení pouze odklikneme a necháme v původním tvaru Nyní už se nám objeví základní panel. Nejprve dvakrát poklikneme na panel a objeví se inspektor přístroje. V záložce procedury si najdeme proceduru s názvem procedure
6.2
Control web - VisionLab
32
OnWindowClose() a do jejího těla vložíme příkaz system.StopApplication(). Tento příkaz nám zajistí standardní ukončení programu při kliknutí na křížek a nebude nutné vždy program ukončovat přímo z CW. Nyní je základní nastavení hotovo, můžeme se pustit do tvorby aplikace. 6.2.2
VisonLab
Před rozpoznáváním obrazu je nutné si připravit tvz. vzor (masku), podle které se bude obraz rozpoznávat. Je nutné aby vzor byl jednoznačný a v dostatečné kvalitě.
Obr. 20: Příklad vzoru
Nejprve do panelu z palety přístrojů, (kterou nalezneme v horní nabídce úplně vpravo ), vložíme kameru tak, že ji z palety přístrojů přetáhneme na panel a upravíme její velikost. Na přístroj kamery klikneme pravým tlačítkem a zvolíme nabídku VisionLab editor . Otevře se okno pro nastavení kroků strojového vidění. Na levé straně se nachází kroky rozpoznávání obrazu, ve středu obraz z kamery a úplně vpravo jednotlivé datové objekty použitelné v rozpoznávání obrazu. Připravíme si potřebné datové objekty. • Položka frame -> nový a přejmenujeme na Vzor cisla, ve spodní části okna přidáme cestu k našemu vzoru. • Zvolíme region a dáme přidat přejmenujeme si jej na poz 11 a po té ho umístíme na pozici v matici sudoku[1,1] • Položka string, do níž vložíme dvě hodnoty s názvy : vys 11 a string vzor, do string vzor opět ve spodním okně vložíme hodnotu vzoru, v našem případě : „123456789ÿ • Nyní už můžeme konečně přejít k vložení kroku pro rozpoznání určeného sektoru. V levé nabídce klikneme na, vložit nový krok -> čtení písma -> Optical character recognition Klikneme na krok číslo 1 a ve spodní části editoru nalezneme nabídku, kde nastavíme hodnoty podle obr.21.
6.2
Control web - VisionLab
33
Obr. 21: Nastavení kroku
Teď už je možné spustit rozpoznávání obrazu. Pokud se podíváme do proměnné vys 11, měla by se v ní nacházet hodnota nalezená v regionu, pokud se v regionu nenachází hodnota, je proměnná prázdná.
Obr. 22: Nalezená hodnota
Nyní máme dvě možnosti. První možnost je, že uvedený postup se opakuje pro ostatních 81 regionů ručně, za pomocí editoru, což je jak fyzicky tak časově náročné. Druhá možnost je použítí metody kopírování kódu s drobnými úpravami, což je podstatně méně náročné na čas. Já jsem zvolil druhou možnost. Když se podíváme do kódu podrobněji, zjistíme, že nebude tak složité, rozkopírovat kód a změnit v něm hodnoty. Příklad a rozebrání kódu: rectangular region reg 11; x = 38; y = 464; width = 45; height = 45; angle = 0; end rectangular region; string vys 11;
6.2
Control web - VisionLab
34
value = ”; end string; steps step optical character recognition; condition = true; input = Sudoku cele, reg 11, Vzor cisel, Vzor cisla, 0.6, ’?’, 10, 0, 0, 0.5, , , false, 0, true; output = vys 11; end step; end steps; Když se na kód podíváme, zjistíme, že je velice jednoduchý a snadno upravitelný. Blok regiony obsahuje pozice a velikost regionů stačí tedy zkopírovat kód, přejmenovat jej a posunout souřadnice na určené místo. Výsledný string se jen zkopíruje a změní se jeho název. V implementaci kroku rozpoznávaní je třeba změnit název regionu a jméno výsledného stringu. Nyní bychom měli mít všechny regiony, rozpoznávací kroky a výsledné proměnné na svých místech. Takže teď je potřebné dostat získané hodnoty do takové formy, aby se s nimi dobře manipulovalo. Vytvoříme si tedy globální proměnnou typu pole od 1 do 81, obsahující stringy, s názvem Sudoku string. Abychom zvolili kam se mají výsledné hodnoty uložit, musíme se přepnout na kameře do Inspektoru přístroje -> Parametry přístroje -> Image processing s nastavením viz obrázek.
Obr. 23: Nastevení Image processing
Opět pro ušetření času programátora využijeme možnosti rozkopírování kódu. Budeme měnit výstupní proměnnou a pozici v poli sudoku string. output data string vys1 1; value = Sudoku string[1]; end string; Následně se dostáváme do stavu, kdy máme výsledné hodnoty úhledně uložené v poli. Zde však narážíme na problém, že se jedná o hodnoty typu string, se kterými
6.2
Control web - VisionLab
35
se nedá pracovat jako s číselnými hodnotami, je tedy nutné je převést na číselné hodnoty typu integer. Nejprve si vytvoříme globální proměnnou typu pole od 1 do 81, obsahující integery, s názvem Sudoku int. Jednoduchým algoritmem převedeme string za pomoci funkce ord na hodnoty typu integer. for i = 1 to 81 do if (ord(Sudoku string[i])-48) = -48 then else Sudoku int[i] = ord(Sudoku string[i])-48 end; end; Nyní je výstup plně připraven v podobě pole integrů, které se dá snadno zpracovávat a můžeme vložit do aplikace aktiveX komponentu, kterou nalezneme taktéž v paletě přístrojů a přetáhneme ji do programu. Dvojitým poklikáním se komponenta otevře a následně je nutné zvolit komponentu uloženou v registrech za pomocí CLSID.
Obr. 24: Nastevení ActiveX komponenty
Na obr. 24 je vidět nastavení komponenty a její unikátní CLSID. Pokud zvolíme v inspektoru přístroje -> ActiveX informace -> metody AktiveX je možné vidět přístupné metody Active X komponenty viz obr. 25.
6.2
Control web - VisionLab
36
Obr. 25: ActiveX metody
6.2.3
Použití funkcí ActiveX komponenty
Vyznačené funkce je možné použít v průběhu celého programu v CW, my jednu z nich použijeme při vkládání jednotlivých hodnot políček sudoku do ActiveX komponenty, kde proběhne vyhodnocení sudoku. Jde vlastně o převedení celého pole Sudoku int do ActiveX komponenty.
p=1; for i= 1 to 9 do for j=1 to 9 do active.Pridej(i,j,Sudoku int[p]); p=p+1; end; end; Po předání všech hodnot do activex komponenty se zavolá funkce komponenty s názvem pridej cila na tlačítka, která provede vložení již předaných hodnot do komponenty na tlačítka v komponentě.
6.3
6.3
Závěr kapitoly
37
Závěr kapitoly
V této kapitole je popsáno praktické řešení celé úlohy. Jedná se o základní postup řešení úlohy, kromě této holé kostry bylo nutné optimalizovat jednotlivé části pro jejich nejvhodnější využití. Hlavní částí úlohy bylo rozpoznávání snímaného obrazu, které je řešeno v modulu VisionLab pod programem Control Web, Tyto programy jsou českého původu a pro mě dostupné v rámci nekomerční studentské licence. Řešení samotné logické úlohy proběhlo v ActiveX komponentě za pomocí veřejných funkcí. Celá tvorba probíhala postupným vývojem a rozebíráním každého zvoleného kroku. Důvod zvolení ActiveX komponenty byl velice prostý. Program by se dal realizovat přímo v Control Web ale CW podporuje pouze implementaci jednorozměrného pole, což by učinilo implementaci výsledné logické úlohy složitější.
7
ZÁVĚR
7 7.1
38
Závěr Shrnutí práce
V této práci bylo řešeno vytvoření aplikace pro rozpoznávání obrazu v systému Control Web s modulem VisionLab. Seznámil jsem se s principy a technologiemi strojového vidění. Z důvodů nového dostupného programového a technického vybavení na Provozně ekonomické fakultě byly použity produkty od společnosti Moravské přístroje a.s. S výše jmenovaným vybavením jsem se velice dobře seznámil. Dospěl jsem k závěru, že systém Control Web je vhodný pro řešení různých problémů v automatizačních procesech. Vývojové prostředí Control Web však vykazuje drobné problémy, chce-li uživatel odladit aplikaci. Tato drobná nevýhoda poměrně zamrzí. Pokud se jedná o modul VisionLab, z mého pohledu je to velice povedený program. Už v základu nabízí velké množství funkcí určených pro rozpoznávání obrazu. Je možné rozpoznat barvy, text, pozice, tvary a mnoho dalšího. Z důvodů omezení v systému Control Web jsem pro řešení sudoku použil ActiveX komponentu a tím jsem si zopakoval a zdokonalil práci v programu Visual Basic 6.0. Tento program je jednou z mála možností, jak vytvořit ActiveX komponentu. S Visual Basic pro mě vznikly problémy už při jeho zavedení do mého systému Windows 7 64x. Program je z roku 1991 a kompatibilita s mým systémem Windows byla poměrně problémová. Pomohlo spouštění aplikace v režimu kompatibility pod systémem Microsoft Windows Xp. Část Vlastní práce objasnila způsob, jakým probíhala tvorba celé aplikace. Hlavním bodem je podrobný popis pro systém Control Web, ve kterém je realizováno samotné rozpoznávání obrazu. Uvedený postup je natolik podrobný a zjednodušený tak, aby bylo možné vytvořit program i pro člověka, který má s tímto programem jen malé zkušenosti. Druhotným bodem se stala tvorba ActiveX komponenty v programu Visual Basic 6.0. V něm byl vytvořen vzhled s algoritmem v podobě několika funkcí, které se starají o zpracování hodnot vložených ze sytému Control Web a tím vyřešení sudoku.
7.2
Zhodnocení výsledků
Pokud se zaměříme na zhodnocení výsledků, musíme vzít v úvahu předem určené cíle v začátcích práce. Výsledná aplikace měla za úkol vytvoření aplikace, která sejme obraz a vyhodnotí logickou úlohu. Ovládání aplikace spočívá pouze v převzetí hodnot z vyhodnocovaného sudoku a po té ve zmáčknutí tlačítka uživatelem a tím vyhodnocení nevyřešeného sudoku. Celková aplikace byla navržena tak, aby byla co nejjednodušší.
7.3
7.3
Možná vylepšení
39
Možná vylepšení
Jedno z možných vylepšení by se týkalo ActiveX komponenty. Jednalo by se o to, že při špatném sejmutí obrazu by si uživatel sám mohl upravit špatně přečtené hodnoty a sudoku pak vyhodnotit. Další z možností by bylo do této komponenty přidat hru, která bude vytvářet sudoku, popřípadě i napovídat správná řešení a toto sudoku bude řešit sám uživatel.
8
8
LITERATURA
40
Literatura
Bílý, Radek, et al. Dokumentace Control Web. [s.l.] : Moravian Instruments, 2010.506 s. Co je knihovna DLL? [online]. 2007 [cit. 2011-05-11]. Dostupné z WWW:
. ING. HAVLE, Otto, CSc., MBA. Přehled trhu: inteligentní kamery. Automa [online]. 2009, 05, [cit. 2011-04-11]. Dostupný z WWW: . ING. HAVLE, Otto, CSc., MBA. Strojové vidění IV: Osvětlovače. Automa [online]. 2009, 05, [cit. 2011-04-11]. Dostupný z WWW:< http://www.odbornecasopisy.cz /index.php?id document=36988>. MABBUTT, Dan . About.com [online]. 2011. 2011 [cit. 2011-05-01]. What is Visual Basic?. Dostupné z WWW: . Microsoft [online]. 2005 [cit. 2011-05-11]. Dostupné z WWW: . National instrument [online]. 2011 [cit. 2011-05-12]. Dostupné z WWW: . -, Libor. Assembler ve Visual Basicu [online]. 2011. 2011 [cit. 2011-05-11]. Dostupné z WWW: .
Přílohy
A
A
UKÁZKA VYTVOŘENÉ APLIKACE VE VISUAL BASIC 6.0
Ukázka vytvořené aplikace ve Visual Basic 6.0
Obr. 26: Ukázka vytvořené aplikace ve Visual Basic 6.0
42
B
B
UKÁZKA VYTVOŘENÉ APLIKACE VE CONTROL WEB
Ukázka vytvořené aplikace ve Control Web
Obr. 27: Ukázka vytvořené aplikace ve Control Web
43
C
C
UKÁZKA HOTOVÉ APLIKACE PŘED VYŘEŠENÍM
Ukázka hotové aplikace před vyřešením
Obr. 28: Ukázka hotové aplikace před vyřešením
44
D
D
UKÁZKA HOTOVÉ APLIKACE PO VYŘEŠENÍM
Ukázka hotové aplikace po vyřešením
Obr. 29: Ukázka hotové aplikace po vyřešením
45
E
E
OBSAH CD
Obsah CD
Příložené cd obsahuje : • zdrojové kódy aplikací • Přeloženou aplikaci ve formátu CWX. • Elektronické vydání této práce.
46