⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 基于隐马尔可夫模型的人脸识别源代码,是作模式识别的最好学习代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			
			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 + -