Python OpenCV で文字認識(OCR)

Python OpenCV で文字認識(OCR)をやってみた。
(最終回)Python + OpenCVで遊んでみる(OCR編)こちらのサイトを参考にした。
こちらから 「tesseract-ocr」をダウンロード。64bit版をDLした
tesseract-ocr-w64-setup-v5.0.0-alpha.20200223.exe (64 bit) resp.
OCRデータをダウンロードする
Data Files for Version 4.00 (November 29, 2016)
jpn Japanese jpn.traineddata

jpn.traineddataを以下のフォルダにコピーする。
C:\Program Files\Tesseract-OCR\tessdata

インストール後、下記のパスを環境変数に登録します。
Pathに「C:\Program Files\Tesseract-OCR」を追加する。
環境変数項目としてTESSDATA_PREFIXを作成して、「C:\Program Files\Tesseract-OCR\tessdata」を追加する

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

これで文字認識した。どのくらいの精度があるのかはまだ確認していない。
import pyocr
import pyocr.builders
import cv2
from PIL import Image
import sys
 
#利用可能なOCRツールを取得
tools = pyocr.get_available_tools()
 
if len(tools) == 0:
    print("OCRツールが見つかりませんでした。")
    sys.exit(1)
 
#利用可能なOCRツールはtesseractしか導入していないため、0番目のツールを利用
tool = tools[0]
 
#画像から文字列を取得
res = tool.image_to_string(Image.open("doc.png"),lang="jpn",builder=pyocr.builders.WordBoxBuilder(tesseract_layout=6))
 
#取得した文字列を表示
#print(res)
for d in res:
    print(d.content,end = "") #どの文字として認識したか

#以下は画像のどの部分を検出し、どう認識したかを分析
out = cv2.imread("doc.png")
 
for d in res:
    #print(d.content) #どの文字として認識したか
    #print(d.position) #どの位置を検出したか
    cv2.rectangle(out, d.position[0], d.position[1], (0, 0, 255), 2) #検出した箇所を赤枠で囲む
 
#検出結果の画像を表示
cv2.imshow("img",out)
cv2.waitKey(0)
cv2.destroyAllWindows()


コメント

このブログの人気の投稿

Python OpenCVとWebカメラでバーコードリーダー

OpenCV 画像の足し算

OpenCV3とPython3で形状のある物体の輪郭と方向を認識する(主成分分析:PCA、固有ベクトル)