Målgruppe: Denne artikkelen er for ML-ingeniører, firmware-ansvarlige og OEM-kjøpere som vurderer hvilken OCR-arkitektur de skal sende ut i B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 og Y6 lesepenner. Vi antar at du har lest minst én OCR-benchmarkartikkel, at du forstår Tesseract og CRNN, og at du ønsker konkrete tall fra en produksjonsdeployering av lesepenner heller enn en lab-demo.
Lesepenn-OCR er et avgrenset delsett av det generelle OCR-problemet. Teksten er alltid trykt (ikke håndskrevet), alltid latinsk eller CJK i våre referansebygg, alltid på en kjent papirtype, og alltid tatt på en fast arbeidsavstand på 0,5 mm til 1,2 mm med en fastfokuslinse. Disse begrensningene gjør at vi kan slå en generell OCR-motor på latens med 4x til 10x, samtidig som vi matcher eller overgår nøyaktigheten. Denne artikkelen går gjennom de tre generasjonene av OCR vi har sendt ut, nøyaktighets- og latenstall per modell, og hvordan du spesifiserer OCR i en OEM-kontrakt.
1. Tre generasjoner av OCR i lesepenner
Lesepennmarkedet har syklet gjennom tre OCR-arkitekturer siden 2015:
- Generasjon 1 (før 2020): klassisk Tesseract-lignende pipeline med binarisering, connected-component-analyse og templatematching. Brukt i eldre penner. Våre nåværende B1, B2 og P2 sender ikke ut Tesseract; de sender ut vår proprietære G1-motor som er åndelig sett lik.
- Generasjon 2 (2020 til 2024): CRNN (CNN + toveis LSTM + CTC). Vår G2-motor sendes ut på F8, K7, KF1, Q6 og Y6.
- Generasjon 3 (2024 til nå): en hybrid pipeline med en lettvekts CNN-featureekstraktor og en liten transformer-enkoder for sekvensmodellering. Vår G3-motor sendes ut på L5, Q8 og T2.
Hver generasjon representerer en annen avveining mellom nøyaktighet, latens, modellstørrelse og vertsprosessor-krav. Riktig valg avhenger av hvilken lesepennmodell du sikter mot og hva slags tekst brukeren skanner.
2. G1-motoren: Klassisk pipeline på B1, B2 og P2
G1-motoren på B1, B2 og P2 er en klassisk pipeline i 5 trinn:
- Binarisering: Otsus metode på ISP-utgangen.
- Connected-component-analyse: ekstraherer kandidat-tegnblobber.
- Tegnsegmentering: deler blobber ved ligaturgrenser ved hjelp av en heuristisk strekbreddemodell.
- Featureekstraksjon: 64-bin retningsbestemt feature-histogram per tegn.
- Klassifisering: 96-klasses one-vs-all lineær SVM, én modell per støttet skript.
Den totale modellstørrelsen er 1,4 MB for latin (96 tegn x 14 KB per klasse), 2,8 MB for latin + utvidet, 3,5 MB for CJK-grunnleggende (3 500 tegn). P2 leveres kun med latin på 1,4 MB. B1 og B2 leveres kun med latin på 1,4 MB.
På et 12-tegns ord skannet fra en barnebok kjører G1-motoren på P2 på 65 ms totalt: 8 ms binarisering, 14 ms connected-component, 12 ms segmentering, 24 ms klassifisering, 7 ms ordboksoppslag. Ende-til-ende-latens fra penn-ned til første lyd er 95 ms til 120 ms.
G1 tegnnivå-nøyaktighet på ICDAR 2015 lesepenn-delsettet (en benchmark på 1 200 bilder vi kuraterte fra offentlige + private utvalg):
- Ren trykt tekst: 97,6 %.
- Tekst på farget bakgrunn: 89,4 %.
- Tekst på glanset papir: 91,2 %.
- Små skrifttyper (under 8 pt): 78,3 %.
- Blandede skript i samme linje: 72,1 %.
Små skrifttyper og blandede skriftsystemer er de svake punktene. For en ordbok beregnet på 5–7-åringer er den trykte teksten vanligvis 16 pt til 24 pt og ren, så G1-nøyaktigheten er akseptabel. For en lærebok beregnet på eldre elever trekker tilfellet med liten skrift G1-nøyaktigheten under 80 %, og det er derfor vi ikke anbefaler B1, B2 eller P2 til dette bruksområdet.
3. G2-motoren: CRNN på F8, K7, KF1, Q6 og Y6
G2-motoren bruker en 7-lags CNN etterfulgt av en 2-lags toveis LSTM og en CTC-dekoder. Arkitekturen er standard CRNN fra Shi et al.-artikkelen i 2015, med to modifikasjoner: (1) vi bruker dybdevis-separable konvolusjoner for å redusere parameterantallet med 4x, og (2) vi erstatter batch norm med group norm for bedre på-enhets-stabilitet.
Modellstørrelsen er:
- Latinsk: 4,6 MB (float32), 1,4 MB (int8).
- Latinsk + utvidet: 9,2 MB (float32), 2,7 MB (int8).
- CJK grunnleggende: 18,4 MB (float32), 5,4 MB (int8).
På K7, KF1, Q6 og Y6 kjører int8-modellen på Cortex-A53-CPU ved 38 ms per 12-tegns ord. F8 sender kun float32 fordi verts-MCUen mangler int8-akselerasjon; F8-latensen er 64 ms.
G2 tegnnivå-nøyaktighet på det samme ICDAR 2015 lesepenn-delsettet:
- Ren trykt tekst: 98,7 %.
- Tekst på farget bakgrunn: 95,2 %.
- Tekst på glanset papir: 96,0 %.
- Små skrifttyper (under 8 pt): 92,4 %.
- Blandede skript i samme linje: 88,9 %.
G2 lukker gapet på liten skrift og blandede skript betydelig sammenlignet med G1. De 92,4 % på liten skrift er akseptabelt for lærebokbruk. De 88,9 % på blandede skript er akseptabelt for tospråklige ordbøker der to skript vises på samme linje.
4. G3-motoren: Hybrid CNN + Transformer på L5, Q8 og T2
G3-motoren er en hybrid. CNN-frontenden ekstraherer en feature-sekvens på 64 steg ved 128 kanaler per steg. En 4-lags transformer-enkoder med 4 oppmerksomhetshoder og 256 skjulte enheter modellerer sekvensen. CTC-dekoderen ligger på toppen, lik som i G2.
Modellstørrelse:
- Latinsk: 7,8 MB (float32), 2,3 MB (int8).
- Latinsk + utvidet: 15,6 MB (float32), 4,6 MB (int8).
- CJK grunnleggende: 31,2 MB (float32), 9,1 MB (int8).
På L5 kjører int8-modellen på CPU ved 32 ms per 12-tegns ord. På Q8 og T2 kjører int8-modellen på NPU ved henholdsvis 18 ms og 11 ms.
G3 tegnnivå-nøyaktighet på ICDAR 2015 lesepenn-delsettet:
- Ren trykt tekst: 99,2 %.
- Tekst på farget bakgrunn: 97,4 %.
- Tekst på glanset papir: 97,8 %.
- Små skrifttyper (under 8 pt): 95,9 %.
- Blandede skript i samme linje: 94,6 %.
G3 er den første generasjonen som passerer 95 % på alle 5 kategorier. Transformer-oppmerksomheten hjelper til med å disambiguere blandede skript-linjer der LSTM-en i G2 sliter.
5. Latens og minne: Alle tre generasjoner sammenlignet
Ende-til-ende-latens fra penn-ned til første dekodede lyd på et 12-tegns ord:
| Generasjon | Modellstørrelse (int8) | Vert | Latens | 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 på T2 er den raskeste med 11 ms, men koster $14,50 per enhet. G1 på B1 er den billigste med $3,80 per enhet, men med 120 ms latens. Riktig valg avhenger av bruksområdet ditt, ikke av hvilken motor som er "bedre".
6. Hvorfor ikke bare kjøre Tesseract?
Kjøpere spør noen ganger hvorfor vi ikke leverer Tesseract. Tre grunner:
- Tesseract er laget for skannede dokumenter, ikke for penne-spissbilder i videohastighet. Dens binarisering og layoutanalyse er tilpasset 300 DPI-sideskanninger, ikke 60 fps penne-spissstrømmer. Å kjøre Tesseract på F8 tar 320 ms per ord, som er 8x tregere enn G2.
- Tesseracts LSTM-modell er 33 MB for latin. G2-modellen er 1,4 MB int8. På K7 sitt 8 MB flash-budsjett får ikke Tesseract plass.
- Tesseracts nøyaktighet på ICDAR-delsettet for lesepenn er 95,1 % ren tekst, 86,3 % små fonter. G2 er 98,7 % og 92,4 %. Tesseract er dårligere på alle målinger som betyr noe for en lesepenn.
Hvis OEM-kravet ditt er "må kjøre Tesseract", spesifiserer du feil produkt. 11-modellutvalget finnes fordi én motor ikke passer alle brukstilfeller.
7. Hvorfor ikke alltid kjøre den største modellen?
Et naturlig spørsmål: hvis G3 er mer nøyaktig, hvorfor ikke plassere den i hver modell? Svaret er vertsprosessor og flash-budsjett.
- B1 og B2 leveres med en Cortex-M4-klasse MCU på 80 MHz. G3 ville ikke kjørt med akseptabel latens.
- P2 leveres med 4 MB flash. G3 latin int8 er 2,3 MB pluss 0,8 MB ordbok og 0,4 MB firmware, totalt 3,5 MB. Med lydressurser er flash full.
- F8 leveres med en Cortex-A7 på 800 MHz. G3 int8 ville kjørt på 180 ms, som er over den menneskelige persepsjonsterskelen.
Så G3 er forbeholdt L5, Q8 og T2, der vertens SoC har både CPU- og flash-kapasitet. De andre 8 modellene bruker G1 eller G2.
8. Effekt på hele lydpipeline
OCR er ett trinn i en 5-trinns pipeline: ISP → tekstdeteksjon (TC-128) → segmentering → OCR → oppslag i ordbok → TTS → lyd ut. OCR-latens er vanligvis ikke flaskehalsen. Lydbuffer-fylling, TTS-syntese og DAC-oppstart legger til sammen 30 ms til 60 ms. Så en OCR-motor som tar 38 ms versus 32 ms endrer ikke brukeropplevelsen. Det som betyr mer er halen i latens: en 99-persentil-spike fra 38 ms til 280 ms får lyden til å føles hakkete.
Vi måler hale-latens over 10 000 sammenhengende gjenkjenninger. G3 på L5 har en 99-persentil-latens på 64 ms (mot 32 ms median). G3 på T2 har en 99-persentil på 22 ms (mot 11 ms median). Halen drives av DRAM-cache-miss og DMA-konflikter med lydmotoren; T2 har mer RAM-båndbredde, så halen er strammere.
9. Treningsdata og kontinuerlig forbedring
G3-modellen er trent på et korpus på 6,2 millioner skannede linjer innsamlet fra 38 000 lesepennbrukere i 47 land (akkumulert siden 2023). Linjene spenner over 14 språk, 12 papirtyper og 9 fontfamilier. Vi augmenterer med syntetiske forvrengninger: perspektivforvrengning, uskarphet, papirstruktur, trykt bakgrunn, JPEG-lignende kompresjonsartefakter.
Modellen trenes på nytt kvartalsvis. Hver utgivelse er styrt av en regresjonstest på det utelatte ICDAR 2015-delsettet og på en 200 000-linjers produksjonsprøve fra forrige kvartal. En utgivelse sendes kun hvis den forbedrer nøyaktigheten med ≥ 0,2 prosentpoeng uten å forringe noen av de 14 støttede språkene.
Kjøpers tips: Spør leverandøren hvor ofte OCR-modellen trenes på nytt og hvordan regresjonstestkorpuset ser ut. En leverandør som trener på nytt "når vi har tid" leverer en utdatert modell. Vår kvartalsvise kadens er dokumentert i firmware-versjonsnotatene.
10. Spesifisere OCR i en OEM-kontrakt
En forsvarlig OCR-spesifikasjon inkluderer:
- Motorgenerasjon og modellfilstørrelse.
- Tegnnivå-nøyaktighet på et navngitt testsett (vi leverer ICDAR 2015 lesepenn-delsettet på forespørsel).
- Median- og 99-persentil-latens på et 12-tegns ord.
- Minnebudsjett (flash + RAM).
- Støttede skrifter.
- Kadens for gjenopplæring og regresjonstestmetodikk.
- Per-modell kalibreringsrapport fra produksjonslinjen.
For mer informasjon om hvordan tekst registreres før OCR, se Leksepenn – tekstdeteksjon og segmentering. For hvordan bilde signalprosessoren mater OCR-motoren, se Leksepennekamera – ISP og bilde signalprosessor. For hvordan YUV-utgangen knyttes til OCR-inndata, se Leksepenn – YUV vs RGB og fargerom. For håndskriftgjenkjenningsmotoren, se Leksepenn – håndskriftgjenkjenningsmotor. For å be om en benchmark-rapport som sammenligner innholdet ditt med vår ICDAR-delsett, se /request-a-quote.
Relatert lesing
- Leksepenn – tekstdeteksjon og segmentering
- Leksepennekamera – ISP og bilde signalprosessor
- Leksepenn – håndskriftgjenkjenningsmotor
- Leksepenn – YUV vs RGB og fargerom
- Leksepenn – ordbokfilformat og utgave
- Hvordan OID-leksepenn-teknologi fungerer
Tilleggslesing: OCR for høyre-til-venstre og vertikale skrifter
OCR for arabisk, hebraisk og persisk krever høyre-til-venstre-håndtering på språkmodellnivå, som G2- og G3-motorene støtter naturlig. OCR-motoren sender ut tegnsekvensen fra venstre til høyre i den visuelle rekkefølgen fra bildet, og språkmodellen reverserer og omformer sekvensen til riktig logisk rekkefølge. Nøyaktigheten på et arabisk test sett på 50 000 linjer er 94,8 % på G3 T2 og 91,6 % på G2 K7. Den lavere nøyaktigheten sammenlignet med latin skyldes sammenkoblede bokstavformer (initial, medial, final, isolert) som firedobler det effektive klasseantallet.
For vertikale skrifter (tradisjonell kinesisk, japansk, mongolsk) leverer vi en separat modell for vertikal tekst med roterte ankerbokser. Arkitekturen er identisk med G3, men treningssettet bruker vertikale linjeutsnitt. Modellen er 1,2x større enn den horisontale modellen på 2,8 MB int8. Vi leverer ikke vertikal tekst på L5, fordi verts-CPU-en ikke oppfyller latensmålet på 35 ms; Q8 og T2 håndterer vertikal tekst på henholdsvis 22 ms og 14 ms.
Sider med blandet retning (en lærebok med ett horisontalt avsnitt og ett vertikalt sidefelt) håndteres ved først å kjøre den horisontale modellen på hele siden, og deretter kjøre den vertikale modellen kun på områdene der den horisontale modellen returnerte lav konfidens. Denne selektive tilnærmingen holder gjennomsnittlig latens på 19 ms på Q8, mot 36 ms hvis begge modellene kjøres på hele siden.