私は列車やトラックなどの車両のOCRを行い、文字や数字を識別しようとしています。 (これはナンバープレート識別OCRではないことに注意してください)車両に書かれたテキストのOCRを改善するには?
私はこのイメージを取った。アイデアは、BN SF 721 734のテキストを抽出することです。前処理のために
は、私が最初にグレースケールに、この画像を変換してから、私はた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()
このコードは、私たTesseractは、テキストが、この画像では存在しないことを95%確信していたことを意味し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関数の値を使って遊んだが、結果は少しばらつきましたが、それらのすべてが同じように悪いものでした。
これを改善する方法はありますか?あなたは、私が二値化画像に画像を変換する方法に興味がある場合
、私は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]
OpenCVを使用してMSER領域を抽出してみてください。これをTesseractに送ってください –
@JeruLuke:このオプションを試してみましょう。私は彼らが現在どのように働いているのか分からないので、私はMSER地域について読む必要があります。私の質問は、それがOCRの精度を向上させるのに役立つのでしょうか、それとも、テキストの周りに矩形を自動的に抽出するのに役立ちますか?ありがとう – Piyush
ストローク幅変換を使用して、最初に画像内のテキストの位置を特定してみてください。特にテキストを見つけるために設計されています。原則として、あまりに早く2値化するのは避けてください。 – Rethunk