pytesseract OCRで画像から数字だけを取得

pytesseract(tesseract-OCR)をPythonで使うときに、数字だけを拾いたいなぁ、と思ったんですけども。ホワイトリストの設定がサイトによって色々。とりあえず自分のやり方は以下でやりました。

pytesseract.image_to_string(myimage, lang='eng', config='--psm 6 --oem 1 -c tessedit_char_whitelist="0123456789-,"').strip()

-cのコンフィグ設定でホワイトリストに数字とカンマ、マイナスを入れてます。小数点は今回は使わないので入れてませんが、そこらへんは目的に合わせてカスタマイズしてください。ちなみに日本語のホワイトリストはあまりよろしくないらしいので、英数字までが良いのではないかしら。

–psm や –oem、-c のパラメーター数値の意味を知りたい場合は、コマンドプロンプトから
tesseract –help-extra をたたいて、さらに詳細ヘルプを表示するか、検索してみてくださいまし。

myimageはなるべく数字部分だけを切り抜いてグレースケール化したような画像が好ましいですね。またサイズが小さいと誤認識されがちなので、resizeなどで拡大してしまうのも手です。下のソースではopencvをcv2としてインポートしています。

import cv2
import pytesseract
~~~~~~~~~~~
img = img_gray[y1,y2,x1,x2]   #img_grayから解析したい部分を切り取る(x1,y1)-(x2,y2)
img_h,img_w=img.shape[:2]     #切り取った部分のサイズ
myimage = cv2.resize(img, dsize=(img_w*6,img_h*6)) # 6倍に拡大

value = pytesseract.image_to_string(myimage, lang='eng', config='--psm 6 --oem 1 -c tessedit_char_whitelist="0123456789-,"').strip()
print(value)

タイトルとURLをコピーしました