OCR
絵の中の文字を読み取って文字データに変える仕事
- OCR(Optical Character Recognition、光学文字認識)は絵の中の文字をコンピュータが扱える文字データに変える仕事です。
- 一度には終わらず、文字の場所を探す→まっすぐ整える→読み取る→整えるという複数の段階を経ます。
- 最近の方式は文字を一字ずつ切り離さず、行単位で走査しながら前後の文字をいっしょに見ます。
- 最後に辞書と文脈で埋める段階が性能を大きく左右します。かすれた一文字は周りが代わりに教えてくれます。
- まっすぐな印刷物はよく読めますが、傾いたり皺が寄ったり手書きだったりする文字ではまだ間違いが出ます。
目次
1たとえで理解する
古い石碑に刻まれた文字は目で見てもよく読めません。そこで紙を当てて墨をたたき、彫られた線を写し取ります。この拓本を取る作業がそのまま読み取る作業になります。
順序が決まっています。まず石碑のどこに文字が刻まれているか面を探し、その面にだけ紙を当てます。紙は皺なくぴんと張って貼らなければなりません。斜めに貼ると線が伸びたりつぶれたりして、写し終えたあと読み取りにくくなります。墨も片側だけ濃くならないよう均一にたたく必要があります。
写し取った紙は一字ずつではなく一行ずつ読み下していきます。すり減って消えた文字は無理に読まず残しておき、前後の文が何の話かをたどりながら最後に埋めます。
OCRがすることはこの読み取りです。かすれた一画をじっと見つめる代わりに、場所を決めてまっすぐ整えたあと、前後をいっしょに見ながら埋めていきます。
2くわしく
文字がある場所から探します
看板の写真一枚には文字よりも文字でないもののほうがずっと多いです。だから最初の段階は読むことではなく、文字が集まっている場所を四角で見つけ出すことです。この段階を飛ばして画面全体を読もうとすると、レンガの模様や木の枝を文字と読み違えます。
探す単位はふつう行です。一字ずつ探すより横につながった文字の群れを一つの帯として捉えるほうが安定します。表や領収書のようにマスが分かれた文書は、マスの境界線までいっしょに探しておくと、あとでどの値がどの項目か合わせやすくなります。
場所を見つけたらその部分だけ切り出して次の段階に渡します。読むべき絵が何分の一かに減るので、計算もその分軽くなります。
まっすぐ整える前処理
切り出した帯をそのまま読むわけではありません。写真の中の文字は傾いていたり、片側だけ明るかったり、本の真ん中のように反っていたりします。そこで文字が横に寝るように回し、明るさをならし、反った面を平らに直す手当てを先にします。
この前処理が結果を大きく変えます。同じ文書でも斜めに撮った写真とまっすぐ撮った写真では認識率の差が目立って出ます。文書撮影アプリが四隅をつかんで画面をまっすぐな四角形に直す機能を入れているのはこのためです。
明るさの扱い方も重要です。紙全体に一つの基準を当てはめると、影になった側の文字がまるごと消えます。画面を小さな区域に分けて区域ごとに別々に基準を取ると、まだらな写真でも線が生き残ります。
一字ずつではなく行で読みます
昔の方式は文字を一つずつ切り出して形を見比べるやり方でした。この方式は文字どうしがくっついていたり画が途切れていたりするとすぐに崩れます。どこで切るべきかから決められないからです。
最近の方式は切りません。**帯一つを左から右へ走査しながら文字を順番に吐き出します。**どこまでが一文字か先に決めず、走査する過程で自然に境界が決まります。くっついて書かれた手書きや続け字にずっと強い理由です。
前後をいっしょに見るという点も違います。今の画がはっきりしなくても前に出てきた文字がヒントになります。前の文字が数字だったら次も数字である可能性が高く、前が仮名だったら急に見慣れない記号が出る可能性は低いです。この判断が認識の中に組み込まれています。
辞書と文脈が仕上げをします
読み取った結果をそのまま出しません。形の似た文字はいつも厄介です。数字の0とアルファベットのO、数字の1と縦棒、漢字の「未」と「末」のように、画一つの違いしかない組がそれです。
そこで知っている単語の一覧と文脈で埋める段階を置きます。前後が地名なら地名一覧と見比べ、電話番号の欄なら数字だけが来るよう制限し、日付の欄ならあり得ない値をはじきます。書式が決まった文書ほどこの段階がよく効きます。
最近はこの後処理を言語モデルに任せることもあります。読み取った文をまるごと入れて不自然な部分を直させるやり方です。ただし元の文にない言葉をもっともらしく作り出してしまうこともあるので、数字や名前のように間違えると困る値は元の文と照らし合わせる必要があります。
日本語は文字の種類が多いです
アルファベットは大文字小文字を合わせても数十字です。漢字は数千字にのぼり、ひらがな・カタカナも合わさります。選ぶべき候補が多いこと自体が難しさです。
形の似た組も多いです。「未」と「末」、「土」と「士」のように画一つが違う文字が数多く並んでいて、印刷が少しかすれただけで別の文字に飛んでしまいます。崩し字や古い書体が混じるとさらに手強くなります。
そのため文字を扱う道具は学習に使う文字資料を別に用意します。いくつもの書体、大きさ、わざとかすれさせた見本をたくさん作って学習させる方式が広く使われています。
3もう少し正確に
性能は二つに分けて測ります。一文字をどれだけ間違えるかと、一単語をどれだけ間違えるかです。文字単位ではよく合っていても単語一つに誤字が一つあればその単語は間違いと数えるので、二つの値は結構開きます。検索が目的なら単語のほうが、原文をそのまま写すのが目的なら文字のほうが重要です。
読み取った文字には位置情報が付いてきます。どの四角の中から出てきた文字かがいっしょに保存されるので、写真の上に翻訳を重ねて見せたり、原文のその箇所を指し示したりすることができます。
たとえがずれる点もあります。拓本を読む人は「ここはとても読めない」と空欄のまま残せますが、OCRはたいてい答えを出してしまいます。確信が低くてもいちばんそれらしい文字を埋め込むので、間違った文字が何食わぬ顔で混じっています。そのため結果に付いた確信の値もいっしょに見て、低いところは人が確かめるよう回す設計が必要です。また人は残った画の深さと向きを見て元の文字をたどりますが、OCRは学習で見た文字の形とどれだけ似ているかを見るだけです。
4やってみる
5よくある誤解
写真を入れれば文字がそのまま出てくると思われがちですが、実際には場所探しと前処理が結果を大きく左右するので、どう撮ったかが認識率を分けることが多いです。
文字ごとに別々に見分けていると見なされがちですが、実際には行単位で走査しながら前後の文字をいっしょに見て判断します。
結果に文字が出ていれば正しいと信じられがちですが、実際には確信が低くてもいちばんそれらしい文字を埋め込むので、数字や名前は原文と照らし合わせる必要があります。
7ひとこと要約
つまりOCRは絵の中の文字を場所から探してまっすぐ整えたあと行単位で読み取る仕事で、最後の文脈補正が品質を左右します。
誤りや、もっと良いたとえがありますか? 修正を提案する · 最終更新2026-09-02