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をインストールする
opencv
1
pip install pyocr

これで文字認識した。どのくらいの精度があるのかはまだ確認していない。
opencv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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カメラでバーコードリーダー

VB.net Dictionaryクラスの初期化