我正在创建一个车牌识别器,我的车牌输入都是单行和双行。代码适用于单行。它还可以识别双排板中的字符,但不能像图像中那样排列字符。这是用于识别和代码的图像车牌`
import pytesseract
import cv2
# If you don't have tesseract executable in your PATH, include the following:z
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files (x86)\Tesseract-OCR\tesseract.exe'
# point to license plate image (works well with custom crop function)
img = cv2.imread('3.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
blur = cv2.GaussianBlur(gray, (3,3), 0)
gray = cv2.medianBlur(gray, 3)
# perform otsu thresh (using binary inverse since opencv contours work better with white text)
ret, thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY_INV)
#cv2.imshow("Otsu", thresh)
#cv2.waitKey(0)
rect_kern = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
# apply dilation
dilation = cv2.dilate(thresh, rect_kern, iterations = 1)
#cv2.imshow("dilation", dilation)
#cv2.waitKey(0)
# find contours
try:
contours, hierarchy = cv2.findContours(dilation, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
except:
ret_img, contours, hierarchy = cv2.findContours(dilation, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
sorted_contours = sorted(contours, key=lambda ctr: cv2.boundingRect(ctr)[0])
# create copy of image
im2 = gray.copy()
plate_num = ""
# loop through contours and find letters in license plate
for cnt in sorted_contours:
x,y,w,h = cv2.boundingRect(cnt)
height, width = im2.shape
# if height of box is not a quarter of total height then skip
if height / float(h) > 6: continue
ratio = h / float(w)
# if height to width ratio is less than 1.5 skip
if ratio < 1.5: continue
area = h * w
# if width is not more than 25 pixels skip
if width / float(w) > 15: continue
# if area is less than 100 pixels skip
if area < 100: continue
# draw the rectangle
rect = cv2.rectangle(im2, (x,y), (x+w, y+h), (0,255,0),2)
roi = thresh[y-5:y+h+5, x-5:x+w+5]
roi = cv2.bitwise_not(roi)
roi = cv2.medianBlur(roi, 5)
#cv2.imshow("ROI", roi)
#cv2.waitKey(0)
text = pytesseract.image_to_string(roi, config='-c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ --psm 8 --oem 3')
#print(text)
plate_num += text
print(plate_num)
cv2.imshow("Character's Segmented", im2)
cv2.waitKey(0)
cv2.destroyAllWindows()
` 它以这种形式给出输出:5
大号
7
乙
0
乙
0
我希望输出为:LEB 5700