From ce96cef6ec351085d4b0891f7dced2d75902f253 Mon Sep 17 00:00:00 2001 From: uye <99072975+ABA2396@users.noreply.github.com> Date: Fri, 11 Jul 2025 01:28:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A4=96=E6=9C=8D=E8=AE=AD=E7=BB=83?= =?UTF-8?q?=E5=AE=A4=E6=8A=80=E8=83=BD=E5=90=8D=E5=8F=AF=E8=83=BD=E8=A2=AB?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=9B=BF=E6=8D=A2=E6=88=90=E5=B9=B2=E5=91=98?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task/Infrast/InfrastTrainingTask.cpp | 59 +++++++++++++------ 1 file changed, 40 insertions(+), 19 deletions(-) diff --git a/src/MaaCore/Task/Infrast/InfrastTrainingTask.cpp b/src/MaaCore/Task/Infrast/InfrastTrainingTask.cpp index db6752a978..6366f815ac 100644 --- a/src/MaaCore/Task/Infrast/InfrastTrainingTask.cpp +++ b/src/MaaCore/Task/Infrast/InfrastTrainingTask.cpp @@ -56,29 +56,50 @@ std::optional asst::InfrastTrainingTa return TrainingStatus::Idle; } - const auto& replace_map = Task.get("CharsNameOcrReplace")->replace_map; - std::vector> task_replace = - Task.get("InfrastTrainingOperatorAndSkill")->replace_map; - ranges::copy(replace_map, std::back_inserter(task_replace)); - RegionOCRer rec_analyzer(image); - rec_analyzer.set_task_info("InfrastTrainingOperatorAndSkill"); - rec_analyzer.set_replace(task_replace); - rec_analyzer.set_use_raw(true); - if (!rec_analyzer.analyze()) { - Log.error(__FUNCTION__, "recognition failed"); - return std::nullopt; + { + const auto& replace_map = Task.get("CharsNameOcrReplace")->replace_map; + std::vector> task_replace = + Task.get("InfrastTrainingOperatorAndSkill")->replace_map; + ranges::copy(replace_map, std::back_inserter(task_replace)); + RegionOCRer name_analyzer(image); + name_analyzer.set_task_info("InfrastTrainingOperatorAndSkill"); + name_analyzer.set_replace(task_replace); + name_analyzer.set_use_raw(true); + if (!name_analyzer.analyze()) { + Log.error(__FUNCTION__, "operator name recognition failed"); + return std::nullopt; + } + + std::string name_str = name_analyzer.get_result().text; + size_t separation_pos = name_str.find('\n'); + if (separation_pos == std::string::npos) { + Log.error(__FUNCTION__, "separate string failed"); + return std::nullopt; + } + + // '\n'前为干员名,'\n'后为技能名 + m_operator_name = name_str.substr(0, separation_pos); } - std::string raw_str = rec_analyzer.get_result().text; - size_t separation_pos = raw_str.find('\n'); - if (separation_pos == std::string::npos) { - Log.error(__FUNCTION__, "separate string failed"); - return std::nullopt; + { + RegionOCRer skill_analyzer(image); + skill_analyzer.set_task_info("InfrastTrainingOperatorAndSkill"); + skill_analyzer.set_use_raw(true); + if (!skill_analyzer.analyze()) { + Log.error(__FUNCTION__, "skill name recognition failed"); + return std::nullopt; + } + + std::string skill_str = skill_analyzer.get_result().text; + size_t separation_pos = skill_str.find('\n'); + if (separation_pos == std::string::npos) { + Log.error(__FUNCTION__, "separate string failed"); + return std::nullopt; + } + + m_skill_name = skill_str.substr(separation_pos + 1); } - // '\n'前为干员名,'\n'后为技能名 - m_operator_name = raw_str.substr(0, separation_pos); - m_skill_name = raw_str.substr(separation_pos + 1, raw_str.length() - separation_pos + 1); Rect roi = Task.get("InfrastTrainingSkillImg")->roi; m_skill_img = image(make_rect(roi));