Вот примерное представление о том, как вы можете решить свою проблему.Вы можете построить поверх этого.Вам нужно извлечь номерной знак с картинки, а затем отправить изображение на ваш тессеракт.Прочитайте комментарии к коду, чтобы понять, что я пытаюсь сделать.
import numpy as np
import cv2
import pytesseract
import matplotlib.pyplot as plt
img = cv2.imread('/home/muthu/Documents/3r9OQ.jpg')
#convert my image to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#perform adaptive threshold so that I can extract proper contours from the image
#need this to extract the name plate from the image.
thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2)
contours,h = cv2.findContours(thresh,1,2)
#once I have the contours list, i need to find the contours which form rectangles.
#the contours can be approximated to minimum polygons, polygons of size 4 are probably rectangles
largest_rectangle = [0,0]
for cnt in contours:
approx = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True)
if len(approx)==4: #polygons with 4 points is what I need.
area = cv2.contourArea(cnt)
if area > largest_rectangle[0]:
#find the polygon which has the largest size.
largest_rectangle = [cv2.contourArea(cnt), cnt, approx]
x,y,w,h = cv2.boundingRect(largest_rectangle[1])
#crop the rectangle to get the number plate.
roi=img[y:y+h,x:x+w]
#cv2.drawContours(img,[largest_rectangle[1]],0,(0,0,255),-1)
plt.imshow(roi, cmap = 'gray')
plt.show()
Вывод - это номерной знак, прикрепленный ниже:
Теперь передайте это обрезанное изображение в ваш тессеракт.
gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2)
text = pytesseract.image_to_string(roi)
print text
Я получаю приведенный ниже вывод для образца изображения, которым вы поделились.
Анализ будет более точным, если вы в перспективе преобразуете изображение номерного знака в прямоугольник ограничительной рамки, а также удалите лишние границы вокруг.Дайте мне знать, если вам тоже нужна помощь.
Приведенный выше код не работает для второго изображения, если оно используется как есть, потому что я фильтрую поиск по полигонам с 4 сторон.Надеюсь, у вас есть идея.