diff --git a/resource/tasks.json b/resource/tasks.json index f8ac4a32cf..a8aead637c 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -475,7 +475,7 @@ }, "CreditShop-Commoditys": { "template": "CreditPoint.png", - "resultMove": [ + "rectMove": [ -60, -180, 220, @@ -526,7 +526,7 @@ "template": "RecruitTimeReduce.png", "templThreshold": 0.89, "action": "clickSelf", - "resultMove": [ + "rectMove": [ 7, 94, 129, @@ -825,23 +825,23 @@ "algorithm": "justReturn", "roi": [ 400, - 250, + 280, 880, - 110 + 80 ] }, "InfrastSkillsLower": { "algorithm": "justReturn", "roi": [ 400, - 530, + 560, 880, - 110 + 80 ] }, "InfrastSkillsHash": { "algorithm": "justReturn", - "resultMove": [ + "rectMove": [ -8, -202, 82, @@ -881,7 +881,7 @@ "histThreshold": 100, "histThreshold_Doc": "该任务里的Hist阈值,是特化了拿来做灰度图平均值的,懒得重新写个字段了", "cache": false, - "resultMove": [ + "rectMove": [ -8, -42, 82, @@ -945,7 +945,7 @@ "histThreshold": 20, "Doc": "这里的templThreshold,作为进度条最小灰度阈值使用;histThreshold作为进度条相邻点最大变化阈值使用。懒得重新弄个字段了", "cache": false, - "resultMove": [ + "rectMove": [ 21, 8, 85, @@ -1096,7 +1096,7 @@ 120, 255 ], - "templThreshold": 0.8, + "templThreshold": 0.8, "roi": [ 0, 0, @@ -1238,11 +1238,29 @@ "rearDelay": 1000 }, "InfrastOperSelected": { - "template": "OperSelectedCropped.png", + "template": "OperSelected.png", "cache": false, + "templThreshold": 0.35, "maskRange": [ 1, 255 + ], + "rectMove": [ + -8, + -260, + 82, + 320 + ] + }, + "InfrastOperOnShift": { + "template": "OnShift.png", + "cache": false, + "templThreshold": 0.8, + "rectMove": [ + -20, + -100, + 70, + 50 ] } } \ No newline at end of file diff --git a/resource/template/02.png b/resource/template/02.png deleted file mode 100644 index c4af879b73..0000000000 Binary files a/resource/template/02.png and /dev/null differ diff --git a/resource/template/03.png b/resource/template/03.png deleted file mode 100644 index 38a15952fc..0000000000 Binary files a/resource/template/03.png and /dev/null differ diff --git a/resource/template/04.png b/resource/template/04.png deleted file mode 100644 index aada9d78e5..0000000000 Binary files a/resource/template/04.png and /dev/null differ diff --git a/resource/template/05.png b/resource/template/05.png deleted file mode 100644 index 92e170d138..0000000000 Binary files a/resource/template/05.png and /dev/null differ diff --git a/resource/template/GoIn.png b/resource/template/GoIn.png deleted file mode 100644 index 394c441edb..0000000000 Binary files a/resource/template/GoIn.png and /dev/null differ diff --git a/resource/template/Listless.png b/resource/template/Listless.png deleted file mode 100644 index 014335c901..0000000000 Binary files a/resource/template/Listless.png and /dev/null differ diff --git a/resource/template/OnShift.png b/resource/template/OnShift.png index 3418ef61d6..4a68639b19 100644 Binary files a/resource/template/OnShift.png and b/resource/template/OnShift.png differ diff --git a/resource/template/OperSelected.png b/resource/template/OperSelected.png index 6d6fac3b2f..991531fb75 100644 Binary files a/resource/template/OperSelected.png and b/resource/template/OperSelected.png differ diff --git a/resource/template/OperSelectedCropped.png b/resource/template/OperSelectedCropped.png deleted file mode 100644 index 71abe0e814..0000000000 Binary files a/resource/template/OperSelectedCropped.png and /dev/null differ diff --git a/resource/template/Resting.png b/resource/template/Resting.png deleted file mode 100644 index 36bc510c16..0000000000 Binary files a/resource/template/Resting.png and /dev/null differ diff --git a/src/MeoAssistance/Assistance.cpp b/src/MeoAssistance/Assistance.cpp index f6f7a1e13c..fb04cd15d4 100644 --- a/src/MeoAssistance/Assistance.cpp +++ b/src/MeoAssistance/Assistance.cpp @@ -267,27 +267,14 @@ bool asst::Assistance::start_infrast_shift() return false; } - /* 基建任务整体流程: - 1. 从任意界面进入基建,使用ProcessTask: "InfrastBegin" - 2. 一键收获贸易站、制造站、干员信赖,使用ProcessTask - 3. 进入宿舍,把心情低于阈值的、心情没满但不在工作的,都换下去,使用InfrastEnterFacilityTask - 4. 根据用户设置,按顺序进入制造站or贸易站,使用InfrastEnterFacilityTask - 5. 对制造站or贸易站进行换班,使用InfrastShiftTask - 6. 根据用户设置,使用无人机加速制造or贸易,使用ProcessTask - 7. 会客室线索处理、发电站换班、控制中枢、办公室换班,同样需要根据用户设置决定顺序,TODO - 8. 再次进入宿舍,把基建中可能换下来的干员(心情不低的)加入宿舍 - */ - - // 1. 从任意界面进入基建,使用ProcessTask - // 2. 一键收获贸易站、制造站、干员信赖,使用ProcessTask - // 这个任务结束后,是在进入基建后的主界面 constexpr static const char* InfrastTaskCahin = "Infrast"; + // 这个流程任务,结束的时候是处于基建主界面的。既可以用于进入基建,也可以用于从设施里返回基建主界面 append_match_task(InfrastTaskCahin, { "InfrastBegin" }); - auto enter_task_ptr = std::make_shared(task_callback, (void*)this); - enter_task_ptr->set_task_chain(InfrastTaskCahin); - m_tasks_deque.emplace_back(enter_task_ptr); + auto dorm_task_ptr = std::make_shared(task_callback, (void*)this); + dorm_task_ptr->set_task_chain(InfrastTaskCahin); + m_tasks_deque.emplace_back(dorm_task_ptr); append_match_task(InfrastTaskCahin, { "InfrastBegin" }); @@ -301,63 +288,15 @@ bool asst::Assistance::start_infrast_shift() trade_task_ptr->set_task_chain(InfrastTaskCahin); m_tasks_deque.emplace_back(trade_task_ptr); + // 贸易站无人机 + append_match_task(InfrastTaskCahin, { "UavAssist-Trade" }); + append_match_task(InfrastTaskCahin, { "InfrastBegin" }); - //// 3. 进入宿舍,把心情低于阈值的、心情没满但不在工作的,都换下去 - //auto dorm_task_ptr = std::make_shared(task_callback, (void*)this); - //dorm_task_ptr->set_task_chain(InfrastTaskCahin); - //m_tasks_deque.emplace_back(dorm_task_ptr); + // 再次进宿舍,把刚从设施里换下来的人放进去 + m_tasks_deque.emplace_back(dorm_task_ptr); - //// 返回基建的主界面 - //append_match_task(InfrastTaskCahin, { "InfrastBegin" }); - - //// 5. 对制造站or贸易站进行换班,使用InfrastStationTask - - //// TODO,这里需要根据用户设置,是先制造站还是先贸易站,或者是别的设施 - //// 从进入制造站,到设施列表的界面 - //append_match_task(InfrastTaskCahin, { "ManufacturingMini", "Manufacturing" }); - - //// 制造站换班 - //m_tasks_deque.emplace_back(shift_task_ptr); - - //// 返回基建的主界面 - //append_match_task(InfrastTaskCahin, { "InfrastBegin" }); - - //// TODO,这里需要根据用户设置,是先制造站还是先贸易站,或者是别的设施 - //// 从进入贸易站,到设施列表的界面 - //append_match_task(InfrastTaskCahin, { "Trade", "TradeMini" }); - - //// 贸易站换班 - //m_tasks_deque.emplace_back(shift_task_ptr); - - //// 6. 根据用户设置,使用无人机加速制造or贸易,使用ProcessTask - //// 对贸易站使用无人机加速 - //append_match_task(InfrastTaskCahin, { "UavAssist-Trade" }); - - //// 返回基建的主界面 - //append_match_task(InfrastTaskCahin, { "InfrastBegin" }); - - //// 7. 会客室线索处理、发电站换班、控制中枢、办公室换班,同样需要根据用户设置决定顺序,TODO - //// 发电站换班 - //auto power_task_ptr = std::make_shared(task_callback, (void*)this); - //power_task_ptr->set_task_chain(InfrastTaskCahin); - //m_tasks_deque.emplace_back(std::move(power_task_ptr)); - - //// 返回基建的主界面 - //append_match_task(InfrastTaskCahin, { "InfrastBegin" }); - - //auto office_task_ptr = std::make_shared(task_callback, (void*)this); - //office_task_ptr->set_task_chain(InfrastTaskCahin); - //m_tasks_deque.emplace_back(std::move(office_task_ptr)); - - //// 返回基建的主界面 - //append_match_task(InfrastTaskCahin, { "InfrastBegin" }); - - //// 8. 再次进入宿舍,把基建中可能换下来的干员(心情不低的)加入宿舍 - //m_tasks_deque.emplace_back(dorm_task_ptr); - - //// 全操作完之后,再返回基建的主界面 - //append_match_task(InfrastTaskCahin, { "InfrastBegin" }); + append_match_task(InfrastTaskCahin, { "InfrastBegin" }); m_thread_idle = false; m_condvar.notify_one(); diff --git a/src/MeoAssistance/AsstDef.h b/src/MeoAssistance/AsstDef.h index 7d1ba1bb35..ae2654642f 100644 --- a/src/MeoAssistance/AsstDef.h +++ b/src/MeoAssistance/AsstDef.h @@ -177,7 +177,7 @@ namespace asst { int rear_delay = 0; // 执行该任务后的延时 int retry_times = INT_MAX; // 未找到图像时的重试次数 Rect roi; // 要识别的区域,若为0则全图识别 - Rect result_move; // 识别结果移动:有些结果识别到的,和要点击的不是同一个位置。即识别到了res,点击res + result_move的位置 + Rect rect_move; // 识别结果移动:有些结果识别到的,和要点击的不是同一个位置。即识别到了res,点击res + result_move的位置 }; // 文字识别任务的信息 @@ -250,6 +250,8 @@ namespace asst { InfrastSmileyInfo smiley; double percentage = 0; // 心情进度条的百分比 Rect rect; + bool working = false; // 干员是否在工作中 + bool selected = false; // 干员是否已被选择(蓝色的选择框) }; struct InfrastSkill { @@ -311,6 +313,7 @@ namespace asst std::string hash; // 有些干员的技能是完全一样的,做个hash区分一下不同干员 InfrastSkillsComb skills_comb; Rect rect; + bool selected = false; // 干员是否已被选择(蓝色的选择框) }; // 基建技能组 struct InfrastSkillsGroup { diff --git a/src/MeoAssistance/CreditShopImageAnalyzer.cpp b/src/MeoAssistance/CreditShopImageAnalyzer.cpp index 70684cf0c1..795115e998 100644 --- a/src/MeoAssistance/CreditShopImageAnalyzer.cpp +++ b/src/MeoAssistance/CreditShopImageAnalyzer.cpp @@ -42,10 +42,10 @@ bool asst::CreditShopImageAnalyzer::commoditys_analyze() m_commoditys.reserve(credit_points_result.size()); for (const MatchRect& mr : credit_points_result) { Rect commodity; - commodity.x = mr.rect.x + commodity_task_ptr->result_move.x; - commodity.y = mr.rect.y + commodity_task_ptr->result_move.y; - commodity.width = commodity_task_ptr->result_move.width; - commodity.height = commodity_task_ptr->result_move.height; + commodity.x = mr.rect.x + commodity_task_ptr->rect_move.x; + commodity.y = mr.rect.y + commodity_task_ptr->rect_move.y; + commodity.width = commodity_task_ptr->rect_move.width; + commodity.height = commodity_task_ptr->rect_move.height; m_commoditys.emplace_back(std::move(commodity)); } diff --git a/src/MeoAssistance/InfrastDormTask.cpp b/src/MeoAssistance/InfrastDormTask.cpp index 0119099a40..0766430052 100644 --- a/src/MeoAssistance/InfrastDormTask.cpp +++ b/src/MeoAssistance/InfrastDormTask.cpp @@ -15,37 +15,56 @@ bool asst::InfrastDormTask::run() }; m_callback(AsstMsg::TaskStart, task_start_json, m_callback_arg); - for (int i = 0; i < m_max_num_of_dorm; ++i) { - enter_facility(FacilityName, i); + for (; m_cur_dorm_index < m_max_num_of_dorm; ++m_cur_dorm_index) { + enter_facility(FacilityName, m_cur_dorm_index); if (!enter_oper_list_page()) { return false; } - if (i == 0) { - swipe_to_the_left_of_operlist(); - } + swipe_to_the_left_of_operlist(); click_clear_button(); - const auto& image = ctrler.get_image(); - InfrastMoodImageAnalyzer mood_analyzer(image); - if (!mood_analyzer.analyze()) { - return false; - } - mood_analyzer.sort_result(); - const auto& mood_result = mood_analyzer.get_result(); - int quantity_selected = 0; - for (const auto& mood_info : mood_result) { - // TODO:这个阈值写到配置文件里去 - if (mood_info.percentage < 0.3) { - ctrler.click(mood_info.rect); - if (++quantity_selected >= MaxNumOfOpers) { + while (quantity_selected < MaxNumOfOpers) { + const auto& image = ctrler.get_image(); + InfrastMoodImageAnalyzer mood_analyzer(image); + if (!mood_analyzer.analyze()) { + return false; + } + mood_analyzer.sort_result(); + const auto& mood_result = mood_analyzer.get_result(); + + int quantity_resting = 0; + for (const auto& mood_info : mood_result) { + switch (mood_info.smiley.type) + { + case InfrastSmileyType::Rest: + // 如果当前页面休息完成的人数超过5个,说明已经已经把所有心情不满的滑过一遍、没有更多的了,直接退出即可 + if (++quantity_resting >= MaxNumOfOpers) { + click_confirm_button(); + return true; + } + break; + case InfrastSmileyType::Work: + case InfrastSmileyType::Distract: + // 干员没有被选择的情况下,心情小于30%,或不在工作,就进驻宿舍 + if (mood_info.selected == false + && (mood_info.percentage < 0.3 // TODO:这个阈值写到配置文件里去 + || mood_info.working == false)) + { + ctrler.click(mood_info.rect); + if (++quantity_selected >= MaxNumOfOpers) { + break; + } + } + break; + default: break; } } - else { - click_confirm_button(); - return true; + if (quantity_selected >= MaxNumOfOpers) { + break; } + sync_swipe_of_operlist(); } click_confirm_button(); click_return_button(); diff --git a/src/MeoAssistance/InfrastMoodImageAnalyzer.cpp b/src/MeoAssistance/InfrastMoodImageAnalyzer.cpp index 067fe1811d..c92385a922 100644 --- a/src/MeoAssistance/InfrastMoodImageAnalyzer.cpp +++ b/src/MeoAssistance/InfrastMoodImageAnalyzer.cpp @@ -2,6 +2,7 @@ #include "Resource.h" #include "InfrastSmileyImageAnalyzer.h" +#include "MatchImageAnalyzer.h" #include "AsstUtils.hpp" bool asst::InfrastMoodImageAnalyzer::analyze() @@ -9,6 +10,8 @@ bool asst::InfrastMoodImageAnalyzer::analyze() mood_detect(); mood_analyze(); hash_calc(); + selected_analyze(); + working_analyze(); return true; } @@ -38,8 +41,8 @@ bool asst::InfrastMoodImageAnalyzer::mood_detect() const auto hash_task_ptr = resource.task().task_ptr("InfrastSkillsHash"); const auto prg_task_ptr = resource.task().task_ptr("InfrastOperMoodProgressBar"); - Rect hash_rect_move = hash_task_ptr->result_move; - Rect progress_rect_move = prg_task_ptr->result_move; + Rect hash_rect_move = hash_task_ptr->rect_move; + Rect progress_rect_move = prg_task_ptr->rect_move; std::vector roi_vec = { upper_task_ptr->roi, @@ -66,7 +69,7 @@ bool asst::InfrastMoodImageAnalyzer::mood_detect() continue; } #ifdef LOG_TRACE - cv::rectangle(m_image_draw, utils::make_rect(prg_rect), cv::Scalar(0, 0, 255), 2); + //cv::rectangle(m_image_draw, utils::make_rect(prg_rect), cv::Scalar(0, 0, 255), 2); #endif // LOG_TRACE InfrastOperMoodInfo info; @@ -167,7 +170,7 @@ bool asst::InfrastMoodImageAnalyzer::mood_analyze() bool asst::InfrastMoodImageAnalyzer::hash_calc() { const auto hash_task_ptr = resource.task().task_ptr("InfrastSkillsHash"); - Rect hash_rect_move = hash_task_ptr->result_move; + Rect hash_rect_move = hash_task_ptr->rect_move; for (auto&& info : m_result) { Rect hash_rect = hash_rect_move; @@ -176,4 +179,52 @@ bool asst::InfrastMoodImageAnalyzer::hash_calc() info.hash = calc_hash(hash_rect); } return true; +} + +bool asst::InfrastMoodImageAnalyzer::selected_analyze() +{ + const auto selected_task_ptr = std::dynamic_pointer_cast( + resource.task().task_ptr("InfrastOperSelected")); + Rect rect_move = selected_task_ptr->rect_move; + + MatchImageAnalyzer selected_analyzer(m_image); + selected_analyzer.set_task_info(*selected_task_ptr); + + for (auto&& info : m_result) { + Rect selected_rect = rect_move; + selected_rect.x += info.rect.x; + selected_rect.y += info.rect.y; + selected_analyzer.set_roi(selected_rect); + if (selected_analyzer.analyze()) { + info.selected = true; +#ifdef LOG_TRACE + cv::putText(m_image_draw, "SELECTED", cv::Point(selected_rect.x, selected_rect.y + 30), 1, 1, cv::Scalar(0, 0, 255), 2); +#endif + } + } + return true; +} + +bool asst::InfrastMoodImageAnalyzer::working_analyze() +{ + const auto working_task_ptr = std::dynamic_pointer_cast( + resource.task().task_ptr("InfrastOperOnShift")); + Rect rect_move = working_task_ptr->rect_move; + + MatchImageAnalyzer selected_analyzer(m_image); + selected_analyzer.set_task_info(*working_task_ptr); + + for (auto&& info : m_result) { + Rect working_rect = rect_move; + working_rect.x += info.rect.x; + working_rect.y += info.rect.y; + selected_analyzer.set_roi(working_rect); + if (selected_analyzer.analyze()) { + info.selected = true; +#ifdef LOG_TRACE + cv::putText(m_image_draw, "ONSHIFT", cv::Point(working_rect.x, working_rect.y), 1, 1, cv::Scalar(0, 0, 255), 2); +#endif + } + } + return true; } \ No newline at end of file diff --git a/src/MeoAssistance/InfrastMoodImageAnalyzer.h b/src/MeoAssistance/InfrastMoodImageAnalyzer.h index ccb8bcb7f7..22a0514c3f 100644 --- a/src/MeoAssistance/InfrastMoodImageAnalyzer.h +++ b/src/MeoAssistance/InfrastMoodImageAnalyzer.h @@ -29,6 +29,8 @@ namespace asst { bool mood_detect(); bool mood_analyze(); bool hash_calc(); + bool selected_analyze(); + bool working_analyze(); std::vector m_result; }; diff --git a/src/MeoAssistance/InfrastProductionTask.cpp b/src/MeoAssistance/InfrastProductionTask.cpp index 9dbd7d40eb..3b7be8478c 100644 --- a/src/MeoAssistance/InfrastProductionTask.cpp +++ b/src/MeoAssistance/InfrastProductionTask.cpp @@ -21,7 +21,7 @@ // m_all_available_opers.clear(); // // swipe_to_the_left_of_operlist(); -// bool ret = opers_detect(); +// bool ret = opers_detect_with_swipe(); // // optimal_calc(); // @@ -69,9 +69,12 @@ bool asst::InfrastProductionTask::shift_facility_list() swipe_to_the_left_of_operlist(); if (m_all_available_opers.empty()) { - opers_detect(); + opers_detect_with_swipe(); swipe_to_the_left_of_operlist(); } + else { + opers_detect(); + } optimal_calc(); opers_choose(); click_confirm_button(); @@ -79,41 +82,20 @@ bool asst::InfrastProductionTask::shift_facility_list() return true; } -bool asst::InfrastProductionTask::opers_detect() +bool asst::InfrastProductionTask::opers_detect_with_swipe() { m_all_available_opers.clear(); int first_number = 0; while (true) { - const auto& image = ctrler.get_image(); - - InfrastSkillsImageAnalyzer skills_analyzer(image); - skills_analyzer.set_facility(m_facility); - - if (!skills_analyzer.analyze()) { - return false; - } - const auto& cur_all_info = skills_analyzer.get_result(); - if (first_number == 0) { - first_number = cur_all_info.size(); - } - // 如果两个的hash距离过小,则认为是同一个干员,不进行插入 - for (const auto& cur : cur_all_info) { - auto find_iter = std::find_if(m_all_available_opers.cbegin(), m_all_available_opers.cend(), - [&cur](const InfrastOperSkillInfo& info) -> bool { - int dist = utils::hamming(cur.hash, info.hash); - return dist < HashDistThres; - }); - if (find_iter == m_all_available_opers.cend()) { - m_all_available_opers.emplace_back(cur); - } - } + size_t num = opers_detect(); // 这里本来是判断不相等就可以退出循环。 // 但是有时候滑动会把一个干员挡住一半,一个页面完整的干员真的只有10个,所以加个2的差值 - if (first_number - cur_all_info.size() > 2) { + if (max_num_of_opers_per_page - num > 2) { break; } + // 异步在最后会多滑动一下,耽误的时间还不如用同步 sync_swipe_of_operlist(); } @@ -124,6 +106,33 @@ bool asst::InfrastProductionTask::opers_detect() return false; } +size_t asst::InfrastProductionTask::opers_detect() +{ + const auto& image = ctrler.get_image(); + + InfrastSkillsImageAnalyzer skills_analyzer(image); + skills_analyzer.set_facility(m_facility); + + if (!skills_analyzer.analyze()) { + return 0; + } + const auto& cur_all_info = skills_analyzer.get_result(); + max_num_of_opers_per_page = (std::max)(max_num_of_opers_per_page, cur_all_info.size()); + + // 如果两个的hash距离过小,则认为是同一个干员,不进行插入 + for (const auto& cur : cur_all_info) { + auto find_iter = std::find_if(m_all_available_opers.cbegin(), m_all_available_opers.cend(), + [&cur](const InfrastOperSkillInfo& info) -> bool { + int dist = utils::hamming(cur.hash, info.hash); + return dist < HashDistThres; + }); + if (find_iter == m_all_available_opers.cend()) { + m_all_available_opers.emplace_back(cur); + } + } + return cur_all_info.size(); +} + bool asst::InfrastProductionTask::optimal_calc() { auto& facility_info = resource.infrast().get_facility_info(m_facility); diff --git a/src/MeoAssistance/InfrastProductionTask.h b/src/MeoAssistance/InfrastProductionTask.h index 5a2922d3b2..2210de1510 100644 --- a/src/MeoAssistance/InfrastProductionTask.h +++ b/src/MeoAssistance/InfrastProductionTask.h @@ -21,7 +21,8 @@ namespace asst { protected: bool shift_facility_list(); bool facility_list_detect(); - bool opers_detect(); + bool opers_detect_with_swipe(); + size_t opers_detect(); // 返回当前页面的干员数 bool optimal_calc(); bool opers_choose(); @@ -32,5 +33,6 @@ namespace asst { std::vector m_all_available_opers; std::vector m_optimal_opers; std::vector m_facility_list_tabs; + size_t max_num_of_opers_per_page = 0; }; } diff --git a/src/MeoAssistance/InfrastSkillsImageAnalyzer.cpp b/src/MeoAssistance/InfrastSkillsImageAnalyzer.cpp index e052a8a338..fa7d2375cc 100644 --- a/src/MeoAssistance/InfrastSkillsImageAnalyzer.cpp +++ b/src/MeoAssistance/InfrastSkillsImageAnalyzer.cpp @@ -27,7 +27,7 @@ bool asst::InfrastSkillsImageAnalyzer::skills_detect() const auto lower_task_ptr = resource.task().task_ptr("InfrastSkillsLower"); const auto hash_task_ptr = resource.task().task_ptr("InfrastSkillsHash"); - Rect hash_rect_move = hash_task_ptr->result_move; + Rect hash_rect_move = hash_task_ptr->rect_move; std::vector roi_vec = { upper_task_ptr->roi, @@ -45,10 +45,10 @@ bool asst::InfrastSkillsImageAnalyzer::skills_detect() const auto& smiley_res = smiley_analyzer.get_result(); const auto task_ptr = resource.task().task_ptr("InfrastSkills"); - int skills_x_offset = task_ptr->result_move.x; - int skills_y_offset = task_ptr->result_move.y; - int skills_width = task_ptr->result_move.width; - int skills_height = task_ptr->result_move.height; + int skills_x_offset = task_ptr->rect_move.x; + int skills_y_offset = task_ptr->rect_move.y; + int skills_width = task_ptr->rect_move.width; + int skills_height = task_ptr->rect_move.height; for (const auto& [_type, smiley_rect] : smiley_res) { Rect skills_rect; diff --git a/src/MeoAssistance/MultiMatchImageAnalyzer.cpp b/src/MeoAssistance/MultiMatchImageAnalyzer.cpp index 2854e41510..48d9005930 100644 --- a/src/MeoAssistance/MultiMatchImageAnalyzer.cpp +++ b/src/MeoAssistance/MultiMatchImageAnalyzer.cpp @@ -53,7 +53,6 @@ bool asst::MultiMatchImageAnalyzer::multi_match_templ(const cv::Mat& templ) //cv::threshold(mask, mask, m_mask_range.first, 255, cv::THRESH_BINARY); cv::inRange(mask, m_mask_range.first, m_mask_range.second, mask); cv::matchTemplate(image_roi, templ, matched, cv::TM_CCOEFF_NORMED, mask); - int test = 0; } int mini_distance = (std::min)(templ.cols, templ.rows) / 2; diff --git a/src/MeoAssistance/ProcessTask.cpp b/src/MeoAssistance/ProcessTask.cpp index 97c8a147be..e77351ea1b 100644 --- a/src/MeoAssistance/ProcessTask.cpp +++ b/src/MeoAssistance/ProcessTask.cpp @@ -31,7 +31,7 @@ bool ProcessTask::run() } auto task_info_ptr = analyzer.get_result(); Rect rect = analyzer.get_rect(); - const auto& res_move = task_info_ptr->result_move; + const auto& res_move = task_info_ptr->rect_move; if (!res_move.empty()) { rect.x += res_move.x; rect.y += res_move.y; diff --git a/src/MeoAssistance/RecruitImageAnalyzer.cpp b/src/MeoAssistance/RecruitImageAnalyzer.cpp index 04d41c58c5..16640d584f 100644 --- a/src/MeoAssistance/RecruitImageAnalyzer.cpp +++ b/src/MeoAssistance/RecruitImageAnalyzer.cpp @@ -57,7 +57,7 @@ bool asst::RecruitImageAnalyzer::time_analyze() if (time_analyzer.analyze()) { Rect rect = time_analyzer.get_result().rect; - const auto& res_move = time_task_ptr->result_move; + const auto& res_move = time_task_ptr->rect_move; if (!res_move.empty()) { rect.x += res_move.x; rect.y += res_move.y; diff --git a/src/MeoAssistance/TaskData.cpp b/src/MeoAssistance/TaskData.cpp index 35a0d297ab..9fbde86fa7 100644 --- a/src/MeoAssistance/TaskData.cpp +++ b/src/MeoAssistance/TaskData.cpp @@ -225,16 +225,16 @@ bool asst::TaskData::parse(const json::value& json) task_info_ptr->next.emplace_back(next.as_string()); } } - if (task_json.exist("resultMove")) { - const json::array& move_arr = task_json.at("resultMove").as_array(); - task_info_ptr->result_move = Rect( + if (task_json.exist("rectMove")) { + const json::array& move_arr = task_json.at("rectMove").as_array(); + task_info_ptr->rect_move = Rect( move_arr[0].as_integer(), move_arr[1].as_integer(), move_arr[2].as_integer(), move_arr[3].as_integer()); } else { - task_info_ptr->result_move = Rect(); + task_info_ptr->rect_move = Rect(); } m_all_tasks_info.emplace(name, task_info_ptr);