?? mainfrm.cpp
字號:
if (view->GetSelection().IsRectEmpty() )
{
MessageBox( "Specify face region", NULL, MB_ICONERROR );
return;
}
//decide if single recognition or batch mode
CStringList* image_list = view->GetImageList();
if ( image_list && (image_list->GetCount() > 1) )
{
//perform batch recognition
int result = base.RecognizeBatch( image_list );
}
else
{
int ranged[3];
int result = base.RecognizePerson( camera.GetFrame(), view->GetSelection(),
ranged );
if( result == 0 )
{
MessageBox( "Not all persons are trained", NULL, MB_ICONERROR );
}
else
{
CString message = "";
for( int i = 0 ; i < result; i++ )
{
CPerson* person = base.GetPerson( ranged[i]);
message += person->GetName() + "\n";
}
baseview->SwitchMode(ranged[0], false);
MessageBox( (LPCTSTR)message, NULL, MB_ICONEXCLAMATION );
}
}
}
}
void CMainFrame::OnUpdateRecog(CCmdUI* pCmdUI)
{
CHMMDemoView* view = GetCameraView();
CRect rect = view->GetSelection();
pCmdUI->Enable( rect.Width() && rect.Height() );
}
void CMainFrame::OnUpdateTrain(CCmdUI* pCmdUI)
{
CImageBaseView* view = GetImageBaseView();
bool enable = false;
if( view )
{
//int person_index = view->GetPersonIndex();
CHMMDemoDoc* doc = GetHMMDoc();
int num_person = doc->GetFaceBase().GetPersonList().GetCount();
if( doc && num_person >= 0 )
{
enable = true;
//CFaceBase& base = doc->GetFaceBase();
//CPerson* person = base.GetPerson(person_index);
//enable = person && person->GetImgList().GetCount() > 0;
}
}
pCmdUI->Enable( enable );
}
void CMainFrame::OnSelectAll()
{
CHMMDemoView* view = GetCameraView();
if( view )
{
view->SetSelection(0);
}
}
void CMainFrame::OnDelHmm()
{
CHMMDemoDoc* doc = GetHMMDoc();
CImageBaseView* view = GetImageBaseView();
if( doc && view )
{
int person_index = view->GetPersonIndex();
int result = MessageBox( person_index >= 0 ? "Delete HMM info for current person?" :
"Delete HMM info for the whole base?", "",
MB_YESNO | MB_ICONQUESTION );
if( result == IDYES ) doc->DeleteHMMInfo( person_index );
}
}
void CMainFrame::OnUpdateAddTest(CCmdUI* pCmdUI)
{
CImageBaseView* view = GetImageBaseView();
CHMMDemoView* camera_view = GetCameraView();
if( view )
{
int person_index = view->GetPersonIndex();
CString path = camera_view->GetTestPath();
pCmdUI->Enable( (person_index >= 0) && (!path.IsEmpty()) );
}
}
void CMainFrame::OnTestFolder()
{
CHMMDemoView* view = GetCameraView();
char buffer[1024];
BROWSEINFO bi;
bi.hwndOwner = NULL;
bi.pidlRoot =NULL;
bi.pszDisplayName = buffer;
bi.lpszTitle = "Choose directory for test images" ;
bi.ulFlags = 0;
bi.lpfn = NULL;
bi.lParam = 0;
LPITEMIDLIST il = SHBrowseForFolder( &bi );
char path[1024];
if ( SHGetPathFromIDList( il, path ) )
if( view )
{
view->SetTestPath( path );
}
}
void CMainFrame::OnRecobase()
{
CImageBaseView* base_view = GetImageBaseView();
CFaceBase& original_base = base_view->GetDocument()->GetFaceBase();
CFileDialog dlg( TRUE, 0, 0, OFN_ENABLESIZING |
OFN_EXPLORER | OFN_FILEMUSTEXIST,
"Face Base Files (*.txt)|*.txt|", 0 );
int buf_size = 1 << 15;
char* buffer = (char*)malloc(buf_size + 100);
dlg.m_ofn.lpstrFile = buffer;
buffer[0] = '\0';
dlg.m_ofn.nMaxFile = buf_size;
int result = dlg.DoModal();
if( result == IDOK )
{
CWaitCursor wait;
CFaceBase base;
base.SetFileName( dlg.GetFileName() );
base.Load();
//recognize
original_base.RecognizeOtherBase( &base );
}
}
void CMainFrame::OnUpdateRecobase(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
CImageBaseView* base_view = GetImageBaseView();
CFaceBase& base = base_view->GetDocument()->GetFaceBase();
POSITION pos = base.GetPersonList().GetHeadPosition();
while( pos )
{
CPerson* pers = base.GetPersonList().GetNext(pos);
if( !pers->IsTrained() ) { pCmdUI->Enable(FALSE); return; }
}
pCmdUI->Enable(TRUE);
}
void CMainFrame::OnSettings()
{
CHMMDemoApp* app = (CHMMDemoApp*)AfxGetApp();
app->OnSettings();// TODO: Add your command handler code here
}
void CMainFrame::OnSingleDirectoryDO()
{
UpdateData(true);
char filename[256];
BROWSEINFOA bi;
memset((void *)&bi,0,sizeof(BROWSEINFOA));
int i=0;
char fileBuffer[256];
bi.hwndOwner=NULL;
bi.pszDisplayName=fileBuffer;
LPITEMIDLIST lpit=::SHBrowseForFolder(&bi);
char strDirFile[256];
BOOL bDlgResult=::SHGetPathFromIDList(lpit,strDirFile);
if(!bDlgResult)
return;
CFileFind ff;
strcat(strDirFile,"\\*.bmp");
BOOL bResult=ff.FindFile(strDirFile);
CHMMDemoView* view = GetCameraView();
view->SetImageList(0);
while(bResult)
{
bResult=ff.FindNextFile();
strcpy(filename,(LPCSTR)ff.GetFilePath());
// Start to process...
CStringList* imageList = new CStringList;
CString sFileName(filename);
imageList->AddTail( sFileName);
view->SetImageList( imageList );
theApp.OpenDocumentFile( sFileName );
view->SetSelection(0);
CHMMDemoDoc* doc = GetHMMDoc();
if( view && doc )
{
CCamera& camera = view->Camera();
doc->AddObj( camera.GetFrame(), view->GetSelection(), view->GetImageList() );
}
CImageBaseView* imageBaseView = GetImageBaseView();
int new_person_index = imageBaseView->GetPersonIndex();
imageBaseView->SwitchMode( new_person_index, true );
}
}
void CMainFrame::OnAllDirectorysDO()
{
UpdateData(true);
BROWSEINFOA bi;
memset((void *)&bi,0,sizeof(BROWSEINFOA));
int i=0;
char fileBuffer[256];
bi.hwndOwner=NULL;
bi.pszDisplayName=fileBuffer;
LPITEMIDLIST lpit=::SHBrowseForFolder(&bi);
char strDirFile[256];
BOOL bDlgResult=::SHGetPathFromIDList(lpit,strDirFile);
if(!bDlgResult)
return;
CString s_strDirFile=strDirFile;
Search_For_File(s_strDirFile);
}
void CMainFrame::Search_For_File(CString s_strDirFile)
{
////////////////////////////////////
CString DirName=s_strDirFile;
CFileFind tempFind; //聲明一個CFileFind類變量,以用來搜索
char tempFileFind[200]; //用于定義搜索格式
sprintf(tempFileFind,"%s\\*.*",DirName);
//匹配格式為*.*,即該目錄下的所有文件
CHMMDemoView* view = GetCameraView();
view->SetImageList(0);
BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
//查找第一個文件
while(IsFinded)
{
IsFinded=(BOOL)tempFind.FindNextFile(); //遞歸搜索其他的文件
if(!tempFind.IsDots()) //如果不是"."目錄
{
char foundFileName[200];
strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));
if(tempFind.IsDirectory()) //如果是目錄,則遞歸地調用
{
char tempDir[200];
sprintf(tempDir,"%s\\%s",DirName,foundFileName);
Search_For_File(tempDir);
}
else
{ //如果是文件則處理
CString sFoundFileName(foundFileName);
if( 0 == sFoundFileName.Right(8).CompareNoCase("MASK.bmp") )
{
CString tempStr;
tempStr.Format("%s\\%s",DirName,foundFileName);
maskFileNameArray.Add(tempStr);//to record the mask file names
CImageBaseView* imageBaseView = GetImageBaseView();
int new_person_index = imageBaseView->GetPersonIndex();
if( new_person_index >= 0)
imageBaseView->SwitchMode( new_person_index, false );//Chang to ask for a new name
}
else if( 0 == sFoundFileName.Right(4).CompareNoCase(".bmp") && 0 != sFoundFileName.Right(8).CompareNoCase("MASK.bmp") )
{
char tempFileName[200];
sprintf(tempFileName,"%s\\%s",DirName,foundFileName);
// Start to process...
CStringList* imageList = new CStringList;
CString sFileName(tempFileName);
imageList->AddTail( sFileName);
view->SetImageList( imageList );
theApp.OpenDocumentFile( sFileName );
view->SetSelection(0);
CHMMDemoDoc* doc = GetHMMDoc();
if( view && doc )
{
CCamera& camera = view->Camera();
doc->AddObj( camera.GetFrame(), view->GetSelection(), view->GetImageList() );
}
}
}
}
}
tempFind.Close();
}
void CMainFrame::OnCaptureBmp()
{
CHMMDemoView* view = GetCameraView();
CHMMDemoDoc* doc = GetHMMDoc();
CCamera& camera = view->Camera();
CImage& import_image = camera.GetFrame();
// CRect rect = view->GetSelection();
CRect rect(10,10, 80,80);
/////////
CPersonImage* image;
image = new CPersonImage;
image->SetFileName( "d:\\0001.bmp" );
CImage& dst_img = image->GetImage();
IplImage* src_img = import_image.GetImage();
IplROI* temp_roi;
IplROI roi;
ASSERT( src_img != 0 );
temp_roi = src_img->roi;
if( rect.IsRectEmpty() )
{
src_img->roi = 0;
}
else
{
src_img->roi = &roi;
roi = RectToROI( rect );
}
dst_img.CopyOf( import_image );
src_img->roi = temp_roi;
image->SetRoiInFile( CRect(0,0,0,0));
image->SetModified();
// to reserve file name
image->Save();
}
void CMainFrame::OnCaptureManyBmps()
{
char filename[256];
BROWSEINFOA bi;
memset((void *)&bi,0,sizeof(BROWSEINFOA));
int i=0;
char fileBuffer[256];
bi.hwndOwner=NULL;
bi.pszDisplayName=fileBuffer;
LPITEMIDLIST lpit=::SHBrowseForFolder(&bi);
char strDirFile[256];
BOOL bDlgResult=::SHGetPathFromIDList(lpit,strDirFile);
if(!bDlgResult)
return;
CFileFind ff;
strcat(strDirFile,"\\*.bmp");
BOOL bResult=ff.FindFile(strDirFile);
CHMMDemoView* view = GetCameraView();
view->SetImageList(0);
int mFileCount=1;
while(bResult)
{
bResult=ff.FindNextFile();
strcpy(filename,(LPCSTR)ff.GetFilePath());
// Start to process...
CString sFileName(filename);
theApp.OpenDocumentFile( sFileName );
CHMMDemoView* view = GetCameraView();
CHMMDemoDoc* doc = GetHMMDoc();
CCamera& camera = view->Camera();
CImage& import_image = camera.GetFrame();
// CRect rect = view->GetSelection();
CRect rect(60,30,260,130);
CPersonImage* image;
image = new CPersonImage;
CString sTemp(sFileName);
int pos = sTemp.ReverseFind('\\');
sTemp = sTemp.Mid(pos+1);
CString sFileName02;
sFileName02.Format("E:\\CaptureBMPs\\%s",sTemp );
//sFileName02.Format("E:\\CaptureBMPs\\%03d.bmp", mFileCount++ );
image->SetFileName(sFileName02 );
CImage& dst_img = image->GetImage();
IplImage* src_img = import_image.GetImage();
IplROI* temp_roi;
IplROI roi;
ASSERT( src_img != 0 );
temp_roi = src_img->roi;
if( rect.IsRectEmpty() )
{
src_img->roi = 0;
}
else
{
src_img->roi = &roi;
roi = RectToROI( rect );
}
dst_img.CopyOf( import_image );
src_img->roi = temp_roi;
image->SetRoiInFile( CRect(0,0,0,0));
image->SetModified();
// to reserve file name
image->Save();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -