首先,OCR函数需要训练模型来识别特定字体的字符。对于车牌识别,需要训练OCR模型来识别车牌上的字符。如果您没有训练好的模型,需要先收集一组车牌图像和相应的字符标签,然后使用OCR训练器进行训练。这个过程可能需要大量的时间和计算资源。
其次,车牌识别还需要进行图像处理和字符分割等预处理工作。车牌图像通常包括噪声、模糊和变形等问题,需要使用图像处理技术进行预处理。字符分割是将车牌上的字符单独分割出来,通常需要使用形态学运算和阈值分割等技术。
最后,OCR函数可能会出现识别错误。对于车牌识别应用,识别错误可能会导致严重的后果,因此需要进行误差分析和纠正,或者使用其他更加准确的识别技术。
因此,使用MATLAB的OCR函数进行车牌识别需要进行大量的前期工作和后期调试,建议在使用之前充分了解车牌识别的相关技术和实现方式。
需要安装一个叫 OCR Language Data Files的东西。 我的经验是, 直接在你的语句中写, 例如,
results = ocr(I,'Language', 'ChineseSimplified')
运行时, Matlab会出错。
例如;
************************************************************
>>OCRExampleJL
错误使用 vision.internal.ocr.validateLanguage (line 41)
Install the OCR Languages Support Package to use 'ChineseSimplified'.
*********************************************************
这最后一行是链接。 可以点进去然后安装。 最好, 安装时以下载, 手动的方式安装。 否则太慢。
装好后运行汉字识别还是OK的。 如图下图结果。
单看错误率分析不出来什么,可能是样本量太少,也可能是别的原因。可以把错误识别的样本拿出来,看看是哪些地方导致的错误,再有针对性的改进。还可能是特征工程不到位,特征选取的不好,不满足尺度不变性、旋转不变性、仿射不变性三个要素,说白了就是,大小变了,旋转的角度变了,拍照的时候站的位置不同导致对车牌的透视发生变化了,然后可能就识别不出来了。
所以可以考虑找一个更好的描述特征的方法,比如HoG(方向梯度直方图)。HoG,简单说就是,相邻的两个像素值做个减法,就可以表示颜色的变化,那么一个像素周围,上下、左右各有两个像素,就可以分别做两个减法,得到两个值,就像力学里两个力可以合并一样,这两个值也可以合并,得到方向,和大小(就是梯度),这样就有了一个像素的特征。但是特征太多计算量太大,就用统计的方法减少下特征,首先把图片划分成网格的形式,就像是在图像上画围棋线一样,然后每个方格内单独统计一下,方向在0-20角度内的像素的梯度的和是多少,依次类推,就得到了直方图,如果以20度为一个直方的话,那么180度就可以划分成9个直方,也就是9个特征,这样一个方格内的特征数量就与像素的数量无关了,而是固定了的。然后就是关于HoG的其他手段了,比如为了消除光照变化,可以对特征向量做归一化等。另外还可以对HoG可视化,在每个方格内,用线的方向和长度代替特征的方向和梯度,最后呈现的效果是,有若干个方格,每个方格内都好像有一个沿原点对称的星星,这样做对分析算法效果有一定帮助。
HoG是比较常见的特征描述子了,在行人检测上用的比较多。除了HoG,还有SIFT、SURF等特征描述子,这些都是计算机视觉中的内容了,属于特征检测的范畴。
计算机视觉主要包括二值化、滤波器、特征检测、特征匹配等一些基础的手段,然后就是图像滤镜、图像分割、图像识别、图像生成等具体的应用算法。由于近年来计算成本降低导致神经网络的再度崛起,计算机视觉的研究热点已经转为深度神经网络的各种改进和性能优化上了,像HoG已经是05年的事情了。
关于车牌识别(LPR),如果环境不复杂,是可以做到接近100%的准确率的,如果环境较为复杂,95%以上准确率应该是可以做到的。总的来说,基本已经实现应用落地和商用了。现在的方法基本都是深度学习,端到端一气呵成,无需专门提取特征,传统的模式识别方法已经GG。
说的比较细。如果只是关心结果的话,Github上可以找到关于车牌识别的一些开源项目,比如openalpr之类的,当然也是采用深度学习的办法,炼丹嘛,就是这么直接。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)