"OCR clasic vs. OCR cu deep learning pe stilourile de citit B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 și Y6: acuratețe, latență, memorie și analiza compromisurilor OEM.

Publicat la: apr. 12, 2024 - 97 Vizualizări

Motor OCR al stiloului de citit vs. OCR cu deep learning: pipeline clasic, CNN și compromisurile Transformer

Public țintă: Acest articol se adresează inginerilor ML, responsabililor de firmware și cumpărătorilor OEM care evaluează ce arhitectură OCR să integreze în produsele de citire B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 și Y6. Presupunem că ați citit cel puțin o lucrare de tip benchmark OCR, că înțelegeți Tesseract și CRNN și că doriți cifre concrete provenite dintr-o implementare de creion de citit în producție, nu dintr-o demonstrație de laborator.

OCR-ul pentru creioanele de citit este un subset restrâns al problemei OCR generale. Textul este întotdeauna tipărit (nu scris de mână), întotdeauna în alfabet latin sau CJK în construcțiile noastre de referință, întotdeauna pe un tip de hârtie cunoscut și întotdeauna capturat la o distanță de lucru fixă între 0,5 mm și 1,2 mm cu un obiectiv cu focalizare fixă. Aceste constrângeri ne permit să depășim un motor OCR generalist la capitolul latență cu un factor de 4x până la 10x, menținând sau chiar depășind acuratețea acestuia. Acest articol parcurge cele trei generații de OCR pe care le-am livrat, cifrele de acuratețe și latență pentru fiecare model și cum să specificați OCR într-un contract OEM.

1. Trei generații de OCR în creioanele de citit

Piața creioanelor de citit a trecut prin trei arhitecturi OCR de la 2015:

  • Generația 1 (înainte de 2020): pipeline clasic de tip Tesseract, cu binarizare, analiză a componentelor conectate și potrivire pe șabloane. Utilizat în creioanele vechi. Modelele noastre actuale B1, B2 și P2 nu folosesc Tesseract; folosesc motorul nostru proprietar G1, care este similar ca filosofie.
  • Generația 2 (2020 – 2024): CRNN (CNN + LSTM bidirecțional + CTC). Motorul nostru G2 este livrat pe F8, K7, KF1, Q6 și Y6.
  • Generația 3 (2024 – prezent): un pipeline hibrid cu un extractor ușor de trăsături CNN și un mic encoder transformer pentru modelarea secvențelor. Motorul nostru G3 este livrat pe L5, Q8 și T2.

Fiecare generație reprezintă un compromis diferit între acuratețe, latență, dimensiunea modelului și cerințele CPU ale gazdei. Alegerea corectă depinde de modelul de creion de citit vizat și de tipul de text pe care utilizatorul îl scanează.

2. Motorul G1: pipeline clasic pe B1, B2 și P2

Motorul G1 de pe B1, B2 și P2 este un pipeline clasic în 5 etape:

  1. Binarizare: metoda Otsu aplicată rezultatului ISP.
  2. Analiza componentelor conectate: extrage formele candidate de caractere.
  3. Segmentarea caracterelor: desparte formele la limitele ligaturilor folosind un model euristic al grosimii trasului.
  4. Extracția trăsăturilor: histogramă direcțională cu 64 de intervale pentru fiecare caracter.
  5. Clasificare: SVM liniar unu-la-toate cu 96 de clase, câte un model pentru fiecare script acceptat.

Dimensiunea totală a modelului este 1,4 MB pentru Latin (96 de caractere × 14 KB per clasă), 2,8 MB pentru Latin + extins, 3,5 MB pentru CJK de bază (3.500 de caractere). Modelul P2 este livrat doar cu Latin, la 1,4 MB. Modelele B1 și B2 sunt livrate doar cu Latin, la 1,4 MB.

Pentru un cuvânt de 12 caractere scanat dintr-o carte pentru copii, motorul G1 pe P2 rulează în 65 ms total: 8 ms binarizare, 14 ms componente conectate, 12 ms segmentare, 24 ms clasificare, 7 ms căutare în dicționar. Latența end-to-end de la atingerea hârtiei până la primul sunet este între 95 ms și 120 ms.

Acuratețea la nivel de caracter a G1 pe subsetul ICDAR 2015 pentru creioane de citit (un benchmark de 1.200 de imagini pe care l-am curatoriat din eșantioane publice și private):

  • Text tipărit curat: 97,6%.
  • Text pe fundal colorat: 89,4%.
  • Text pe hârtie lucioasă: 91,2%.
  • Fonturi mici (sub 8 pt): 78,3%.
  • Scripturi mixte pe aceeași linie: 72,1%.

Cazurile cu fonturi mici și scripturi mixte sunt punctele slabe. Pentru o carte de vocabular destinată copiilor de 5–7 ani, textul tipărit este de obicei între 16 pt și 24 pt și curat, deci acuratețea G1 este acceptabilă. Pentru un manual școlar destinat elevilor mai mari, cazul fonturilor mici trage acuratețea G1 sub 80%, motiv pentru care nu recomandăm B1, B2 sau P2 pentru acest scenariu.

3. Motorul G2: CRNN pe F8, K7, KF1, Q6 și Y6

Motorul G2 folosește un CNN cu 7 straturi urmat de un LSTM bidirecțional cu 2 straturi și un decodor CTC. Arhitectura este CRNN standard din lucrarea Shi et al. din 2015, cu două modificări: (1) folosim convoluții separabile pe adâncime pentru a reduce numărul de parametri cu un factor de 4x și (2) înlocuim batch norm cu group norm pentru o stabilitate mai bună pe dispozitiv.

Dimensiunea modelului este:

  • Latin: 4,6 MB (float32), 1,4 MB (int8).
  • Latin + extins: 9,2 MB (float32), 2,7 MB (int8).
  • CJK de bază: 18,4 MB (float32), 5,4 MB (int8).

Pe K7, KF1, Q6 și Y6 modelul int8 rulează pe procesorul Cortex-A53 în 38 ms per cuvânt de 12 caractere. Modelul F8 este livrat doar în float32 deoarece MCU-ul gazdă nu are accelerare int8; latența pe F8 este de 64 ms.

Acuratețea la nivel de caracter a G2 pe același subset ICDAR 2015 pentru creioane de citit:

  • Text tipărit curat: 98,7%.
  • Text pe fundal colorat: 95,2%.
  • Text pe hârtie lucioasă: 96,0%.
  • Fonturi mici (sub 8 pt): 92,4%.
  • Scripturi mixte pe aceeași linie: 88,9%.

G2 reduce substanțial diferența față de G1 la fonturile mici și la scripturile mixte. Cifra de 92,4% pentru fonturile mici este acceptabilă pentru utilizarea pe manuale școlare. Cifra de 88,9% pentru scripturi mixte este acceptabilă pentru dicționarele bilingve în care două scripturi apar pe aceeași linie.

4. Motorul G3: CNN hibrid + Transformer pe L5, Q8 și T2

Motorul G3 este unul hibrid. Front-end-ul CNN extrage o secvență de trăsături pe 64 de pași, cu 128 de canale per pas. Un encoder transformer cu 4 straturi, 4 capete de atenție și 256 de unități ascunse modelează secvența. Decodorul CTC stă deasupra, la fel ca la G2.

Dimensiunea modelului:

  • Latin: 7,8 MB (float32), 2,3 MB (int8).
  • Latin + extins: 15,6 MB (float32), 4,6 MB (int8).
  • CJK de bază: 31,2 MB (float32), 9,1 MB (int8).

Pe L5 modelul int8 rulează pe CPU în 32 ms per cuvânt de 12 caractere. Pe Q8 și T2 modelul int8 rulează pe NPU în 18 ms, respectiv 11 ms.

Acuratețea la nivel de caracter a G3 pe subsetul ICDAR 2015 pentru creioane de citit:

  • Text tipărit curat: 99,2%.
  • Text pe fundal colorat: 97,4%.
  • Text pe hârtie lucioasă: 97,8%.
  • Fonturi mici (sub 8 pt): 95,9%.
  • Scripturi mixte pe aceeași linie: 94,6%.

G3 este prima generație care depășește 95% la toate cele 5 categorii. Mecanismul de atenție al transformer-ului ajută la dezambiguizarea liniilor cu scripturi mixte, acolo unde LSTM-ul din G2 întâmpină dificultăți.


OCR Engine Comparison — Accuracy vs Latency on Latin 12-Char Word

5. Latență și memorie: comparație între cele trei generații

Latența end-to-end de la atingerea hârtiei până la primul audio decodat, pentru un cuvânt de 12 caractere:

Generația Dimensiunea modelului (int8) Gazdă Latență RAM
G1 (B1/B2/P2) 1,4 MB Cortex-M4 95-120 ms 2,1 MB
G2 (F8) 4,6 MB (float32) Cortex-A7 64 ms 6,8 MB
G2 (K7/KF1/Q6/Y6) 1,4 MB (int8) Cortex-A53 38 ms 4,2 MB
G3 (L5) 2,3 MB Cortex-A53 CPU 32 ms 5,1 MB
G3 (Q8) 2,3 MB 0,5 TOPS NPU 18 ms 5,1 MB
G3 (T2) 2,3 MB 1,2 TOPS NPU 11 ms 5,1 MB

G3 pe T2 este cel mai rapid, la 11 ms, dar costă 14,50 USD per unitate. G1 pe B1 este cel mai ieftin, la 3,80 USD per unitate, dar cu o latență de 120 ms. Alegerea corectă depinde de cazul dvs. de utilizare, nu de ce motor este "mai bun".

6. De ce să nu folosim Tesseract?

Cumpărătorii întreabă uneori de ce nu livrăm Tesseract. Trei motive:

  1. Tesseract este conceput pentru documente scanate, nu pentru imagini video de la vârful stiloului. Binarizarea și analiza layout-ului sunt optimizate pentru scanări de pagină la 300 DPI, nu pentru fluxuri de 60 fps de la vârful stiloului. Rularea Tesseract pe F8 durează 320 ms per cuvânt, de 8 ori mai lent decât G2.
  2. Modelul LSTM al Tesseract ocupă 33 MB pentru latină. Modelul G2 ocupă 1,4 MB int8. Pe bugetul de flash de 8 MB al K7, Tesseract nu încape.
  3. Acuratețea Tesseract pe subsetul ICDAR pentru pixuri de citit este de 95,1% pe text curat și 86,3% pe fonturi mici. G2 atinge 98,7% și 92,4%. Tesseract este inferior la toate metricile relevante pentru un pix de citit.

Dacă cerința dvs. OEM este "să ruleze Tesseract", specificați produsul greșit. Gama de 11 modele există deoarece un singur motor nu se potrivește tuturor cazurilor de utilizare.

7. De ce să nu rulăm întotdeauna cel mai mare model?

O întrebare firească: dacă G3 este mai precis, de ce să nu-l punem pe fiecare model? Răspunsul îl reprezintă bugetul de CPU și flash al gazdei.

  • B1 și B2 sunt livrate cu un MCU din clasa Cortex-M4 la 80 MHz. G3 nu ar rula la nicio latență acceptabilă.
  • P2 este livrat cu 4 MB flash. G3 latin int8 ocupă 2,3 MB plus 0,8 MB dicționar și 0,4 MB firmware, în total 3,5 MB. Odată cu activele audio, flash-ul este plin.
  • F8 este livrat cu un Cortex-A7 la 800 MHz. G3 int8 ar rula la 180 ms, peste pragul de percepție umană.

Prin urmare, G3 este limitat la L5, Q8 și T2, unde SoC-ul gazdă are atât rezervă de CPU, cât și rezervă de flash. Celelalte 8 modele folosesc G1 sau G2.

8. Impactul asupra pipeline-ului audio end-to-end

OCR este o etapă într-un pipeline în 5 etape: ISP → detectare text (TC-128) → segmentare → OCR → căutare în dicționar → TTS → ieșire audio. Latența OCR nu este, de obicei, blocajul. Umplerea bufferului audio, sinteza TTS și pornirea DAC-ului adaugă împreună între 30 ms și 60 ms. Așadar, un motor OCR care durează 38 ms față de 32 ms nu schimbă experiența utilizatorului. Ceea ce contează mai mult este latența de coadă: un vârf de percentilă 99 de la 38 ms la 280 ms face ca audio să pară sacadată.

Măsurăm latența de coadă pe parcursul a 10.000 de recunoașteri consecutive. G3 pe L5 are o latență percentilă 99 de 64 ms (față de 32 ms median). G3 pe T2 are o percentilă 99 de 22 ms (față de 11 ms median). Coada este determinată de ratele de eroare ale memoriei cache DRAM și de contenciunea DMA cu motorul audio; T2 dispune de o lățime de bandă RAM mai mare, astfel încât coada sa este mai strânsă.

9. Date de antrenament și îmbunătățire continuă

Modelul G3 este antrenat pe un corpus de 6,2 milioane de rânduri scanate, colectate de la 38.000 de utilizatori de pixuri de citit din 47 de țări (cumulativ din 2023). Rândurile acoperă 14 limbi, 12 tipuri de hârtie și 9 familii de fonturi. Aplicăm augmentări cu distorsiuni sintetice: perspectivă, blur, textura hârtiei, fundal tipărit, artefacte de compresie de tip JPEG.

Modelul este reantrenat trimestrial. Fiecare versiune este validată printr-un test de regresie pe subsetul ICDAR 2015 reținut și pe un eșantion de producție de 200.000 de rânduri extras din trimestrul anterior. O versiune este lansată doar dacă îmbunătățește acuratețea cu ≥ 0,2 puncte procentuale fără a regresă niciuna dintre cele 14 limbi acceptate.

Sfat pentru cumpărători: Întrebați furnizorul cât de des este reantrenat modelul OCR și cum arată corpusul pentru testele de regresie. Un vânzător care reantrenează "când avem timp" livrează un model învechit. Cadența noastră trimestrială este documentată în notele de lansare ale firmware-ului.

10. Specificarea OCR într-un contract OEM

O specificație OCR defensibilă include:

  • Generația motorului și dimensiunea fișierului model.
  • Acuratețea la nivel de caracter pe un set de test numit (livrăm subsetul ICDAR 2015 pentru pixuri de citit la cerere).
  • Latența mediană și de percentilă 99 pe un cuvânt de 12 caractere.
  • Bugetul de memorie (flash + RAM).
  • Scripturile acceptate.
  • Cadența de reantrenare și metodologia testelor de regresie.
  • Raport de calibrare per model pe linia de producție.

Pentru mai multe detalii despre cum este detectat textul înainte de OCR, consultați Detectarea și segmentarea textului la pixul de citit. Pentru modul în care procesorul de semnal de imagine alimentează motorul OCR, consultați ISP-ul camerei pixului de citit și procesorul de semnal de imagine. Pentru cum se mapează ieșirea YUV la intrarea OCR, consultați Pix de citit: YUV vs RGB și spațiul de culoare. Pentru motorul de recunoaștere a scrisului de mână, consultați Motorul de recunoaștere a scrisului de mână al pixului de citit. Pentru a solicita un raport de benchmark care să compare conținutul dumneavoastră cu subsetul nostru ICDAR, consultați /request-a-quote.

OCR Engine Generations Compared

Lecturi conexe

Solicitați o ofertă — obțineți un răspuns rapid din fabrică

Lectură suplimentară: OCR pentru scrieri de la dreapta la stânga și verticale

OCR-ul pentru arabă, ebraică și persană necesită gestionarea de la dreapta la stânga la nivelul modelului lingvistic, pe care motoarele G2 și G3 le acceptă nativ. Motorul OCR furnizează secvența de caractere de la stânga la dreapta, în ordinea vizuală din imagine, iar modelul lingvistic inversează și reformează secvența în ordinea logică corectă. Acuratețea pe un set de test în arabă de 50.000 de linii este de 94,8% pe G3 T2 și de 91,6% pe G2 K7. Acuratețea mai redusă față de latină este determinată de formele conectate ale literelor (inițială, mediană, finală, izolată), care cvadruplează numărul efectiv de clase.

Pentru scrierile verticale (chineză tradițională, japoneză, mongolă), livrăm un model separat de text vertical cu casete de ancorare rotite. Arhitectura este identică cu G3, dar setul de antrenament utilizează decupări pe linii verticale. Modelul este de 1,2 ori mai mare decât modelul orizontal, ajungând la 2,8 MB int8. Nu livrăm text vertical pe L5 deoarece CPU-ul gazdă nu poate atinge ținta de latență de 35 ms; Q8 și T2 gestionează textul vertical la 22 ms, respectiv 14 ms.

Paginile cu orientare mixtă (un manual cu un paragraf orizontal și o bară laterală verticală) sunt gestionate prin rularea modelului orizontal pe întreaga pagină, apoi rularea modelului vertical doar pe regiunile în care modelul orizontal a returnat o încredere scăzută. Această abordare selectivă menține latența medie la 19 ms pe Q8, față de 36 ms dacă ambele modele rulează pe întreaga pagină.

Frequently Asked Questions

Iece modele de pixuri de citit utilizează OCR cu învățare profundă?
Modelele F8, K7, KF1, Q6 și Y6 utilizează un motor OCR de învățare profundă bazat pe CRNN, numit G2. Modelele L5, Q8 și T2 utilizează un motor CNN plus transformer, numit G3. Modelele B1, B2 și P2 utilizează un pipeline clasic, numit G1, deoarece MCU-urile din clasa Cortex-M4 nu pot rula o rețea neuronală cu o latență acceptabilă. G3 este cel mai precis, cu 99,2% pe text curat; G2 atinge 98,7%; G1 atinge 97,6%.
Care este cea mai mică dimensiune de font pe care o poate recunoaște OCR-ul pixului de citit?
Pe motorul G3 de pe T2, fonturile de până la 6 pt cu înălțimea majusculelor de 0,18 mm sunt recunoscute cu o acuratețe a caracterelor de 91,4%. Pe G2 de pe K7, același text de 6 pt scade la o acuratețe de 86,2%. Pe G1 de pe B1, textul de 6 pt are o acuratețe de 71,8%. Pentru manualele școlare cu text de corp de 8 pt, recomandăm doar modelele L5, Q8 și T2 cu motorul G3.
Cât de des este antrenat din nou modelul OCR?
Modelele G3 și G2 sunt reantrenate trimestrial pe un corpus de 6,2 milioane de rânduri, provenind din 47 de țări. Fiecare versiune trebuie să îmbunătățească acuratețea generală cu cel puțin 0,2 puncte procentuale pe subsetul ICDAR 2015 pentru pixuri de citit, păstrat pentru evaluare, și nu trebuie să regreseze niciuna dintre cele 14 limbi acceptate. Cadența reantrenării și metodologia de testare a regresiei sunt documentate în notele fiecărei ediții de firmware.
De ce diferă dimensiunea modelului OCR între modele?
Modelul int8 G3 Latin ocupă 2,3 MB pe disc, modelul int8 G2 Latin ocupă 1,4 MB, iar pipeline-ul int8 G1 Latin ocupă 1,4 MB. Bugetul de memorie flash al fiecărui model constrânge seturile de caractere acceptate. B1, B2 și P2 sunt livrate doar cu Latin. K7, KF1, Q6 și Y6 sunt livrate cu Latin plus 6 seturi de caractere Latin extinse. L5, Q8 și T2 sunt livrate cu Latin plus CJK de bază plus Arabă plus Chirilică.
Poate fi antrenat un model OCR personalizat pentru un dicționar OEM?
Da. Acceptăm corpusuri ale clientilor de la doar 50.000 de rânduri scanate și ajustăm fin modelul G2 sau G3 în 8h, pe un singur GPU A100. Modelul ajustat este livrat ca binar semnat și înlocuiește modelul general din firmware. Comanda minimă OEM este de 5.000 de unități; SLA-ul de antrenare este de 15 zile lucrătoare, inclusiv 3 zile de revizuire QA și aprobare din partea clientului.
Coșul tău
Experiența ta pe acest site va fi îmbunătățită prin acceptarea cookie-urilor. Politica de Cookie-uri
Chat on WhatsApp