Я планирую выполнить OCR на индийских номерных знаках.Я использовал Tesseract 4.0 beta, который использует движок LSTM для распознавания текста.Хотя распознанные символы не являются правильными.
Я использовал cv2.Laplacian()
при съемке изображений без размытия и выполнял шумоподавление, используя cv2.fastNlMeansDenoisingColored()
на изображении.
file_path = '/home/aayush/Downloads/Vision/number_plates/'
image_path = sorted(list(paths.list_images(file_path)))
#load image
for image in image_path:
img = cv2.imread(image)
img = cv2.fastNlMeansDenoisingColored(img,None,10,10,7,21)
#test 1
#sharpen the image
kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
img = cv2.filter2D(img, -1, kernel)
#thresholding
ret,img_th = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
#invert image
inv_img = cv2.bitwise_not(img_th)
config = ('-l eng --oem 1 --psm 6')
#dilating image :
kernel = np.ones((2,2),np.uint8)
erosion = cv2.erode(inv_img,kernel,iterations = 1)
text = pytesseract.image_to_string(inv_img, config=config)
print(text)
cv2.putText(img,text,(20,20),0, 5e-3 * 200, (255,255,255),2)
cv2.imshow("Image:",inv_img)
if cv2.waitKey(0) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
ДляПредварительная обработка Я выполнил следующие шаги:
- Заостренное изображение
- Применение порогового значения Otsu
- Устранение меньших шумов / контуров
- Инвертированное изображение
- OCR с использованием Tesseract 4.0 --oem 1 (который использует LSTM в качестве модуля обнаружения)
![Orignal image](https://i.stack.imgur.com/w3uuu.jpg)
![otsu thresholded image](https://i.stack.imgur.com/DjU9t.png)
![Contour removed image](https://i.stack.imgur.com/ynXvX.png)
Обнаруженный вывод: OL 1CT 5079
(что выглядит нормально)
Можете ли вы предложить любую другую предварительную обработку, необходимую для улучшения изображения (уменьшения шума)?
Также есть способограничить специальные символы в Tesseract?