【OCR】Pythonで画像認識して文字(テキスト)を出力する方法!!

今回はPythonを使って画像から文字を出力するっていうことをやっていきたいと思う。画像を認識させて、文字コードに変換するっていうOCRですね。

今回はPythonでコードを書いてやるけど、OCRはGoogleドライブとGoogleドキュメントを使えば簡単に体感することができるから、試したことがなければ試してみるといいですよ。

まあ今回はPythonでオラオラやっていく感じ、やっていこう。

Pythonで画像認識させて文字を出力する

どうやって画像から文字を出力するんだい?ってところだけど、これはtesseract-ocrを使ってやろう。自分はMacにHomebrew入れているからbrewコマンドでいきます。

$ brew install tesseract

tessdocをみるとコマンドラインから実行できるようだからちょっと試してやろう。画像から文字を出力するからまずは画像を用意。これをやってみる。

ターミナルから以下を実行。texts.jpgっていうのは上の画像。

$ tesseract /Users/U/Downloads/texts.jpg /Users/U/Downloads/text

これを実行してみるとこんな感じでテキストファイルが作成された。

中身を見てみると良い感じに読み取れていますね。

もうちょっと難易度の高い画像をやってみる

今やったのはテキストも少なかったから、もうちょっとテキスト量の多い画像でやってみよう。これでいく。

かなりの文字数だが実行してみると・・・こんな感じになりましたね。

かなり綺麗に読み取れている・・・やはりこれだけくっきり写っていると文字数多くてもちゃんと認識してくれるようですね。

日本語でも画像認識して文字出力してみる

日本語の画像でも試してみたいので、言語のデータを入れて試してみる。

$ brew install tesseract-lang

とかやっちゃったけど、これtesseract入れるときにwithとか指定してやればよかったのかな。

$ tesseract --with-all-languages

まあいいや。これで試したいのがこちら。レシート!

このレシートの文字を読み取って出力して欲しい。

$ tesseract /Users/U/Downloads/paper.jpg /Users/U/Downloads/fs -l jpn

実行してみるとこんな感じになりました。すごい。

ちょっと怪しいものもあるけど、まあ結構な精度で文字が出ていますね。

Pythonで文字認識させる

tesseractをコマンドラインで使って文字認識させることには成功したから、次はPythonのコードで文字認識をしていきたい。そこで使いたいのがpyocr

 

installationとUsageが書いてあるからそれに従おう。

$ sudo pip3 install pyocr

pyocrを入れたら例を参考にコードを書いていく。

from PIL import Image
import sys

import pyocr
import pyocr.builders

tools = pyocr.get_available_tools()
if len(tools) == 0:
    print("No OCR tool found")
    sys.exit(1)
tool = tools[0]

line_and_word_boxes = tool.image_to_string(
    Image.open('/Users/U/Downloads/paper.jpg'),
    lang="jpn",
    builder=pyocr.builders.TextBuilder()
)

print(line_and_word_boxes)

レシートの画像を指定して実行してみたけど、こんな感じ。

コマンドラインでやった時と同じように読み取れているようです。

Webカメラで撮影してOCRする

カメラを使ってOCRもしてみようって思いますよね。TesseractにはTesseract.jsっていうJavaScriptでも使えるものがあります。JavaScriptならカメラで写したものを文字認識して画面に映すっていうことがやりやすそうだなっていうことでちょっと手を出してみました。

ただ試した結果、なんか文字がうまく認識してくれないんですよね・・・

多分自分の書いたプログラムがおかしいだろうから、気になる人がいたらTesseract.js試してみてください。

試してみたこととしては、JavaScriptでカメラを起動して映したものをシャッターボタンを押して画面に描画。それに対してTesseractで文字認識をさせるっていうことをしたつもりなんだけど、軽く試しただけではうまくいかなかった。

コードに関してはTesseract.jsを見てなんとなく試してみるといいと思います。ちなみにTesseractで認識させることのできる画像フォーマットはImageFormatに書かれているから見てみるといいですよ。

まとめ

tesseractとpyocrを使って画像から文字を出力するっていうことをやってみたけど、結構簡単ですよね。コマンドラインからやってもいいし、Pythonでプログラムから実行してもいいし色々できそうです。

OCRはGoogleドライブとGoogleドキュメント使えば結構簡単にできるから、試したことない人はやってみるといいかもしれないぞ。