@@ -33,7 +33,6 @@ using std::endl;
3333namespace PokemonAutomation {
3434namespace NintendoSwitch {
3535
36-
3736DateReader::DateReader ()
3837 : m_background_top(0.50 , 0.02 , 0.45 , 0.08 )
3938 , m_window_top(0.50 , 0.36 , 0.45 , 0.07 )
@@ -92,7 +91,10 @@ bool DateReader::detect(const ImageViewRGB32& screen) const{
9291// cout << "zxcv" << endl;
9392 return false ;
9493 }
95- if (stats_background_top.average .sum () > stats_window_top.average .sum ()){
94+ // cout << "stats_background_top: " << stats_background_top.average.sum() << endl;
95+ // cout << "stats_window_top: " << stats_window_top.average.sum() << endl;
96+ if (std::abs (stats_background_top.average .sum () - stats_window_top.average .sum ()) < 50 ){
97+ // cout << "xcvb" << endl;
9698 return false ;
9799 }
98100
@@ -104,6 +106,7 @@ bool DateReader::detect(const ImageViewRGB32& screen) const{
104106
105107 double stddev = stats_us_hours.stddev .sum ();
106108 if (stddev < 80 ){
109+ // cout << "sdfg" << endl;
107110 return false ;
108111 }
109112
@@ -128,8 +131,7 @@ int8_t DateReader::read_hours(Logger& logger, const ImageViewRGB32& screen) cons
128131 double stddev = stats_us_hours.stddev .sum ();
129132 bool format_us = stddev > 30 ;
130133 if (format_us){
131- ImageRGB32 us_hours_filtered = to_blackwhite_rgb32_range (us_hours, 0xff000000 , 0xff7f7f7f , white_theme);
132- int hours = OCR::read_number (logger, us_hours_filtered);
134+ int hours = read_box (logger, 1 , 12 , screen, m_us_hour, white_theme);
133135 if (hours < 1 || hours > 12 ){
134136 return -1 ;
135137 }
@@ -138,7 +140,7 @@ int8_t DateReader::read_hours(Logger& logger, const ImageViewRGB32& screen) cons
138140 }
139141
140142 ImageViewRGB32 us_ampm = extract_box_reference (screen, m_us_ampm);
141- ImageRGB32 us_ampm_filtered = to_blackwhite_rgb32_range (us_ampm, 0xff000000 , 0xff7f7f7f , white_theme);
143+ ImageRGB32 us_ampm_filtered = filter_image (us_ampm, white_theme);
142144
143145 std::string ampm = to_utf8 (OCR::normalize_utf32 (OCR::ocr_read (Language::English, us_ampm_filtered)));
144146 if (ampm == " am" ){
@@ -150,9 +152,7 @@ int8_t DateReader::read_hours(Logger& logger, const ImageViewRGB32& screen) cons
150152 }
151153 return (int8_t )hours;
152154 }else {
153- ImageViewRGB32 h24_hours = extract_box_reference (screen, m_24_hour);
154- ImageRGB32 h24_hours_filtered = to_blackwhite_rgb32_range (h24_hours, 0xff000000 , 0xff7f7f7f , white_theme);
155- int hours = OCR::read_number (logger, h24_hours_filtered);
155+ int hours = read_box (logger, 0 , 23 , screen, m_24_hour, white_theme);
156156 if (hours < 0 || hours > 23 ){
157157 return -1 ;
158158 }
@@ -290,20 +290,35 @@ std::pair<DateFormat, DateTime> DateReader::read_date(Logger& logger, std::share
290290
291291 return {DateFormat::EU, read_date_eu (logger, std::move (screen), white_theme)};
292292}
293+ ImageRGB32 DateReader::filter_image (const ImageViewRGB32& image, bool white_theme){
294+ ImageRGB32 filtered = to_blackwhite_rgb32_range (
295+ image,
296+ 0xff000000 , white_theme ? 0xffff7fff : 0xff7f7f7f ,
297+ white_theme
298+ );
299+ return filtered;
300+ }
293301int DateReader::read_box (
294302 Logger& logger,
295303 int min, int max,
296304 const ImageViewRGB32& screen, const ImageFloatBox& box,
297305 bool white_theme
298306) const {
299- ImageRGB32 filtered = to_blackwhite_rgb32_range (
300- extract_box_reference (screen, box),
301- 0xff000000 , 0xff7f7fff ,
302- white_theme
303- );
304- // extract_box_reference(*screen, m_us_month).save("test0.png");
305- // filtered.save("test1.png");
306- int value = OCR::read_number (logger, filtered);
307+ ImageViewRGB32 cropped = extract_box_reference (screen, box);
308+
309+ int value;
310+ if (white_theme){
311+ value = OCR::read_number_waterfill (
312+ logger, cropped,
313+ 0xff000000 , 0xffff7fff , true
314+ );
315+ }else {
316+ value = OCR::read_number_waterfill (
317+ logger, cropped,
318+ 0xff000000 , 0xff7f7f7f , false
319+ );
320+ }
321+
307322 if (value < min || value > max){
308323 value = -1 ;
309324 }
@@ -322,18 +337,12 @@ DateTime DateReader::read_date_us(Logger& logger, std::shared_ptr<const ImageRGB
322337 // Hour
323338 {
324339 int hour = read_box (logger, 1 , 12 , *screen, m_us_hour, white_theme);
325- ImageRGB32 hours_filtered = to_blackwhite_rgb32_range (
326- extract_box_reference (*screen, m_us_hour),
327- 0xff000000 , 0xff7f7fff ,
328- white_theme
329- );
330340 if (hour == 12 ){
331341 hour = 0 ;
332342 }
333343
334- ImageRGB32 us_ampm_filtered = to_blackwhite_rgb32_range (
344+ ImageRGB32 us_ampm_filtered = filter_image (
335345 extract_box_reference (*screen, m_us_ampm),
336- 0xff000000 , 0xff7f7fff ,
337346 white_theme
338347 );
339348
0 commit comments