5

印度车牌识别程序

 3 years ago
source link: https://panchuang.net/2021/08/10/%e5%8d%b0%e5%ba%a6%e8%bd%a6%e7%89%8c%e8%af%86%e5%88%ab%e7%a8%8b%e5%ba%8f/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

要完成此任务,让我们了解一下体系结构。我们需要识别车牌,这里特别是印度,所有的国家都有不同类型的车牌字符和车牌形状。因此,总的来说,我们需要首先检测车牌,然后再识别字符。在这方面我们还有一个分叉,即所有的车辆都有不同形状和大小的车牌。在这项任务中,我们只关注汽车,以及任何形状和大小与印度汽车车牌相同的车牌。一旦我们识别了车牌,我们就必须识别车牌的字符。最后,我们必须将这些识别的数字输入API,该API可以给我们提供车辆信息。

工作流程:

模型创建:

Image→HaarCascade Indian_License_Platform→提取的车牌→字符分割→印度车牌字符的数据集→CNN模型训练→模型预测(字符分割)→提取的车牌号码indian_license_plate DataSet of characters of Indian License Plate

在这里,HaarCascade将只检测与汽车号牌相关的大小和形状的车牌。

模型测试:

导入模型和必要函数→新车牌→Haar级联→提取车牌→字符分割→模型预测(分割字符)→接口

最终的视频流WebApp

导入模型和必要函数→从用户→获取每一帧的视频→HaarCascade→提取车牌→字符分割→模型预测(分割字符)→→网页最终输出

获取车辆信息的接口

http://www.carregistrationapi.in/http://www.carregistrationapi.in/

如何训练模特?

如前所述,我们必须训练模型来识别车牌的字符,即字母和数字。创建这样一个模型需要做的事情很少,这里将对此进行说明。从图像中提取任何对象的标准程序是通过查找轮廓。

什么是等高线?

等高线可以简单地解释为连接所有连续点(沿边界)的曲线,具有相同的颜色或强度。轮廓是形状分析和目标检测与识别的有用工具。

  • 为获得更好的准确性,请使用二进制图像。因此,在找到轮廓之前,应用阈值或精明边缘检测。从OpenCV 3.2及更高版本开始,findContours()不再修改图像源。
  • 在OpenCV中,查找轮廓就像从黑色背景中查找白色对象一样。所以请记住,要找到的物体应该是白色的,背景应该是黑色的。

欲了解更多信息,请访问:https://docs.opencv.org/4.5.2/d4/d73/tutorial_py_contours_begin.htmlhttps://docs.opencv.org/4.5.2/d4/d73/tutorial_py_contours_begin.html

现在,我们知道我们必须首先将图像转换为二值图像,然后对其进行阈值处理。一旦我们做到这一点,我们甚至必须使我们的字符在黑色背景下生长得完美。为此,我们在CV2模块中设置了阈值函数。

什么是门槛?

对于每个像素,应用相同的阈值。如果像素值小于阈值,则将其设置为0,否则将其设置为最大值。函数cv.Threshold用于应用阈值。第一个参数是源图像,它应该是灰度,第二个参数是用于对像素值进行分类的阈值,第三个参数是分配给超过阈值的像素值的最大值。OpenCV提供了第四个参数中给出的不同类型的阈值。在我们的例子中,我们一起使用了BINARY和OTSU。二进制将在图像上创建完美的黑白对比度,而OTSU将从图像中去除所有噪声。

欲了解更多信息,请访问:https://docs.opencv.org/4.5.2/d7/d4d/tutorial_py_thresholding.htmlhttps://docs.opencv.org/4.5.2/d7/d4d/tutorial_py_thresholding.html

什么是侵蚀和膨胀?

我们已经对图像进行了阈值处理,现在要设置图像中所有的字符都是明亮的,并且有完美的边缘和曲线,我们需要进行形态学操作。这两个形态学操作将帮助我们使字符变得更加清晰。例句:D不会显示为O

腐蚀和膨胀是最基本的形态学操作,形态学操作是基于形状处理图像的一组操作,形态学操作将结构元素应用于输入图像并生成输出图像。腐蚀和膨胀有广泛的用途:

  • 分离单个元素并在图像中加入不同的元素。
  • 在图像中发现强度凸起或孔洞。

该操作包括将图像A与某个核B进行卷积,核B可以具有任何形状或大小,通常是正方形或圆形。执行此操作时,图像的较亮部分会增长。

这与膨胀正好相反,它在给定核的面积上计算局部最小值。

欲了解更多信息,请访问:https://docs.opencv.org/3.4/db/df6/tutorial_erosion_dilatation.htmlhttps://docs.opencv.org/3.4/db/df6/tutorial_erosion_dilatation.html

F1的比分是多少?

这只是一个衡量标准,我们可以用它来衡量我们模型的准确性。那么,精确度指标有什么问题呢?答案很简单,比方说,在我们的数据集中,值/记录是这样的,它更有利于积极的一面,而不是消极的一面。用外行的话说,我们可能有80%的数据支持我们的预测,只有20%的数据反对,所以很明显我们的模型会偏向1。在这些情况下,我们可能会得到更多的假阳性和假阴性。总体而言,我们需要避免类型1的错误多于类型2的错误。要做到这一点,我们有F1分数。F1分数是准确率和召回率的调和平均值。

欲了解更多信息,请访问:https://towardsdatascience.com/f-beta-score-in-keras-part-i-86ad190a252fhttps://towardsdatascience.com/f-beta-score-in-keras-part-i-86ad190a252f

什么是Dropout Layer?

Dropout层随机地将输入单位设置为0,并在训练期间的每一步使用Rate频率,这有助于防止过度拟合。未设置为0的输入按1/(1-Rate)放大,以便所有输入的总和保持不变。请注意,仅当Training设置为True时,才会应用Dropout层,以便在推理过程中不会丢弃任何值。使用model.fit时,Training将自动适当地设置为True,而在其他上下文中,您可以在调用层时将kwarg显式设置为True。简而言之,Dropout层是一个掩码,它使一些神经元对下一层的贡献无效,并使所有其他神经元保持不变。我们可以将Dropout层应用于输入向量,在这种情况下,它会使其某些特征无效;但我们也可以将其应用于隐藏层,在这种情况下,它会使一些隐藏的神经元无效。丢弃层在训练CNN中很重要,因为它们防止了对训练数据的过度拟合。如果它们不存在,第一批训练样本会以不成比例的方式影响学习。这反过来又会阻止学习仅在以后的样品或批次中出现的特征。

按照以下步骤编码:

模型培训:代码code

模型测试:代码code

最终视频流测试:代码code

最终WebApp:代码code

演示视频:

视频链接Video Link

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/08/10/%e5%8d%b0%e5%ba%a6%e8%bd%a6%e7%89%8c%e8%af%86%e5%88%ab%e7%a8%8b%e5%ba%8f/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK