OCR: Čtení textu v průmyslových aplikacích pomocí deep learning neuronových sítí

Pár slov úvodem…

I přes to, že se v průmyslu k identifikaci výrobků stále častěji využívá 1D/2D kódů (čárové kódy, QR, DMC aj.), člověkem čitelný text je v některých místech stále zcela nenahraditelný. Ať už jde o interpretaci kódovaných dat pro případ nečitelnosti kódu samotného, nebo jako informace pro koncového spotřebitele (např. datum spotřeby), běžný text má a nejspíš ještě nějakou dobu bude mít své nenahraditelné místo. Opravdu spolehlivé rozpoznání a kontrola tištěných textů metodou OCR je přitom v reálných podmínkách výrobních procesů často téměř nemožná úloha. Tedy alespoň ještě do nedávna byla. Se stále větším přesahem a rozvojem umělé inteligence a neuronových sítí do oblasti zpracování obrazu přicházejí dříve nevídané možnosti kontroly, jako tomu je i v případě, který vám dnes představíme.

Čtení a rozpozní textu v obraze (tzv. OCR – Optical Character Recognition) může být složitější než se na první pohled zdá. Při využití běžných algoritmů zpracování obrazu vychází celý postup většinou z několika samostatných navazujících kroků:

  1. Lokalizace oblasti textu v obraze např. pomocí funkcí, vyhledávajících předem definovaný vzor
  2. Segmentace textu – oddělení obrazových bodů jednotlivých písmen a číslic od pozadí
  3. Optické rozpoznání znaků (OCR) – převod obrazových dat reprezentující jednotlivé znaky na textovou informaci porovnáním s předem připraveným modelem fontu nebo na základě vytvoření vlastního
 
Three steps of basic OCR image processing.
Jednotlivé kroky zpracování obrazu od lokalizace přes segmentaci až po úspěšné rozpoznání textu.

Co se na tom může pokazit, když je to tak jednoduché?

V reálném prostředí výrobních linek vstupují do procesu značení a následné kontroly různé vlivy okolí jako jsou vibrace, pohyb produktu, nepřesné polohování při značení a následném pořízení snímku, okolní osvětlení, kvalita značení, nehomogenita podkladového povrchu a mnoho dalších. Všechny tyto vlivy mají menší nebo větší dopad na výsledek, ale jen zřídka se navzájem jejich působení vyruší, naopak spíše se jejich vlivy sčítají. Ne vždy je přitom možné tyto parazitní vlivy eliminovat nebo předvídat a někdy je potřeba se zkrátka smířit s tím, že budou do procesu zpracování obrazu negativně přispívat. 

V prvé řadě může selhat samotné vyhledání oblasti textu, které je nezbytné, pokud dochází mezi jednotlivými produkty (a jejich snímky) k posuvu textu v rámci snímků. Tento krok je většinou nevyhnutelný a jen málokdy je text vždy na stejné pozici, případně jen s minimálním posunem proti referenční pozici. Vyhledání oblasti textu přitom pracuje na principu porovnání předem nastavené předlohy (většinou je použit hranový model kontur textu), kdy v rámci aktuálního obrazu hledá největší míru shody s touto předlohou. Pokud je shoda nízká např. vlivem odlesků od povrchu nebo zhoršené kvality tisku, nelze spolehlivě určit přesnou pozici oblasti textu a následná segmentace textu a OCR nemá dále příliš smysl.

I když se podaří text úspěšně lokalizovat, není ještě zdaleka vyhráno. Můžeme ale už přistoupit k segmentaci textu, která má za cíl oddělit popředí (pixely patřící textu) od pozadí (pixely podkladu). Jak je tomu u většiny úloh zpracování obrazu, podstatný je zde hlavně kontrast, tedy rozdíl v intenzitě pixelů popředí a pozadí. Většina segmentačních funkcí také pracuje s logikou, že extrahovaný text je vždy jedné, předem určené polarity, tedy buď jde o tmavý text na světlém pozadí nebo obráceně. Značnou výzvou je, pokud se polarita střídá a to ještě dopředu neznámým způsobem. I když je ale polarita konzistentní, může docházet k problému s proměnlivou podobou pozadí, kde jedna část textu je vůči svému pozadí kontrastní a o kousek dál je ve snímku odlesk nebo stín, který kontrast zcela pokazí. Může také docházet k problémům s rozdělením souvislého textu na jednotlivé znaky, pokud jsou písmena nebo číslice příliš blízko sebe a dochází na úrovni obrazových bodů k jejich splývání v jeden znak. Z celého procesu OCR je tak spolehlivá segmentace často ten nejnáročnější krok.

AuroraVisionStudio nz6XuMUp5C
Úspěšná segmentace textu - jedna polarita všech znaků a homogenní pozadí.
AuroraVisionStudio 5yzbG9Zf2a
Neúspěšná segmentace textu - písmeno "T" a číslice "2" a "3" zasahují do prolisu v plastu. Písmena "W", "F" a "L" mění vlivem odlesku polaritu a jejich kontrast k pozadí dramaticky klesá.

Správně lokalizovaný a kvalitně segmentovaný text, rozdělěný na jednotlivé znaky je konečně vstupem do třetí části procesu – optického rozpoznání znaků. V této fázi dochází k samotnému porovnání extrahovaného znaku s databází daného fontu a určení největší míry shody. V principu se tento krok podobá první části vyhledání celého textu podle vzoru, ale v reálu jsou zde určité odlišnosti v způsobu porovnání. Problém může nastat při velké podobnosti znaků v rámci zvoleného fontu – např. bývá problematické odlišení písmena „O“ a číslice „nula“. Podobných potenciálních záměn existuje celá řada, a proto existují specializované fonty pro OCR (OCR-A, OCR-B), které byly vyvinuty s cílem lehko zaměnitelné znaky jednoznačně odlišit. Pokud je to tedy esteticky přijatelné, vždy doporučujeme používat nějaký typ  OCR specializovaného fontu.

OCR-A_char_unaccented_capital_letters.svg
OCR A char unaccented small letters.svg
OCR A char digits.svg

OCR-A byl poprvé využitý již v roce 1968 – font minimalizuje riziko záměny tvarově podobných znaků při strojovém čtení. Bohužel ale na úkor estetičnosti a čitelnosti pro člověka. 

Jak na to? Odpovědí je neuronová síť.

Na příkladech výše jsme si ukázali, že problémů při čtení textu nás může potkat hned celá řada. Za zmínku také určitě stojí časová náročnost, která je spojena s nastavením vhodných parametrů funkcí pro vyhledání textu, jeho segmentaci a nakonec s případnou tvorbou modelu pro rozpoznání znaků použitého fontu. Nic však není nemožné a postupným laděním kombinace parametrů s testováním na dostatečně velké a reprezentativní sadě testovacích snímků lze často dosáhnout velmi stabilních výsledků. 

Nešlo by to nějak jednodušeji – a ve výsledku třeba i levněji…?

Naštěstí šlo. V rámci vývoje v oblasti umělé inteligence dochází v poslední době k velmi rychlému pokroku a pozadu rozhodně nezůstává aní segment strojového vidění a zpracování obrazu. Kromě konvenčních OCR funkcí ukázaných výše nabízí SW pro zpracování obrazu Zebra Aurora Vision také funkci OCR založenou na principu hlubokých neuronových sítí. Zní to složitě, ale použití je velmi jednoduché. Tato jedna kouzelná funkce v sobě integruje v podstatě celý proces segmentace a následného rozpoznání znaků při nastavení pouze několika základních parametrů – zejména velikosti znaků a rozsahu očekávaných znaků v rámci textu. Dokonce ani nutně nevadí pokud znaky mění polaritu. Funkce totiž umožňuje pracovat i s její kombinovanou variantou. Neuronová síť na pozadí funkce je navíc natrénována na opravdu širokou škálu fontů a v drtivé většině případů tak vše funguje doslova out-of-box, bez nutnosti adaptace na konkrétní použitý font. Toto řešení tak nejen že přináší dosud nevídanou robustnost rozpoznání textu, ale také velmi výrazně zkracuje dobu implementace, jelikož odpadá časově náročné ladění velkého množství parametrů. To vše při nízké výpočetní náročnosti, předurčující její použití i v rychlých procesech.

G4m94Oszms
Zaujaly vás možnosti pokročilého rozpoznání textu a chtěli byste se dozvědět více? Neváhejte nás kontaktovat!

Kontaktujte nás!