Mercurial > mercurial > hgweb_searcher03.cgi
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 3:1a64119ab257 | 4:fdba695b99f1 |
|---|---|
| 1 // Filename : marksheet.h | 1 // Filename : marksheet.h |
| 2 // Last Change: 23-Aug-2013. | 2 // Last Change: 11-Sep-2013. |
| 3 // | 3 // |
| 4 #ifndef __MARKSHEET_H__ | 4 #ifndef __MARKSHEET_H__ |
| 5 #define __MARKSHEET_H__ | 5 #define __MARKSHEET_H__ |
| 6 | 6 |
| 7 #include "wx/wxsqlite3.h" | 7 #include "wx/wxsqlite3.h" |
| 8 | 8 |
| 9 bool IsBlack( int r, int g, int b ); | 9 bool IsBlack( int r, int g, int b ); |
| 10 wxString GuessHhs( wxString& file ); | 10 wxString GuessHhs( wxString& file ); |
| 11 bool IsMarksheet( wxString& file, float* brate, long* len, double zmin, double zmax, long lmin, long lmax ); | 11 bool IsMarksheet( wxString& file, double zmin, double zmax, long lmin, long lmax ); |
| 12 bool _IsMarksheet( wxString& file, float* brate, long* len ); | |
| 13 wxString GetHhsName( wxString& hhsno ); | 12 wxString GetHhsName( wxString& hhsno ); |
| 14 int IsHhsno( wxString& hhsno, wxString& name ); | 13 int IsHhsno( wxString& hhsno, wxString& name ); |
| 15 int GetMarksheetVersion( wxString file ); | 14 int GetMarksheetVersion( wxString file ); |
| 16 | 15 |
| 17 /* | |
| 18 bool IsBlack( int r, int g, int b ) | |
| 19 { | |
| 20 if ( r == 0 && g == 0 && b == 0 ) { | |
| 21 return true; | |
| 22 } | |
| 23 return false; | |
| 24 }; | |
| 25 | |
| 26 wxString GuessHhs( wxString& file ) | |
| 27 { | |
| 28 wxString hhs; | |
| 29 wxImage img( file, wxBITMAP_TYPE_JPEG ); | |
| 30 int sx = 1800; // start x | |
| 31 int sy = 315;; // start y | |
| 32 int bw = 60; // block width | |
| 33 int bh = 50; // block height | |
| 34 int area = bw * bh; | |
| 35 int black = 0; | |
| 36 int x, y; | |
| 37 unsigned char r, g, b; | |
| 38 | |
| 39 int max_n; | |
| 40 float max; | |
| 41 float bk; | |
| 42 for ( int c=0; c<10; c++ ) { | |
| 43 max = 0.0; | |
| 44 max_n = -1; | |
| 45 for ( int n=0; n<10; n++ ) { | |
| 46 | |
| 47 for ( x=sx+bw*c; x<sx+bw*(c+1); x++ ) { | |
| 48 for ( y=sy+bh*n; y<sy+bh*(n+1); y++ ) { | |
| 49 r = img.GetRed( x, y ); | |
| 50 g = img.GetGreen( x, y ); | |
| 51 b = img.GetBlue( x, y ); | |
| 52 if( IsBlack( (int)r, (int)g, (int)b ) ) black++; | |
| 53 } | |
| 54 } | |
| 55 | |
| 56 bk = (float)black / area; | |
| 57 if ( max < bk ) { | |
| 58 max = bk; | |
| 59 max_n = n; | |
| 60 } | |
| 61 //wxPuts(wxString::Format(wxT("%d %f"),n,bk)); | |
| 62 black = 0; | |
| 63 } | |
| 64 hhs.Append( wxString::Format( wxT("%d"), max_n ) ); | |
| 65 } | |
| 66 | |
| 67 return hhs; | |
| 68 }; | |
| 69 | |
| 70 bool IsMarksheet( wxString& file, float* brate, long* len, double zmin, double zmax, long lmin, long lmax ) | |
| 71 { | |
| 72 wxImage img( file, wxBITMAP_TYPE_JPEG ); | |
| 73 int black = 0; | |
| 74 int x = 2465; | |
| 75 int h = 3500; | |
| 76 unsigned char r, g, b; | |
| 77 | |
| 78 for ( int y=0; y<h; y++ ) { | |
| 79 r = img.GetRed( x, y ); | |
| 80 g = img.GetGreen( x, y ); | |
| 81 b = img.GetBlue( x, y ); | |
| 82 if( IsBlack( (int)r, (int)g, (int)b ) ) black++; | |
| 83 } | |
| 84 float z = (float)black / h; | |
| 85 | |
| 86 wxFile f( file ); | |
| 87 long l = f.Length(); | |
| 88 | |
| 89 *brate = z; | |
| 90 *len = l; | |
| 91 //wxPuts(wxString::Format(wxT("z = %f, len = %d"),z,len)); | |
| 92 if ( zmin < z && z < zmax | |
| 93 && lmin < l && l < lmax ) { | |
| 94 return true; | |
| 95 } | |
| 96 return false; | |
| 97 }; | |
| 98 | |
| 99 bool _IsMarksheet( wxString& file, float* brate, long* len ) | |
| 100 { | |
| 101 wxImage img( file, wxBITMAP_TYPE_JPEG ); | |
| 102 int black = 0; | |
| 103 int x = 2465; | |
| 104 int h = 3500; | |
| 105 unsigned char r, g, b; | |
| 106 | |
| 107 for ( int y=0; y<h; y++ ) { | |
| 108 r = img.GetRed( x, y ); | |
| 109 g = img.GetGreen( x, y ); | |
| 110 b = img.GetBlue( x, y ); | |
| 111 if( IsBlack( (int)r, (int)g, (int)b ) ) black++; | |
| 112 } | |
| 113 float z = (float)black / h; | |
| 114 float zmin = 0.095713; float zmax = 0.108600; | |
| 115 | |
| 116 wxFile f( file ); | |
| 117 long l = f.Length(); | |
| 118 float lmin = 2072393; float lmax = 2346082; | |
| 119 | |
| 120 *brate = z; | |
| 121 *len = l; | |
| 122 //wxPuts(wxString::Format(wxT("z = %f, len = %d"),z,len)); | |
| 123 if ( zmin < z && z < zmax | |
| 124 && lmin < l && l < lmax ) { | |
| 125 return true; | |
| 126 } | |
| 127 return false; | |
| 128 }; | |
| 129 | |
| 130 wxString GetHhsName( wxString& hhsno ) | |
| 131 { | |
| 132 wxString name; | |
| 133 | |
| 134 wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("hhs.db"); | |
| 135 wxSQLite3Database hhsdb; | |
| 136 hhsdb.Open( gszFile ); | |
| 137 | |
| 138 wxSQLite3Statement stmt = hhsdb.PrepareStatement("SELECT name FROM hhs_master WHERE hhsno = ?"); | |
| 139 stmt.Bind( 1, hhsno ); | |
| 140 wxSQLite3ResultSet q = stmt.ExecuteQuery(); | |
| 141 if ( !q.IsNull(0) ) { | |
| 142 while ( q.NextRow() ) { | |
| 143 name = q.GetString(0); | |
| 144 } | |
| 145 } | |
| 146 stmt.Finalize(); | |
| 147 hhsdb.Close(); | |
| 148 | |
| 149 return name; | |
| 150 }; | |
| 151 | |
| 152 int IsHhsno( wxString& hhsno, wxString& name ) | |
| 153 { | |
| 154 wxRegEx reHhs(wxT("^0[1238][0-9]{8}$")); // 被保番チェック | |
| 155 | |
| 156 if ( reHhs.Matches( hhsno) ) { | |
| 157 name = GetHhsName( hhsno ); | |
| 158 if ( name.IsEmpty() ) { // DBにない | |
| 159 return 1; | |
| 160 } | |
| 161 return 2; | |
| 162 } | |
| 163 else { | |
| 164 return 0; | |
| 165 } | |
| 166 }; | |
| 167 | |
| 168 int GetMarksheetVersion( wxString file ) | |
| 169 { | |
| 170 wxImage img( file, wxBITMAP_TYPE_JPEG ); | |
| 171 int black = 0; | |
| 172 int x = 2465; | |
| 173 int h = 3500; | |
| 174 unsigned char r, g, b; | |
| 175 | |
| 176 for ( int y=0; y<h; y++ ) { | |
| 177 r = img.GetRed( x, y ); | |
| 178 g = img.GetGreen( x, y ); | |
| 179 b = img.GetBlue( x, y ); | |
| 180 if( IsBlack( (int)r, (int)g, (int)b ) ) black++; | |
| 181 } | |
| 182 float z = (float)black / h; | |
| 183 | |
| 184 if ( z > 0.120 ) { | |
| 185 return 2; // 0.130 - 0.140 | |
| 186 } | |
| 187 else { | |
| 188 return 1; // 0.099 - 0.110 | |
| 189 } | |
| 190 }; | |
| 191 */ | |
| 192 | |
| 193 #endif // __MARKSHEET_H__ | 16 #endif // __MARKSHEET_H__ |
| 194 | 17 |
