From 67da458bc27a1e3ead2dba7dd0503c3afc43def5 Mon Sep 17 00:00:00 2001 From: MistEO Date: Thu, 29 Jun 2023 10:11:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=B0=86=20OCR=20replace=20=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E6=9C=89=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Common/AsstTypes.h | 2 +- src/MaaCore/Config/TaskData.cpp | 2 +- src/MaaCore/Vision/Config/OCRerConfig.cpp | 5 +++-- src/MaaCore/Vision/Config/OCRerConfig.h | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/MaaCore/Common/AsstTypes.h b/src/MaaCore/Common/AsstTypes.h index fb7101dd91..2741d17fad 100644 --- a/src/MaaCore/Common/AsstTypes.h +++ b/src/MaaCore/Common/AsstTypes.h @@ -382,7 +382,7 @@ namespace asst bool is_ascii = false; // 是否启用字符数字模型 bool without_det = false; // 是否不使用检测模型 bool replace_full = false; // 匹配之后,是否将整个字符串replace(false是只替换match的部分) - std::unordered_map + std::vector> replace_map; // 部分文字容易识别错,字符串强制replace之后,再进行匹配 }; diff --git a/src/MaaCore/Config/TaskData.cpp b/src/MaaCore/Config/TaskData.cpp index a56b147dd2..2bd032154e 100644 --- a/src/MaaCore/Config/TaskData.cpp +++ b/src/MaaCore/Config/TaskData.cpp @@ -756,7 +756,7 @@ asst::TaskData::taskptr_t asst::TaskData::generate_ocr_task_info([[maybe_unused] ocr_task_info_ptr->replace_full = task_json.get("replaceFull", default_ptr->replace_full); if (auto opt = task_json.find("ocrReplace")) { for (const json::value& rep : opt.value()) { - ocr_task_info_ptr->replace_map.emplace(rep[0].as_string(), rep[1].as_string()); + ocr_task_info_ptr->replace_map.emplace_back(std::make_pair(rep[0].as_string(), rep[1].as_string())); } } else { diff --git a/src/MaaCore/Vision/Config/OCRerConfig.cpp b/src/MaaCore/Vision/Config/OCRerConfig.cpp index f37e6b05ee..ce2fc0ad70 100644 --- a/src/MaaCore/Vision/Config/OCRerConfig.cpp +++ b/src/MaaCore/Vision/Config/OCRerConfig.cpp @@ -17,7 +17,8 @@ void OCRerConfig::set_required(std::vector required) noexcept m_params.required = std::move(required); } -void OCRerConfig::set_replace(const std::unordered_map& replace, bool replace_full) noexcept +void OCRerConfig::set_replace(const std::vector>& replace, + bool replace_full) noexcept { m_params.replace.clear(); m_params.replace.reserve(replace.size()); @@ -25,7 +26,7 @@ void OCRerConfig::set_replace(const std::unordered_map for (auto&& [key, val] : replace) { auto new_key = OcrConfig::get_instance().process_equivalence_class(key); // do not create new_val as val is user-provided, and can avoid issues like 夕 and katakana タ - m_params.replace.emplace(std::move(new_key), val); + m_params.replace.emplace_back(std::make_pair(std::move(new_key), val)); } m_params.replace_full = replace_full; } diff --git a/src/MaaCore/Vision/Config/OCRerConfig.h b/src/MaaCore/Vision/Config/OCRerConfig.h index f753902ba3..20004452e4 100644 --- a/src/MaaCore/Vision/Config/OCRerConfig.h +++ b/src/MaaCore/Vision/Config/OCRerConfig.h @@ -14,7 +14,7 @@ namespace asst { std::vector required; bool full_match = false; - std::unordered_map replace; + std::vector> replace; bool replace_full = false; bool without_det = false; bool use_char_model = false; @@ -33,7 +33,7 @@ namespace asst void set_params(Params params); void set_required(std::vector required) noexcept; - void set_replace(const std::unordered_map& replace, + void set_replace(const std::vector>& replace, bool replace_full = false) noexcept; virtual void set_task_info(std::shared_ptr task_ptr);