CodeKitHub
Miks raamatulehe fotod ebaõnnestuvad OCR-is (ja kuidas mõni kraad kallet täpsust hävitab)

Miks raamatulehe fotod ebaõnnestuvad OCR-is (ja kuidas mõni kraad kallet täpsust hävitab)

Avaldatud 24. juuli 2026

Kui oled kunagi proovinud teisendada raamatulehe fotot veebis tekstiks ja saanud tagasi müüri moondunud jama, oled tõenäoliselt süüdistanud vale asja. On ahvatlev eeldada, et süüdlane on vana kollane paber või halb valgustus — aga testides ei liigutanud kumbki neist tulemust peaaegu üldse. Tegelik põhjus on peaaegu alati midagi, mida ei näe pelgalt fotot vaadates: väike kaameranurk.

Test: sama lehekülg, neli tingimust

Et välja selgitada, mis päriselt murrab OCR-i (optiline märgituvastus) päris raamatufotode puhul, jooksutasime sama tekstiploki läbi Tesseracti — avatud lähtekoodiga OCR-mootori — nelja tingimuse all: puhas tasane skann, kollastunud/tuhmunud lehekülg, umbes 12-kraadise kaldega foto ning kaldega foto, millele lisati läige.

Tingimus Sõnatäpsus
Puhas, tasane skann 100%
Kollastunud, tuhmunud lehekülg (kaldeta) 100%
Kalle ~12° (värvimuutuseta) 67,7%
Kalle ~8° + läige 71,0%

Kollastunud lehekülg sai identse tulemuse puhtaga — täispunktid. Hetkel, kui lisati kalle, langes täpsus kolmandiku võrra, tootes täpselt sellist väljundit, mida on näinud igaüks, kes on proovinud “skanni õpik sõnaks” tööriistu: "brow," sõna “brown” asemel, "Chapte,." sõna “Chapter.” asemel, "hidde,," sõna “hidden” asemel.

Miks väike kalle põhjustab nii palju kahju

OCR-mootorid loevad teksti skaneerides pildiridu, otsides ühtlasi horisontaalseid tindiribasid — see on mehhanism, mida nad kasutavad ühe tekstirea eristamiseks järgmisest. Täiesti tasasel skannil asub iga tekstirida korrastatud horisontaalses ribas ning mootor eraldab puhtalt rea 1 realt 2 ja rida 3.

Kaldu lehekülge kas või 10 kraadi ja see puhas horisontaalne riba muutub diagonaalseks laiaks lipikuks, mis hõlmab kümneid pikslireaid. Mootori reasegmenteerimise loogika hakkab ühendama märke sellest, mis peaks olema kaks eraldi rida, või lõhkuma üksikut märki üle selle, mida ta peab kaheks erinevaks reaks. Tulemus pole “veidi vähem täpne” — see on kategooriliselt erinev väljund, sest mootori loetav fundamentaalne ühik (rida) ei vasta enam sellele, mis pildil tegelikult on.

See selgitab ka, miks foto, mis sinu jaoks näib täiesti loetav, võib ikkagi anda loetamatu OCR-väljundi. Sinu visuaalne süsteem kompenseerib 10-kraadise kalde ilma teadliku pingutuseta — sa isegi ei registreeri seda kaldena. Naiivsel OCR-torustikul pole sellist kompensatsiooni sisse ehitatud ja see loeb täpselt need pikslid, mis talle antakse.

Lahendus: sirgesta enne tuvastamist, mitte pärast

Praktiline õppetund pole “hoia telefoni ettevaatlikumalt” — natuke kallet avatud raamatu pildistamisel on peaaegu vältimatu, sest sa ei suru lehekülge lapikult skanneri vastu. Lahendus on automaatne: tuvasta kaldenurk ja paranda see enne tekstituvastuse käivitamist, mitte pärast.

Üks usaldusväärne viis nurga tuvastamiseks ilma raske masinõppe mudelita on projektsiooniprofiili meetod: pööra pilti läbi valiku kandidaatnurkade ning mõõda iga puhul, kui “teravatipuline” on reahaaval tindijaotus. Õigel nurgal joonduvad tekstiread teravateks ribadeks (kõrge dispersioon ridade vahel); mistahes muul nurgal laiub tint üle ridade (madal dispersioon). Nurk, mis annab kõrgeima dispersiooni, on sirgestusnurk.

Selle korrektsiooni käivitamine kõigepealt ja seejärel teksti tuvastamine tõi iga meie kaldega testjuhtumi tagasi 100% sõnatäpsuseni — sama lehekülg, sama OCR-mootor, ainus erinevus oli selle eelnev sirgestamine.

Mida see tähendab, kui digitaliseerid raamatut

  • Ära muretse paberi seisundi pärast. Kollastumine, kerge tuhmumine ja väike kontrasti kadu vananenud paberist iseenesest ei mõjuta täpsust peaaegu üldse. Vana taskuraamat digitaliseerub umbes sama hästi kui uus.
  • Muretse nurga pärast. Isegi kalle, mida silmaga ei märkaks, võib olla kogu vahe kasutatava teksti ja jama vahel.
  • Välklambist tulev läige loeb vähem kui kalle, aga teeb ikka kahju. Ere kuumkoht läikival paberil võib kustutada, mis iganes tekst selle all on — nurgakorrektsioon ei paranda kohta, kus pole algusest peale loetavat tinti lugeda.
  • Tööriist, mis parandab kallet automaatselt, lahendab tegeliku probleemi. Meie raamatulehe teksti tööriist käivitab täpselt selle tuvastamise-ja-korrigeerimise sammu sinu brauseris enne tuvastamist — üleslaadimist ega serverit pole vaja ning see on ehitatud spetsiaalselt kaldeprobleemi lahendamiseks, mitte eeldusega, et söödad sellele tasast skanni.

Kui oled kunagi proovinud OCR-i raamatufotoga ja loobunud, sest tulemus oli loetamatu, siis tõenäoliselt polnud probleem lehes — mõni kraad kaameranurka oli peaaegu kindlasti süüdi.

← Tagasi blogisse