Kohderyhmä: Tämä artikkeli on suunnattu ML-insinööreille, laiteohjelmiston vastaaville ja OEM-ostajille, jotka arvioivat, mitä OCR-arkkitehtuuria kannattaa tuoda B1-, B2-, F8-, K7-, KF1-, L5-, P2-, Q6-, Q8-, T2- ja Y6-lukukyniin. Oletamme, että olet lukenut ainakin yhden OCR-vertailuartikkelin, ymmärrät Tesseractia ja CRNN:ää, ja haluat konkreettisia lukuja tuotantokäytössä olevasta lukukynästä etkä laboratoriodemoa.
Lukukynän OCR on yleisen OCR-ongelman rajoitettu osajoukko. Teksti on aina painettua (ei käsinkirjoitettua), aina latinaa tai CJK:ta referenssiversioissamme, aina tunnetulla paperityypillä ja aina kuvattuna kiinteällä 0,5–1,2 mm:n työskentelyetäisyydellä kiinteän tarkennuksen linssillä. Näiden rajoitteiden ansiosta päihitämme yleiskäyttöisen OCR-moottorin latenssissa 4–10-kertaisesti säilyttäen tai ylittäen sen tarkkuuden. Tässä artikkelissa käydään läpi kolme toimittamaamme OCR-sukupolvea, kunkin mallin tarkkuus- ja latenssiarvot sekä se, miten OCR määritellään OEM-sopimuksessa.
1. Kolme OCR-sukupolvea lukukynissä
Lukukynämarkkinat ovat vuodesta 2015 lähtien kiertäneet kolmen OCR-arkkitehtuurin läpi:
- Sukupolvi 1 (ennen vuotta 2020): klassinen Tesseract-tyylinen putki, jossa binarisointi, yhdistettyjen komponenttien analyysi ja mallipohjainen tunnistus. Käytössä vanhoissa kynissä. Nykyiset B1, B2 ja P2 eivät toimita Tessearctia; ne toimittavat oman G1-moottorimme, joka on hengeltään samankaltainen.
- Sukupolvi 2 (2020–2024): CRNN (CNN + kaksisuuntainen LSTM + CTC). G2-moottorimme toimitetaan F8-, K7-, KF1-, Q6- ja Y6-malleissa.
- Sukupolvi 3 (2024–nykyhetki): hybridiputki, jossa kevyt CNN-piirteenirrotin ja pieni transformer-enkooderi sekvenssimallinnukseen. G3-moottorimme toimitetaan L5-, Q8- ja T2-malleissa.
Kukin sukupolvi edustaa eri kompromissia tarkkuuden, latenssin, mallin koon ja isäntä-CPU-vaatimusten välillä. Oikea valinta riippuu siitä, mihin lukukynämalliin kohdistat, ja millaista tekstiä käyttäjä skannaa.
2. G1-moottori: klassinen putki malleissa B1, B2 ja P2
G1-moottori malleissa B1, B2 ja P2 on 5-vaiheinen klassinen putki:
- Binarisointi: Otsun menetelmä ISP-lähdölle.
- Yhdistettyjen komponenttien analyysi: erottaa ehdokkaat olevat merkkialueet.
- Merkkien segmentointi: jakaa alueet ligatuurirajoilla heuristisen viivanleveysmallin avulla.
- Piirteiden irrotus: 64-bin suunta-piirrehistogrammi merkkiä kohden.
- Luokittelu: 96-luokan one-vs-all lineaarinen SVM, yksi malli tuettua kirjoitusta kohden.
Mallin kokonaiskoko on 1,4 MB latinaksi (96 merkkiä x 14 KB/luokka), 2,8 MB latinalaisille laajennetuille merkeille, 3,5 MB CJK-perusmerkeille (3 500 merkkiä). P2 toimitetaan vain latinaversiona 1,4 MB kokoisena. B1 ja B2 toimitetaan vain latinaversiona 1,4 MB kokoisena.
12-merkkisessä sanassa lastenkirjasta skannattuna G1-moottori P2:lla vie yhteensä 65 ms: 8 ms binarisointi, 14 ms yhdistettyjen komponenttien analyysi, 12 ms segmentointi, 24 ms luokittelu, 7 ms sanakirjahaku. Päästä päähän -latenssi kynän kosketuksesta ensimmäiseen ääneen on 95–120 ms.
G1-merkkikohtainen tarkkuus ICDAR 2015 -lukukynäosajoukossa (1 200 kuvan vertailuaineisto, jonka olemme kuratoineet julkisista ja yksityisistä näytteistä):
- Puhdas painoteksti: 97,6 %.
- Teksti sävytetyllä taustalla: 89,4 %.
- Teksti kiiltävällä paperilla: 91,2 %.
- Pienet kirjasinkoot (alle 8 pt): 78,3 %.
- Sekakirjoitukset samalla rivillä: 72,1 %.
Pienet kirjasinkoot ja sekakirjoitustapaukset ovat heikkoja kohtia. 5–7-vuotiaille suunnatussa sanastokirjassa painoteksti on yleensä 16–24 pt ja puhdasta, joten G1-tarkkuus on hyväksyttävä. Vanhemmille oppilaille suunnatussa oppikirjassa pienten kirjasinkokojen tapaus vetää G1-tarkkuuden alle 80 %:iin, minkä vuoksi emme suosittele B1-, B2- tai P2-malleja siihen käyttöön.
3. G2-moottori: CRNN malleissa F8, K7, KF1, Q6 ja Y6
G2-moottori käyttää 7-kerroksista CNN:ää, jonka jälkeen tulee 2-kerroksinen kaksisuuntainen LSTM ja CTC-dekooderi. Arkkitehtuuri on standardi CRNN Shi et al. 2015 -artikkelista, kahdella muutoksella: (1) käytämme depthwise-separable -konvoluutioita pienentääksemme parametrien määrän neljäsosaan, ja (2) korvaamme batch normin group normilla paremman laitteessa tapahtuvan vakauden saavuttamiseksi.
Mallin koko:
- Latina: 4,6 MB (float32), 1,4 MB (int8).
- Latina + laajennettu: 9,2 MB (float32), 2,7 MB (int8).
- CJK-perus: 18,4 MB (float32), 5,4 MB (int8).
Malleissa K7, KF1, Q6 ja Y6 int8-malli toimii Cortex-A53-CPU:lla 38 ms:ssa 12-merkkistä sanaa kohden. F8 toimitetaan vain float32-versiona, koska sen isäntä-MCU:sta puuttuu int8-kiihdytys; F8:n latenssi on 64 ms.
G2-merkkikohtainen tarkkuus samassa ICDAR 2015 -lukukynäosajoukossa:
- Puhdas painoteksti: 98,7 %.
- Teksti sävytetyllä taustalla: 95,2 %.
- Teksti kiiltävällä paperilla: 96,0 %.
- Pienet kirjasinkoot (alle 8 pt): 92,4 %.
- Sekakirjoitukset samalla rivillä: 88,9 %.
G2 kuroo kiinni eron pienissä kirjasinkokoluokissa ja sekakirjoituksissa huomattavasti verrattuna G1:een. 92,4 % pienillä kirjasinkokilla on hyväksyttävä oppikirjakäyttöön. 88,9 % sekakirjoituksissa on hyväksyttävä kaksikielisille sanakirjoille, joissa kaksi kirjoitusta esiintyy samalla rivillä.
4. G3-moottori: hybridi CNN + Transformer malleissa L5, Q8 ja T2
G3-moottori on hybridi. CNN-etupää irrottaa 64-askeleen piirresarjan 128 kanavalla askelta kohden. 4-kerroksinen transformer-enkooderi, jossa on 4 attention headia ja 256 piilotettua yksikköä, mallintaa sekvenssiä. CTC-dekooderi on päällä, kuten G2:ssa.
Mallin koko:
- Latina: 7,8 MB (float32), 2,3 MB (int8).
- Latina + laajennettu: 15,6 MB (float32), 4,6 MB (int8).
- CJK-perus: 31,2 MB (float32), 9,1 MB (int8).
L5:ssä int8-malli toimii CPU:lla 32 ms:ssa 12-merkkistä sanaa kohden. Q8:ssa ja T2:ssa int8-malli toimii NPU:lla 18 ms ja 11 ms vastaavasti.
G3-merkkikohtainen tarkkuus ICDAR 2015 -lukukynäosajoukossa:
- Puhdas painoteksti: 99,2 %.
- Teksti sävytetyllä taustalla: 97,4 %.
- Teksti kiiltävällä paperilla: 97,8 %.
- Pienet kirjasinkoot (alle 8 pt): 95,9 %.
- Sekakirjoitukset samalla rivillä: 94,6 %.
G3 on ensimmäinen sukupolvi, joka ylittää 95 % kaikissa 5 kategoriassa. Transformerin attention auttaa erottamaan sekakirjoitusrivit, joissa G2:n LSTM kamppailee.
5. Latenssi ja muisti: kaikkien kolmen sukupolven vertailu
Päästä päähän -latenssi kynän kosketuksesta ensimmäiseen dekoodattuun ääneen 12-merkkisessä sanassa:
| Sukupolvi | Mallin koko (int8) | Isäntä | Latenssi | RAM |
|---|---|---|---|---|
| G1 (B1/B2/P2) | 1,4 Mt | Cortex-M4 | 95–120 ms | 2,1 Mt |
| G2 (F8) | 4,6 Mt (float32) | Cortex-A7 | 64 ms | 6,8 Mt |
| G2 (K7/KF1/Q6/Y6) | 1,4 Mt (int8) | Cortex-A53 | 38 ms | 4,2 Mt |
| G3 (L5) | 2,3 Mt | Cortex-A53 CPU | 32 ms | 5,1 Mt |
| G3 (Q8) | 2,3 Mt | 0,5 TOPS NPU | 18 ms | 5,1 Mt |
| G3 (T2) | 2,3 Mt | 1,2 TOPS NPU | 11 ms | 5,1 Mt |
G3 T2:lla on nopein 11 ms, mutta sen yksikköhinta on 14,50 dollaria. G1 B1:llä on halvin 3,80 dollaria yksiköltä, mutta viive on 120 ms. Oikea valinta riippuu käyttökohteestasi, ei siitä, mikä moottori on ”parempi”.
6. Miksi ei ajeta Tesseractia?
Ostajat kysyvät toisinaan, miksi emme toimita Tesseractia. Syitä on kolme:
- Tesseract on suunniteltu skannatuille asiakirjoille, ei videotahtisille kynänkärjen kuville. Sen binärisointi ja asetteluanalyysi on viritetty 300 DPI:n sivuskannauksille, ei 60 fps:n kynänkärkivirroille. Tesseractin ajaminen F8:lla vie 320 ms sanaa kohden, mikä on 8× hitaampi kuin G2.
- Tesseractin LSTM-malli on 33 MB latinalaisille kirjaimille. G2-malli on 1,4 MB int8-muodossa. K7:n 8 MB flash-muistilla Tesseract ei mahdu.
- Tesseractin tarkkuus ICDAR-lukukynäosajoukossa on 95,1 % puhtaalla tekstillä ja 86,3 % pienillä fonteilla. G2:lla vastaavat luvut ovat 98,7 % ja 92,4 %. Tesseract on huonompi joka lukukynälle olennaisella mittarilla.
Jos OEM-vaatimuksesi on ”täytyy käyttää Tesseractia”, määrittelet väärän tuotteen. 11 mallin valikoima on olemassa, koska yksi moottori ei sovi kaikkiin käyttökohteisiin.
7. Miksi ei aina ajeta suurinta mallia?
Luonnollinen kysymys: jos G3 on tarkempi, miksei sitä laiteta jokaiseen malliin? Vastaus on isäntäprosessorin CPU ja flash-muistin tilanne.
- B1 ja B2 toimitetaan Cortex-M4-luokan MCU:lla 80 MHz:n taajuudella. G3 ei toimisi millään hyväksyttävällä viiveellä.
- P2:ssa on 4 MB flash-muistia. G3 Latin int8 on 2,3 MB + 0,8 MB sanasto + 0,4 MB laiteohjelmisto, yhteensä 3,5 MB. Ääniresurssien kanssa flash on täynnä.
- F8 toimitetaan Cortex-A7:llä 800 MHz:n taajuudella. G3 int8 toimisi 180 ms viiveellä, mikä ylittää ihmisen havaintokynnyksen.
G3 on siksi rajattu malleihin L5, Q8 ja T2, joissa isäntäpiirillä on sekä CPU- että flash-resursseja. Muissa kahdeksassa mallissa käytetään G1:tä tai G2:ta.
8. Kokonaisvaltainen ääniputken vaikutus
OCR on yksi vaihe viisivaiheisessa putkessa: ISP → tekstintunnistus (TC-128) → segmentointi → OCR → sanastohaku → TTS → ääni ulos. OCR-viive ei yleensä ole pullonkaula. Äänipuskurin täyttö, TTS-synteesi ja DAC-käynnistys lisäävät yhteensä 30–60 ms. Siksi 38 ms:n ja 32 ms:n ero OCR-moottorissa ei muuta käyttäjäkokemusta. Tärkeämpää on häntäviive: 99. persentiilin piikki 38 ms:stä 280 ms:iin saa äänen kuulostamaan katkonaiselta.
Mittaamme häntäviiveen 10 000 peräkkäisestä tunnistuksesta. G3 L5:llä 99. persentiilin viive on 64 ms (mediaani 32 ms). G3 T2:lla 99. persentiili on 22 ms (mediaani 11 ms). Häntäviiveen aiheuttavat DRAM-välimuistin epäonnistumiset ja DMA:n kilpailu äänimoottorin kanssa; T2:ssa on enemmän RAM-kaistaa, joten sen häntä on tiukempi.
9. Koulutusdata ja jatkuva kehittäminen
G3-malli on koulutettu 6,2 miljoonan skannatun rivin korpuksella, joka on kerätty 38 000 lukukynän käyttäjältä 47 maassa (kumulatiivinen vuodesta 2023). Rivit kattavat 14 kieltä, 12 paperityyppiä ja 9 fonttiperhettä. Augmentoimme synteettisillä vääristymillä: perspektiivivääristymä, sumennus, paperin tekstuuri, painettu tausta, JPEG-tyyppiset pakkausartefaktit.
Malli koulutetaan uudelleen neljännesvuosittain. Jokainen julkaisu tarkistetaan regressiotestillä ICDAR 2015 -osajoukossa sekä 200 000 rivin tuotantootoksessa edelliseltä vuosineljännekseltä. Julkaisu lähetetään vain, jos tarkkuus paranee ≥ 0,2 prosenttiyksikköä ilman, että mikään tuetuista 14 kielestä heikkenee.
Vinkki ostajalle: Kysy toimittajalta, kuinka usein OCR-malli koulutetaan uudelleen ja millainen regressiotestikorpus on. Toimittaja, joka kouluttaa uudelleen ”silloin kun on aikaa”, toimittaa vanhentuneen mallin. Neljännesvuosirytmimme on dokumentoitu laiteohjelmiston julkaisumuistioissa.
10. OCR:n määrittely OEM-sopimuksessa
Puolustettava OCR-määrittely sisältää:
- Moottorisukupolvi ja mallitiedoston koko.
- Merkkitason tarkkuus nimetyllä testijoukolla (toimitamme ICDAR 2015 -lukukynäosajoukon pyynnöstä).
- Mediaani- ja 99. persentiilin viive 12 merkin sanalle.
- Muistibudjetti (flash + RAM).
- Tuetut kirjoitusjärjestelmät.
- Uudelleenkoulutusrytmi ja regressiotestimenetelmä.
- Mallikohtainen kalibrointiraportti tuotantolinjalta.
Lisätietoja tekstin tunnistuksesta ennen OCR:ää löydät artikkelista Lukukynän tekstintunnistus ja segmentointi. Kuvan signaaliprosessorin ja OCR-moottorin yhteistyöstä kerrotaan sivulla Lukukynän kameran ISP ja kuvan signaaliprosessori. YUV-lähdön yhdistämisestä OCR-syötteeseen kerrotaan artikkelissa Lukukynän YUV vs RGB ja väriavaruus. Käsinkirjoituksen tunnistusmoottorista voit lukea sivulta Lukukynän käsinkirjoituksen tunnistusmoottori. Jos haluat pyytää ICDAR-otosta vastaavan vertailuraportin sisällöllenne, tutustu /request-a-quote.
Aiheeseen liittyvää luettavaa
- Lukukynän tekstintunnistus ja segmentointi
- Lukukynän kameran ISP ja kuvan signaaliprosessori
- Lukukynän käsinkirjoituksen tunnistusmoottori
- Lukukynän YUV vs RGB ja väriavaruus
- Lukukynän sanastotiedoston muoto ja versio
- Näin OID-lukukynätekniikka toimii
Lisälukemista: OCR oikealta vasemmalle ja pystysuuntaisille kirjoitustyyleille
Arabian, heprean ja persian kielen OCR vaatii oikealta vasemmalle -käsittelyä kielimallitasolla, minkä G2- ja G3-moottorit tukevat natiivisti. OCR-moottori tuottaa merkkijonon vasemmalta oikealle kuvan visuaalisessa järjestyksessä, ja kielimalli kääntää sekä muotoilee jonon oikeaan loogiseen järjestykseen. Tarkkuus 50 000 rivin arabiankielisellä testijoukolla on 94,8 % G3 T2 -mallilla ja 91,6 % G2 K7 -mallilla. Latinalaiseen kirjaimistoon verrattuna matalampi tarkkuus johtuu yhteenliitetyistä kirjainmuodoista (alku-, keski-, loppu- ja erillismuoto), jotka nelinkertaistavat käytännön luokkien määrän.
Pystysuuntaisille kirjoitustyyleille (perinteinen kiina, japani, mongoli) toimitamme erillisen pystysuuntaisen tekstin mallin, jossa on kierrettyjä ankkurilaatikoita. Arkkitehtuuri on identtinen G3:n kanssa, mutta harjoitusjoukko käyttää pystysuuntaisia tekstirivejä. Malli on 1,2-kertainen vaakasuuntaiseen malliin verrattuna, kooltaan 2,8 MB int8-muodossa. Emme toimita pystysuuntaista tekstinmallia L5:lle, koska isäntä-CPU ei saavuta 35 ms:n latenssitavoitetta; Q8 ja T2 käsittelevät pystysuuntaista tekstiä 22 ms ja 14 ms vastaavasti.
Sekapohjaiset sivut (oppikirja, jossa on yksi vaakasuuntainen kappale ja yksi pystysuuntainen sivupalkki) käsitellään ajamalla vaakasuuntainen malli ensin koko sivulle ja sen jälkeen pystysuuntainen malli vain niille alueille, joilla vaakasuuntainen malli palautti matalan luottamuksen. Tämä valikoiva lähestymistapa pitää keskimääräisen latenssin 19 ms:ssä Q8:lla, kun molempien mallien ajaminen koko sivulle veisi 36 ms.