手書きの署名が含まれているスキャンされたドキュメントのOCRを実行しようとしています。下の画像を参照してください。
私の質問は簡単ですが、署名を無視しながらOCRを使用している人の名前を抽出する方法はありますか? Tesseract OCRを実行すると、名前を取得できません。以下のコードを使用して、グレースケーリング/ぼかし/しきい値処理を試しましたが、うまくいきませんでした。助言がありますか?
image = cv2.imread(file_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image = cv2.GaussianBlur(image, (5, 5), 0)
image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
scikit-image
のガウスフィルターを使用して、最初に細い線をぼかし(適切なsigma
を使用)、次に画像を2値化して(たとえば、いくつかのthresholding
関数を使用)、次に形態学的操作を行うことができます。 (remove_small_objects
またはopening
と適切なstructure
など)、署名をほとんど削除してから、スライディングウィンドウで数字の分類を試みます(すでにいくつかのトレーニングを受けていると仮定します)テスト画像のようにぼやけた文字)。以下に例を示します。
from skimage.morphology import binary_opening, square
from skimage.filters import threshold_minimum
from skimage.io import imread
from skimage.color import rgb2gray
from skimage.filters import gaussian
im = gaussian(rgb2gray(imread('lettersig.jpg')), sigma=2)
thresh = threshold_minimum(im)
im = im > thresh
im = im.astype(np.bool)
plt.figure(figsize=(20,20))
im1 = binary_opening(im, square(3))
plt.imshow(im1)
plt.axis('off')
plt.show()
[編集]:ディープラーニングモデルを使用する
別のオプションは、アルファベットがオブジェクトであるオブジェクト検出問題として問題を提起することです。 ディープラーニングを使用できます:オブジェクト検出にCNN/RNN/Fast RNNモデル(テンソルフロー/ケラスを使用)または Yoloモデル(yoloモデルを使用した車の検出については、この 記事 を参照してください)。
モルフォロジー操作で画像を前処理しようとする場合があります。
opening を試して、署名の細い線を削除できます。問題は、句読点も削除される可能性があることです。
image = cv2.imread(file_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))
image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
カーネルのサイズや形状を変更する必要があるかもしれません。別のセットを試してみてください。
入力画像はグレースケールだと思います。そうでなければ、インクの色が違うと独特の力が出るかもしれません。
ここでの問題は、トレーニングセット(おそらく)には、署名を乱すことなく、ほとんど「通常の」文字しか含まれていないため、当然、分類子は署名のインクが付いた文字では機能しません。進む方法の1つは、このタイプの文字でトレーニングセットを拡張することです。もちろん、これらの文字を1つずつ抽出してラベルを付けるのはかなりの仕事です。
署名の異なる実際の文字を使用できますが、同様の文字を人為的に生成することも可能です。必要なのは、署名のさまざまなスニペットが上に移動したさまざまな文字です。このプロセスは自動化されている可能性があります。
同じタスクで他のOCRプロバイダーを試すことができます。たとえば、 https://cloud.google.com/vision/ これを試してください。画像をアップロードして無料で確認できます。
必要なテキストを抽出できるAPIから応答を受け取ります。そのテキストを抽出するためのドキュメントも同じWebページにあります。
これをチェックしてください。これは、そのテキストをフェッチするのに役立ちます。これは私が同じ問題に直面したときの私自身の答えです。 Google Vision API応答をJSONに変換