📄 wirecognitiondlg.cpp
字号:
if(currTest >= numOfTest)
currTest = numOfTest-1;
}
OnShow1();
OnShow2();
}
void CWiRecognitionDlg::OnInputTest()
{
// TODO: Add your control notification handler code here
wi.DelSampleSetPath (1);
CAddSampleDlg FileDlg(TRUE, "", NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,
"TextFiles (*.pnt)|*.pnt|All Files(*.*)|*.*||",
AfxGetMainWnd());
if (FileDlg.DoModal () != IDOK)
return;
CString strFile,strInfo;
CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT2);
pEdit->SetSel(0,-1);
pEdit->ReplaceSel("");
POSITION pos = FileDlg.GetStartPosition();
while( pos )
{
strFile =FileDlg.GetNextPathName( pos );//获取文件名
wi.AddSampleSetPath (strFile, 1); //添加测试样本集
strInfo = strFile+"\r\n";
pEdit->SetSel(-1,-1);
pEdit->ReplaceSel(strInfo);
}
numOfTest = wi.testSetDataFilePath.GetSize();
currTest = 0;
wi.RetrieveSample(&wi.testSetDataFilePath,&wi.testSampleArray);
wi.PreProcSample(&wi.testSampleArray,0);
wi.GenVector(&wi.testSampleArray);
wi.GenVQVector(&wi.testSampleArray);
}
void CWiRecognitionDlg::OnShow2()
{
// TODO: Add your control notification handler code here
CWnd *pWnd = (CWnd *)GetDlgItem(IDC_PICTURE2);
HWND hWnd = pWnd->m_hWnd;
HDC hDC = ::GetDC(hWnd);
if(m_TestTrain == 1)
{
if(numOfTrain == 0)
return;
CWi::Sample* s =(CWi::Sample*)wi.trainSampleArray.GetAt(currTrain);
DrawPress(s,hDC);
}
else
{
if(numOfTest == 0)
return;
CWi::Sample* s =(CWi::Sample*)wi.testSampleArray.GetAt(currTest);
DrawPress(s,hDC);
}
}
void CWiRecognitionDlg::DrawPress(CWi::Sample *s,HDC hDC)
{
int i,j,begin;
if(s == NULL)
return;
if(pressPos>RAWDATADIM-IMAGEWIDTH)
begin = RAWDATADIM-IMAGEWIDTH;
else
begin = pressPos;
int num;
int *pos =(int *)malloc(sizeof(int)*s->effectDataNum);
num = wi.WaveCrest(s->pressTotal2,s->pressTotal,pos,s->effectDataNum,5);
for(i = 0;i<IMAGEWIDTH;i++)
{
for(j=0;j<128;j++)
{
if(((int)s->pressA[begin+i]-80)/2 == j)
::SetPixel(hDC,i,IMAGEHEIGHT-j,RGB(255,0,0));
else if(((int)s->pressB[begin+i]-80)/2 == j)
::SetPixel(hDC,i,IMAGEHEIGHT-j,RGB(0,255,0));
else if(((int)s->pressC[begin+i]-80)/2 == j)
::SetPixel(hDC,i,IMAGEHEIGHT-j,RGB(0,0,255));
else if(((int)s->pressTotal2[begin+i]-20)/2 == j)
{
::SetPixel(hDC,i,IMAGEHEIGHT-j,RGB(0,0,0));
for(int t=0;t<num;t++)
{
if(pos[t]==begin+i)
SetPixel(hDC,i,IMAGEHEIGHT-j,RGB(255,0,0));
}
}
else
::SetPixel(hDC,i,IMAGEHEIGHT-j,RGB(255,255,255));
}
}
}
void CWiRecognitionDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
int ScrollPos=pScrollBar->GetScrollPos();
switch( nSBCode ){
case SB_LINELEFT:
ScrollPos -= 2;
break;
case SB_LINERIGHT:
ScrollPos+= 2;
break;
case SB_PAGELEFT:
ScrollPos -= IMAGEWIDTH;
break;
case SB_PAGERIGHT:
ScrollPos += IMAGEWIDTH;
break;
case SB_THUMBPOSITION:
case SB_THUMBTRACK:
if(nPos % 2)
++nPos;
ScrollPos = nPos;
break;
}
if(ScrollPos < 0 )
ScrollPos = 0;
if( ScrollPos> RAWDATADIM )
ScrollPos = RAWDATADIM;
pressPos = ScrollPos;
pScrollBar->SetScrollPos((int)ScrollPos);
OnShow2();
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CWiRecognitionDlg::OnGentemp()
{
// TODO: Add your control notification handler code here
if(m_Method == 0)
wi.GenTemplatePress();
else if(m_Method == 1)
wi.GenTemplateXpos();
else if(m_Method == 2)
wi.GenTemplateYpos();
else if(m_Method == 3)
wi.GenTemplateXY();
else if(m_Method == 4)
wi.OnMovement();
else if(m_Method == 5)
wi.OnDirection();
else if(m_Method == 6)
wi.GenTemplateVector();
else if(m_Method == 7)
wi.GenVQTemplate();
CString msg;
msg.Format("threhold: %f",wi.threshold);
MessageBox(msg);
}
void CWiRecognitionDlg::OnRecognition()
{
// TODO: Add your control notification handler code here
double retval;
CString msg,strFile;
double distance = 0.0;
int num = wi.testSetDataFilePath.GetSize();
CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT2);
pEdit->SetSel(0,-1);
pEdit->ReplaceSel("");
for(int i = 0;i<num;i++)
{
if(m_Method == 0)
retval = wi.RecogTemplatePress(&distance,i);
else if(m_Method == 1)
retval = wi.RecogTemplateXpos(&distance,i);
else if(m_Method == 2)
retval = wi.RecogTemplateYpos(&distance,i);
else if(m_Method == 3)
retval = wi.RecogTemplateXY(&distance,i);
else if(m_Method == 4)
retval = wi.RecogMovement(&distance,i);
else if(m_Method == 5)
retval = wi.RegDih(&distance,i);
else if(m_Method == 6)
retval = wi.RecogTemplateVec(&distance,i);
else if(m_Method == 7)
retval = wi.RecogHMM(&distance, i);
strFile = wi.testSetDataFilePath.GetAt(i);
if(retval == -1)
{
msg.Format("distance=%f Fail! ",distance);
msg+=strFile;
msg+="\r\n";
pEdit->SetSel(-1,-1);
pEdit->ReplaceSel(msg);
}
else if(retval == 1)
{
msg.Format("distance=%f Success!",distance);
msg+=strFile;
msg+="\r\n";
pEdit->SetSel(-1,-1);
pEdit->ReplaceSel(msg);
}
}
}
void CWiRecognitionDlg::OnSaveTemp()
{
// TODO: Add your control notification handler code here
CFileDialog *dlg; //保存文件对话框
dlg= new CFileDialog(FALSE,"tmp","*.tmp",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"Template Files(*.tmp)|*.tmp|All Files(*.*)|*.*||");
char SaveAsName[256];
if ( dlg->DoModal()==IDOK)
{
strncpy(SaveAsName,dlg->GetPathName(),strlen(dlg->GetPathName()));
SaveAsName[strlen(dlg->GetPathName())]=0;
if(m_Method == 0)
wi.SaveTemplatePress(SaveAsName);
else if(m_Method == 1)
wi.SaveTemplateXpos(SaveAsName);
else if(m_Method == 2)
wi.SaveTemplateYpos(SaveAsName);
else if(m_Method == 3)
wi.SaveTemplateXY(SaveAsName);
else if(m_Method == 4)
wi.SaveMovement(SaveAsName);
else if(m_Method == 5)
wi.SaveDih(SaveAsName);
else if(m_Method == 6)
wi.SaveTemplateVec(SaveAsName);
else if(m_Method == 7)
wi.SaveHMM(SaveAsName);
}
}
void CWiRecognitionDlg::OnLoadTemp()
{
// TODO: Add your control notification handler code here
CFileDialog *dlg; //打开文件对话框
dlg= new CFileDialog(TRUE,"tmp","*.tmp",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"Template Files(*.tmp)|*.tmp|All Files(*.*)|*.*||");
char OpenName[256];
int retval;
if ( dlg->DoModal()==IDOK)
{
strncpy(OpenName,dlg->GetPathName(),strlen(dlg->GetPathName()));
OpenName[strlen(dlg->GetPathName())]=0;
if(m_Method == 0)
retval = wi.LoadTemplatePress(OpenName);
else if(m_Method == 1)
retval = wi.LoadTemplateXpos(OpenName);
else if(m_Method == 2)
retval = wi.LoadTemplateYpos(OpenName);
else if(m_Method == 3)
retval = wi.LoadTemplateXY(OpenName);
else if(m_Method == 4)
retval = wi.LoadMovement(OpenName);
else if(m_Method == 5)
retval = wi.LoadDih(OpenName);
else if(m_Method == 6)
retval = wi.LoadTemplateVec(OpenName);
else if(m_Method == 7)
retval = wi.LoadHMM(OpenName);
}
if(retval == -1)
MessageBox("Load Template Error!");
}
void CWiRecognitionDlg::OnSelchangeMethod()
{
// TODO: Add your control notification handler code here
CComboBox *pBox = (CComboBox *)GetDlgItem(IDC_METHOD);
m_Method = pBox->GetCurSel();
}
void CWiRecognitionDlg::OnRadioTest()
{
// TODO: Add your control notification handler code here
m_TestTrain = 0;
OnShow1();
OnShow2();
}
void CWiRecognitionDlg::OnRadioTrain()
{
// TODO: Add your control notification handler code here
m_TestTrain = 1;
OnShow1();
OnShow2();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -