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的批量识别功能测试界面的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【DFS】HDU 1364 POJ 1
- 下一篇: iOS 5.1.1 设备不能安装AdHo