easypr4android,车牌识别系统EasyPR的批量识别功能测试界面
对于一个车牌识别系统,准确和快速应该是值得关注的。为了进一步学习车牌识别系统EasyPR,我在MFC可视化界面中添加了车牌批量识别和批量识别时显示以下数据的功能:识别结果,车牌检测时间,车牌颜色识别时间,字符识别时间。
1. 可视化界面功能简介
目前可视化界面功能可以选择单张车牌识别和车牌批量识别功能,单张车牌识别的界面参考车牌识别系统easyPR的MFC可视化界面,车牌批量识别界面如下图所示。
通过“Choose Folder”选择好待识别文件夹之后,按下”Start”按钮,程序将依次识别文件夹中的车牌,单张车牌的相关数据会依次显示在表格中。EasyPR作者给出的测试资源的所有图片均用其实际车牌来命名,在批量测试时在界面中显示出文件名和识别结果,这样可以比较直观的判断识别结果是否准确。如果读者自建测试图库,推荐按照EasyPR作者的方法对图库中的文件按照车牌来进行命名。
在车牌批量识别界面中的各阶段执行时间的单位均为ms。具体测试时间与电脑配置有关。
本文的相关源码已更新至博主的Github中,还请各位读者多多指教。
2. MFC的CTabCtr使用方法记录
当前MFC界面中,车牌单张识别界面和车牌批量识别界面是用CTabCtrl控件来实现切换的,在这里记录一下该控件的使用方法,以便后续查询。若有同学需要参考,可以对照相应功能与源码。
2.1 假定目前在项目rc中已有三个对话框(可直接在项目rc右键新增对话框),对话框ID分别为TESTPR, TESTPR_BATCH,TESTPR_SINGLE,为这三个对话框分别添加类。
2.2 设置ID为BATCH_DLG,SINGLE_DLG对话框的属性:
外观–>Style–>Child
外观–>Border–>none
2.3 三个对话框中均需要包含OnPaint函数,若类创建时没有该函数,可以手动添加。
2.4 在ID为TEST_PR的对话框中添加CTabCtrl控件,在头文件中添加指向该控件,指向TESTPR_BATCH,和TESTPR_SINGLE的指针,在oninitialDialog函数中对这些变量进行初始化。类处理文件生成时不一定有oninitialDialog函数,可以手动添加。函数添加完成后,在该函数中添加如下代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
m_batchTestDlg=newCBatchTest();
m_singleTestDlg=newCSingleTest();
m_batchTestDlg->Create(IDD_TESTPR_BATCH,GetDlgItem(IDC_EASYPRTAB));
m_singleTestDlg->Create(IDD_TESTPR_SINGLE,GetDlgItem(IDC_EASYPRTAB));
m_easyprTab=((CTabCtrl*)GetDlgItem(IDC_EASYPRTAB));
m_easyprTab->InsertItem(0,_T("Single Test"));
m_easyprTab->InsertItem(1,_T("Batch Test"));
CRectrs;
m_easyprTab->GetClientRect(&rs);
rs.top+=25;
rs.bottom-=5;
rs.left+=5;
rs.right-=5;
m_batchTestDlg->MoveWindow(&rs);
m_singleTestDlg->MoveWindow(&rs);
m_batchTestDlg->ShowWindow(false);
m_singleTestDlg->ShowWindow(true);
m_easyprTab->SetCurSel(0);
3. MFC的CListCtrl使用方法记录
3.1 在BatchDlg对话框中添加CListCtrl控件,在.h和.cpp中添加指向CListCtrl空间的全局变量。
3.2 在BatchDlg.cpp中添加oninitialDialog函数,在函数中添加设置CListCtrl表头和表格风格的代码:
3.3 在批量识别过程中,根据识别结果依次填充表格内容,此部分可以根据功能查阅相关源码。
4. 依次获取文件夹中的图像文件
批量识别功能实现时,用户选择待识别的文件夹,程序中会从该文件夹中读取图像文件,依次识别,处理代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
CFileFindfileFinder;//类CFileFind执行本地文件查找
CStringstrPicFile=TEXT("");//
CStringstrFilePath;//保存文件路径
CStringstrFileName;//保存文件名
intnIndex=0;
do
{
if(m_folderPath.Right(1)==TEXT("\\"))
{
intnPos=m_folderPath.ReverseFind(TEXT('\\'));
m_folderPath=m_folderPath.Left(nPos);
}
strPicFile.Format(TEXT("%s\\%s"),m_folderPath,TEXT("*.jpg"));//只选择jpg格式的图片
BOOLbWorking=fileFinder.FindFile(strPicFile);
while(bWorking)
{
bWorking=fileFinder.FindNextFile();
if(fileFinder.IsDots())//IsDots判断是否为点,由CFileFind对象引用IsDots的意思是:这是一个目录并且不是这个目录本身或者上层目录
{
continue;
}
strFilePath=fileFinder.GetFilePath();//图片的完整路径
strFileName=fileFinder.GetFileName();//图片文件的名字
if(fileFinder.IsDirectory())//检查是否是文件夹,是返回true,不是返回false
{
//继续遍历目录
continue;
}
else
{
intnPos=strFilePath.ReverseFind(TEXT('.'));
CStringstrExt=strFilePath.Right(strFilePath.GetLength()-nPos-1);
if(strExt.CompareNoCase(TEXT("jpg"))==0||
strExt.CompareNoCase(TEXT("jpeg"))==0||
strExt.CompareNoCase(TEXT("bmp"))==0)
{
//要进行的批量操作
processPlate(strFilePath);
m_BatchList->InsertItem(nIndex,strFileName);//插入行
m_BatchList->SetItemText(nIndex,1,m_plateResult);//设置该行的不同列的显示字符
m_BatchList->SetItemText(nIndex,2,m_pdTime);//设置该行的不同列的显示字符
m_BatchList->SetItemText(nIndex,3,m_colorTime);//设置该行的不同列的显示字符
m_BatchList->SetItemText(nIndex,4,m_crTime);//设置该行的不同列的显示字符
nIndex++;
}
}
}
}while(fileFinder.FindNextFile());
fileFinder.Close();
5. 函数执行时间测试
测试函数执行时间用到了QueryPerformanceCounter和QueryPerformanceFrequency,以测试车牌检测的时间为例,使用方法如下:
1
2
3
4
5
6
7
8
9
10
11
LARGE_INTEGERnFreq;
LARGE_INTEGERstart,end;
doubleeslapsPD;
QueryPerformanceFrequency(&nFreq);//返回每秒嘀哒声的个数,即频率
QueryPerformanceCounter(&start);//获取开始时计数器的数值
intresultPD=pd.plateDetect(src,plateVec);//车牌检测
QueryPerformanceCounter(&end);//获取结束时计数器的数值
eslapsPD=(double)(end.QuadPart-start.QuadPart)/(double)nFreq.QuadPart;//获取车牌检测的时间
6. 参考资料
easypr4android,车牌识别系统EasyPR的批量识别功能测试界面相关推荐
- 【OpenCV+Qt】使用车牌识别系统EasyPR识别车牌号
EasyPR是一个中文的开源车牌识别系统,其车牌识别划分为了两个过程:即车牌检测(Plate Detection)和字符识别(Chars Recognition)两个过程: 车牌检测(Plate De ...
- 车牌识别系统不能连接服务器,浅析车牌识别系统几种不能识别的原因
人们生活水平的提高,对汽车的需求量越来越大,每年汽车销售不断攀升,道路基础建设又跟不发展需要,配套设施不足,引起各种问题.如城市停车位不足,造成供不应求,停车费节节攀升,每小停车费比人的平均小时工资高 ...
- 动态人脸识别系统服务器,动态人脸识别监控管理平台的设计与实现
摘要: 动态人脸视频监控是计算机视觉领域一个新兴的应用方向和备受关注的前沿课题,它结合了计算机科学,机器视觉,图像处理,模式识别,人工智能等多学科技术知识.国内外的动态人脸识别监控系统都非常注重系统运 ...
- matlab speex的语音处理模块_基于MATLAB的条形码识别系统[GUI,可识别几十个图片]...
1.1 应用MATLAB识别条形码总体设计 本设计为基于MATLAB的条形码识别系统,带有一个GUI界面. GUI设计界面 1.1.1 程序总体设计思路 在上节中我们简单的介绍了MATLAB的发展以及 ...
- 动物识别系统代码python_动物识别 python 人工智能实验
构建动物识别系统 系统分为两部分,第一部分是初始化综合数据库,分为两类,一类是间接数据库,即不指向最终动物的信息.另一类是直接数据库,即指向最终动物的信息.使用的是二维列表加上一个一维列表存储key与 ...
- 基于深度学习的图标型验证码识别系统(包含完整代码、界面)
深度学习应用于图像处理领域应该说有很长一段时间了,相关的研究成果也有很多的积累了,从项目和实践入手是我觉得的最好最快速有效的学习手段,当下很多主流的验证码识别系统大都是基于神经网络设计开发而来的,在处 ...
- 人工智能人脸识别系统,人工智能应用人脸识别
手机人脸识别的原理是什么? . 不同品牌机型采用的面部识别技术方案不同,面部识别效果也会不一样:目前vivo/iQOO系列手机,仅NEX双屏版采用3D人脸识别技术,其余机型均采用FaceWake面部识 ...
- 图片文字识别工具怎样进行批量识别图片?
可能很多人已经学会了怎样去操作图片转文字,那么大家会不会操作大批量的图片转文字操作呢?可以跟着小编的操作试试看哟! 第一步:打开我们的图片转文字工具,在该工具的页面中显示有多种功能供我们选择,今天我们 ...
- Linux系统下,智能中文车牌识别系统EasyPR的配置
1.将EasyPR_v1.6放置于/opt目录下,使用unzip命令进行解压.得到EasyPR文件夹 unzip EasyPR_v1.6.zip 2.使用chmod -R命令将该文件夹递归更改文件权限 ...
- 动物识别系统代码python_动物识别系统代码
. 1 / 3 简易动物识别专家系统源代码(调试无错!) #include void birds() { int a; printf("*************************** ...
最新文章
- 09CSS元素显示模式
- 生成Excle模板,SXSSFWorkbook-2007之后版本不上传服务器
- mac系统下git、mysql、nginx、php的环境搭建
- 垃圾回收机制之标记清除算法
- MyBatis Generator配置文件翻译
- Hbase集群安装Version1.1.5
- file对象怎么才会有值_怎么去聊天女生才会跟你约会
- html 火焰文字效果 霓虹文字效果(text-shadow)
- 仿写王者荣耀主页代码HTML CSS,CSS3实现王者荣耀匹配人员加载页面的方法
- Unity3D--学习太空射击游戏制作(四)
- 基于FPGA的交通灯——香樟路
- 【vue网站优化】秒开网页
- quorum-maker中遇到的问题
- 倪明选:追忆似水流年,祝愿更加辉煌
- Wannafly挑战赛14 A-直角三棱锥
- 手动编译源代码安装GR GSM
- 关于查全率,查准率的定义
- 3dmax:3dmax经典案例详细步骤图文教程之镜头效果制作黄昏中打开的灯
- [项目管理] IT软件交付项目流程阶段
- 【FER文献阅读】Deep Facial Expression Recognition: A Survey (Shan Li and Weihong Deng)
热门文章
- java格式手机软件和国产mrp_国产-山寨-杂牌手机如何安装软件【MRP格式】
- java mencoder_mencoder java linux
- DataFormatString格式化
- View-WebView获取url的title
- Visual Foxpro 6.0教程
- c# PropertyGrid 自定义属性排序
- android5开机动画耗时,Android 开机速度优化
- python 安居客 爬虫_python 自动抓取分析房价数据——安居客版
- Firefox扩展开发初级教程——开发一个简单的扩展
- git log根据特定条件查询日志并统计修改的代码行数