Pythonで機械学習を使用して画像のOCRを作成したいと思います。画像をグレースケールに変換して前処理し、大津しきい値を適用しました。次に、輪郭を使用してテキスト領域を見つけ、その上に長方形のボックスを描画しました。しかし、その後、検出されたテキストを抽出するにはどうすればよいですか。 pytesseractは使いたくない。予測にknn、SVM、CNNを使用したいのですが、私が直面している主な問題は、輪郭を使用して画像から検出されたテキストを取得する方法です。
Image=cv2.imread('DL.png')
I=Image.copy()
i=Image.copy()
G_Image=cv2.cvtColor(Image,cv2.COLOR_BGR2GRAY)
#Otsu Thresholding
blur = cv2.GaussianBlur(G_Image,(1,1),0)
ret,th = cv2.threshold(blur,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
image, contours, hierarchy = cv2.findContours(th,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
#img = cv2.drawContours(Image, contours, -1, (0,255,0), 3)
for contour in contours:
# get rectangle bounding contour
[x, y, w, h] = cv2.boundingRect(contour)
if h>20:
continue
# draw rectangle around contour on original image
cv2.rectangle(I, (x, y), (x + w, y + h), (255, 0, 255), 0)
上記は私が書いたコードです。 これは、検出されたテキストに輪郭の長方形が形成された後の出力画像です
次に、これらの検出された領域のみを使用して、画像からテキストを取得するために機械学習アルゴリズム(KNN、SVM、またはCNN)に送信するにはどうすればよいですか。
テキスト領域をトリミングするには、numpyスライスを使用できます(画像は事実上numpy配列であるため)。
文字= I [y:y + h、x:x + w]
ループ内で、すべての文字に対して新しいnumpy配列(トリミングされた画像)を作成できます。これらのそれぞれのサイズを変更して、たとえば28x28で、人気のあるMNISTの例に適した形状になっています。
さらなるアイデアについては、手書きの文字のMLモデルを作成する次のgit-repoをお勧めします: [〜#〜] emnist [〜#〜]
DEPARTMENTの「DE」や「RT」のような不正確/粗すぎるテキスト検出をどのように処理するかは興味深いでしょう。 Andrew NG機械学習のCourseraコースで、MLモデルを使用して文字間のギャップを検出し、これらによって分割することを提案しました。