我尝试了镶嵌,结果是:7G285274-AF现在我真的不知道该怎么办,如果有人知道请告诉我
首先,我从汽车图像中检测车牌,然后我必须从车牌中识别字符。这是我的代码:
import numpy as np
import cv2
from PIL import Image
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
def ratioCheck(area, width, height):
ratio = float(width) / float(height)
if ratio < 1:
ratio = 1 / ratio
if (area < 1063.62 or area > 73862.5) or (ratio < 3 or ratio > 6):
return False
return True
def ratio_and_rotation(rect):
(x, y), (width, height), rect_angle = rect
if(width>height):
angle = -rect_angle
else:
angle = 90 + rect_angle
if angle>15:
return False
if height == 0 or width == 0:
return False
area = height*width
if not ratioCheck(area,width,height):
return False
else:
return True
def clean2_plate(plate):
gray_img = cv2.cvtColor(plate, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray_img, 110, 255, cv2.THRESH_BINARY)
if cv2.waitKey(0) & 0xff == ord('q'):
pass
num_contours,hierarchy = cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
if num_contours:
contour_area = [cv2.contourArea(c) for c in num_contours]
max_cntr_index = np.argmax(contour_area)
max_cnt = num_contours[max_cntr_index]
max_cntArea = contour_area[max_cntr_index]
x,y,w,h = cv2.boundingRect(max_cnt)
if not ratioCheck(max_cntArea,w,h):
return plate,None
final_img = thresh[y:y+h, x:x+w]
return final_img,[x,y,w,h]
else:
return plate, None
def isMaxWhite(plate):
avg = np.mean(plate)
if(avg>=115):
return True
else:
return False
img = cv2.imread("car.jpg")
cv2.imshow("input",img)
img2 = cv2.GaussianBlur(img, (3,3), 0)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
img2 = cv2.Sobel(img2,cv2.CV_8U,1,0,ksize=3)
_,img2 = cv2.threshold(img2,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
element = cv2.getStructuringElement(shape=cv2.MORPH_RECT, ksize=(17, 3))
morph_img_threshold = img2.copy()
cv2.morphologyEx(src=img2, op=cv2.MORPH_CLOSE, kernel=element, dst=morph_img_threshold)
num_contours, hierarchy= cv2.findContours(morph_img_threshold,mode=cv2.RETR_EXTERNAL,method=cv2.CHAIN_APPROX_NONE)
cv2.drawContours(img2, num_contours, -1, (0,255,0), 1)
for i,cnt in enumerate(num_contours):
min_rect = cv2.minAreaRect(cnt)
if ratio_and_rotation(min_rect):
x,y,w,h = cv2.boundingRect(cnt)
plate_img = img[y:y+h,x:x+w]
print("Number identified number plate...")
cv2.imshow("num plate image",plate_img)
if(isMaxWhite(plate_img)):
clean_plate, rect = clean2_plate(plate_img)
if rect:
fg=0
x1,y1,w1,h1 = rect
x,y,w,h = x+x1,y+y1,w1,h1
plate_im = Image.fromarray(clean_plate)
text = pytesseract.image_to_string(plate_im, lang='eng', config='--psm 7 --oem 3')
print("Number Detected Plate Text : ",text)
cv2.waitKey()
使用easyocr
。它使用深度学习模型:
# install using python -m pip install easyocr
import easyocr
# create reader
reader = easyocr.Reader(['en'])
# read characters
img = "https://i.stack.imgur.com/2Kzu8.png"
characters = reader.readtext(img, detail=0)
print(characters)
# ['ZG', '8524AF']
有关详细信息、参数和语言,请参阅留档
为避免捕获无车牌号字符,请使用允许列表参数
#Narrowing characters
import string
ALLOWED_LIST = string.ascii_uppercase+string.digits
characters = reader.readtext(img, detail=0, allowlist=ALLOWED_LIST )
print(characters)
# ['ZG', '8524AF']
我的Google Colab结果
我是一名程序员,但我之前没有使用Python或其任何库的经验,甚至没有OCR/ALPR的整体经验。我有一个脚本,我做的(基本上复制和粘贴其他脚本在整个网络上),我假装用来识别车牌。但事实是我的代码现在非常糟糕。它可以很好地识别图像中的文本,但它很难捕捉车牌。我很少能用它拿到牌照。 因此,我需要一些帮助,说明我应该如何更改代码以使其更好。 在我的代码中,我只需选择一个图像,将其转换为二进制和BW,然
我试图识别车牌,但遇到错误,如错误/未读取字符 下面是每个步骤的可视化: 从颜色阈值化变形关闭获得蒙版 以绿色突出显示的车牌轮廓过滤器 将板轮廓粘贴到空白遮罩上 Tesseract OCR的预期结果 BP 1309 GD 但我得到的结果是 BP 1309 6D 我尝试将轮廓切片为3切片 是的,它是有效的,但是如果我将差异图像插入到这个方法中,一些图像就无法识别,例如这个 字母N无法识别,但如果使用
甚至这张照片上的镶嵌也无法识别任何字符。我的代码是: 我的问题是,你知道如何取得更好的结果吗?更清晰的图像?尽管我的车牌质量较差,因此结果可以读取OCR(例如泰瑟拉克特)。 谢谢你的回答。真的,我不知道怎么做。
1.1. cirtus_lpr_sdk 1.1.1. SDK接口说明 1.2. android_demo Rokid Plate Recognition SDK and demo project. Author Email cmxnono cmxnono@rokid.com 1.1. cirtus_lpr_sdk Version:1.0 1.1.1. SDK接口说明 初始化 public long
我已经在python中安装和安装了pocketsphinx和sphinxbase包。我还为github获取了语音识别代码,并根据需要更改了数据和模式目录,但当我试图通过“python test.py”运行它时,它仍然无法通过语音进行流式传输。下面是代码: 请告诉我如何执行它。
我正在运行Ubuntu 18.04。 我使用mysql连接器-python连接Python到MySQL。 我使用的是Python 3.6.7,并且已经安装了mysql连接器-python。 我已经安装了mysql连接器-python-py3_8.0.13-1ubuntu18.10_all.deb. 在运行Python脚本时,mysql。连接器模块似乎加载正确,但脚本在碰到光标时失败。next()具