しゃちの備忘録

これからC++を始める人によるC++の備忘録です(今のところ)

OCR(光学文字認識)について

本記事は,OCRをやってみたいなーっと思い始めた人の備忘録です. OCRとは何かから始まり,OCRを試す方法について調べたところまでまとめます.

コードとかはないです.ごめんなさい. 一応今後やる予定ではあります.

OCR(工学文字認識)とは

まずはOCR(Optical Character Recognition, 光学的文字認識)と呼ばれる技術について,簡単に説明をしたいと思います. OCRとは手書きや印刷された文字を,スキャナやカメラにより取得した画像などから読みとり,コンピュータ上で扱える文字に変換する技術のことを指します.

f:id:teru0rc4:20170716012626p:plain その手順は大きく4ステップに分かれています. 入力は上で軽く触れたように手書きや印刷された文字を画像化したものになります.

それらの画像に対して最初に行われるのがレイアウト解析です. 例えば新聞などを例に考えると,新聞の中には本文や見出しだけでなく写真などや緯線や罫線,枠などが存在します. これらの中でOCRの対象である文字を含む部分,本文や見出しなどの領域を解析します.

続いて行われるのは, レイアウト解析により文字があると判定された部分を行ごとに分けるステップです. 縦書きと横書きのケースとがあると思いますが, 個人的な感想ですが,横書きの方がいい制度が出るのかなという印象を受けました.

f:id:teru0rc4:20170716031556p:plain そして行ごとに分けられた文章を単語ごとに分解します. よく使われる手法としては横に広がる行に対して,上下方向にひいた線がどれくらい交わっているかを調べ,交わりっている部分が少ない部分を文字の切れ目と判定するという方法があるらしいです.(言葉にしにくいので何となく図にしました…) しかし,文字の感覚が狭かったり,この手法だけでは文字の境目だと誤検出してしまうような構造の文字もあるため, 正確に1文字1文字切り出すのは難しいそうです.

このような手順を踏むことで1文字1文字をデータ化し,行ごとにつなぎ直すことで文字全体のデータ化をしているらしいです.

OCRをためしてみる

そんなおCRを手軽(?)に試せる方法がいくつかあるらしいのでまとめました.

googleOCR

googleドライブからファイルをアップロードし,当該ファイルをgoogleドキュメントから開くことで,そのファイルに対してOCRを行なってくれるらしいです. パパッと使うならこれで十分そうです.

tesseract-ocr

tesseractとはGoogleで開発されているOCRエンジンです.(ここまで書いて上のgoogle Driveもtesseract使ってるんだろうなと気がつきました…)

各種言語からの呼び出しもできるようです. Pythonではpyocrというラッパーモジュールが存在しました.

まとめ

雑にOCRについて調べました. tesseractとpyocrについては今後使って見たいのでまた更新します.

おわりに

ブログ書きたいと思いつつ最近はいろんなことの調べごとの方が多くなってきたので,せっかくだしコード以外の調べごとも書いておこうということで書いてみました. とりあえずOCRについてでした. まとめの通り,近々コードに起こしたいですね….