|
11 | 11 | #include "CommonFramework/ImageTypes/ImageViewRGB32.h" |
12 | 12 | #include "CommonFramework/Tools/GlobalThreadPools.h" |
13 | 13 | #include "CommonFramework/VideoPipeline/VideoOverlayScopes.h" |
| 14 | +#include "CommonFramework/ImageTools/ImageStats.h" |
14 | 15 | #include "CommonTools/Images/ImageFilter.h" |
15 | 16 | #include "CommonTools/Images/ImageManip.h" |
16 | 17 | #include "CommonTools/OCR/OCR_NumberReader.h" |
@@ -131,6 +132,7 @@ StatsReader::StatsReader(Color color) |
131 | 132 | : m_color(color), m_box_nature(0.028976, 0.729610, 0.502487, 0.065251), |
132 | 133 | m_box_level(0.052000, 0.120140, 0.099000, 0.069416), |
133 | 134 | m_box_name(0.163158, 0.122917, 0.262811, 0.066639), |
| 135 | + m_box_gender(0.430769, 0.114423, 0.034615, 0.081731), |
134 | 136 | m_box_hp(0.815558, 0.131247, 0.173049, 0.065251), |
135 | 137 | m_box_attack(0.891000, 0.245089, 0.097607, 0.063862), |
136 | 138 | m_box_defense(0.891000, 0.325612, 0.097607, 0.066639), |
@@ -175,6 +177,34 @@ void StatsReader::read_page1( |
175 | 177 | stats.name = name_result.results.begin()->second.token; |
176 | 178 | } |
177 | 179 |
|
| 180 | + // Detect gender by comparing red vs blue pixels |
| 181 | + ImageViewRGB32 gender_box = extract_box_reference(game_screen, m_box_gender); |
| 182 | + |
| 183 | + const bool replace_color_within_range = false; |
| 184 | + const ImageRGB32 red_region = filter_rgb32_range( |
| 185 | + gender_box, |
| 186 | + combine_rgb(150, 0, 0), combine_rgb(255, 100, 100), Color(0), replace_color_within_range |
| 187 | + ); |
| 188 | + const size_t num_red_pixels = image_stats(red_region).count; |
| 189 | + |
| 190 | + const ImageRGB32 blue_region = filter_rgb32_range( |
| 191 | + gender_box, |
| 192 | + combine_rgb(0, 0, 180), combine_rgb(130, 130, 255), Color(0), replace_color_within_range |
| 193 | + ); |
| 194 | + const size_t num_blue_pixels = image_stats(blue_region).count; |
| 195 | + |
| 196 | + const double threshold = gender_box.width() * gender_box.height() * 0.1; |
| 197 | + |
| 198 | + if (num_red_pixels > threshold){ |
| 199 | + stats.gender = SummaryGender::Female; |
| 200 | + }else if (num_blue_pixels > threshold){ |
| 201 | + stats.gender = SummaryGender::Male; |
| 202 | + } else { |
| 203 | + stats.gender = SummaryGender::Genderless; |
| 204 | + } |
| 205 | + |
| 206 | + |
| 207 | + |
178 | 208 | ImageViewRGB32 level_box = extract_box_reference(game_screen, m_box_level); |
179 | 209 |
|
180 | 210 | ImageRGB32 level_upscaled = |
|
0 commit comments