Vision v systéme iOS 11 má všetko, čo potrebujete na vytvorenie aplikácie, ktorá dokáže rozpoznať textové znaky, pričom implementácia prebieha súčasne. Nepotrebujete technické znalosti kódovania – navigácia v tejto funkcii je celkom jednoduchá. A čo viac, implementácia je bezproblémová.
Rámec vízie
Rámec vízie vám umožňuje jednoducho implementovať akúkoľvek úlohu, ktorá zahŕňa detaily počítača. Štruktúra vykonáva detekciu tváre a orientačného bodu tváre, rozpoznávanie čiarových kódov, registráciu obrázkov, sledovanie všeobecných funkcií a detekciu textu. Vision vám tiež umožňuje používať vlastné modely Core ML na úlohy, ako je klasifikácia alebo detekcia objektov.
VN DetectTextRectanglesRequest
VN DetectTextRectanglesRequest je požiadavka analýza obrazu, ktorý vyhľadáva oblasti viditeľného textu v obraze; funkcia vráti textové znaky ako obdĺžnikový ohraničovací rámček s pôvodom a veľkosťou.
Ak ste zvyknutí na používanie swiftu a už nejaký čas programujete, pravdepodobne sa pýtate, na čo slúži Vision, keď sú k dispozícii ďalšie funkcie ako image a AVFoundation. No, Vision je presnejší a priamočiarejší. Táto funkcia je dostupná aj na rôznych platformách. Používanie Vision však môže vyžadovať viac výpočtového výkonu a času spracovania.
Ak chcete použiť Vision na detekciu textu, budete potrebovať Xcode 9 a zariadenie so systémom iOS 11.
Vytvorenie fotoaparátu pomocou Avcapture
Najprv musíte vytvoriť fotoaparát s AVCapture ; je to inicializáciou jedného objektu AVcapturesession na vykonanie zachytávania v reálnom čase alebo offline. Potom vykonajte reláciu s pripojením zariadenia.
Ak chcete ušetriť čas pri vytváraní používateľského rozhrania vašej aplikácie, zvážte vytvorenie počiatočného projektu, ktorý vám poskytne čas sústrediť sa na učenie sa rámca vízie.
Otvorte svoj štartovací projekt. Všetky zobrazenia v storyboarde by mali byť pripravené a nastavené pre vás.
Na ViewController.swift vyhľadajte časť kódu s funkciami a výstupmi.
V zásuvke ImageView deklarujte reláciu pre AVcapturesession – používa sa vždy, keď chcete vykonať akcie na základe živého prenosu.
Nastavte AVcapturesession a AVmediatype na video, pretože budete snímať kamerou, aby bolo možné nepretržite bežať
Definujte výstupné a vstupné zariadenie
Vstupom je to, čo kamera uvidí, a výstupom je video v nastavenom formáte typu KCVPixelFormatType_32GRA.
Nakoniec pridajte do imageView podvrstvu, ktorá obsahuje videá, a spustite reláciu. Funkcia je známa ako inViewdidload. Musíte tiež nastaviť rámec vrstvy.
Zavolajte funkciu v metóde viewWillAppear .
Keďže hranice ešte nie sú dokončené, prepíšte metódu viewDidLayoutSubviews ( ), aby ste aktualizovali viazané vrstvy.
Po vydaní systému iOS 10 je potrebný ďalší záznam v Info.plist, čo poskytuje dôvod na používanie fotoaparátu. Mali by ste tiež nastaviť Popis používania súkromnej kamery.
Detekcia textu; Ako funguje rámec vízie
Existujú tri kroky na implementáciu Vision do aplikácie.
Obslužné nástroje – toto je, keď chcete, aby framework niečo urobil po zavolaní požiadavky.
Pozorovania – to je to, čo chcete urobiť s údajmi, ktoré ste poskytli, počnúc jednou žiadosťou
Požiadavky – vtedy požiadate o rámec Detect
V ideálnom prípade vytvoríte jednu textovú požiadavku ako VNdetecttextrectanglesrequest . Toto je druh požiadavky VN, ktorá ohraničuje text. Keď framework dokončí aplikáciu, pristúpite k volaniu funkcie Dettexthandler . Budete tiež chcieť vedieť presný rámec, ktorý bol rozpoznaný, nastavte ho na Reportcharacterboxes = True.
Potom definujte pozorovania, ktoré obsahujú všetky výsledky požiadavky VNdetecttextrectanglesrequest , nezabudnite pridať Vision do výstupnej kamery. Keďže Vision odhaľuje API na vysokej úrovni, práca s ním je bezpečná.
Kontroly funkcie v prípade, že Cmsamplebuffer existuje a putout Avcaptureoutput . Potom by ste mali pristúpiť k vytvoreniu jednej premennej Requestoptions ako 1 Dictionary Type VNimageoption . Možnosť VNmage je typ štruktúry, ktorá obsahuje vlastnosti a údaje z kamery. Potom by ste mali vytvoriť VNimagerequesthandler a vykonať textovú požiadavku.
Nakreslenie okrajov okolo zisteného textu
Môžete začať tak, že rámček nakreslíte dve políčka, jedno pre každé písmeno, ktoré zistí, a druhé pre každé slovo. Tabuľky sú kombináciou všetkých políčok, ktoré vaša požiadavka nájde.
- Definujte body v zobrazení, ktoré vám pomôžu umiestniť polia.
- Potom vytvorte CALaye r; použite VNrectangleobservation na definovanie vašich obmedzení, čím sa zjednoduší proces načrtnutia rámčeka.
Teraz máte pripravené všetky funkcie.
Ak chcete spojiť svoje body, začnite tým, že váš kód bude spustený asynchrónne. Potom by ste mali skontrolovať, či vo vašich výsledkoch z vášho VNTextObservation existuje oblasť .
Teraz môžete zavolať svoju funkciu, ktorá nakreslí rámček v oblasti. Skontrolujte, či sa v regióne nachádzajú polia so znakmi, a potom zavolajte do služby, ktorá zaškrtne každé písmeno.
Potom vytvorte premennú RequestOptions. Teraz môžete vytvoriť objekt VNImageRequestHandler a vykonať textovú požiadavku, ktorú ste vytvorili.
Posledným krokom je spustenie kódu vízie v priamom prenose. Budete musieť vziať video výstup a previesť ho na Cmsamplebuffer.
Ďalšie tipy
Vždy sa snažte orezať obrázok a spracovať iba časť, ktorú potrebujete. Tým sa zníži čas spracovania a nároky na pamäť
Zapnite opravu jazyka pri práci s nečíselnými znakmi a potom ju vypnite pri práci s číselným znakom
Zahrňte overenie rozpoznaných číselných reťazcov, aby ste potvrdili presnosť a eliminovali zobrazovanie falošnej hodnoty používateľovi.
Ovládač kamery na dokumenty je najlepším spoločníkom na rozpoznávanie textu, pretože kvalita obrazu hrá pri rozpoznávaní textu významnú úlohu.
Zvážte nastavenie minimálnej výšky textu na zvýšenie výkonu.
S Vision máte všetko, čo potrebujete na rozpoznávanie textu. Keďže sa Vision ľahko používa a implementácia trvá krátky čas, jeho používanie je takmer ekvivalentné hraniu s Legom. Skúste svoju aplikáciu otestovať na rôznych objektoch, fontoch, osvetlení a veľkostiach. Zapôsobiť na seba môžete aj kombináciou Vision s Core ML.