Engineerの研鑽

メインはプログラミング系ブログ(本の要約とかもします)

質問はCONTACTやコメントでお願い致します。

【コピペでできるpython OCR】画像データをテキスト化してみよう

コンピューター, スマート フォン, オンライン, デジタル, データ

こんにちは、ゆきぽんずです。

 

今日はpythonを使ってOCR (光学的文字認識) = 画像データをテキスト化をしていきます。

 

みなさん、そもそもOCR (光学的文字認識)をご存知でしょうか?

 

OCR(光学的文字認識)

紙に書かれた手書きの文字とか画像の中に埋め込まれている文字っぽい情報とかを良い感じに読み取ってコンピュータで扱える文字情報に変換する技術とか機能とか装置とかソフトのこと

引用元 : https://wa3.i-3-i.info/word17164.html

 

用語の説明は以上です。それでは実装に移っていきましょう。

*Macユーザになったのでwindowsの実装方法は調べていません( ・∇・)

実装環境

使用しているPC : Mac

pythonのバージョン : python 3.7.6

使用するOCRのライブラリ : Tesseract OCR

OCRpythonで使えるようにする = pythonOCRツールラッパー : PyOCR

OCRのライブラリと、OCRツールラッパーについては以下の記事で詳しく説明してくださっています。

参考サイト : https://qiita.com/nabechi6011/items/3a367ca94dbd208efcc7

実装手順

手順1 Tesseract OCRのインストール

pythonでTesseract OCRをインストールしたい場合、Macだと標準でHomebrewが入っているので

tesseract install方法

brew install tesseract

で終了です。流石はMac様... そしてさらばWindowsよ...

手順2 訓練データの準備

以下のサイトに飛んで、好きな訓練データをクリックしてダウンロードしてください。

tessdata-best : 結果の精度重視

tessdata-fast : 処理の速度重視

tessdata : どちらでもない普通の訓練データ <=  おすすめ

https://tesseract-ocr.github.io/tessdoc/Data-Files

学習データの選択

 

ダウンロードしたファイル内にjpn.traineddataというものがあります。それをコピーして先ほどインストールしたtesseract フォルダ内のtessdataに入れます。

ファイルパス

/usr/local/Cellar/tesseract/4.1.1/share/tessdata

* Finder => アプリケーション => 検索にtessdataと打てば出てきます。

tesseractのバージョンは人によって変わると思います。

手順3 : PyOCRをインストール
PyOCR install方法

pip install pyocr

以上です。

 

では実際にコードを書いていきましょう

ソースコード

ソースコードを見る前にテキストを抽出する画像を取得します。

今回は以下の画像のテキストを抽出していきます。

* みなさんの息抜きにこういった画像を選んでみました。

引用元 : https://headlines.yahoo.co.jp/hl?a=20200407-00000387-oric-ent

 

それではお待ちかねのソースコードです。

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]
print("Will use tool '%s'" % (tool.get_name()))

txt = tool.image_to_string(
  #画像へのpathを明示的に表現
    Image.open('/Users/ユーザ名/Downloads/SourceCode/python/ocr/yahoonews.png'),
    lang="jpn",
    builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)
print(txt)

* Image.open('この中身は自分が画像ファイルをダウンロードした場所を指す')

 

ここまでくればあとは実行するだけです。

ほいな

実行結果

正直あまり精度はよくないですね。でも画像から文字を読み込めるって、よく考えたらすごいことですよね。さらにそれが1時間もあれば実装できてしまう現状が一番すごいことですけどね。

 

今日の内容は以上です。

 

今日もブログを読んでくださりありがとうございます。

 

ではでは!!