pyterresect的最后一个调用不是返回字符串,而是只返回该图像的每个像素的打印值。

import numpy as np
import cv2
import  imutils
from PIL import Image
from pytesseract import image_to_string

count = 0
for c in cnts:
        peri = cv2.arcLength(c, True)
        approx = cv2.approxPolyDP(c, 0.02 * peri, True)
        if len(approx) == 4:  # Select the contour with 4 corners
            NumberPlateCnt = approx #This is our approx Number Plate Contour
            pl=NumberPlateCnt
            print(NumberPlateCnt)
            if(pl[0][0][1]+10>pl[2][0][1] or pl[0][0][0]+40>pl[2][0][0]):
                continue
            filter_img = image[pl[0][0][1]:pl[2][0][1],pl[0][0][0]:pl[2][0][0]]
            print("Number Plate Detected")
            cv2_imshow(filter_img)

            Number=pytesseract.image_to_string(filter_img,lang='eng')
            print("Number is :",Number)
            cv2.waitKey(0)
            cv2.drawContours(image, [NumberPlateCnt], -1, (0, 255, 0), 3)

print("Final Image With Number Plate Detected")
cv2_imshow(image)

cv2.waitKey(0) #Wait for user input before closing the images displayed

我在这里得到的数字应该是一些字符串,但它的打印就像我们在打印图像时得到的某种矩阵。

最佳答案

你得到的矩阵很可能来自这行代码:

print(NumberPlateCnt)

pytesseract.image_to_string只是无法识别您试图获取的矩形轮廓上的任何文本,这意味着以下两行将为您打印空结果:
Number=pytesseract.image_to_string(filter_img,lang='eng')
print("Number is :",Number)

由于您是在具有最大区域的轮廓上迭代,因此输出应该如下所示:
检测到牌照
号码是:
[223278]]
[[272279]]
[[274 282]]
[[224 281]]]
“数字是:”字符串只是空的,下面的矩阵结果将从下一次等高线计算迭代中得出。
要解决这个问题,可以检查PyTesseract返回的字符串是否包含任何内容,如下所示:
   if (len(Number)):
       print("Number is :", Number)

只有当它包含PyTesseract识别的符号时,它才会打印数字。

关于python - 车辆牌照OCR,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57622389/

10-09 03:32