Python 画像中の文字認識をして、テキストへ出力する「pyocr/Tesseract-OCR」

光学文字認識の技術であるOCR(Optical Character Recognition)を使用します。

▼必要なライブラリとソフトのインストール

1. pyocrをインストールする
pip install pyocr

2. tesseract-OCRをインストールする
Windowsは下記リンク先にexeファイルがあります。

Home · UB-Mannheim/tesseract Wiki · GitHub

インストール途中で下記のようにチェックが外れてる箇所が表示されます。

f:id:HK29:20200607230802j:plain

ここで、Additional script data(download)内にあるJapaneseにチェックを入れます。

f:id:HK29:20200607230828j:plain

また、Additional language data(download)内にあるJapaneseにもチェックを入れる

f:id:HK29:20200607230854j:plain

3. tesseract-OCRのパス(path)を通す
まず、インストールされた先を一応確認します。64bit版でfor all userの場合は、例えば次にインストされます。C:\Program Files\Tesseract-OCR

次に、PCアイコンを右クリックしてプロパティ>システムの詳細設定>環境変数>システム環境変数のPathを選択した状態で「編集」>空白行に、上記tesseract-OCRがインストールされたパスを入力して再起動します。

 

▼本コードの実施例

下図はテスト用の画像ファイルです(wikiより)。文章が複数行に渡って記載されています。

f:id:HK29:20200607232417p:plain

本コードを実行すると、文字を認識して下図のようにテキストファイルへ出力します。

f:id:HK29:20200607232701p:plain

■本プログラム

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os, sys
from PIL import Image
import pyocr
import pyocr.builders

def main():
    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()))

    langs = tool.get_available_languages()
    # 文字起こしできる言語を表記する
    print("Available languages: %s" % ", ".join(langs))
    # 指定した言語を選択する(ここでは、日本語)
    lang_list = [str for str in langs if str == target_langauge]
    lang = lang_list[0]
    print("Will use lang '%s'" % (lang))

    for file in files:
        txt = tool.image_to_string(
            Image.open(file),
            lang=lang,
            builder=pyocr.builders.TextBuilder()
        )
        print(r'##############', file + '\n')
        print(txt)
        with open(file[:-4] + '.txt', 'w') as f:
            f.write(txt)

if __name__ == '__main__':
    files = ['test.png']
    target_langauge = 'jpn'
    main()
    

以上

<広告>