2021SC@SDUSC
源代码下载地址:HyperLPR: HyperLRP是一个开源的、基于深度学习高性能中文车牌识别库,由北京智云视图科技有限公司开发,支持PHP、C/C++、Python语言,Windows/Mac/Linux/Android/IOS 平台。
源码配置的详情见第一篇分析
这次主要分析detect.detectPlateRough()函数,当前文件引入了hyperlpr_py3文件夹下的detect.py文件的detectPlateRough()函数,含义为检测板材粗糙度,对图片进行粗糙度检测并进行有效修剪
def detectPlateRough(image_gray,resize_h = 720,en_scale =1.08 ,top_bottom_padding_rate = 0.05):
print(image_gray.shape)
if top_bottom_padding_rate>0.2:
print("error:top_bottom_padding_rate > 0.2:",top_bottom_padding_rate)
exit(1)
height = image_gray.shape[0]
padding = int(height*top_bottom_padding_rate)
scale = image_gray.shape[1]/float(image_gray.shape[0])
image = cv2.resize(image_gray, (int(scale*resize_h), resize_h))
image_color_cropped = image[padding:resize_h-padding,0:image_gray.shape[1]]
image_gray = cv2.cvtColor(image_color_cropped,cv2.COLOR_RGB2GRAY)
watches = watch_cascade.detectMultiScale(image_gray, en_scale, 2, minSize=(36, 9),maxSize=(36*40, 9*40))
cropped_images = []
for (x, y, w, h) in watches:
cropped_origin = cropped_from_image(image_color_cropped, (int(x), int(y), int(w), int(h)))
x -= w * 0.14
w += w * 0.28
y -= h * 0.6
h += h * 1.1;
cropped = cropped_from_image(image_color_cropped, (int(x), int(y), int(w), int(h)))
cropped_images.append([cropped,[x, y+padding, w, h],cropped_origin])
return cropped_images
传入的形参image_gray,resize_h = 720,en_scale =1.08 ,top_bottom_padding_rate = 0.05的含义分别为图片本身,图片调整大小的高度,图片缩放比例以及头部底部与内边距的比率
对头部底部与内边距的比率进行判断,若不在规定大小则结束该错误退出改该编译器
height = image_gray.shape[0]
padding = int(height*top_bottom_padding_rate)
scale = image_gray.shape[1]/float(image_gray.shape[0])
获取图片的垂直高度,内边距大小以及图片宽与高之比
image = cv2.resize(image_gray, (int(scale*resize_h), resize_h))
引用了库cv2,函数resize()是根据传入的图片本身image_gray,图片调整的宽度以及图片调整的高度对图片进行缩放,返回一个完成缩放的图片
image_color_cropped = image[padding:resize_h-padding,0:image_gray.shape[1]]
函数image_color_cropped()是根据颜色来裁剪图片,其调用了opencv中的方法,目的是裁剪出车牌照中的车牌图片,除去其他的无关的东西,为之后的分析图片做出有效处理
image_gray = cv2.cvtColor(image_color_cropped,cv2.COLOR_RGB2GRAY)
引用库cv2,函数cvtColor()是根据已裁剪完成的图片image_color_cropped并将其转换成灰度图片
watches = watch_cascade.detectMultiScale(image_gray, en_scale, 2, minSize=(36, 9),maxSize=(36*40, 9*40))
#watch_cascade来自
watch_cascade = cv2.CascadeClassifier('./model/cascade.xml')
引用库cv2,调用了函数CascadeClassifier()与函数detectMultiScale()
函数CascadeClassifier():是Opencv中做人脸检测的时候的一个级联分类器。并且既可以使用Haar,也可以使用LBP特征
函数detectMultiScale():opencv2中人脸检测使用的是 detectMultiScale函数。它可以检测出图片中所有的人脸,并将人脸用vector保存各个人脸的坐标、大小(用矩形表示)
则通过传输的数据可知,调用这两个函数的目的为对于经过处理后的图片,识别出车牌的具体的位置和大小并且作为数组储存起来