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

📄 mainfrm.cpp

📁 人脸检测系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        //get selected person name
        CPerson* person = doc->GetFaceBase().GetPerson( view->GetPersonIndex() );
        CString name = person->GetName();

        //add image which is in view
        CString filename = GetFreeFilename( camera_view->GetTestPath(), name );
        CImage new_img;
        new_img.CopyOf( camera.GetFrame() );
        IplImage* iplimage = new_img.GetImage();

        if( !iplimage )
        {
            MessageBox("No image was selected!");
            return;
        }
        
        cvSetImageROI( iplimage, RectToCvRect( m_sel ));
        CImage tofile;
        tofile.CopyOf( iplimage );
        tofile.Save( filename );
        
        //add other images
        CStringList* imageList = camera_view->GetImageList();

        if ( imageList && (imageList->GetCount() > 1) )
        {
            //add batch
            POSITION pos = imageList->GetHeadPosition();
            imageList->GetNext( pos );
                        
            while (pos)
            {
                CImage img;
                img.Load( imageList->GetNext( pos ), 1 );
                
                
                img.Save( GetFreeFilename( camera_view->GetTestPath(), name ) );
            }
        }
        MessageBox("Images were added to test base");

        camera.Start();

    }
    return;

}


void CMainFrame::OnUpdateRemoveObj(CCmdUI* pCmdUI) 
{
    CImageBaseView* view = GetImageBaseView();
    bool enable = false;

    if( view )
    {
        enable = view->GetActive() >= 0;
    }
    pCmdUI->Enable( enable );
}

void CMainFrame::OnRemoveObj() 
{
    CImageBaseView* view = GetImageBaseView();
    CHMMDemoDoc* doc = GetHMMDoc();

    if( doc && view )
    {
        int active = view->GetActive();
        int person_index = view->GetPersonIndex();

        if( active >= 0 )
        {
            if( doc->RemoveObj( person_index, active ))
            {
                view->ResetActive();
                view->RefreshView();
            }
        }
    }
}


void CMainFrame::OnZoomIn() 
{
    CImageBaseView* view = GetImageBaseView();
    view->Zoom();
}


void CMainFrame::OnZoomOut() 
{
    CImageBaseView* view = GetImageBaseView();
    view->Zoom( false );
}


void CMainFrame::OnChangeBaseParams() 
{
    CHMMDemoDoc* doc = GetHMMDoc();

    if( doc )
    {
        doc->ChangeBaseParams();
    }
}

void CMainFrame::OnTrain() 
{
    CWaitCursor wait;
	//if 1 person selected - train its HMM
    //if all base in view - train all untrained persons
    CHMMDemoDoc* doc = GetHMMDoc();
    CImageBaseView* base_view = GetImageBaseView();
                               
    if( doc && base_view )
    {
        //int view_mode = base_view->GetMode();
        CFaceBase& base = doc->GetFaceBase();
        
        if( base_view->GetPersonIndex() >= 0 )
        {
            base.TrainPerson( base_view->GetPersonIndex(), true );
        }
        else
            base.TrainAll( TRAIN_UNTRAINED ); 
    } 
}




void CMainFrame::OnRecognize() 
{         
    CWaitCursor wait;
	CHMMDemoView* view = GetCameraView();
    CHMMDemoDoc* doc = GetHMMDoc();
    CImageBaseView* baseview = GetImageBaseView();
	CRect rect;

	Cname dlg;
	if (IDOK == dlg.DoModal())
	{
		UpdateData();
		m_sName = dlg.m_InputName;
	}
//	AfxMessageBox(m_sName);
	//IplImage* temp;
    
    if( doc && view && baseview )
    {
        CFaceBase& base = doc->GetFaceBase();
        CCamera& camera = view->Camera();
        camera.Stop();
        
       // 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];


			//人脸检测部分
			storage = cvCreateMemStorage(0);
			IplImage* image =camera.GetFrame().GetImage();

			IplImage* temp = cvCreateImage( cvSize(image->width/2,image->height/2), 8, 3 );

		
			
		
			if( image )
					{
					cvFlip( image, image, 0 );
			//			image->origin = IPL_ORIGIN_BL;
						rect = detect_and_draw( image, temp );
						cvWaitKey(0);
					//	cvReleaseImage( &image );
				//		cvReleaseImage( &temp );
						cvFlip( image, image, 0 );

						CString str;
						str.Format("%d,%d,%d,%d",rect.top,rect.bottom,rect.left,rect.right);
						AfxMessageBox(str);
					}
		

			cvNamedWindow( "zhou", 1 );
			cvShowImage("zhou", image );  
			cvDestroyWindow("zhou");


			
         int result = base.RecognizePerson( camera.GetFrame(), /*view->GetSelection()*/rect, 
                                               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";
               // }
				CPerson* person=base.GetPerson(ranged[0]);
				if(strcmp(m_sName,person->GetName())==0)
					message +="right person";
					else message +="pretend";

                baseview->SwitchMode(ranged[0], false);
                MessageBox( (LPCTSTR)message, NULL, MB_ICONEXCLAMATION  );
             
            }
        }
		camera.Start();
    }

	
}

void CMainFrame::OnUpdateRecog(CCmdUI* pCmdUI) 
{
    CHMMDemoView* view = GetCameraView();
   // CRect rect = view->GetSelection();
    
	//pCmdUI->Enable( rect.Width() && rect.Height() );
	pCmdUI->Enable(true); 
    
}

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
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -