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

📄 hmmdemo.cpp

📁 HMM用于人脸识别
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// App command to run the dialog
void CHMMDemoApp::OnAppAbout()
{
	CAboutDlg aboutDlg;
	aboutDlg.DoModal();
}

/////////////////////////////////////////////////////////////////////////////
// CHMMDemoApp message handlers
// App command to run the dialog
void CHMMDemoApp::OnFileOpen()
{
	CFileDialog dlg( TRUE, 0, 0, OFN_ALLOWMULTISELECT | OFN_ENABLESIZING |
                     OFN_EXPLORER | OFN_FILEMUSTEXIST,
                     "Face Base Files (*.txt)|*.txt|"
                     "Image Files (*.bmp;*.jpg;*.jpeg)|*.bmp;*.jpg;*.jpeg|"
                     "All Files (*.*)|*.*||", 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 )
    {
        POSITION pos = dlg.GetStartPosition();

        if( pos ) /* at least one image in the list */
        {
            CHMMDemoView* view = GetCameraView();
            
            view->SetImageList(0);          
            
            CStringList* imageList = new CStringList;

            while( pos )
            {
                imageList->AddTail( dlg.GetNextPathName(pos));
            }

            view->SetImageList( imageList );
            
            CWinApp::OpenDocumentFile( imageList->GetHead() );
        }
    }

    free( buffer );
}


void CHMMDemoApp::OnSettings() 
{
	CPropertySheet sheet;
    sheet.AddPage( m_dlgHMMParams );
    sheet.AddPage( m_dlgSamplingParams );
    sheet.AddPage( m_dlgMiscParams );     
    
    if(sheet.DoModal() == IDOK)
    {
        CMainFrame* mainframe = (CMainFrame*)AfxGetMainWnd();
        CHMMDemoDoc* doc = mainframe->GetCameraView()->GetDocument();
        CFaceBase& base = doc->GetFaceBase();

        base.SetParams( m_dlgSamplingParams->m_dctSize, 
                        m_dlgSamplingParams->m_obsSize,
                        m_dlgSamplingParams->m_delta,         
                        m_dlgHMMParams->m_States, 
                        m_dlgHMMParams->m_NumMix,
                        m_dlgMiscParams->m_useWidth,
                        m_dlgMiscParams->m_FixedWidth,
                        m_dlgMiscParams->m_useHeight, 
                        m_dlgMiscParams->m_FixedHeight,
                        m_dlgMiscParams->m_SuppressIntensity);                
    }

       
}

void CHMMDemoApp::OnSaveConfig() 
{
    CFileDialog dlg( FALSE, 0, 0, /*OFN_ALLOWMULTISELECT | */OFN_ENABLESIZING |
                     OFN_EXPLORER,
                     "Config file (*.txt) |*.txt|", 0 );
    

    if ( dlg.DoModal() == IDOK )
    {     
        int res = SaveConfig( dlg.GetFileName()  );
        ASSERT(res);
    }         
}
void CHMMDemoApp::OnLoadConfig() 
{
    CFileDialog dlg( TRUE, 0, 0, /*OFN_ALLOWMULTISELECT | */OFN_ENABLESIZING |
        OFN_EXPLORER,
        "Config file (*.txt) |*.txt|", 0 );
    
    
    if ( dlg.DoModal() == IDOK )
    {   
        int res = LoadConfig( dlg.GetFileName(), true ); 
        ASSERT( res );
        
    } 
}

int CHMMDemoApp::ExitInstance() 
{        
    SaveSettings();	
    return CWinApp::ExitInstance();
}

//loads config file without clearing base info
int CHMMDemoApp::LoadConfig(const char *filename, bool synchronize_base)
{
    CvSize dctSize, delta, obsSize;
    char str[128];
    int value;
    
    FILE* file = fopen( filename, "r" );
    if ( !file ) return 0; 
    
    //set initial values
     m_dlgMiscParams->m_useWidth = FALSE;
     m_dlgMiscParams->m_FixedWidth = 0;
     m_dlgMiscParams->m_useHeight = FALSE;
     m_dlgMiscParams->m_FixedHeight = 0;
     m_dlgMiscParams->m_SuppressIntensity = FALSE;
    
    while ( !feof(file) )
    {
        fscanf( file, "%s %d", str, &value );
        
        //here we allow config file to be not hard defined
        //Is it useful? - I don't know
        if ( strcmp( "WindowWidth", str ) == 0 )
        {
            dctSize.width = value;                
        }
        else if ( strcmp( "WindowHeight", str ) == 0 )
        {
            dctSize.height = value;
        }
        else if ( strcmp( "DeltaX", str ) == 0 )
        {
            delta.width = value;
        }
        else if ( strcmp( "DeltaY", str ) == 0 )
        {
            delta.height = value;
        }
        else if ( strcmp( "DCTcoeffX", str ) == 0 )
        {
            obsSize.width = value;
        }
        else if ( strcmp( "DCTcoeffY", str ) == 0 )
        {
            obsSize.height = value;
        }   
        else if ( strcmp( "SuperStates", str ) == 0 )
        {
            m_dlgHMMParams->m_States[0] = value;
        } 
        else if ( strcmp( "States", str ) == 0 )
        {
            //scan states
            ASSERT( m_dlgHMMParams->m_States[0] );//superstates must be already loaded
            m_dlgHMMParams->m_States[1] = value;
            for(int i = 1; i < m_dlgHMMParams->m_States[0]; i++ )
            {
                fscanf(file, "%d", &m_dlgHMMParams->m_States[i+1] );
            }
        }
        else if ( strcmp( "NumMixtures", str ) == 0 )
        {
            m_dlgHMMParams->m_NumMix = value;
        }               
        else if ( strcmp( "FIXED_WIDTH", str ) == 0 )
        {
            m_dlgMiscParams->m_useWidth = TRUE;
            m_dlgMiscParams->m_FixedWidth = value;
        }   
        else if ( strcmp( "FIXED_HEIGHT", str ) == 0 )
        {
            m_dlgMiscParams->m_useHeight = TRUE;
            m_dlgMiscParams->m_FixedHeight = value;
        }
        else if ( strcmp( "SUPPRESS_INTENSITY", str ) == 0 )
        {
            m_dlgMiscParams->m_SuppressIntensity = TRUE;
        }   
        else
        {
            //do nothing
        }
    }
    
    //check correctness of loaded file
    if ( (dctSize.width < obsSize.width)||
        (dctSize.height < obsSize.height) )
    {
        //error message 
        DoMessageBox( "Wrong parameters in config file\nNew parameters were not loaded", MB_OK|MB_ICONSTOP, 0 );
    }
    
    //initialize application variables
    m_dlgSamplingParams->m_dctSize = dctSize;
    m_dlgSamplingParams->m_obsSize = obsSize;
    m_dlgSamplingParams->m_delta = delta;  
    
    fclose( file ); 
    
    if (synchronize_base)
    {
        CMainFrame* mainframe = (CMainFrame*)AfxGetMainWnd();
        CHMMDemoDoc* doc = mainframe->GetCameraView()->GetDocument();
        CFaceBase& base = doc->GetFaceBase();

        return base.SetParams( //sampling params
                                m_dlgSamplingParams->m_dctSize, 
                                m_dlgSamplingParams->m_obsSize, 
                                m_dlgSamplingParams->m_delta,
                                //HMM params
                                m_dlgHMMParams->m_States, 
                                m_dlgHMMParams->m_NumMix,
                                //image scaling params
                                m_dlgMiscParams->m_useWidth,
                                m_dlgMiscParams->m_FixedWidth,
                                m_dlgMiscParams->m_useHeight, 
                                m_dlgMiscParams->m_FixedHeight,
                                //intensity suppression
                                m_dlgMiscParams->m_SuppressIntensity, 1 );
    }
    return 1;
}
int CHMMDemoApp::SaveConfig(const char* filename) 
{
        FILE* file = fopen( filename, "wt" );
        if (!file) { ASSERT(0); return 0; }

        fprintf( file, "***********Sampling params************\n" );
        fprintf( file, "WindowWidth  %d\n" ,  m_dlgSamplingParams->m_dctSize.width );
        fprintf( file, "WindowHeight %d\n",  m_dlgSamplingParams->m_dctSize.height );
        fprintf( file, "DeltaX %d\n" , m_dlgSamplingParams->m_delta.width );
        fprintf( file, "DeltaY %d\n",    m_dlgSamplingParams->m_delta.height );
        fprintf( file, "DCTcoeffX %d\n" , m_dlgSamplingParams->m_obsSize.width );
        fprintf( file, "DCTcoeffY %d\n",  m_dlgSamplingParams->m_obsSize.height ); 

        fprintf( file, "***************HMM params*************\n" );
        fprintf( file, "SuperStates %d\n",    m_dlgHMMParams->m_States[0] );
        fprintf( file, "States");
        for( int i = 0; i < m_dlgHMMParams->m_States[0]; i++ )
        {
            fprintf( file, " %d", m_dlgHMMParams->m_States[i+1] );
        }
        fprintf( file, "\n" );
        fprintf( file, "NumMixtures %d\n", m_dlgHMMParams->m_NumMix );

        fprintf( file, "***************Misc. params*************\n" );
        if( m_dlgMiscParams->m_useWidth )
            fprintf( file, "FIXED_WIDTH %d\n", m_dlgMiscParams->m_FixedWidth );
        if( m_dlgMiscParams->m_useHeight )
            fprintf( file, "FIXED_HEIGHT %d\n", m_dlgMiscParams->m_FixedHeight );
        if( m_dlgMiscParams->m_SuppressIntensity )
            fprintf( file, "SUPPRESS_INTENSITY %d\n", m_dlgMiscParams->m_SuppressIntensity );
        
        fclose( file );
   return 1;
}

⌨️ 快捷键说明

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