Skip to content

Commit 1379399

Browse files
committed
More aggressive OCR checking for AutoDA.
1 parent 41925c5 commit 1379399

File tree

4 files changed

+21
-8
lines changed

4 files changed

+21
-8
lines changed

SerialPrograms/Source/CommonFramework/Language.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ Language language_code_to_enum(const std::string& language){
8686

8787
std::string language_warning(Language language){
8888
return "Please ensure that you have set the correct Game Language in the program settings.\n"
89-
"Current language set: " + language_data(language).name;
89+
"Current Language Set: " + language_data(language).name;
9090

9191
}
9292

SerialPrograms/Source/CommonTools/FailureWatchdog.h

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "Common/Cpp/AbstractLogger.h"
1111
#include "Common/Cpp/Time.h"
1212
#include "Common/Cpp/Exceptions.h"
13+
#include "CommonFramework/Language.h"
1314

1415
namespace PokemonAutomation{
1516

@@ -21,13 +22,15 @@ class FailureWatchdog{
2122
public:
2223
FailureWatchdog(
2324
Logger& logger,
24-
std::string failure_message,
25+
Language language,
26+
// std::string failure_message,
2527
uint64_t min_count = 5,
2628
double min_success_rate = 0.5,
2729
std::chrono::seconds time_limit = std::chrono::seconds(120)
2830
)
2931
: m_logger(logger)
30-
, m_failure_message(std::move(failure_message))
32+
, m_language(language)
33+
// , m_failure_message(std::move(failure_message))
3134
, m_min_count(min_count)
3235
, m_min_success_rate(min_success_rate)
3336
, m_time_limit(time_limit)
@@ -63,13 +66,18 @@ class FailureWatchdog{
6366
}
6467

6568

66-
throw UserSetupError(m_logger, m_failure_message);
69+
throw UserSetupError(
70+
m_logger,
71+
"Too many text recognition errors. Did you set the correct language?\n"
72+
"Current Language: " + language_data(m_language).name
73+
);
6774
}
6875

6976

7077
private:
7178
Logger& m_logger;
72-
std::string m_failure_message;
79+
Language m_language;
80+
// std::string m_failure_message;
7381
uint64_t m_min_count;
7482
double m_min_success_rate;
7583
WallDuration m_time_limit;
@@ -88,14 +96,16 @@ class OcrFailureWatchdog : public FailureWatchdog{
8896
public:
8997
OcrFailureWatchdog(
9098
Logger& logger,
91-
std::string failure_message = "Too many text recognition errors. Did you set the correct language?",
99+
Language language,
100+
// std::string failure_message = "Too many text recognition errors. Did you set the correct language?",
92101
uint64_t min_count = 5,
93102
double min_success_rate = 0.5,
94103
std::chrono::seconds time_limit = std::chrono::seconds(120)
95104
)
96105
: FailureWatchdog(
97106
logger,
98-
std::move(failure_message),
107+
language,
108+
// std::move(failure_message),
99109
min_count,
100110
min_success_rate,
101111
time_limit

SerialPrograms/Source/PokemonSwSh/MaxLair/Framework/PokemonSwSh_MaxLair_StateMachine.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ AdventureRuntime::AdventureRuntime(
6161
, session_stats(p_session_stats)
6262
{
6363
for (size_t c = 0; c < p_console_settings.active_consoles(); c++){
64-
ocr_watchdog.emplace_back(consoles[c].logger());
64+
ocr_watchdog.emplace_back(consoles[c].logger(), console_settings.PLAYERS[c]->language);
6565
}
6666
}
6767

SerialPrograms/Source/PokemonSwSh/MaxLair/Inference/PokemonSwSh_MaxLair_Detect_PokemonReader.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,7 @@ std::string read_pokemon_name_sprite(
354354
if (!ocr_hit){
355355
std::string ret = sprite_hit ? std::move(iter->second) : "";
356356
logger.log("Failed to read name. Using sprite result: " + ret, COLOR_RED);
357+
ocr_watchdog.push_result(false);
357358
// dump_image(logger, screen, "MaxLair-read_name_sprite");
358359
return ret;
359360
}
@@ -375,6 +376,7 @@ std::string read_pokemon_name_sprite(
375376
// If there is only one sprite match, use it.
376377
if (result.results.size() == 1){
377378
logger.log("Sprite and OCR disagree. Attempt to arbitrate... Picking: " + result.results.begin()->second, COLOR_RED);
379+
ocr_watchdog.push_result(false);
378380
return std::move(result.results.begin()->second);
379381
}
380382

@@ -386,6 +388,7 @@ std::string read_pokemon_name_sprite(
386388

387389
// At this point, both OCR and sprites have multiple items in completely disjoint sets.
388390
logger.log("Sprite and OCR disagree so badly that no arbitration will be attempted.", COLOR_RED);
391+
ocr_watchdog.push_result(false);
389392

390393
dump_image(logger, MODULE_NAME, "MaxLair-read_name_sprite", screen);
391394

0 commit comments

Comments
 (0)