tesseractでは認識されない読みやすいテキスト
次のEAST(Efficient and Accurate Scene Text Detector)のPyTorch実装を使用して、多数の画像のテキストの周囲に境界ボックスを識別して描画しました。これは非常にうまく機能します。
しかし、pytesseract
これらの画像からテキストを抽出して文字列に変換するために私が試しているOCRの次のステップは、ひどく失敗しています。との可能なすべての構成を使用する--oem
と--psm
、pytesseract
非常に明確なテキストのように見えるものを検出できません。たとえば、次のようになります。
認識されたテキストは画像の下にあります。コントラスト強調を適用し、拡張と侵食を試みましたが、テキストを認識させることができません。これは、テキストがさらに大きく鮮明な多くの画像の一例にすぎません。変換、構成、またはその他のライブラリに関する提案があれば役立ちます。
更新:ガウスぼかし+ Otsoしきい値処理を試した後、白い背景に黒いテキストを取得でき(明らかにpytesseractに理想的です)、スペイン語も追加しましたが、それでも非常にプレーンテキストを読み取ることができません-例:
ぎこちないものとして読みます。
処理されたテキスト画像はと
img_path = './images/fesa.jpg'
img = Image.open(img_path)
boxes = detect(img, model, device)
origbw = cv2.imread(img_path, 0)
for box in boxes:
box = box[:-1]
poly = [(box[0], box[1]),(box[2], box[3]),(box[4], box[5]),(box[6], box[7])]
x = []
y = []
for coord in poly:
x.append(coord[0])
y.append(coord[1])
startX = int(min(x))
startY = int(min(y))
endX = int(max(x))
endY = int(max(y))
#use pre-defined bounding boxes produced by EAST to crop the original image
cropped_image = origbw[startY:endY, startX:endX]
#contrast enhancement
clahe = cv2.createCLAHE(clipLimit=4.0, tileGridSize=(8,8))
res = clahe.apply(cropped_image)
text = pytesseract.image_to_string(res, config = "-psm 12")
plt.imshow(res)
plt.show()
print(text)
回答
これらの更新されたデータファイルを使用します。
このガイドは、すぐに使用できるパフォーマンスを批判します(そして、精度も影響を受ける可能性があります)。
トレーニングされたデータ。執筆時点で、Ubuntu18.10用のtesseract-ocr-engAPTパッケージは、おそらくトレーニングデータが破損しているために、すぐに使用できるパフォーマンスがひどいものになっています。
私が行った次のテストによると、更新されたデータファイルを使用するとより良い結果が得られるようです。これは私が使用したコードです:
import pytesseract
from PIL import Image
print(pytesseract.image_to_string(Image.open('farmacias.jpg'), lang='spa', config='--tessdata-dir ./tessdata --psm 7'))
spa.traineddata(サンプル画像にはスペイン語の単語が含まれていますよね?)をにダウンロードしました./tessdata/spa.traineddata
。そしてその結果は次のとおりです。
ARMACIAS
そして2番目の画像の場合:
PECIALIZADA:
私が使用し--psm 7
ているため、ここでそれは「単一のテキスト行として画像を扱う」を意味し、私はそれがあなたのテスト画像のために意味をなす必要があると思ったことを言います。
では、このGoogleのコラボあなたは私がしたテストを見ることができます。