解析エンジニアの自動化 blog

コツコツと自動化した方法を残す blog

Python + pyocr で ocr したら高認識率で1桁数字も認識した



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。



この記事の目次



目的


今まで Tesseract を使用して ocr してきました。
この際、 pytesseract という Python から Tesseract を使うためのライブラリを使っていました。

しかし、私のソースコードや操作が悪かったのかもしれませんが、1桁の数字を認識出来ないという問題がありました。

そこで、pyocr という Python から Tesseract を使うためのライブラリを使って ocr してみます。



プログラム

ソースコード


# -*- coding: utf-8 -*-
###############################################################################
# ライブラリインポート
###############################################################################
import os                       # os の情報を扱うライブラリ
from PIL import Image           # 画像処理ライブラリ
import matplotlib.pyplot as plt # データプロット用ライブラリ
import numpy as np              # データ分析用ライブラリ
import pyocr                    # OCR ラッパーライブラリ 対応OCR:Tesseract, Cuneiform
import pyocr.builders           # OCR ラッパーライブラリ 対応OCR:Tesseract, Cuneiform
import sys                      # 実行環境関連ライブラリ
 
# カレントディレクトリを変更する
os.chdir("C:\\作業\ocr-Preprocessing")
 
Image000 = '000_Const_Image.jpg'
 
tools = pyocr.get_available_tools()
if len(tools) == 0:
    print("No OCR tool found")
    sys.exit(1)
 
tool = tools[0]
 
#################### 画像の読み込み ####################
img = Image.open(Image000)
 
txt = tool.image_to_string(
        img,
        lang="eng",
        builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)
 
# 画像を配列に変換
im_list = np.array(img)
 
# データプロットライブラリに貼り付け
plt.imshow(im_list)
 
# 表示
plt.show()
 
# 抽出したテキストの出力
print()
print("text ↓")
print(txt)
print()



画像処理の結果

図1 は WinPython の実行画面、図2 は入力画面と認識文字の比較図です。


図1 WinPython の実行画面


図3 入力画面と認識文字の比較図



コメント

今まで1桁の数字の ocr にすごく苦戦していたのですが、あっさり全部正確に認識しました。

今まで Python + pytesseract では全然認識しなかったのに。

出来るときはこんなものですよね。

資料のデータベースを作成する時に数字の読み取りは必須なので、データベース作成プログラムでも作ってみたいです。



以上