Mercurial > mercurial > hgweb_searcher03.cgi
diff include/marksheet.h @ 4:fdba695b99f1
More fast ( read from DB ).
Improve the precision of marksheet judgement.
author | pyon@macmini |
---|---|
date | Wed, 11 Sep 2013 19:09:14 +0900 |
parents | c066fde99517 |
children | 52958cd4a073 |
line wrap: on
line diff
--- a/include/marksheet.h Tue Aug 27 18:50:00 2013 +0900 +++ b/include/marksheet.h Wed Sep 11 19:09:14 2013 +0900 @@ -1,5 +1,5 @@ // Filename : marksheet.h -// Last Change: 23-Aug-2013. +// Last Change: 11-Sep-2013. // #ifndef __MARKSHEET_H__ #define __MARKSHEET_H__ @@ -8,187 +8,10 @@ bool IsBlack( int r, int g, int b ); wxString GuessHhs( wxString& file ); -bool IsMarksheet( wxString& file, float* brate, long* len, double zmin, double zmax, long lmin, long lmax ); -bool _IsMarksheet( wxString& file, float* brate, long* len ); +bool IsMarksheet( wxString& file, double zmin, double zmax, long lmin, long lmax ); wxString GetHhsName( wxString& hhsno ); int IsHhsno( wxString& hhsno, wxString& name ); int GetMarksheetVersion( wxString file ); -/* -bool IsBlack( int r, int g, int b ) -{ - if ( r == 0 && g == 0 && b == 0 ) { - return true; - } - return false; -}; - -wxString GuessHhs( wxString& file ) -{ - wxString hhs; - wxImage img( file, wxBITMAP_TYPE_JPEG ); - int sx = 1800; // start x - int sy = 315;; // start y - int bw = 60; // block width - int bh = 50; // block height - int area = bw * bh; - int black = 0; - int x, y; - unsigned char r, g, b; - - int max_n; - float max; - float bk; - for ( int c=0; c<10; c++ ) { - max = 0.0; - max_n = -1; - for ( int n=0; n<10; n++ ) { - - for ( x=sx+bw*c; x<sx+bw*(c+1); x++ ) { - for ( y=sy+bh*n; y<sy+bh*(n+1); y++ ) { - r = img.GetRed( x, y ); - g = img.GetGreen( x, y ); - b = img.GetBlue( x, y ); - if( IsBlack( (int)r, (int)g, (int)b ) ) black++; - } - } - - bk = (float)black / area; - if ( max < bk ) { - max = bk; - max_n = n; - } - //wxPuts(wxString::Format(wxT("%d %f"),n,bk)); - black = 0; - } - hhs.Append( wxString::Format( wxT("%d"), max_n ) ); - } - - return hhs; -}; - -bool IsMarksheet( wxString& file, float* brate, long* len, double zmin, double zmax, long lmin, long lmax ) -{ - wxImage img( file, wxBITMAP_TYPE_JPEG ); - int black = 0; - int x = 2465; - int h = 3500; - unsigned char r, g, b; - - for ( int y=0; y<h; y++ ) { - r = img.GetRed( x, y ); - g = img.GetGreen( x, y ); - b = img.GetBlue( x, y ); - if( IsBlack( (int)r, (int)g, (int)b ) ) black++; - } - float z = (float)black / h; - - wxFile f( file ); - long l = f.Length(); - - *brate = z; - *len = l; - //wxPuts(wxString::Format(wxT("z = %f, len = %d"),z,len)); - if ( zmin < z && z < zmax - && lmin < l && l < lmax ) { - return true; - } - return false; -}; - -bool _IsMarksheet( wxString& file, float* brate, long* len ) -{ - wxImage img( file, wxBITMAP_TYPE_JPEG ); - int black = 0; - int x = 2465; - int h = 3500; - unsigned char r, g, b; - - for ( int y=0; y<h; y++ ) { - r = img.GetRed( x, y ); - g = img.GetGreen( x, y ); - b = img.GetBlue( x, y ); - if( IsBlack( (int)r, (int)g, (int)b ) ) black++; - } - float z = (float)black / h; - float zmin = 0.095713; float zmax = 0.108600; - - wxFile f( file ); - long l = f.Length(); - float lmin = 2072393; float lmax = 2346082; - - *brate = z; - *len = l; - //wxPuts(wxString::Format(wxT("z = %f, len = %d"),z,len)); - if ( zmin < z && z < zmax - && lmin < l && l < lmax ) { - return true; - } - return false; -}; - -wxString GetHhsName( wxString& hhsno ) -{ - wxString name; - - wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("hhs.db"); - wxSQLite3Database hhsdb; - hhsdb.Open( gszFile ); - - wxSQLite3Statement stmt = hhsdb.PrepareStatement("SELECT name FROM hhs_master WHERE hhsno = ?"); - stmt.Bind( 1, hhsno ); - wxSQLite3ResultSet q = stmt.ExecuteQuery(); - if ( !q.IsNull(0) ) { - while ( q.NextRow() ) { - name = q.GetString(0); - } - } - stmt.Finalize(); - hhsdb.Close(); - - return name; -}; - -int IsHhsno( wxString& hhsno, wxString& name ) -{ - wxRegEx reHhs(wxT("^0[1238][0-9]{8}$")); // 被保番チェック - - if ( reHhs.Matches( hhsno) ) { - name = GetHhsName( hhsno ); - if ( name.IsEmpty() ) { // DBにない - return 1; - } - return 2; - } - else { - return 0; - } -}; - -int GetMarksheetVersion( wxString file ) -{ - wxImage img( file, wxBITMAP_TYPE_JPEG ); - int black = 0; - int x = 2465; - int h = 3500; - unsigned char r, g, b; - - for ( int y=0; y<h; y++ ) { - r = img.GetRed( x, y ); - g = img.GetGreen( x, y ); - b = img.GetBlue( x, y ); - if( IsBlack( (int)r, (int)g, (int)b ) ) black++; - } - float z = (float)black / h; - - if ( z > 0.120 ) { - return 2; // 0.130 - 0.140 - } - else { - return 1; // 0.099 - 0.110 - } -}; -*/ - #endif // __MARKSHEET_H__