From be0e1b200941eae40fc9f175b48d499a6a1d10b6 Mon Sep 17 00:00:00 2001 From: zzyyyl Date: Fri, 11 Nov 2022 21:22:04 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=E6=8A=8A=20isAscii=20=E5=86=99?= =?UTF-8?q?=E8=BF=9B=20tasks.json=EF=BC=8C=E5=9C=A8=20analyzer=20set=5Ftas?= =?UTF-8?q?k=5Finfo=20=E6=97=B6=E8=87=AA=E5=8A=A8=E8=AE=BE=E7=BD=AE=20is?= =?UTF-8?q?=5Fascii?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/tasks.json | 35 ++++++++++--------- .../ImageAnalyzer/BattleImageAnalyzer.cpp | 2 -- .../ImageAnalyzer/DepotImageAnalyzer.cpp | 1 - .../General/OcrImageAnalyzer.cpp | 1 + .../ProcessTaskImageAnalyzer.cpp | 1 - .../RoguelikeRecruitImageAnalyzer.cpp | 10 +++--- .../ImageAnalyzer/StageDropsImageAnalyzer.cpp | 2 -- .../Task/Plugin/DrGrandetTaskPlugin.cpp | 2 +- src/MeoAssistant/Task/Sub/AutoRecruitTask.cpp | 2 -- .../Task/Sub/CreditShoppingTask.cpp | 1 - 10 files changed, 25 insertions(+), 32 deletions(-) diff --git a/resource/tasks.json b/resource/tasks.json index 8110f2a08b..c5f6a873ff 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -3818,6 +3818,7 @@ }, "CreditShop-CreditOcr": { "algorithm": "OcrDetect", + "isAscii": true, "text": [], "roi": [ 1147, @@ -3929,6 +3930,7 @@ "RecruitTimerH": { "Doc": "识别公招小时数", "algorithm": "OcrDetect", + "isAscii": true, "roi": [ 400, 180, @@ -3950,6 +3952,7 @@ "RecruitTimerM": { "Doc": "识别公招分钟数", "algorithm": "OcrDetect", + "isAscii": true, "roi": [ 570, 180, @@ -6057,6 +6060,7 @@ }, "BattleKills": { "algorithm": "OcrDetect", + "isAscii": true, "text": [], "roi": [ 50, @@ -6067,6 +6071,7 @@ }, "BattleCostData": { "algorithm": "OcrDetect", + "isAscii": true, "text": [], "roi": [ 1196, @@ -6502,6 +6507,7 @@ "StageDrops-StageName": { "algorithm": "OcrDetect", "action": "DoNothing", + "isAscii": true, "text": [], "ocrReplace": [ [ @@ -6644,6 +6650,7 @@ }, "NumberOcrReplace": { "algorithm": "OcrDetect", + "isAscii": true, "text": [], "ocrReplace": [ [ @@ -9013,33 +9020,29 @@ "action": "DoNothing", "postDelay": 100 }, - "RoguelikeRecruitElite0": { - "roi": [ + "RoguelikeRecruitElite": { + "Doc": "base_task", + "template": "empty.png", + "rectMove": [ -170, -60, 60, 50 ] }, + "RoguelikeRecruitElite0": { + "baseTask": "RoguelikeRecruitElite" + }, "RoguelikeRecruitElite1": { - "roi": [ - -170, - -60, - 60, - 50 - ] + "baseTask": "RoguelikeRecruitElite" }, "RoguelikeRecruitElite2": { - "roi": [ - -170, - -60, - 60, - 50 - ] + "baseTask": "RoguelikeRecruitElite" }, "RoguelikeRecruitLevel": { - "template": "empty.png", - "roi": [ + "algorithm": "JustReturn", + "rectMove_Doc": "肉鸽招募时检测等级用,相对flag的位移", + "rectMove": [ -171, 0, 15, diff --git a/src/MeoAssistant/ImageAnalyzer/BattleImageAnalyzer.cpp b/src/MeoAssistant/ImageAnalyzer/BattleImageAnalyzer.cpp index b666012ef5..063a1ac568 100644 --- a/src/MeoAssistant/ImageAnalyzer/BattleImageAnalyzer.cpp +++ b/src/MeoAssistant/ImageAnalyzer/BattleImageAnalyzer.cpp @@ -441,7 +441,6 @@ bool asst::BattleImageAnalyzer::kills_analyze() OcrWithFlagTemplImageAnalyzer kills_analyzer(m_image); kills_analyzer.set_task_info("BattleKillsFlag", "BattleKills"); kills_analyzer.set_replace(Task.get("NumberOcrReplace")->replace_map); - kills_analyzer.set_use_char_model(true); if (!kills_analyzer.analyze()) { return false; @@ -507,7 +506,6 @@ bool asst::BattleImageAnalyzer::cost_analyze() OcrWithPreprocessImageAnalyzer cost_analyzer(m_image); cost_analyzer.set_task_info("BattleCostData"); cost_analyzer.set_replace(Task.get("NumberOcrReplace")->replace_map); - cost_analyzer.set_use_char_model(true); if (!cost_analyzer.analyze()) { return false; diff --git a/src/MeoAssistant/ImageAnalyzer/DepotImageAnalyzer.cpp b/src/MeoAssistant/ImageAnalyzer/DepotImageAnalyzer.cpp index d0290f02d2..ad98560414 100644 --- a/src/MeoAssistant/ImageAnalyzer/DepotImageAnalyzer.cpp +++ b/src/MeoAssistant/ImageAnalyzer/DepotImageAnalyzer.cpp @@ -288,7 +288,6 @@ int asst::DepotImageAnalyzer::match_quantity(const Rect& roi) analyzer.set_roi(ocr_roi); analyzer.set_expansion(1); analyzer.set_threshold(task_ptr->mask_range.first, task_ptr->mask_range.second); - analyzer.set_use_char_model(true); if (!analyzer.analyze()) { return 0; diff --git a/src/MeoAssistant/ImageAnalyzer/General/OcrImageAnalyzer.cpp b/src/MeoAssistant/ImageAnalyzer/General/OcrImageAnalyzer.cpp index 6a6bc9726f..7e2d775059 100644 --- a/src/MeoAssistant/ImageAnalyzer/General/OcrImageAnalyzer.cpp +++ b/src/MeoAssistant/ImageAnalyzer/General/OcrImageAnalyzer.cpp @@ -112,6 +112,7 @@ void asst::OcrImageAnalyzer::set_task_info(OcrTaskInfo task_info) noexcept m_full_match = task_info.full_match; m_replace = std::move(task_info.replace_map); m_use_cache = task_info.cache; + m_use_char_model = task_info.is_ascii; if (m_use_cache && !m_region_of_appeared.empty()) { m_roi = m_region_of_appeared; diff --git a/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp b/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp index 359da08b45..64e6a8a4db 100644 --- a/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp +++ b/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp @@ -77,7 +77,6 @@ bool asst::ProcessTaskImageAnalyzer::ocr_analyze(const std::shared_ptr m_ocr_analyzer->set_region_of_appeared(Rect()); m_ocr_analyzer->set_without_det(ocr_task_ptr->without_det); m_ocr_analyzer->set_task_info(ocr_task_ptr); - m_ocr_analyzer->set_use_char_model(ocr_task_ptr->is_ascii); auto region_opt = m_status->get_rect(ocr_task_ptr->name); if (region_opt) { m_ocr_analyzer->set_region_of_appeared(region_opt.value()); diff --git a/src/MeoAssistant/ImageAnalyzer/RoguelikeRecruitImageAnalyzer.cpp b/src/MeoAssistant/ImageAnalyzer/RoguelikeRecruitImageAnalyzer.cpp index 2350432675..adb362d3c9 100644 --- a/src/MeoAssistant/ImageAnalyzer/RoguelikeRecruitImageAnalyzer.cpp +++ b/src/MeoAssistant/ImageAnalyzer/RoguelikeRecruitImageAnalyzer.cpp @@ -67,7 +67,7 @@ int asst::RoguelikeRecruitImageAnalyzer::match_elite(const Rect& raw_roi) MatchImageAnalyzer analyzer(m_image); auto task_ptr = Task.get(task_name); analyzer.set_task_info(task_ptr); - analyzer.set_roi(raw_roi.move(task_ptr->roi)); + analyzer.set_roi(raw_roi.move(task_ptr->rect_move)); if (!analyzer.analyze()) { continue; @@ -85,12 +85,10 @@ int asst::RoguelikeRecruitImageAnalyzer::match_level(const cv::Mat& image, const { LogTraceFunction; - auto task_ptr = Task.get("RoguelikeRecruitLevel"); - OcrWithPreprocessImageAnalyzer analyzer(image, raw_roi.move(task_ptr->roi)); - auto& replace = Task.get("NumberOcrReplace")->replace_map; - analyzer.set_replace(replace); + OcrWithPreprocessImageAnalyzer analyzer(image); + analyzer.set_task_info("NumberOcrReplace"); + analyzer.set_roi(raw_roi.move(Task.get("RoguelikeRecruitLevel")->rect_move)); analyzer.set_expansion(1); - analyzer.set_use_char_model(true); if (!analyzer.analyze()) { return -1; diff --git a/src/MeoAssistant/ImageAnalyzer/StageDropsImageAnalyzer.cpp b/src/MeoAssistant/ImageAnalyzer/StageDropsImageAnalyzer.cpp index c3bbd1c431..9f05bf8841 100644 --- a/src/MeoAssistant/ImageAnalyzer/StageDropsImageAnalyzer.cpp +++ b/src/MeoAssistant/ImageAnalyzer/StageDropsImageAnalyzer.cpp @@ -47,7 +47,6 @@ bool asst::StageDropsImageAnalyzer::analyze_stage_code() OcrImageAnalyzer analyzer(m_image); analyzer.set_task_info("StageDrops-StageName"); - analyzer.set_use_char_model(true); if (!analyzer.analyze()) { return false; @@ -519,7 +518,6 @@ int asst::StageDropsImageAnalyzer::match_quantity(const Rect& roi) analyzer.set_roi(Rect(quantity_roi.x + far_left, quantity_roi.y, far_right - far_left, quantity_roi.height)); analyzer.set_expansion(1); analyzer.set_threshold(task_ptr->mask_range.first, task_ptr->mask_range.second); - analyzer.set_use_char_model(true); if (!analyzer.analyze()) { return 0; diff --git a/src/MeoAssistant/Task/Plugin/DrGrandetTaskPlugin.cpp b/src/MeoAssistant/Task/Plugin/DrGrandetTaskPlugin.cpp index 70d5f78651..bde046d3f5 100644 --- a/src/MeoAssistant/Task/Plugin/DrGrandetTaskPlugin.cpp +++ b/src/MeoAssistant/Task/Plugin/DrGrandetTaskPlugin.cpp @@ -53,7 +53,7 @@ int asst::DrGrandetTaskPlugin::analyze_time_left() analyzer.set_task_info("DrGrandetUseOriginiums"); analyzer.set_replace(Task.get("NumberOcrReplace")->replace_map); // 这里是汉字和数字混合的,用不了单独的en模型 - // analyzer.set_use_char_model(true); + analyzer.set_use_char_model(false); if (!analyzer.analyze()) { return -1; diff --git a/src/MeoAssistant/Task/Sub/AutoRecruitTask.cpp b/src/MeoAssistant/Task/Sub/AutoRecruitTask.cpp index 773ff9bf76..800718843d 100644 --- a/src/MeoAssistant/Task/Sub/AutoRecruitTask.cpp +++ b/src/MeoAssistant/Task/Sub/AutoRecruitTask.cpp @@ -595,7 +595,6 @@ bool asst::AutoRecruitTask::check_timer(int minutes_expected) OcrImageAnalyzer hour_ocr(image); hour_ocr.set_task_info("RecruitTimerH"); hour_ocr.set_replace(replace_map); - hour_ocr.set_use_char_model(true); if (!hour_ocr.analyze()) return false; std::string desired_hour_str = std::string("0") + std::to_string(minutes_expected / 60); if (hour_ocr.get_result().front().text != desired_hour_str) return false; @@ -606,7 +605,6 @@ bool asst::AutoRecruitTask::check_timer(int minutes_expected) OcrImageAnalyzer minute_ocr(image); minute_ocr.set_task_info("RecruitTimerM"); minute_ocr.set_replace(replace_map); - minute_ocr.set_use_char_model(true); if (!minute_ocr.analyze()) return false; std::string desired_minute_str = std::to_string((minutes_expected % 60) / 10) + "0"; if (minute_ocr.get_result().front().text != desired_minute_str) return false; diff --git a/src/MeoAssistant/Task/Sub/CreditShoppingTask.cpp b/src/MeoAssistant/Task/Sub/CreditShoppingTask.cpp index a0bce686b6..0b31403dff 100644 --- a/src/MeoAssistant/Task/Sub/CreditShoppingTask.cpp +++ b/src/MeoAssistant/Task/Sub/CreditShoppingTask.cpp @@ -36,7 +36,6 @@ int asst::CreditShoppingTask::credit_ocr() OcrImageAnalyzer credit_analyzer(credit_image); credit_analyzer.set_task_info("CreditShop-CreditOcr"); credit_analyzer.set_replace(Task.get("NumberOcrReplace")->replace_map); - credit_analyzer.set_use_char_model(true); if (!credit_analyzer.analyze()) { Log.trace("ERROR:!credit_analyzer.analyze():"); From fe3b5c7f1fc6506b44155dd0bc68ca651dbe9c58 Mon Sep 17 00:00:00 2001 From: zzyyyl Date: Fri, 11 Nov 2022 22:43:04 +0800 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=20without=5Fdet?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E7=94=A8=20OcrWithPreprocessImageAnalyzer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../General/OcrImageAnalyzer.cpp | 7 +---- .../ImageAnalyzer/General/OcrImageAnalyzer.h | 1 - .../ProcessTaskImageAnalyzer.cpp | 31 ++++++++++++------- .../ImageAnalyzer/ProcessTaskImageAnalyzer.h | 2 ++ 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/MeoAssistant/ImageAnalyzer/General/OcrImageAnalyzer.cpp b/src/MeoAssistant/ImageAnalyzer/General/OcrImageAnalyzer.cpp index 7e2d775059..4e11fafc11 100644 --- a/src/MeoAssistant/ImageAnalyzer/General/OcrImageAnalyzer.cpp +++ b/src/MeoAssistant/ImageAnalyzer/General/OcrImageAnalyzer.cpp @@ -91,11 +91,6 @@ void asst::OcrImageAnalyzer::set_use_cache(bool is_use) noexcept m_use_cache = is_use; } -void asst::OcrImageAnalyzer::set_without_det(bool without_det) noexcept -{ - m_without_det = without_det; -} - void asst::OcrImageAnalyzer::set_required(std::vector required) noexcept { m_required = std::move(required); @@ -120,7 +115,7 @@ void asst::OcrImageAnalyzer::set_task_info(OcrTaskInfo task_info) noexcept } else { set_roi(task_info.roi); - m_without_det = false; + m_without_det = task_info.without_det; } } diff --git a/src/MeoAssistant/ImageAnalyzer/General/OcrImageAnalyzer.h b/src/MeoAssistant/ImageAnalyzer/General/OcrImageAnalyzer.h index 52eaf3d51d..c0c5e178b7 100644 --- a/src/MeoAssistant/ImageAnalyzer/General/OcrImageAnalyzer.h +++ b/src/MeoAssistant/ImageAnalyzer/General/OcrImageAnalyzer.h @@ -31,7 +31,6 @@ namespace asst virtual void set_task_info(const std::string& task_name); virtual void set_use_cache(bool is_use) noexcept; - virtual void set_without_det(bool without_det) noexcept; virtual void set_region_of_appeared(Rect region) noexcept; virtual void set_use_char_model(bool enable) noexcept; diff --git a/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp b/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp index 64e6a8a4db..2386522876 100644 --- a/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp +++ b/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp @@ -5,6 +5,7 @@ #include "General/MatchImageAnalyzer.h" #include "General/OcrImageAnalyzer.h" +#include "General/OcrWithPreprocessImageAnalyzer.h" #include "RuntimeStatus.h" #include "TaskData.h" #include "Utils/Logger.hpp" @@ -71,28 +72,34 @@ bool asst::ProcessTaskImageAnalyzer::ocr_analyze(const std::shared_ptr // } // } //} - if (!m_ocr_analyzer) { - m_ocr_analyzer = std::make_unique(m_image); + std::unique_ptr* analyzer_ptr; + if (ocr_task_ptr->without_det) { + if (!m_ocr_with_preprocess_analyzer) { + m_ocr_with_preprocess_analyzer = std::make_unique(m_image); + } + analyzer_ptr = decltype(analyzer_ptr)(&m_ocr_with_preprocess_analyzer); } - m_ocr_analyzer->set_region_of_appeared(Rect()); - m_ocr_analyzer->set_without_det(ocr_task_ptr->without_det); - m_ocr_analyzer->set_task_info(ocr_task_ptr); - auto region_opt = m_status->get_rect(ocr_task_ptr->name); - if (region_opt) { - m_ocr_analyzer->set_region_of_appeared(region_opt.value()); + else { + if (!m_ocr_analyzer) { + m_ocr_analyzer = std::make_unique(m_image); + } + analyzer_ptr = &m_ocr_analyzer; } - bool ret = m_ocr_analyzer->analyze(); + (*analyzer_ptr)->set_region_of_appeared(m_status->get_rect(ocr_task_ptr->name).value_or(Rect())); + (*analyzer_ptr)->set_task_info(ocr_task_ptr); + + bool ret = (*analyzer_ptr)->analyze(); if (ret) { - m_ocr_analyzer->sort_result_by_required(); - const auto& ocr_result = m_ocr_analyzer->get_result(); + (*analyzer_ptr)->sort_result_by_required(); + const auto& ocr_result = (*analyzer_ptr)->get_result(); auto& res = ocr_result.front(); m_result = ocr_task_ptr; m_result_rect = res.rect; m_status->set_rect(ocr_task_ptr->name, m_result_rect); // m_ocr_cache.insert(m_ocr_cache.end(), ocr_result.begin(), ocr_result.end()); - Log.trace("ProcessTaskImageAnalyzer::ocr_analyze | found", res.to_string()); + Log.trace(__FUNCTION__ " | found", res); } return ret; } diff --git a/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.h b/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.h index 6c13e5cb6d..f76c351d54 100644 --- a/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.h +++ b/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.h @@ -10,6 +10,7 @@ namespace asst { class OcrImageAnalyzer; + class OcrWithPreprocessImageAnalyzer; class MatchImageAnalyzer; class RuntimeStatus; @@ -41,6 +42,7 @@ namespace asst void reset() noexcept; std::unique_ptr m_ocr_analyzer; + std::unique_ptr m_ocr_with_preprocess_analyzer; std::unique_ptr m_match_analyzer; std::vector m_tasks_name; std::shared_ptr m_result = nullptr; From b85d1a7f77c8ecb9866f2e1cce55d9780dd4dc0d Mon Sep 17 00:00:00 2001 From: zzyyyl Date: Fri, 11 Nov 2022 23:23:06 +0800 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=20#2708=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E4=BD=BF=E7=94=A8=20det?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/tasks.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/resource/tasks.json b/resource/tasks.json index c5f6a873ff..e5ef717601 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -8768,15 +8768,15 @@ "algorithm": "OcrDetect", "action": "ClickSelf", "cache": false, + "withoutDet": true, "roi": [ 880, - 200, - 220, - 120 + 210, + 140, + 36 ], "text": [ - "活用", - "再利用" + "活用安全屋" ], "preDelay": 500, "next": [ From b717662ad4af0906206dcc8cb9bc99105ea9ef15 Mon Sep 17 00:00:00 2001 From: zzyyyl <74587068+zzyyyl@users.noreply.github.com> Date: Sat, 12 Nov 2022 00:08:01 +0800 Subject: [PATCH 4/5] Update src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp Co-authored-by: MistEO --- src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp b/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp index 2386522876..a2f2dde08b 100644 --- a/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp +++ b/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp @@ -72,7 +72,7 @@ bool asst::ProcessTaskImageAnalyzer::ocr_analyze(const std::shared_ptr // } // } //} - std::unique_ptr* analyzer_ptr; + std::unique_ptr* analyzer_ptr = nullptr; if (ocr_task_ptr->without_det) { if (!m_ocr_with_preprocess_analyzer) { m_ocr_with_preprocess_analyzer = std::make_unique(m_image); From fdddb62a2facf5108246f6cc45b22ed8898a2680 Mon Sep 17 00:00:00 2001 From: zzyyyl Date: Sat, 12 Nov 2022 00:14:07 +0800 Subject: [PATCH 5/5] fix: mac build error --- src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp b/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp index a2f2dde08b..a430b2e275 100644 --- a/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp +++ b/src/MeoAssistant/ImageAnalyzer/ProcessTaskImageAnalyzer.cpp @@ -99,7 +99,7 @@ bool asst::ProcessTaskImageAnalyzer::ocr_analyze(const std::shared_ptr m_result_rect = res.rect; m_status->set_rect(ocr_task_ptr->name, m_result_rect); // m_ocr_cache.insert(m_ocr_cache.end(), ocr_result.begin(), ocr_result.end()); - Log.trace(__FUNCTION__ " | found", res); + Log.trace(__FUNCTION__, "| found", res); } return ret; }