2021SC@SDUSC
源代码下载地址:https://gitee.com/zeusees/HyperLPR
源码配置的详情见第一篇分析
本篇内容将总结队友所分析的recognizer.py以及SimpleRecognizePlate()函数:
一、对recognizer.py的部分代码进行分析:
Keras是由纯python编写的基于theano/tensorflow的深度学习框架。Keras是一个高层神经网络API,支持快速实验,能够把你的idea迅速转换为结果。下图是使用keras搭建一个神经网络系统的大致步骤。
然后就是构建神经网络的过程,TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。张量的理解:张量是有大小和多个方向的量。这里的方向就是指张量的阶数。我们可以将标量视为零阶张量,矢量视为一阶张量,那么矩阵就是二阶张量。就是不断的调用TensorFlow中的方法来不断的调用,便于人工智能神经网的学习与分析。
二、对SimpleRecognizePlate函数分析:
首先是time()函数,time是引用于os库中的函数,目的是调用系统的时间获取当前时间,以便于后面对于时间的显示和调用。
下一个函数detect.detectPlateRough(image,image.shape[0],top_bottom_padding_rate=0.1)
这一个是指向detect.py文件的detectPlateRough函数。
首先是打印出来一个传入image的shape值也就是图片的大小,然后使用了一个if判断来保证图片的边框值是小于0.2的,以便于后续的处理,如果大于0.2则返回一个错误,并且停止下一步的过程。
下一步就是调用了cv2.resize()函数,此函数的主要目的是将图片进行一些缩放设置。
image_color_cropped函数就是根据颜色来裁剪图片,他调用了opencv中的方法,目的是裁剪出车牌照中的车牌图片,除去其他的无关的东西,方便下一步的操作。
image_gray = cv2.cvtColor(image_color_cropped,cv2.COLOR_RGB2GRAY)
这一句是将图片的颜色改变,也就是将原本有颜色的图片的RGP值改变,变成只有灰色和白色的图片,方便计算机对它的识别。
watches = watch_cascade.detectMultiScale(image_gray, en_scale, 2, minSize=(36, 9),maxSize=(36*40, 9*40))
这个调用了opencv2中的方法,CascadeClassifier()和detectMultiScale(),这两个都是人脸识别中的应用,当然在其中也加载了分类器,就是对于经过处理后的图片,识别出车牌的具体的位置和大小并且作为数组储存起来。
enumerate()是python的内置函数
enumerate在字典上是枚举、列举的意思
对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
enumerate多用于在for循环中得到计数
argmax函数:torch.argmax(input, dim=None, keepdim=False)返回指定维度最大值的序号,dim给定的定义是:the demention to reduce.也就是把dim这个维度的,变成这个维度的最大值的index。
1)dim的不同值表示不同维度。特别的在dim=0表示二维中的列,dim=1在二维矩阵中表示行。广泛的来说,我们不管一个矩阵是几维的,比如一个矩阵维度如下:(d0,d1,...,dn−1) ,那么dim=0就表示对应到d0 也就是第一个维度,dim=1表示对应到
也就是第二个维度,一次类推。
2)知道dim的值是什么意思还不行,还要知道函数中这个dim给出来会发生什么。
最后就是bitwise_not(),这个函数是cv2中的,意思是把图片进行取非操作,但是要求图片必须是二值图像,即由0或者1组成的,而取非的操作是把0变成1,把1变成0。