From 6adc86e6f1b3fc3474e0dd29a263a8ad6bbaa07d Mon Sep 17 00:00:00 2001 From: Alexander Yee Date: Tue, 21 Jul 2026 23:41:41 -0700 Subject: [PATCH] Make PaddleOCR a default resource and the default. --- .../Source/CommonFramework/GlobalSettingsPanel.cpp | 10 +++++----- .../Source/CommonFramework/GlobalSettingsPanel.h | 2 +- SerialPrograms/Source/CommonTools/OCR/OCR_Routines.cpp | 2 +- .../Source/ML/Inference/ML_PaddleOCRPipeline.cpp | 6 ++---- .../Inference/PokemonFRLG_BattleLevelUpReader.cpp | 2 +- .../Inference/PokemonFRLG_PartyLevelUpReader.cpp | 2 +- .../PokemonFRLG/Inference/PokemonFRLG_StatsReader.cpp | 4 ++-- .../Inference/PokemonFRLG_TrainerIdReader.cpp | 2 +- 8 files changed, 14 insertions(+), 16 deletions(-) diff --git a/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.cpp b/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.cpp index 1c83420f07..229d0c8b2e 100644 --- a/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.cpp +++ b/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.cpp @@ -141,11 +141,11 @@ GlobalSettings::GlobalSettings() #endif ) , THEME(CONSTRUCT_TOKEN) - , USE_PADDLE_OCR( + , USE_PADDLE_OCR0( "Enable PaddleOCR:
" "Use PaddleOCR instead of Tesseract for OCR.", LockMode::UNLOCK_WHILE_RUNNING, - false + true ) , USE_GPU_FOR_ML_INFERENCE( "Use GPU for Machine learning inference:
" @@ -277,7 +277,7 @@ GlobalSettings::GlobalSettings() PA_ADD_OPTION(USE_GPU_FOR_ML_INFERENCE); // gated behind Dev mode. see GlobalSettings::load_json - PA_ADD_OPTION(USE_PADDLE_OCR); + PA_ADD_OPTION(USE_PADDLE_OCR0); PA_ADD_OPTION(RESOURCE_DOWNLOAD_TABLE); PA_ADD_OPTION(DOWNLOAD_ERROR); @@ -326,7 +326,7 @@ GlobalSettings::GlobalSettings() PA_ADD_OPTION(DEVELOPER_TOKEN); - USE_PADDLE_OCR.set_visibility(ConfigOptionState::HIDDEN); + USE_PADDLE_OCR0.set_visibility(ConfigOptionState::HIDDEN); RESOURCE_DOWNLOAD_TABLE.set_visibility(ConfigOptionState::HIDDEN); DOWNLOAD_ERROR.set_visibility(ConfigOptionState::HIDDEN); SAVE_DEBUG_VIDEOS_ON_SWITCH.set_visibility(ConfigOptionState::HIDDEN); @@ -350,7 +350,7 @@ void GlobalSettings::load_json(const JsonValue& json){ ConfigOptionState devmode_visibility = developer_mode ? ConfigOptionState::ENABLED : ConfigOptionState::HIDDEN; - USE_PADDLE_OCR.set_visibility(devmode_visibility); + USE_PADDLE_OCR0.set_visibility(devmode_visibility); RESOURCE_DOWNLOAD_TABLE.set_visibility(devmode_visibility); DOWNLOAD_ERROR.set_visibility(devmode_visibility); SAVE_DEBUG_VIDEOS_ON_SWITCH.set_visibility(devmode_visibility); diff --git a/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.h b/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.h index 817d1f94dc..eb7d522830 100644 --- a/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.h +++ b/SerialPrograms/Source/CommonFramework/GlobalSettingsPanel.h @@ -127,7 +127,7 @@ class GlobalSettings : public BatchOption, private ConfigOption::Listener, priva FolderInputOption TEMP_FOLDER; Pimpl THEME; - BooleanCheckBoxOption USE_PADDLE_OCR; + BooleanCheckBoxOption USE_PADDLE_OCR0; BooleanCheckBoxOption USE_GPU_FOR_ML_INFERENCE; SettingsResourceDownloadTable RESOURCE_DOWNLOAD_TABLE; SettingsDownloadError DOWNLOAD_ERROR; diff --git a/SerialPrograms/Source/CommonTools/OCR/OCR_Routines.cpp b/SerialPrograms/Source/CommonTools/OCR/OCR_Routines.cpp index 32f9090fd7..dd4107671f 100644 --- a/SerialPrograms/Source/CommonTools/OCR/OCR_Routines.cpp +++ b/SerialPrograms/Source/CommonTools/OCR/OCR_Routines.cpp @@ -28,7 +28,7 @@ namespace OCR{ // that all the other languages are downloaded too, since they're all downloaded // as a bundle. bool use_paddle_ocr(){ - static bool use_paddle_ocr = GlobalSettings::instance().USE_PADDLE_OCR && paddle_ocr_language_available(Language::English); + static bool use_paddle_ocr = GlobalSettings::instance().USE_PADDLE_OCR0 && paddle_ocr_language_available(Language::English); return use_paddle_ocr; } diff --git a/SerialPrograms/Source/ML/Inference/ML_PaddleOCRPipeline.cpp b/SerialPrograms/Source/ML/Inference/ML_PaddleOCRPipeline.cpp index 1a29a8be37..99151e0406 100644 --- a/SerialPrograms/Source/ML/Inference/ML_PaddleOCRPipeline.cpp +++ b/SerialPrograms/Source/ML/Inference/ML_PaddleOCRPipeline.cpp @@ -5,9 +5,7 @@ * */ -#include #include -#include #include #include "CommonFramework/Globals.h" #include "CommonFramework/GlobalSettingsPanel.h" @@ -20,7 +18,7 @@ namespace ML{ std::pair PaddleOCRPipeline::get_paths(Language language){ - std::string base = DOWNLOADED_RESOURCE_PATH() + "PaddleOCR/"; + std::string base = RESOURCE_PATH() + "PaddleOCR/"; switch(language){ case Language::None: throw InternalProgramError(nullptr, PA_CURRENT_FUNCTION, "Attempted to call OCR without a language."); @@ -270,4 +268,4 @@ cv::Rect ImageFloatBox_to_cv_Rect(size_t width, size_t height, const ImageFloatB } -} \ No newline at end of file +} diff --git a/SerialPrograms/Source/PokemonFRLG/Inference/PokemonFRLG_BattleLevelUpReader.cpp b/SerialPrograms/Source/PokemonFRLG/Inference/PokemonFRLG_BattleLevelUpReader.cpp index eeccc9c9c2..70cb5a6f44 100644 --- a/SerialPrograms/Source/PokemonFRLG/Inference/PokemonFRLG_BattleLevelUpReader.cpp +++ b/SerialPrograms/Source/PokemonFRLG/Inference/PokemonFRLG_BattleLevelUpReader.cpp @@ -55,7 +55,7 @@ StatReads BattleLevelUpReader::read_stats(Logger &logger, const ImageViewRGB32& auto read_stat = [&](const ImageFloatBox &box, const std::string &name){ ImageViewRGB32 stat_region = extract_box_reference(game_screen, box); - if (!GlobalSettings::instance().USE_PADDLE_OCR){ + if (!GlobalSettings::instance().USE_PADDLE_OCR0){ // Tesseract-free path: waterfill segmentation + template matching // against the PokemonFRLG/Digits/0-9.png templates. return read_digits_waterfill_template(logger, stat_region); diff --git a/SerialPrograms/Source/PokemonFRLG/Inference/PokemonFRLG_PartyLevelUpReader.cpp b/SerialPrograms/Source/PokemonFRLG/Inference/PokemonFRLG_PartyLevelUpReader.cpp index 4c9a26ce4d..803e6edd75 100644 --- a/SerialPrograms/Source/PokemonFRLG/Inference/PokemonFRLG_PartyLevelUpReader.cpp +++ b/SerialPrograms/Source/PokemonFRLG/Inference/PokemonFRLG_PartyLevelUpReader.cpp @@ -55,7 +55,7 @@ StatReads PartyLevelUpReader::read_stats(Logger &logger, const ImageViewRGB32& f auto read_stat = [&](const ImageFloatBox &box, const std::string &name){ ImageViewRGB32 stat_region = extract_box_reference(game_screen, box); - if (!GlobalSettings::instance().USE_PADDLE_OCR){ + if (!GlobalSettings::instance().USE_PADDLE_OCR0){ // Tesseract-free path: waterfill segmentation + template matching // against the PokemonFRLG/Digits/0-9.png templates. return read_digits_waterfill_template(logger, stat_region); diff --git a/SerialPrograms/Source/PokemonFRLG/Inference/PokemonFRLG_StatsReader.cpp b/SerialPrograms/Source/PokemonFRLG/Inference/PokemonFRLG_StatsReader.cpp index 3e528bcc95..23d85da01c 100644 --- a/SerialPrograms/Source/PokemonFRLG/Inference/PokemonFRLG_StatsReader.cpp +++ b/SerialPrograms/Source/PokemonFRLG/Inference/PokemonFRLG_StatsReader.cpp @@ -191,7 +191,7 @@ void StatsReader::read_level( ImageViewRGB32 level_box = extract_box_reference(game_screen, jpn ? m_box_level_jpn : m_box_level); - if (!GlobalSettings::instance().USE_PADDLE_OCR){ + if (!GlobalSettings::instance().USE_PADDLE_OCR0){ // The level uses white text with dark shadow on a lilac background. // The digit reader's binarizer captures dark pixels (<=190 on all channels) // but NOT the white text (all channels 255 -> excluded). This leaves the @@ -335,7 +335,7 @@ void StatsReader::read_page2( auto read_stat = [&](const ImageFloatBox& box, const std::string& name){ ImageViewRGB32 stat_region = extract_box_reference(game_screen, box); - if (!GlobalSettings::instance().USE_PADDLE_OCR){ + if (!GlobalSettings::instance().USE_PADDLE_OCR0){ // Tesseract-free path: waterfill segmentation + template matching // against the PokemonFRLG/Digits/0-9.png templates. return read_digits_waterfill_template(logger, stat_region); diff --git a/SerialPrograms/Source/PokemonFRLG/Inference/PokemonFRLG_TrainerIdReader.cpp b/SerialPrograms/Source/PokemonFRLG/Inference/PokemonFRLG_TrainerIdReader.cpp index 799ea19442..8205ae16bb 100644 --- a/SerialPrograms/Source/PokemonFRLG/Inference/PokemonFRLG_TrainerIdReader.cpp +++ b/SerialPrograms/Source/PokemonFRLG/Inference/PokemonFRLG_TrainerIdReader.cpp @@ -43,7 +43,7 @@ uint16_t TrainerIdReader::read_tid( ImageViewRGB32 tid_region = extract_box_reference(game_screen, language == Language::Japanese ? m_box_tid_jpn : m_box_tid); - if (!GlobalSettings::instance().USE_PADDLE_OCR){ + if (!GlobalSettings::instance().USE_PADDLE_OCR0){ // Tesseract-free path: waterfill segmentation + template matching // against the PokemonFRLG/Digits/0-9.png templates. return uint16_t(read_digits_waterfill_template(logger, tid_region));