CodeKitHub
Kāpēc grāmatu lapu fotoattēli OCR neizdodas (un kā daži leņķa grādi sabojā precizitāti)

Kāpēc grāmatu lapu fotoattēli OCR neizdodas (un kā daži leņķa grādi sabojā precizitāti)

Publicēts 2026. g. 24. jūl.

Ja jebkad esat mēģinājis pārvērst grāmatas lapas fotoattēlu tekstā tiešsaistē un saņēmis atpakaļ sagrozītas muļķības sienu, jūs, iespējams, vainojāt nepareizo lietu. Kārdinoši ir pieņemt, ka vainīgs ir vecs, iedzeltējis papīrs vai slikta apgaismošana — bet testos neviens no tiem gandrīz vispār neietekmēja rezultātu. Īstais iemesls gandrīz vienmēr ir kaut kas, ko nevar redzēt, vienkārši paskatoties uz fotoattēlu: neliels kameras noliekums.

Tests: viena un tā pati lapa, četri apstākļi

Lai noskaidrotu, kas faktiski sabojā OCR (optiskā rakstzīmju atpazīšana) reāla pasaules grāmatu fotoattēliem, mēs palaidām vienu un to pašu teksta bloku caur Tesseract — atvērtā koda OCR dzinēju — četros apstākļos: tīrs, plakans skenējums, iedzeltējusi/izbalējusi lapa, apmēram 12 grādu sasvērts fotoattēls un sasvērts fotoattēls ar pievienotu atspīdumu.

Apstāklis Vārdu precizitāte
Tīrs, plakans skenējums 100%
Iedzeltējusi, izbalējusi lapa (bez noliekuma) 100%
Sasvērta ~12° (bez izbalēšanas) 67,7%
Sasvērta ~8° + atspīdums 71,0%

Iedzeltējusī lapa uzrādīja tieši tādu pašu rezultātu kā nevainojamā — pilns punktu skaits. Tiklīdz tika ieviests noliekums, precizitāte sabruka par trešdaļu, radot tieši tādu izvadu, kādu ikviens, kas mēģinājis izmantot “skenēt mācību grāmatu tekstā” rīkus, ir redzējis: "brow," nevis “brown”, "Chapte,." nevis “Chapter.”, "hidde,," nevis “hidden”.

Kāpēc neliels noliekums rada tik lielu postu

OCR dzinēji lasa tekstu, skenējot attēla rindas un meklējot konsekventas horizontālas tintes joslas — tas ir mehānisms, ko tie izmanto, lai atšķirtu vienu teksta rindu no nākamās. Perfekti līdzenā skenējumā katra teksta rinda atrodas tīrā horizontālā joslā, un dzinējs skaidri atdala 1. rindu no 2. rindas un no 3. rindas.

Sasveriet lapu kaut vai par 10 grādiem, un šī tīrā horizontālā josla pārvēršas par diagonālu smērējumu, kas aptver desmitiem pikseļu rindu. Dzinēja rindu segmentēšanas loģika sāk apvienot rakstzīmes no tā, kam vajadzētu būt divām atsevišķām rindām, vai sadala vienu rakstzīmi starp to, ko tas uztver par divām dažādām rindām. Rezultāts nav “nedaudz mazāk precīzs” — tas ir kategoriski cits izvads, jo pamata vienība, ko dzinējs lasa (rinda), vairs neatbilst tam, kas faktiski ir attēlā.

Tas arī izskaidro, kāpēc fotoattēls, kas jums izskatās pilnīgi salasāms, tomēr var radīt nesalasāmu OCR izvadu. Jūsu redzes sistēma kompensē 10 grādu noliekumu bez apzinātas piepūles — jūs pat neapzināties, ka tas ir sasvērts. Naivam OCR cauruļvadam nav šādas iebūvētas kompensācijas, un tas nolasa tieši tos pikseļus, kas tam doti.

Labojums: iztaisnot pirms atpazīšanas, nevis pēc

Praktiskais secinājums nav “turiet tālruni piesardzīgāk” — neliels noliekums, fotografējot atvērtu grāmatu, ir gandrīz neizbēgams, jo jūs nepiespiedāt lapu plakani pret skeneri. Labojums ir automātisks: atklāt noliekuma leņķi un to izlabot pirms teksta atpazīšanas palaišanas, nevis pēc.

Viena droša metode leņķa atklāšanai bez smaga mašīnmācīšanās modeļa ir projekcijas profila metode: pagrieziet attēlu caur virkni kandidātu leņķu, un katram no tiem izmēriet, cik “smaila” ir rindu-pa-rindai tintes sadalījuma diagramma. Pareizajā leņķī teksta rindas sakārtojas asās joslās (augsta dispersija starp rindām); jebkurā citā leņķī tinte izsmērējas pāri rindām (zema dispersija). Leņķis, kas rada augstāko dispersiju, ir iztaisnošanas leņķis.

Vispirms palaižot šo labojumu un tikai tad atpazīstot tekstu, katrs mūsu sasvērtais testa gadījums atgriezās pie 100% vārdu precizitātes — tā pati lapa, tas pats OCR dzinējs, vienīgā atšķirība — tās vispirms iztaisnošana.

Ko tas nozīmē, ja digitalizējat grāmatu

  • Neuztraucieties par papīra stāvokli. Iedzeltēšana, neliela izbalēšana un neliels kontrasta zudums no papīra novecošanas gandrīz neietekmē precizitāti pašas par sevi. Vecs izdevums digitalizējas gandrīz tikpat labi kā jauns.
  • Uztraucieties par leņķi. Pat noliekums, ko nepamanītu ar aci, var būt visa atšķirība starp lietojamu tekstu un muļķībām.
  • Zibspuldzes atspīdums kaitē mazāk nekā noliekums, bet tomēr kaitē. Spilgts karstais punkts uz spīdīga papīra var izdzēst jebkādu tekstu zem tā — leņķa labošana neizlabos vietu, kur vispār nav salasāmas tintes, ko lasīt.
  • Rīks, kas automātiski labo noliekumu, atrisina reālo problēmu. Mūsu grāmatas lapas pārvēršanas tekstā rīks izpilda tieši šo atklāšanas-un-labošanas darbību jūsu pārlūkā pirms atpazīšanas — bez augšupielādes, bez servera, un tas ir veidots tieši noliekuma problēmas risināšanai, nevis pieņemot, ka jūs tam padodat plakanu skenējumu.

Ja iepriekš esat izmēģinājis OCR grāmatas fotoattēlam un padevies, jo rezultāts bija nesalasāms, lapa, visticamāk, nebija problēma — daži kameras leņķa grādi gandrīz noteikti bija.

← Atpakaļ uz emuāru