CodeKitHub
Kodėl knygos puslapių nuotraukos nesuveikia su OCR (ir kaip keli laipsniai posvyrio sugadina tikslumą)

Kodėl knygos puslapių nuotraukos nesuveikia su OCR (ir kaip keli laipsniai posvyrio sugadina tikslumą)

Paskelbta 2026-07-24

Jei kada nors bandėte konvertuoti knygos puslapio nuotrauką į tekstą internete ir gavote atgal iškraipytų nesąmonių sieną, tikriausiai apkaltinote ne tą dalyką. Kyla pagunda manyti, kad kaltas senas, pageltęs popierius ar blogas apšvietimas — bet testuojant nei vienas iš jų beveik nepajudino rodiklio. Tikroji priežastis beveik visada yra kažkas, ko nematote vien žiūrėdami į nuotrauką: nedidelis kameros posvyris.

Testas: tas pats puslapis, keturios sąlygos

Norėdami išsiaiškinti, kas iš tikrųjų sugadina OCR (optinį simbolių atpažinimą) realaus pasaulio knygų nuotraukose, praleidome tą patį teksto bloką per Tesseract — atvirojo kodo OCR variklį — keturiomis sąlygomis: švarus plokščias skenavimas, pageltęs/išblukęs puslapis, nuotrauka, pakreipta apie 12 laipsnių, ir pakreipta nuotrauka su pridėtu atspindžio blyksniu.

Sąlyga Žodžių tikslumas
Švarus, plokščias skenavimas 100%
Pageltęs, išblukęs puslapis (be posvyrio) 100%
Pakreipta ~12° (be spalvos pokyčio) 67.7%
Pakreipta ~8° + blyksnis 71.0%

Pageltęs puslapis įvertintas identiškai kaip nepriekaištingas — pilni balai. Vos įvedus posvyrį, tikslumas sugriuvo trečdaliu, sukurdamas būtent tokį rezultatą, kokį matė kiekvienas, bandęs „nuskaityti vadovėlį į žodį“ įrankius: "brow," vietoj “brown”, "Chapte,." vietoj “Chapter.”, "hidde,," vietoj “hidden”.

Kodėl toks mažas posvyris sukelia tiek daug žalos

OCR varikliai skaito tekstą skenuodami paveikslėlio eilutes, ieškodami nuoseklių horizontalių rašalo juostų — tai mechanizmas, kurį jie naudoja, norėdami atskirti vieną teksto eilutę nuo kitos. Tobulai lygiame skenavime kiekviena teksto eilutė sėdi tvarkingoje horizontalioje juostoje, ir variklis švariai atskiria 1 eilutę nuo 2 eilutės nuo 3 eilutės.

Pakreipkite puslapį net 10 laipsnių, ir ta švari horizontali juosta tampa įstrižu dryžiu, apimančiu dešimtis pikselių eilučių. Variklio eilučių segmentavimo logika pradeda sujungti simbolius iš to, kas turėtų būti dvi atskiros eilutės, arba padalina vieną simbolį per tai, ką laiko dviem skirtingomis eilutėmis. Rezultatas yra ne „šiek tiek mažiau tikslus“ — tai kategoriškai kitoks rezultatas, nes esminis vienetas, kurį skaito variklis (eilutė), nebeatitinka to, kas iš tikrųjų yra paveikslėlyje.

Būtent todėl nuotrauka, kuri jums atrodo visiškai skaitoma, vis tiek gali sukurti neskaitomą OCR rezultatą. Jūsų regos sistema kompensuoja 10 laipsnių posvyrį be jokių sąmoningų pastangų — net nepastebite, kad ji pakreipta. Naivus OCR vamzdynas neturi tokios integruotos kompensacijos ir skaito lygiai tuos pikselius, kurie jam duoti.

Sprendimas: ištiesinti prieš atpažįstant, ne po to

Praktinė išvada yra ne „laikykite telefoną atsargiau“ — šiek tiek posvyrio fotografuojant atverstą knygą beveik neišvengiama, nes puslapio nespaudžiate plokščiai prie skenerio. Sprendimas yra automatinis: aptikti posvyrio kampą ir jį pataisyti prieš paleidžiant teksto atpažinimą, ne po to.

Vienas patikimas būdas aptikti kampą be jokio sunkaus mašininio mokymosi modelio yra projekcijos profilio metodas: pasukti paveikslėlį per kandidatinių kampų diapazoną, ir kiekvienam iš jų išmatuoti, kokia „smaili“ yra eilutė po eilutės rašalo pasiskirstymas. Teisingu kampu teksto eilutės susirikiuoja į ryškias juostas (didelė dispersija tarp eilučių); bet kokiu kitu kampu rašalas sutepamas per eilutes (maža dispersija). Kampas, kuris duoda didžiausią dispersiją, yra pasvirimo taisymo kampas.

Paleidus šį taisymą pirmiausia ir tada atpažįstant tekstą, kiekvienas mūsų pakreiptas testinis atvejis grįžo prie 100% žodžių tikslumo — tas pats puslapis, tas pats OCR variklis, vienintelis skirtumas — jį pirma ištiesinti.

Ką tai reiškia, jei skaitmeninate knygą

  • Nesijaudinkite dėl popieriaus būklės. Pageltimas, nežymus blukimas ir šiek tiek sumažėjęs kontrastas nuo senstančio popieriaus beveik nekeičia tikslumo patys savaime. Senas minkštais viršeliais leidinys skaitmenizuojasi maždaug taip pat gerai kaip naujas.
  • Rūpinkitės kampu. Net posvyris, kurio nepastebėtumėte akimi, gali būti visas skirtumas tarp naudingo teksto ir šiukšlių.
  • Blyksnio atspindys svarbus mažiau nei posvyris, bet vis tiek kenkia. Ryškus blyksnio taškas ant blizgaus popieriaus gali užtemdyti tekstą po juo — kampo taisymas neišspręs vietos, kur iš viso nėra skaitomo rašalo.
  • Įrankis, automatiškai taisantis posvyrį, išsprendžia tikrąją problemą. Mūsų knygos puslapio į tekstą įrankis atlieka lygiai šį aptikimo ir taisymo žingsnį jūsų naršyklėje prieš atpažindamas — jokio įkėlimo, jokio serverio, ir jis sukurtas specialiai aplink posvyrio problemą, o ne darant prielaidą, kad jam duodate plokščią skenavimą.

Jei anksčiau bandėte OCR knygos nuotraukai ir pasidavėte, nes rezultatas buvo neskaitomas, puslapis tikriausiai nebuvo problema — beveik tikrai ja buvo keli kameros kampo laipsniai.

← Grįžti į tinklaraštį