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桁の数字の ocr にすごく苦戦していたのですが、あっさり全部正確に認識しました。
今まで Python + pytesseract では全然認識しなかったのに。
出来るときはこんなものですよね。
資料のデータベースを作成する時に数字の読み取りは必須なので、データベース作成プログラムでも作ってみたいです。
以上