【文字起こし】pythonでOCRを使ってみた

プログラミング

今回はpythonを使って、画像から文字起こしをしたいと思います。

【AI】文字起こしBOT作ってみた」で文字起こしをしてくれるBOTを制作しましたが、pythonでも同じことができるのではないかと思い調べてみました。

するとOCR( 光学的文字認識 )という技術を使って同じようなことが実現できるようなのでやってみることにしました。

思ったほど難しくはなかったので、ぜひやってみてください。

スポンサーリンク

やること

OCRをpythonで行うためには

  • tesseractのインストール
  • 日本語データのダウンロード
  • pyocrのインストール

が必要になったので順に説明していきたいと思います。



必要なもの

  • Anaconda

GitHubからインストーラーをダウンロードしてやる方法もありましたが、うまくできなかったのでAnacondaからすべて行いました

Anacondaのインストール方法は「【python】AnacondaでDjangoを使うには」を参考にしてください。



下準備

tesseractのインストール

tesseractはORCを使うツールです。

AnacondaNavigatorをひらき、

  1. 「environments」を開く
  2. 「base(root)」の▶をクリック
  3. 「Open Terminal」をクリック

でコマンドプロンプトを開きます。

そしてそのまま以下のコードを打ち込みます。

 conda install -c conda-forge tesseract 

これでtesseractはインストールできました。

 conda list 
で確認してみましょう。

日本語データのダウンロード

さて、これで tesseract をインストールできましたが、まだ日本語データがダウンロードできていないので、日本語が認識できません。

日本語データは GitHubから ダウンロードできます。

下の方に行くと、写真のような日本語データがダウンロードできるリンクがあるのでクリックしてダウンロードしましょう。「jpn.traineddata」というファイルがダウンロードできると思います。

ダウンロード出来たらそのファイルを PCのCドライブの中にある

 C:\ユーザー\(your-name)\Anaconda3\Library\bin\tessdata  

の中に持ってきましょう。

(Windowsの話です。MacなどほかのOSはすみませんわかりません。)

こうすることで日本語データを認識することができます。

pyocrのインストール

では最後にpyocrをインストールします。これはpythonでOCRを使うことができるようにするためのモジュールです。

これは簡単でAnacondaPromptで

pip install pyocr

とすればインストールできます。



OCRを試してみる

では実際にできるかどうか試してみましょう。

OCRツールが機能しているか確認する

今回はjupyternotebookで操作していきます。

まず、OCRツールが機能しているか確かめます。

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)
# The tools are returned in the recommended order of usage
tool = tools[0]
print("Will use tool '%s'" % (tool.get_name()))
# Ex: Will use tool 'libtesseract'

langs = tool.get_available_languages()
print("Available languages: %s" % ", ".join(langs))
lang = langs[0]
print("Will use lang '%s'" % (lang))

と打ち込み

Will use tool 'Tesseract (sh)'
Available languages: eng, jpn, osd
Will use lang 'eng'

とかえってくれば問題ないかと思います。

「Available languages」にjpnが入っていれば日本語はしっかりと認識してくれます。

画像データを読み込んでテキスト化

今回はWikipediaにあるpythonの説明をテキスト化したいと思います。

python-ja.png

これを「python-ja.png」として保存します。

そして、jupyternotebookで以下のコードを打ち込みます。

txt = tool.image_to_string(
    Image.open('python-ja.png'),
    lang="jpn",
    builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)
print( txt )

すると、以下のように出力されると思います。

Python チ ュ ー ト リ ア ル

Python は 強 力 で 、 学 び や す い プ ロ グ ラ ミ ン グ 言 語 で す 。 効 率 的 な 高 レ ベ ル デ ー タ 橙 造 と 、 シ ン ブ ル で 効 果 的 な
オ ブ ジェ ク ト 指 向 プ ロ グ ラ ミ ン グ 機 橙 を 備 え て い ま す 。 Python は 、 洗 練 さ れ た 文 法 ・ 動 的 な デ ー タ 型 付 け ・ イ
ン タ ー プ リ タ で あ る こ ご と な ど か ら 、 ス ク リ プ テ ィ ン グ や 高 速 ア プ リ ケ ー シ ョ ン 開 発 (Rapid Application
Development: RAD) に 理 想 的 な プ ロ グ ラ ミ ン グ 言 語 と な っ て い ま す 。

Python Web サ イ ト (https:/www python_org) は 、 Python イ ン タ ー プ リ タ と 標 準 ラ イ ブ ラ リ の ソ ー ス コ ー ド と 、
主 要 プ ラ ッ ト フ ォ ー ム ご と に コ ン パ イ ル 済 み の バ イ ナ リ フ ァ イ ル を 無 料 で 配 布 し て い ま す 。 ま た 、Python Web
サ イ ト に は 、 無 料 の サ ー ド バ ー テ デ テ ィ モ ジ ュ ー ル や プ ロ グ ラ ム 、 ツ ー ル 、 ド キ ュ メ ン ト な ど も 紹 介 し て い ま す 。
Python イ ン タ プ リ タ は 、 簡 単 に C/C++ 言 語 な ど で 実 装 さ れ た 関 数 や デ ー タ 型 を 組 み 込 み 、 拡 張 で き ま す 。 ま
た 、 ア プ リ ケ ー シ ョ ン の カ ス タ マ イ ズ を 行 う 、 拡 張 言 語 と し て も 適 し て い ま す 。

ご こ の チ ュ ー ト リ ア ル は 、Python 言 語 の 基 本 的 な 概 念 と 機 能 を 、 形 式 ば ら ず に 紹 介 し ま す 。 読 む だ け で は な く 、
Python イ ン タ ー プ リ タ で 実 際 に サ ン プ ル を 実 行 す る と 理 解 が 深 ま り ま す が 、 サ ン プ ル は そ れ ぞ れ 独 立 し て い ま
す の で 、 た だ 読 む だ け で も 良 い で し ょ う 。

標 準 オ ブ ジ エ ェ ク ト や モ ジ ュ ー ル の 詳 細 は 、 Python 標 準 ラ イ ブ ラ リ を 参 照 し て く だ さ い 。 ま た 、 正 式 な 言 語 定
義 は 、 Python 言 語 リ フ ァ レ ン ス に あ り ま す 。 C 言 語 や C++ 言 語 で 拡 張 モ ジ ュ ー ル を 書 く な ら 、 Python イ ン
タ プ リ タ の 拡 張 と 埋 め 込 み や Python/C APIL リ フ ァ レ ン ス マ ニ ュ ア ル を 参 照 し て く だ さ い 。Python の 解 説 書 ち
販 売 さ れ て い ま す 。

そこそこの精度で文字起こしできていますね!!

この技術を使ってこんなものも作ってみました。



参考

Anacondaだけで環境を構築して、Python+OCRをやってみる - Qiita
背景 Anaconda + python + tesseract で文字認識をしたみた。 tesseractがHomeBrewやMacPortを使ったりする方法しかネット上になかったため、 今回はAnacondaだけで、インスト...
tesseract 言語データのダウンロード | Binary Star
ダウンロードした言語データは、Windows版Tesseract および Linux版Tesseract のどちらにでも使用できます。 言語データについて はじめに、言語データは、...
tesseract-ocr/tesseract
Tesseract Open Source OCR Engine (main repository) - tesseract-ocr/tesseract
tesseract-ocr/tesseract
Tesseract Open Source OCR Engine (main repository) - tesseract-ocr/tesseract

コメント

  1. […] これを 前回の「画像をテキストに変換する方法」と合わせることで、 […]

タイトルとURLをコピーしました