3

電車やトラックなどの車両の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]
4

1 に答える 1