電車やトラックなどの車両のOCRを行って、それらに書かれた数字や文字を識別しようとしています。(これはナンバー プレート識別 OCR ではないことに注意してください)
この画像を撮りました。アイデアは、テキストを抽出できるようにすることです-それに書かれたBN SF 721 734。
前処理として、まずこの画像をグレースケールに変換してから、次のような 2 値化画像に変換しました。
私はtesseractでいくつかのコードを書きました。
myimg = "image.png"
image = Image.open(myimg)
with PyTessBaseAPI() as api:
api.SetImage(image)
api.Recognize()
words = api.GetUTF8Text()
print words
print api.AllWordConfidences()
このコードにより、信頼値 95 の空白の出力が得られました。これは、この画像にテキストが存在しないことを tesseract が 95% 信頼していたことを意味します。
次に、Tesseract の setrectangle API を使用して、画像全体で OCR を実行するのではなく、画像内の特定のウィンドウで OCR を制限しました。
myimg = "image.png"
image = Image.open(myimg)
with PyTessBaseAPI() as api:
api.SetImage(image)
api.SetRectangle(665,445,75,40)
api.Recognize()
words = api.GetUTF8Text()
print words
print api.AllWordConfidences()
print "----"
座標 665、445、75、および 40 は、画像内のテキスト BNSF 721 734 を含む長方形に対応します。665 - 上、445 - 左、75 - 幅、40 - 高さ。
私が得た出力はこれでした:
an s
m,m
私の質問は、どうすれば結果を改善できますか? setrectangle 関数の値をいじってみましたが、結果は少し異なりましたが、どれも同じように悪いものでした。
これを改善する方法はありますか?
画像を 2 値化した画像に変換する方法に興味がある場合は、OpenCV を使用しました
img = cv2.imread(image)
grayscale_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
(thresh, im_bw) = cv2.threshold(grayscale_img, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
thresh = 127
binarized_img = cv2.threshold(grayscale_img, thresh, 255, cv2.THRESH_BINARY)[1]