中文车牌识别开源项目C++版使用笔记

最近参加一个比赛,需要车牌识别,目的是测试一个文件夹里的所有文件,将结果和测试文件名写入到excel文件。
我使用了HyperLPR开源车牌识别框架 github地址

HyperLPR利用深度学习实现中文车牌识别,设计流程如下:

step1. 使用opencv 的 HAAR Cascade 检测车牌大致位置
step2. Extend 检测到的大致位置的矩形区域
step3. 使用类似于MSER的方式的 多级二值化 + RANSAC 拟合车牌的上下边界
step4. 使用CNN Regression回归车牌左右边界
step5. 使用基于纹理场的算法进行车牌校正倾斜
step6. 使用CNN滑动窗切割字符
step7. 使用CNN识别字符

提供了win系统下python,C++,PHP代码,Linux系统下C++代码,还有Android系统下代码,准确度对于一般的使用够用了,其中python3的程序可以识别多种中文车牌包括白牌,新能源车牌,使馆车牌,教练车牌,武警车牌等。可惜我python刚学,对于各种库的使用还不熟悉,所以我用的是Windows系统下的C++代码,依赖OpenCV3.3

VS2015

我电脑上是visual studio2015社区版,可以到官网免费下载,选择Visual Studio Community 2015:地址
安装要好一会儿

OpenCV3.3
然后下载OpenCV3.3,地址:https://sourceforge.net/projects/opencvlibrary/

配置

接下来配置,可以参考这篇文章:https://blog.csdn.net/llb_bll/article/details/77071001?locationNum=10&fps=1

运行HyperLPR

将下载好的HyperLPR-master.zip解压,打开Prj-Win目录下的Prj-Win.sln工程。
注意,一定要配置好环境,VS2015中打开 视图->其他窗口->属性管理器,双击Debug|×64,在包含目录下,加入所需要的头文件目录,我的是E:\HyperLPR-master\Prj-Win\lpr\include
这里写图片描述
还要注意:!这一切的前提是先把OpenCV配置好。

然后运行test_pipeline.cpp,结果就可以出来了。

修改
要批量处理一个文件夹下的所有图片,我要先生成此文件下所有图片名称的txt文件:
打开CMD窗口,cd转到图片文件路径下,然后输入dir\b>txt文件名.txt,回车即可
这里写图片描述

接下来我对test_pipeline.cpp做了一些修改,while循环通过判断txt文件中每行是否读完,来执行每个图片的操作,for循环用于找出最大置信度所对应的识别结果,最后将结果写入到.csv文件中,csv文件可以用excel打开,主要代码如下:

	string ImgName;
	string ImgName1;
	
	//测试集文件下的txt文件路径
	ifstream fin("img_test\\功能评测图像库\\省市简称变化子库\\“川”牌\\云.txt");
	//打开要输出的.csv文件
	ofstream oFile;
	oFile.open("川.csv", ios::out | ios::trunc);  
	//先写入表格标题
	oFile << "车牌号" << "," << "测试文件名" << endl;
    //判断是否读完txt
	while (getline(fin, ImgName)) {
		cout << "Handle" << ImgName << endl;
		ImgName1 = "img_test\\功能评测图像库\\省市简称变化子库\\“川”牌" + ImgName;
		//image = imread(ImgName); 
		cv::Mat image = cv::imread(ImgName1);
		if (!image.empty()) {
			//使用端到端模型模型进行识别,识别结果将会保存在res里面
			std::vector<pr::PlateInfo> res = prc.RunPiplineAsImage(image);
			float maxconf = 0.5; //初始最大置信度
			string finaln;
			for (auto st : res) {
				//判断最大置信度下的识别结果		
				if (st.confidence > maxconf) {
				//std::cout << st.getPlateName() << " " << st.confidence << std::endl;
					maxconf = st.confidence;
					finaln = st.getPlateName();
				
				}
			}
			//将结果写入到.csv文件中
			oFile << finaln << "," << ImgName1 << endl;
			cout << "Done" << endl;
		}
	}
	oFile.close();
	cvWaitKey(0);

有了以上的改进后,就可以顺利的批量识别文件夹下的所有车牌图片,并将结果写入excel文件了。

  • 0
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值