From 41d3067a122abdb0c00259f8b9338e3e956da91e Mon Sep 17 00:00:00 2001 From: MistEO Date: Sun, 16 Jan 2022 02:53:33 +0800 Subject: [PATCH] =?UTF-8?q?refactor.=E9=87=8D=E8=BD=BD=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=9B=BE=E5=83=8F=E8=AF=86=E5=88=AB=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/AbstractImageAnalyzer.cpp | 6 +-- src/MeoAssistant/AbstractImageAnalyzer.h | 6 +-- src/MeoAssistant/AutoRecruitTask.cpp | 3 +- src/MeoAssistant/CreditShopImageAnalyzer.cpp | 11 ++-- src/MeoAssistant/CreditShoppingTask.cpp | 9 ++-- src/MeoAssistant/InfrastAbstractTask.cpp | 15 +++--- src/MeoAssistant/InfrastClueImageAnalyzer.cpp | 4 +- .../InfrastClueVacancyImageAnalyzer.cpp | 4 +- src/MeoAssistant/InfrastDormTask.cpp | 10 ++-- .../InfrastFacilityImageAnalyzer.cpp | 5 +- src/MeoAssistant/InfrastOperImageAnalyzer.cpp | 5 +- src/MeoAssistant/InfrastProductionTask.cpp | 23 +++----- src/MeoAssistant/InfrastReceptionTask.cpp | 3 +- .../InfrastSmileyImageAnalyzer.cpp | 3 +- src/MeoAssistant/MatchImageAnalyzer.cpp | 54 +++++++++++++++++++ src/MeoAssistant/MatchImageAnalyzer.h | 49 ++++------------- src/MeoAssistant/MultiMatchImageAnalyzer.cpp | 44 +++++++++++++++ src/MeoAssistant/MultiMatchImageAnalyzer.h | 38 ++++--------- src/MeoAssistant/OcrImageAnalyzer.cpp | 49 +++++++++++++++++ src/MeoAssistant/OcrImageAnalyzer.h | 42 +++------------ src/MeoAssistant/ProcessTaskImageAnalyzer.cpp | 4 +- src/MeoAssistant/RecruitImageAnalyzer.cpp | 11 ++-- 22 files changed, 217 insertions(+), 181 deletions(-) diff --git a/src/MeoAssistant/AbstractImageAnalyzer.cpp b/src/MeoAssistant/AbstractImageAnalyzer.cpp index 27aedc783f..4d03377695 100644 --- a/src/MeoAssistant/AbstractImageAnalyzer.cpp +++ b/src/MeoAssistant/AbstractImageAnalyzer.cpp @@ -52,12 +52,12 @@ asst::Rect asst::AbstractImageAnalyzer::empty_rect_to_full(const Rect& rect, con return rect.empty() ? Rect(0, 0, image.cols, image.rows) : rect; } -std::string asst::AbstractImageAnalyzer::calc_name_hash() const +std::string asst::AbstractImageAnalyzer::calc_text_hash() const { - return calc_name_hash(m_roi); + return calc_text_hash(m_roi); } -std::string asst::AbstractImageAnalyzer::calc_name_hash(const Rect& roi) const +std::string asst::AbstractImageAnalyzer::calc_text_hash(const Rect& roi) const { // 从左往右找到第一个白色点 Rect white_roi = roi; diff --git a/src/MeoAssistant/AbstractImageAnalyzer.h b/src/MeoAssistant/AbstractImageAnalyzer.h index d8e93d3ad7..65f3cb5295 100644 --- a/src/MeoAssistant/AbstractImageAnalyzer.h +++ b/src/MeoAssistant/AbstractImageAnalyzer.h @@ -20,10 +20,10 @@ namespace asst virtual void set_image(const cv::Mat image, const Rect& roi); virtual void set_roi(const Rect& roi) noexcept; virtual bool analyze() = 0; - virtual void correct_roi() noexcept; + void correct_roi() noexcept; - std::string calc_name_hash() const; // 使用m_roi - std::string calc_name_hash(const Rect& roi) const; // 使用参数roi + std::string calc_text_hash() const; // 使用m_roi + std::string calc_text_hash(const Rect& roi) const; // 使用参数roi AbstractImageAnalyzer& operator=(const AbstractImageAnalyzer&) = delete; AbstractImageAnalyzer& operator=(AbstractImageAnalyzer&&) = delete; diff --git a/src/MeoAssistant/AutoRecruitTask.cpp b/src/MeoAssistant/AutoRecruitTask.cpp index 8e277e9846..600ba477ff 100644 --- a/src/MeoAssistant/AutoRecruitTask.cpp +++ b/src/MeoAssistant/AutoRecruitTask.cpp @@ -80,8 +80,7 @@ bool asst::AutoRecruitTask::_run() bool asst::AutoRecruitTask::analyze_start_buttons() { OcrImageAnalyzer start_analyzer; - const auto start_task_ptr = std::dynamic_pointer_cast(Task.get("StartRecruit")); - start_analyzer.set_task_info(*start_task_ptr); + start_analyzer.set_task_info("StartRecruit"); auto image = Ctrler.get_image(); start_analyzer.set_image(image); diff --git a/src/MeoAssistant/CreditShopImageAnalyzer.cpp b/src/MeoAssistant/CreditShopImageAnalyzer.cpp index bcba465f17..201384488f 100644 --- a/src/MeoAssistant/CreditShopImageAnalyzer.cpp +++ b/src/MeoAssistant/CreditShopImageAnalyzer.cpp @@ -18,12 +18,10 @@ bool asst::CreditShopImageAnalyzer::analyze() bool asst::CreditShopImageAnalyzer::commoditys_analyze() { - const auto commodity_task_ptr = std::dynamic_pointer_cast( - Task.get("CreditShop-Commoditys")); - // 识别信用点的图标 + const auto commodity_task_ptr = Task.get("CreditShop-Commoditys"); MultiMatchImageAnalyzer mm_annlyzer(m_image); - mm_annlyzer.set_task_info(*commodity_task_ptr); + mm_annlyzer.set_task_info(commodity_task_ptr); if (!mm_annlyzer.analyze()) { return false; @@ -75,12 +73,9 @@ bool asst::CreditShopImageAnalyzer::whether_to_buy_analyze() bool asst::CreditShopImageAnalyzer::sold_out_analyze() { - const auto sold_out_task_ptr = std::dynamic_pointer_cast( - Task.get("CreditShop-SoldOut")); - // 识别是否售罄 MatchImageAnalyzer sold_out_analyzer(m_image); - sold_out_analyzer.set_task_info(*sold_out_task_ptr); + sold_out_analyzer.set_task_info("CreditShop-SoldOut"); for (const Rect& commodity : m_need_to_buy) { sold_out_analyzer.set_roi(commodity); diff --git a/src/MeoAssistant/CreditShoppingTask.cpp b/src/MeoAssistant/CreditShoppingTask.cpp index a9b147a508..706de412fc 100644 --- a/src/MeoAssistant/CreditShoppingTask.cpp +++ b/src/MeoAssistant/CreditShoppingTask.cpp @@ -35,12 +35,11 @@ bool asst::CreditShoppingTask::_run() // “购买商品”按钮 static Rect buy_it_rect; if (buy_it_rect.empty()) { - const auto buy_it_task_ptr = std::dynamic_pointer_cast( - Task.get("CreditShop-BuyIt")); + const auto buy_it_task_ptr = Task.get("CreditShop-BuyIt"); const cv::Mat buy_image = Ctrler.get_image(); MatchImageAnalyzer buy_it_analyzer(buy_image); - buy_it_analyzer.set_task_info(*buy_it_task_ptr); + buy_it_analyzer.set_task_info(buy_it_task_ptr); if (!buy_it_analyzer.analyze()) { // 没识别到“购买商品”按钮,不应该出现这种情况,TODO 报错 return false; @@ -59,10 +58,8 @@ bool asst::CreditShoppingTask::_run() // 识别是否信用不足无法购买 const cv::Mat prompt_image = Ctrler.get_image(); - const auto no_money_task_ptr = std::dynamic_pointer_cast( - Task.get("CreditShop-NoMoney")); OcrImageAnalyzer prompt_analyzer(prompt_image); - prompt_analyzer.set_task_info(*no_money_task_ptr); + prompt_analyzer.set_task_info("CreditShop-NoMoney"); if (prompt_analyzer.analyze()) { click_return_button(); return true; diff --git a/src/MeoAssistant/InfrastAbstractTask.cpp b/src/MeoAssistant/InfrastAbstractTask.cpp index 2c3da34b49..d8ff50a4b3 100644 --- a/src/MeoAssistant/InfrastAbstractTask.cpp +++ b/src/MeoAssistant/InfrastAbstractTask.cpp @@ -114,19 +114,17 @@ bool asst::InfrastAbstractTask::enter_oper_list_page() auto image = Ctrler.get_image(); // 识别左边的“进驻”按钮 - const auto enter_task_ptr = std::dynamic_pointer_cast( - Task.get("InfrastEnterOperList")); + const auto enter_task_ptr = Task.get("InfrastEnterOperList"); OcrImageAnalyzer enter_analyzer(image); - enter_analyzer.set_task_info(*enter_task_ptr); + enter_analyzer.set_task_info(enter_task_ptr); // 如果没找到,说明“进驻信息”这个按钮没有被点开,那就点开它 if (!enter_analyzer.analyze()) { Log.trace("ready to analyze the stationed basic_info button"); OcrImageAnalyzer station_analyzer(image); - const auto stationedinfo_task_ptr = std::dynamic_pointer_cast( - Task.get("InfrastStationedInfo")); - station_analyzer.set_task_info(*stationedinfo_task_ptr); + const auto stationedinfo_task_ptr = Task.get("InfrastStationedInfo"); + station_analyzer.set_task_info(stationedinfo_task_ptr); if (station_analyzer.analyze()) { Log.trace("the stationed basic_info button found"); Ctrler.click(station_analyzer.get_result().front().rect); @@ -196,14 +194,13 @@ bool asst::InfrastAbstractTask::click_clear_button() bool asst::InfrastAbstractTask::click_confirm_button() { LogTraceFunction; - const auto task_ptr = std::dynamic_pointer_cast( - Task.get("InfrastConfirmButton")); + const auto task_ptr = Task.get("InfrastConfirmButton"); Ctrler.click(task_ptr->specific_rect); sleep(task_ptr->rear_delay); // 识别“正在提交反馈至神经”,如果网不好一直确认不了,就多等一会 OcrImageAnalyzer analyzer; - analyzer.set_task_info(*task_ptr); + analyzer.set_task_info(task_ptr); for (int i = 0; i <= m_retry_times; ++i) { if (need_exit()) { return false; diff --git a/src/MeoAssistant/InfrastClueImageAnalyzer.cpp b/src/MeoAssistant/InfrastClueImageAnalyzer.cpp index ad862055bf..7976efe719 100644 --- a/src/MeoAssistant/InfrastClueImageAnalyzer.cpp +++ b/src/MeoAssistant/InfrastClueImageAnalyzer.cpp @@ -16,9 +16,7 @@ bool asst::InfrastClueImageAnalyzer::analyze() bool asst::InfrastClueImageAnalyzer::clue_detect() { MultiMatchImageAnalyzer clue_analyzer(m_image); - const auto task_ptr = std::dynamic_pointer_cast( - Task.get("InfrastClue")); - clue_analyzer.set_task_info(*task_ptr); + clue_analyzer.set_task_info("InfrastClue"); clue_analyzer.set_roi(m_roi); // 该任务以外部设置的roi为准 if (!clue_analyzer.analyze()) { return false; diff --git a/src/MeoAssistant/InfrastClueVacancyImageAnalyzer.cpp b/src/MeoAssistant/InfrastClueVacancyImageAnalyzer.cpp index 351f849554..318cacf398 100644 --- a/src/MeoAssistant/InfrastClueVacancyImageAnalyzer.cpp +++ b/src/MeoAssistant/InfrastClueVacancyImageAnalyzer.cpp @@ -11,9 +11,7 @@ bool asst::InfrastClueVacancyImageAnalyzer::analyze() MatchImageAnalyzer analyzer(m_image); for (const std::string& suffix : m_to_be_analyzed) { - const auto task_ptr = std::dynamic_pointer_cast( - Task.get(clue_vacancy + suffix)); - analyzer.set_task_info(*task_ptr); + analyzer.set_task_info(clue_vacancy + suffix); if (!analyzer.analyze()) { Log.trace("no", clue_vacancy, suffix); continue; diff --git a/src/MeoAssistant/InfrastDormTask.cpp b/src/MeoAssistant/InfrastDormTask.cpp index ca28d1f566..fa43d95bc9 100644 --- a/src/MeoAssistant/InfrastDormTask.cpp +++ b/src/MeoAssistant/InfrastDormTask.cpp @@ -98,17 +98,15 @@ bool asst::InfrastDormTask::opers_choose() //{ // LogTraceFunction; // -// const auto task_ptr = std::dynamic_pointer_cast( -// Task.get("InfrastConfirmButton")); +// const auto task_ptr = Task.get("InfrastConfirmButton"); // Ctrler.click(task_ptr->specific_rect); // sleep(task_ptr->rear_delay); // // // 宿舍在把正在工作的干员换下来的时候,会有个二次确认的按钮 // const auto image = Ctrler.get_image(); // MatchImageAnalyzer cfm_analyzer(image); -// const auto sec_cfm_task_ptr = std::dynamic_pointer_cast( -// Task.get("InfrastDormConfirmButton")); -// cfm_analyzer.set_task_info(*sec_cfm_task_ptr); +// const auto sec_cfm_task_ptr = Task.get("InfrastDormConfirmButton"); +// cfm_analyzer.set_task_info(sec_cfm_task_ptr); // if (cfm_analyzer.analyze()) { // Ctrler.click(cfm_analyzer.get_result().rect); // sleep(sec_cfm_task_ptr->rear_delay); @@ -116,7 +114,7 @@ bool asst::InfrastDormTask::opers_choose() // // // 识别“正在提交反馈至神经”,如果网不好一直确认不了,就多等一会 // OcrImageAnalyzer analyzer; -// analyzer.set_task_info(*task_ptr); +// analyzer.set_task_info(task_ptr); // for (int i = 0; i <= m_retry_times; ++i) { // if (need_exit()) { // return false; diff --git a/src/MeoAssistant/InfrastFacilityImageAnalyzer.cpp b/src/MeoAssistant/InfrastFacilityImageAnalyzer.cpp index 015e58df83..e477d7fea0 100644 --- a/src/MeoAssistant/InfrastFacilityImageAnalyzer.cpp +++ b/src/MeoAssistant/InfrastFacilityImageAnalyzer.cpp @@ -24,10 +24,7 @@ bool asst::InfrastFacilityImageAnalyzer::analyze() MultiMatchImageAnalyzer mm_analyzer(m_image); auto task_analyze = [&](const std::string& task_name) -> bool { - const auto task_ptr = std::dynamic_pointer_cast( - Task.get(task_name)); - mm_analyzer.set_task_info(*task_ptr); - + mm_analyzer.set_task_info(task_name); return mm_analyzer.analyze(); }; diff --git a/src/MeoAssistant/InfrastOperImageAnalyzer.cpp b/src/MeoAssistant/InfrastOperImageAnalyzer.cpp index 3cfbc67fea..9030521539 100644 --- a/src/MeoAssistant/InfrastOperImageAnalyzer.cpp +++ b/src/MeoAssistant/InfrastOperImageAnalyzer.cpp @@ -428,12 +428,11 @@ void asst::InfrastOperImageAnalyzer::doing_analyze() { LogTraceFunction; - const auto working_task_ptr = std::dynamic_pointer_cast( - Task.get("InfrastOperOnShift")); + const auto working_task_ptr = Task.get("InfrastOperOnShift"); Rect rect_move = working_task_ptr->rect_move; MatchImageAnalyzer working_analyzer(m_image); - working_analyzer.set_task_info(*working_task_ptr); + working_analyzer.set_task_info(working_task_ptr); for (auto&& oper : m_result) { Rect working_rect = rect_move; diff --git a/src/MeoAssistant/InfrastProductionTask.cpp b/src/MeoAssistant/InfrastProductionTask.cpp index ef048ff836..8a6a8ec241 100644 --- a/src/MeoAssistant/InfrastProductionTask.cpp +++ b/src/MeoAssistant/InfrastProductionTask.cpp @@ -38,17 +38,12 @@ bool asst::InfrastProductionTask::shift_facility_list() if (need_exit()) { return false; } - const auto tab_task_ptr = std::dynamic_pointer_cast( - Task.get("InfrastFacilityListTab" + facility_name())); + const auto tab_task_ptr = Task.get("InfrastFacilityListTab" + facility_name()); MatchImageAnalyzer add_analyzer; - const auto add_task_ptr = std::dynamic_pointer_cast( - Task.get("InfrastAddOperator" + facility_name() + m_work_mode_name)); - add_analyzer.set_task_info(*add_task_ptr); - - const auto locked_task_ptr = std::dynamic_pointer_cast( - Task.get("InfrastOperLocked" + facility_name())); + const auto add_task_ptr = Task.get("InfrastAddOperator" + facility_name() + m_work_mode_name); + add_analyzer.set_task_info(add_task_ptr); MultiMatchImageAnalyzer locked_analyzer; - locked_analyzer.set_task_info(*locked_task_ptr); + locked_analyzer.set_task_info("InfrastOperLocked" + facility_name()); int index = 0; for (const Rect& tab : m_facility_list_tabs) { @@ -88,10 +83,7 @@ bool asst::InfrastProductionTask::shift_facility_list() std::string cur_product = all_products.at(0); double max_score = 0; for (const std::string& product : all_products) { - const static std::string prefix = "InfrastFlag"; - const auto task_ptr = std::dynamic_pointer_cast( - Task.get(prefix + product)); - product_analyzer.set_task_info(*task_ptr); + product_analyzer.set_task_info("InfrastFlag" + product); if (product_analyzer.analyze()) { double score = product_analyzer.get_result().score; if (score > max_score) { @@ -612,10 +604,7 @@ bool asst::InfrastProductionTask::facility_list_detect() const auto image = Ctrler.get_image(); MultiMatchImageAnalyzer mm_analyzer(image); - - const auto task_ptr = std::dynamic_pointer_cast( - Task.get("InfrastFacilityListTab" + facility_name())); - mm_analyzer.set_task_info(*task_ptr); + mm_analyzer.set_task_info("InfrastFacilityListTab" + facility_name()); if (!mm_analyzer.analyze()) { return false; diff --git a/src/MeoAssistant/InfrastReceptionTask.cpp b/src/MeoAssistant/InfrastReceptionTask.cpp index aa5f0e9f35..12b3caa37e 100644 --- a/src/MeoAssistant/InfrastReceptionTask.cpp +++ b/src/MeoAssistant/InfrastReceptionTask.cpp @@ -151,8 +151,7 @@ bool asst::InfrastReceptionTask::shift() } break; case AlgorithmType::MatchTemplate: { - const auto add_task_ptr = std::dynamic_pointer_cast(raw_task_ptr); - add_analyzer.set_task_info(*add_task_ptr); + add_analyzer.set_task_info(raw_task_ptr); if (!add_analyzer.analyze()) { return true; diff --git a/src/MeoAssistant/InfrastSmileyImageAnalyzer.cpp b/src/MeoAssistant/InfrastSmileyImageAnalyzer.cpp index 5f05abcf94..4a15e873ef 100644 --- a/src/MeoAssistant/InfrastSmileyImageAnalyzer.cpp +++ b/src/MeoAssistant/InfrastSmileyImageAnalyzer.cpp @@ -18,8 +18,7 @@ bool asst::InfrastSmileyImageAnalyzer::analyze() decltype(m_result) temp_result; for (const auto& [type, task_name] : smiley_map) { - const auto task_ptr = std::dynamic_pointer_cast(Task.get(task_name)); - mm_analyzer.set_task_info(*task_ptr); + mm_analyzer.set_task_info(task_name); mm_analyzer.set_roi(m_roi); if (!mm_analyzer.analyze()) { continue; diff --git a/src/MeoAssistant/MatchImageAnalyzer.cpp b/src/MeoAssistant/MatchImageAnalyzer.cpp index 9dab8606ef..34c88152df 100644 --- a/src/MeoAssistant/MatchImageAnalyzer.cpp +++ b/src/MeoAssistant/MatchImageAnalyzer.cpp @@ -22,6 +22,60 @@ bool asst::MatchImageAnalyzer::analyze() return match_templ(templ); } +void asst::MatchImageAnalyzer::set_use_cache(bool is_use) noexcept +{ + m_use_cache = is_use; +} + +void asst::MatchImageAnalyzer::set_mask_range(int lower, int upper) noexcept +{ + m_mask_range = std::make_pair(lower, upper); +} + +void asst::MatchImageAnalyzer::set_mask_range(std::pair mask_range) noexcept +{ + m_mask_range = std::move(mask_range); +} + +void asst::MatchImageAnalyzer::set_templ_name(std::string templ_name) noexcept +{ + m_templ_name = std::move(templ_name); +} + +void asst::MatchImageAnalyzer::set_threshold(double templ_thres) noexcept +{ + m_templ_thres = templ_thres; +} + +void asst::MatchImageAnalyzer::set_task_info(std::shared_ptr task_ptr) +{ + set_task_info(*std::dynamic_pointer_cast(task_ptr)); +} + +void asst::MatchImageAnalyzer::set_task_info(const std::string& task_name) +{ + set_task_info(Task.get(task_name)); +} + +const asst::MatchRect& asst::MatchImageAnalyzer::get_result() const noexcept +{ + return m_result; +} + +void asst::MatchImageAnalyzer::set_task_info(MatchTaskInfo task_info) noexcept +{ + m_mask_range = std::move(task_info.mask_range); + m_templ_name = std::move(task_info.templ_name); + m_templ_thres = task_info.templ_threshold; + + if (task_info.cache && !task_info.region_of_appeared.empty()) { + m_roi = task_info.region_of_appeared; + } + else { + set_roi(task_info.roi); + correct_roi(); + } +} bool asst::MatchImageAnalyzer::match_templ(const cv::Mat templ) { cv::Mat matched; diff --git a/src/MeoAssistant/MatchImageAnalyzer.h b/src/MeoAssistant/MatchImageAnalyzer.h index 834be2c0d4..aa059f3e5c 100644 --- a/src/MeoAssistant/MatchImageAnalyzer.h +++ b/src/MeoAssistant/MatchImageAnalyzer.h @@ -11,51 +11,20 @@ namespace asst virtual ~MatchImageAnalyzer() = default; virtual bool analyze() override; - void set_use_cache(bool is_use) noexcept - { - m_use_cache = is_use; - } - void set_mask_range(int lower, int upper) - { - m_mask_range = std::make_pair(lower, upper); - } - void set_mask_range(std::pair mask_range) - { - m_mask_range = std::move(mask_range); - } - void set_templ_name(std::string templ_name) noexcept - { - m_templ_name = std::move(templ_name); - } - void set_threshold(double templ_thres) noexcept - { - m_templ_thres = templ_thres; - } - void set_task_info(MatchTaskInfo task_info) noexcept - { - m_mask_range = std::move(task_info.mask_range); - m_templ_name = std::move(task_info.templ_name); - m_templ_thres = task_info.templ_threshold; - if (task_info.cache && !task_info.region_of_appeared.empty()) { - m_roi = task_info.region_of_appeared; - } - else { - set_roi(task_info.roi); - correct_roi(); - } - } + void set_use_cache(bool is_use) noexcept; + void set_mask_range(int lower, int upper) noexcept; + void set_mask_range(std::pair mask_range) noexcept; + void set_templ_name(std::string templ_name) noexcept; + void set_threshold(double templ_thres) noexcept; + void set_task_info(std::shared_ptr task_ptr); + void set_task_info(const std::string& task_name); - //const std::vector& get_result() const noexcept { - // return m_result; - //} - const MatchRect& get_result() const noexcept - { - return m_result; - } + const MatchRect& get_result() const noexcept; protected: virtual bool match_templ(const cv::Mat templ); + void set_task_info(MatchTaskInfo task_info) noexcept; std::string m_templ_name; MatchRect m_result; diff --git a/src/MeoAssistant/MultiMatchImageAnalyzer.cpp b/src/MeoAssistant/MultiMatchImageAnalyzer.cpp index ac0418f302..d0f504c4fc 100644 --- a/src/MeoAssistant/MultiMatchImageAnalyzer.cpp +++ b/src/MeoAssistant/MultiMatchImageAnalyzer.cpp @@ -2,6 +2,7 @@ #include "Logger.hpp" #include "Resource.h" +#include "TaskData.h" asst::MultiMatchImageAnalyzer::MultiMatchImageAnalyzer(const cv::Mat image, const Rect& roi, std::string templ_name, double templ_thres) : AbstractImageAnalyzer(image, roi), @@ -39,6 +40,49 @@ void asst::MultiMatchImageAnalyzer::sort_result() }); } +void asst::MultiMatchImageAnalyzer::set_mask_range(int lower, int upper) noexcept +{ + m_mask_range = std::make_pair(lower, upper); +} + +void asst::MultiMatchImageAnalyzer::set_mask_range(std::pair mask_range) noexcept +{ + m_mask_range = std::move(mask_range); +} + +void asst::MultiMatchImageAnalyzer::set_templ_name(std::string templ_name) noexcept +{ + m_templ_name = std::move(templ_name); +} + +void asst::MultiMatchImageAnalyzer::set_threshold(double templ_thres) noexcept +{ + m_templ_thres = templ_thres; +} + +void asst::MultiMatchImageAnalyzer::set_task_info(MatchTaskInfo task_info) noexcept +{ + m_mask_range = std::move(task_info.mask_range); + m_templ_name = std::move(task_info.templ_name); + m_templ_thres = task_info.templ_threshold; + set_roi(task_info.roi); +} + +void asst::MultiMatchImageAnalyzer::set_task_info(std::shared_ptr task_ptr) +{ + set_task_info(*std::dynamic_pointer_cast(task_ptr)); +} + +void asst::MultiMatchImageAnalyzer::set_task_info(const std::string& task_name) +{ + set_task_info(Task.get(task_name)); +} + +const std::vector& asst::MultiMatchImageAnalyzer::get_result() const noexcept +{ + return m_result; +} + bool asst::MultiMatchImageAnalyzer::multi_match_templ(const cv::Mat templ) { cv::Mat matched; diff --git a/src/MeoAssistant/MultiMatchImageAnalyzer.h b/src/MeoAssistant/MultiMatchImageAnalyzer.h index 2dc0bb0cbd..2919a0afe9 100644 --- a/src/MeoAssistant/MultiMatchImageAnalyzer.h +++ b/src/MeoAssistant/MultiMatchImageAnalyzer.h @@ -13,36 +13,20 @@ namespace asst virtual bool analyze() override; void sort_result(); // 按位置排序,左上角的排在前面 - void set_mask_range(int lower, int upper) - { - m_mask_range = std::make_pair(lower, upper); - } - void set_mask_range(std::pair mask_range) - { - m_mask_range = std::move(mask_range); - } - void set_templ_name(std::string templ_name) noexcept - { - m_templ_name = std::move(templ_name); - } - void set_threshold(double templ_thres) noexcept - { - m_templ_thres = templ_thres; - } - void set_task_info(MatchTaskInfo task_info) noexcept - { - m_mask_range = std::move(task_info.mask_range); - m_templ_name = std::move(task_info.templ_name); - m_templ_thres = task_info.templ_threshold; - set_roi(task_info.roi); - } - const std::vector& get_result() const noexcept - { - return m_result; - } + + void set_mask_range(int lower, int upper) noexcept; + void set_mask_range(std::pair mask_range) noexcept; + void set_templ_name(std::string templ_name) noexcept; + void set_threshold(double templ_thres) noexcept; + + void set_task_info(std::shared_ptr task_ptr); + void set_task_info(const std::string& task_name); + + const std::vector& get_result() const noexcept; protected: virtual bool multi_match_templ(const cv::Mat templ); + void set_task_info(MatchTaskInfo task_info) noexcept; std::string m_templ_name; double m_templ_thres = 0.0; diff --git a/src/MeoAssistant/OcrImageAnalyzer.cpp b/src/MeoAssistant/OcrImageAnalyzer.cpp index 9ba8f98586..6985810e01 100644 --- a/src/MeoAssistant/OcrImageAnalyzer.cpp +++ b/src/MeoAssistant/OcrImageAnalyzer.cpp @@ -68,6 +68,55 @@ bool asst::OcrImageAnalyzer::analyze() return !m_ocr_result.empty(); } +void asst::OcrImageAnalyzer::set_required(std::vector required, bool full_match) noexcept +{ + m_required = std::move(required); + m_full_match = full_match; +} + +void asst::OcrImageAnalyzer::set_replace(std::unordered_map replace) noexcept +{ + m_replace = std::move(replace); +} + +void asst::OcrImageAnalyzer::set_task_info(OcrTaskInfo task_info) noexcept +{ + m_required = std::move(task_info.text); + m_full_match = task_info.need_full_match; + m_replace = std::move(task_info.replace_map); + + set_roi(task_info.roi); + correct_roi(); + auto& cache_roi = task_info.region_of_appeared; + if (task_info.cache && !cache_roi.empty()) { + m_roi = cache_roi; + m_without_det = true; + } + else { + m_without_det = false; + } +} + +void asst::OcrImageAnalyzer::set_task_info(std::shared_ptr task_ptr) +{ + set_task_info(*std::dynamic_pointer_cast(task_ptr)); +} + +void asst::OcrImageAnalyzer::set_task_info(const std::string& task_name) +{ + set_task_info(Task.get(task_name)); +} + +void asst::OcrImageAnalyzer::set_pred(const TextRectProc& pred) +{ + m_pred = pred; +} + +const std::vector& asst::OcrImageAnalyzer::get_result() const noexcept +{ + return m_ocr_result; +} + void asst::OcrImageAnalyzer::sort_result() { // 按位置排个序 diff --git a/src/MeoAssistant/OcrImageAnalyzer.h b/src/MeoAssistant/OcrImageAnalyzer.h index fb01f8a8b4..ceeb9e3433 100644 --- a/src/MeoAssistant/OcrImageAnalyzer.h +++ b/src/MeoAssistant/OcrImageAnalyzer.h @@ -19,43 +19,17 @@ namespace asst void sort_result(); // 按位置排序,左上角的排在前面 - void set_required(std::vector required, bool full_match = false) noexcept - { - m_required = std::move(required); - m_full_match = full_match; - } - void set_replace(std::unordered_map replace) noexcept - { - m_replace = std::move(replace); - } - void set_task_info(OcrTaskInfo task_info) noexcept - { - m_required = std::move(task_info.text); - m_full_match = task_info.need_full_match; - m_replace = std::move(task_info.replace_map); + void set_required(std::vector required, bool full_match = false) noexcept; + void set_replace(std::unordered_map replace) noexcept; + void set_task_info(std::shared_ptr task_ptr); + void set_task_info(const std::string& task_name); - set_roi(task_info.roi); - correct_roi(); - auto& cache_roi = task_info.region_of_appeared; - if (task_info.cache && !cache_roi.empty()) { - m_roi = cache_roi; - m_without_det = true; - } - else { - m_without_det = false; - } - } - - void set_pred(const TextRectProc& pred) - { - m_pred = pred; - } - const std::vector& get_result() const noexcept - { - return m_ocr_result; - } + void set_pred(const TextRectProc& pred); + const std::vector& get_result() const noexcept; protected: + void set_task_info(OcrTaskInfo task_info) noexcept; + std::vector m_ocr_result; std::vector m_required; bool m_full_match = false; diff --git a/src/MeoAssistant/ProcessTaskImageAnalyzer.cpp b/src/MeoAssistant/ProcessTaskImageAnalyzer.cpp index 8dabfe4112..c04ad37309 100644 --- a/src/MeoAssistant/ProcessTaskImageAnalyzer.cpp +++ b/src/MeoAssistant/ProcessTaskImageAnalyzer.cpp @@ -23,7 +23,7 @@ bool asst::ProcessTaskImageAnalyzer::match_analyze(std::shared_ptr tas m_match_analyzer = std::make_unique(m_image); } const auto match_task_ptr = std::dynamic_pointer_cast(task_ptr); - m_match_analyzer->set_task_info(*match_task_ptr); + m_match_analyzer->set_task_info(match_task_ptr); if (m_match_analyzer->analyze()) { m_result = match_task_ptr; @@ -67,7 +67,7 @@ bool asst::ProcessTaskImageAnalyzer::ocr_analyze(std::shared_ptr task_ if (!m_ocr_analyzer) { m_ocr_analyzer = std::make_unique(m_image); } - m_ocr_analyzer->set_task_info(*ocr_task_ptr); + m_ocr_analyzer->set_task_info(ocr_task_ptr); bool ret = m_ocr_analyzer->analyze(); diff --git a/src/MeoAssistant/RecruitImageAnalyzer.cpp b/src/MeoAssistant/RecruitImageAnalyzer.cpp index 3de89aa36d..d57155e47a 100644 --- a/src/MeoAssistant/RecruitImageAnalyzer.cpp +++ b/src/MeoAssistant/RecruitImageAnalyzer.cpp @@ -47,11 +47,10 @@ bool asst::RecruitImageAnalyzer::tags_analyze() bool asst::RecruitImageAnalyzer::time_analyze() { - const auto time_task_ptr = std::dynamic_pointer_cast( - Task.get("RecruitTime")); + const auto time_task_ptr = Task.get("RecruitTime"); MatchImageAnalyzer time_analyzer(m_image); - time_analyzer.set_task_info(*time_task_ptr); + time_analyzer.set_task_info(time_task_ptr); if (time_analyzer.analyze()) { Rect rect = time_analyzer.get_result().rect; @@ -70,9 +69,8 @@ bool asst::RecruitImageAnalyzer::time_analyze() bool asst::RecruitImageAnalyzer::confirm_analyze() { - const auto confirm_task_ptr = std::dynamic_pointer_cast(Task.get("RecruitConfirm")); MatchImageAnalyzer confirm_analyzer(m_image); - confirm_analyzer.set_task_info(*confirm_task_ptr); + confirm_analyzer.set_task_info("RecruitConfirm"); if (confirm_analyzer.analyze()) { m_confirm_rect = confirm_analyzer.get_result().rect; @@ -84,9 +82,8 @@ bool asst::RecruitImageAnalyzer::confirm_analyze() bool asst::RecruitImageAnalyzer::refresh_analyze() { - const auto refresh_task_ptr = std::dynamic_pointer_cast(Task.get("RecruitRefresh")); MatchImageAnalyzer refresh_analyzer(m_image); - refresh_analyzer.set_task_info(*refresh_task_ptr); + refresh_analyzer.set_task_info("RecruitRefresh"); if (refresh_analyzer.analyze()) { m_refresh_rect = refresh_analyzer.get_result().rect;