Обучите модель обнаруживать и распознавать символы (не написанные от руки) на изображении - PullRequest
0 голосов
/ 07 мая 2020

Я пытался выполнить распознавание текста на этикетках bottle алкоголя. Я хочу обнаружить персонажей, а затем распознать их. Я пробовал использовать API (Tesseract, ocr, space et c), это не дает хороших результатов. Я видел много проектов CRNN для одного и того же, но они использовали набор данных MJSynth или что-то похожее на такой набор данных. Я не хочу использовать набор данных всех бутылок с алкоголем, так как их много, и я хочу делать это по символам.

Я использовал набор данных 74k char, обучил модель и использовал контуры, чтобы получить ограничивающую рамку персонажа. Но модель не дает точных результатов. Кроме того, контуры не последовательные.

Вот код:

labels = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
import cv2
import numpy as np
im = cv2.imread('img1.jpg',0)
ret,thresh1 = cv2.threshold(im,127,255,cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh1,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
    x,y,w,h = cv2.boundingRect(cnt)
    #following if statement is to ignore the noises and save the images which are of normal size(character)
    if w > 18 and w < 90  and h > 30 :
       cropped = thresh1[y:y+h,x:x+w]    
       ret,thresh2 = cv2.threshold(cropped,127,255,cv2.THRESH_BINARY_INV)
       thresh2 = cv2.resize(thresh2,(32,32))
       img = image.img_to_array(thresh2)
       img = np.expand_dims(img,axis=0)
       result = model.predict(img)
       index = np.argmax(result)
       print(labels[index], end="")

Любая помощь с приведенным выше кодом или любыми другими предложениями и различными методами буду признателен за это! Спасибо.

...