100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 计算机视觉知识点-车牌识别

计算机视觉知识点-车牌识别

时间:2019-12-18 18:52:34

相关推荐

计算机视觉知识点-车牌识别

今天我来实现一个简单版本的车牌识别,目的是识别上边的这张图片中的车牌。我参考的开源代码是这个github地址。我的大体方案是:

车牌检测:我采用检测轮廓,如果有4个点就是车牌。虽然这种方法方法有些流氓做派,但是简单啊,不要嘲笑我没有使用ssd/yolo/级联分类器/纹理扫描的方法。

车牌剪切:检测到区域后,把图片剪切下来。

车牌识别:我是用tesseract进行识别。

#1.1 gray and reisizeimg = cv2.resize(img, (620,480) )gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #convert to grey scale

#1.2 blurgray = cv2.bilateralFilter(gray, 13, 15, 15)

#1.3 edeg detectedged = cv2.Canny(gray, 30, 200) #Perform Edge detection

#1.4 get rect from contourscontours=cv2.findContours(edged.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)contours = imutils.grab_contours(contours)contours = sorted(contours,key=cv2.contourArea, reverse = True)[:10]screenCnt = Nonefor c in cnts:# approximate the contourperi = cv2.arcLength(c, True)approx = cv2.approxPolyDP(c, 0.018 * peri, True)# if our approximated contour has four points, then# we can assume that we have found our screenif len(approx) == 4:screenCnt = approxbreak

#1.5 show plate# Masking the part other than the number platemask = np.zeros(gray.shape,np.uint8)new_image = cv2.drawContours(mask,[screenCnt],0,255,-1,)new_image = cv2.bitwise_and(img,img,mask=mask)

#2.1 crop# Now crop(x, y) = np.where(mask == 255)(topx, topy) = (np.min(x), np.min(y))(bottomx, bottomy) = (np.max(x), np.max(y))Cropped = gray[topx:bottomx+1, topy:bottomy+1]

#3.1 recognise#Read the number platetext = pytesseract.image_to_string(Cropped, config='--psm 11')print("Detected license plate Number is:",text)

总结:

这种车牌识别方案不能在现实中使用,首先检测方法找轮廓在实际中是不行的,实际中可以使用对垂直边缘进行分析、yolo检测、级联分类器等方法来实现。

tesseract对于扫描图片效果可以,但是对于实际的车牌图片效果比较差,可以采用通过模板匹配的方法进行车牌字符分割,然后调用一个小分类器进行识别,也可以直接使用lstm方法进行一行的识别。

最后的话:

我是一个工作的程序员,工作中经常会遇到需要查一些关键技术,但是很多技术名词的介绍都写的很繁琐,为什么没有一个简单的/5分钟能说清楚的博客呢. 我打算有空就写写这种风格的指南文档.CSDN上搜蓝色的杯子, 没事多留言,指出我写的不对的地方,写的排版风格之类的问题,让我们一起爱智求真吧.wisdomfriend@是我的邮箱,也可以给我邮箱留言.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。