From d2165c045449a223e3f478da5441eb6e8ddc17cf Mon Sep 17 00:00:00 2001 From: MistEO Date: Sat, 21 Aug 2021 22:32:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E5=B9=B2=E5=91=98=E5=90=8D=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E8=BF=9B=E4=B8=80=E6=AD=A5=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MeoAssistance/AbstractTask.cpp | 15 ++- MeoAssistance/AbstractTask.h | 1 + MeoAssistance/Assistance.cpp | 9 +- MeoAssistance/AsstDef.h | 5 +- MeoAssistance/Identify.cpp | 12 +- MeoAssistance/IdentifyOperTask.cpp | 193 +++++++++++++++++++++-------- MeoAssistance/IdentifyOperTask.h | 6 +- MeoAssistance/SwipeTask.cpp | 2 +- MeoAssistance/SwipeTask.h | 2 +- resource/config.json | 10 +- resource/infrast.json | 22 +++- resource/operators/Castle-3.png | Bin 17569 -> 0 bytes resource/operators/W.png | Bin 0 -> 6938 bytes resource/operators/傀影.png | Bin 0 -> 12904 bytes resource/operators/克洛丝.png | Bin 16557 -> 0 bytes resource/operators/凛冬.png | Bin 0 -> 13326 bytes resource/operators/刻俄柏.png | Bin 17825 -> 0 bytes resource/operators/卡涅利安.png | Bin 0 -> 14761 bytes resource/operators/卡缇.png | Bin 9828 -> 0 bytes resource/operators/卡达.png | Bin 9238 -> 0 bytes resource/operators/古米.png | Bin 0 -> 7672 bytes resource/operators/史都华德.png | Bin 18477 -> 0 bytes resource/operators/吽.png | Bin 0 -> 3414 bytes resource/operators/夕.png | Bin 0 -> 7172 bytes resource/operators/夜烟.png | Bin 13914 -> 0 bytes resource/operators/孑.png | Bin 0 -> 4835 bytes resource/operators/宴.png | Bin 0 -> 5548 bytes resource/operators/山.png | Bin 0 -> 2177 bytes resource/operators/嵯峨.png | Bin 0 -> 11099 bytes resource/operators/帕拉斯.png | Bin 11321 -> 0 bytes resource/operators/异客.png | Bin 8645 -> 0 bytes resource/operators/斑点.png | Bin 9677 -> 0 bytes resource/operators/断罪者.png | Bin 10106 -> 0 bytes resource/operators/早露.png | Bin 0 -> 6508 bytes resource/operators/月见夜.png | Bin 13673 -> 0 bytes resource/operators/杰西卡.png | Bin 11155 -> 0 bytes resource/operators/梅.png | Bin 0 -> 7947 bytes resource/operators/梅尔.png | Bin 12984 -> 0 bytes resource/operators/梓兰.png | Bin 0 -> 7476 bytes resource/operators/槐琥.png | Bin 12804 -> 0 bytes resource/operators/水月.png | Bin 9130 -> 0 bytes resource/operators/泡普卡.png | Bin 12121 -> 0 bytes resource/operators/泡泡.png | Bin 8963 -> 0 bytes resource/operators/流星.png | Bin 10626 -> 0 bytes resource/operators/深靛.png | Bin 0 -> 12523 bytes resource/operators/深靛png.png | Bin 0 -> 12523 bytes resource/operators/清流.png | Bin 12450 -> 0 bytes resource/operators/温蒂.png | Bin 7444 -> 0 bytes resource/operators/火神.png | Bin 11123 -> 0 bytes resource/operators/灰烬.png | Bin 0 -> 13879 bytes resource/operators/炎熔.png | Bin 16060 -> 0 bytes resource/operators/煌.png | Bin 0 -> 6178 bytes resource/operators/燧石.png | Bin 0 -> 14356 bytes resource/operators/狮蝎.png | Bin 0 -> 11943 bytes resource/operators/白雪.png | Bin 3415 -> 0 bytes resource/operators/石棉.png | Bin 6630 -> 0 bytes resource/operators/稀音.png | Bin 9612 -> 0 bytes resource/operators/米格鲁.png | Bin 14077 -> 0 bytes resource/operators/红.png | Bin 0 -> 6375 bytes resource/operators/红云.png | Bin 9744 -> 0 bytes resource/operators/红豆.png | Bin 8241 -> 0 bytes resource/operators/艾雅法拉.png | Bin 19489 -> 0 bytes resource/operators/蛇屠箱.png | Bin 13856 -> 0 bytes resource/operators/调香师.png | Bin 11621 -> 0 bytes resource/operators/豆苗.png | Bin 4246 -> 0 bytes resource/operators/贝娜.png | Bin 11404 -> 0 bytes resource/operators/赫默.png | Bin 14428 -> 0 bytes resource/operators/迷迭香.png | Bin 17660 -> 0 bytes resource/operators/陨星.png | Bin 0 -> 7924 bytes resource/operators/霜叶.png | Bin 4805 -> 0 bytes resource/operators/食铁兽.png | Bin 14278 -> 0 bytes resource/operators/香草.png | Bin 6647 -> 0 bytes resource/operators/黑.png | Bin 0 -> 6257 bytes resource/operators/黑角.png | Bin 9726 -> 0 bytes 74 files changed, 204 insertions(+), 73 deletions(-) delete mode 100644 resource/operators/Castle-3.png create mode 100644 resource/operators/W.png create mode 100644 resource/operators/傀影.png delete mode 100644 resource/operators/克洛丝.png create mode 100644 resource/operators/凛冬.png delete mode 100644 resource/operators/刻俄柏.png create mode 100644 resource/operators/卡涅利安.png delete mode 100644 resource/operators/卡缇.png delete mode 100644 resource/operators/卡达.png create mode 100644 resource/operators/古米.png delete mode 100644 resource/operators/史都华德.png create mode 100644 resource/operators/吽.png create mode 100644 resource/operators/夕.png delete mode 100644 resource/operators/夜烟.png create mode 100644 resource/operators/孑.png create mode 100644 resource/operators/宴.png create mode 100644 resource/operators/山.png create mode 100644 resource/operators/嵯峨.png delete mode 100644 resource/operators/帕拉斯.png delete mode 100644 resource/operators/异客.png delete mode 100644 resource/operators/斑点.png delete mode 100644 resource/operators/断罪者.png create mode 100644 resource/operators/早露.png delete mode 100644 resource/operators/月见夜.png delete mode 100644 resource/operators/杰西卡.png create mode 100644 resource/operators/梅.png delete mode 100644 resource/operators/梅尔.png create mode 100644 resource/operators/梓兰.png delete mode 100644 resource/operators/槐琥.png delete mode 100644 resource/operators/水月.png delete mode 100644 resource/operators/泡普卡.png delete mode 100644 resource/operators/泡泡.png delete mode 100644 resource/operators/流星.png create mode 100644 resource/operators/深靛.png create mode 100644 resource/operators/深靛png.png delete mode 100644 resource/operators/清流.png delete mode 100644 resource/operators/温蒂.png delete mode 100644 resource/operators/火神.png create mode 100644 resource/operators/灰烬.png delete mode 100644 resource/operators/炎熔.png create mode 100644 resource/operators/煌.png create mode 100644 resource/operators/燧石.png create mode 100644 resource/operators/狮蝎.png delete mode 100644 resource/operators/白雪.png delete mode 100644 resource/operators/石棉.png delete mode 100644 resource/operators/稀音.png delete mode 100644 resource/operators/米格鲁.png create mode 100644 resource/operators/红.png delete mode 100644 resource/operators/红云.png delete mode 100644 resource/operators/红豆.png delete mode 100644 resource/operators/艾雅法拉.png delete mode 100644 resource/operators/蛇屠箱.png delete mode 100644 resource/operators/调香师.png delete mode 100644 resource/operators/豆苗.png delete mode 100644 resource/operators/贝娜.png delete mode 100644 resource/operators/赫默.png delete mode 100644 resource/operators/迷迭香.png create mode 100644 resource/operators/陨星.png delete mode 100644 resource/operators/霜叶.png delete mode 100644 resource/operators/食铁兽.png delete mode 100644 resource/operators/香草.png create mode 100644 resource/operators/黑.png delete mode 100644 resource/operators/黑角.png diff --git a/MeoAssistance/AbstractTask.cpp b/MeoAssistance/AbstractTask.cpp index 59415bd74e..2ca7c13cdf 100644 --- a/MeoAssistance/AbstractTask.cpp +++ b/MeoAssistance/AbstractTask.cpp @@ -97,6 +97,9 @@ bool AbstractTask::set_control_scale(int cur_width, int cur_height) bool AbstractTask::sleep(unsigned millisecond) { + if (need_exit()) { + return false; + } if (millisecond == 0) { return true; } @@ -107,15 +110,14 @@ bool AbstractTask::sleep(unsigned millisecond) callback_json["time"] = millisecond; m_callback(AsstMsg::ReadyToSleep, callback_json, m_callback_arg); - while ((m_exit_flag == NULL || *m_exit_flag == false) - && duration < millisecond) { + while (!need_exit() && duration < millisecond) { duration = std::chrono::duration_cast( std::chrono::system_clock::now() - start).count(); std::this_thread::yield(); } m_callback(AsstMsg::EndOfSleep, callback_json, m_callback_arg); - return (m_exit_flag == NULL || *m_exit_flag == false); + return !need_exit(); } bool AbstractTask::print_window(const std::string& dir) @@ -142,4 +144,9 @@ bool AbstractTask::print_window(const std::string& dir) m_callback(AsstMsg::PrintWindow, callback_json, m_callback_arg); return ret; -} \ No newline at end of file +} + +bool asst::AbstractTask::need_exit() const noexcept +{ + return m_exit_flag != NULL && *m_exit_flag == true; +} diff --git a/MeoAssistance/AbstractTask.h b/MeoAssistance/AbstractTask.h index e33ee30e5d..2cb7a1079a 100644 --- a/MeoAssistance/AbstractTask.h +++ b/MeoAssistance/AbstractTask.h @@ -60,6 +60,7 @@ namespace asst { virtual bool set_control_scale(int cur_width, int cur_height); virtual bool sleep(unsigned millisecond); virtual bool print_window(const std::string& dir); + virtual bool need_exit() const noexcept; std::shared_ptr m_window_ptr = nullptr; std::shared_ptr m_view_ptr = nullptr; diff --git a/MeoAssistance/Assistance.cpp b/MeoAssistance/Assistance.cpp index 5b24f293d0..d081e666ab 100644 --- a/MeoAssistance/Assistance.cpp +++ b/MeoAssistance/Assistance.cpp @@ -23,8 +23,9 @@ Assistance::Assistance(AsstCallback callback, void* callback_arg) DebugTraceFunction; // 鷵ֵΪfalseص - auto callback_error = [&]() { + auto callback_error = [&](const std::string& filename = std::string()) { json::value callback_json; + callback_json["filename"] = filename; callback_json["what"] = "Resource"; m_callback(AsstMsg::InitFaild, callback_json, m_callback_arg); }; @@ -71,14 +72,14 @@ Assistance::Assistance(AsstCallback callback, void* callback_arg) for (const auto& [key, name] : InfrastConfiger::get_instance().m_oper_name_feat) { ret = m_identify_ptr->add_text_image(name, GetResourceDir() + "operators\\" + Utf8ToGbk(name) + ".png"); if (!ret) { - callback_error(); + callback_error(Utf8ToGbk(name)); return; } } for (const auto& name : InfrastConfiger::get_instance().m_oper_name_feat_whatever) { ret = m_identify_ptr->add_text_image(name, GetResourceDir() + "operators\\" + Utf8ToGbk(name) + ".png"); if (!ret) { - callback_error(); + callback_error(Utf8ToGbk(name)); return; } } @@ -255,7 +256,7 @@ bool asst::Assistance::start_to_identify_opers() auto task_ptr = std::make_shared(task_callback, (void*)this); // TODO дļTODO λҪݷֱ - task_ptr->set_swipe_param(Rect(2400, 800, 0, 0), Rect(400, 800, 0, 0), 2100); + task_ptr->set_swipe_param(Rect(800, 600, 0, 0), Rect(600, 600, 0, 0), 200); task_ptr->set_task_chain("IdentifyOpers"); m_tasks_queue.emplace(task_ptr); diff --git a/MeoAssistance/AsstDef.h b/MeoAssistance/AsstDef.h index b0205b0772..5b18ab8ba6 100644 --- a/MeoAssistance/AsstDef.h +++ b/MeoAssistance/AsstDef.h @@ -82,7 +82,7 @@ namespace asst { struct TextArea { TextArea() = default; TextArea(const TextArea&) = default; - TextArea(TextArea&&) = default; + TextArea(TextArea&&) noexcept = default; template TextArea(std::string text, RectArgs &&... rect_args) : text(std::move(text)), @@ -91,6 +91,9 @@ namespace asst { "Parameter can't be used to construct a asst::Rect"); } operator std::string() const { return text; } + TextArea& operator=(const TextArea&) = default; + TextArea& operator=(TextArea&&) noexcept = default; + std::string text; Rect rect; }; diff --git a/MeoAssistance/Identify.cpp b/MeoAssistance/Identify.cpp index 5229e6f1d6..af063c81e1 100644 --- a/MeoAssistance/Identify.cpp +++ b/MeoAssistance/Identify.cpp @@ -84,7 +84,7 @@ std::pair, cv::Mat> asst::Identify::surf_detect(const cv::Mat mat_gray; cv::cvtColor(mat, mat_gray, cv::COLOR_RGB2GRAY); - constexpr int min_hessian = 4000; + constexpr int min_hessian = 400; // SURF cv::Ptr detector = SURF::create(min_hessian); std::vector keypoints; @@ -103,12 +103,16 @@ std::optional asst::Identify::feature_match( #endif ) { + if (query_mat_vector.empty() || train_mat_vector.empty()) { + DebugTraceError("feature_match | image empty"); + return std::nullopt; + } std::vector matches; static FlannBasedMatcher matcher; matcher.match(query_mat_vector, train_mat_vector, matches); #ifdef LOG_TRACE - std::cout << matches.size() << " / " << query_keypoints.size() << std::endl; + //std::cout << matches.size() << " / " << query_keypoints.size() << std::endl; cv::Mat allmatch_mat; cv::drawMatches(query_mat, query_keypoints, train_mat, train_keypoints, matches, allmatch_mat); #endif @@ -210,7 +214,7 @@ std::optional asst::Identify::feature_match( #endif - constexpr static const double MatchSizeRatioThreshold = 0.075; + constexpr static const double MatchSizeRatioThreshold = 0.05; if (good_points.size() >= query_keypoints.size() * MatchSizeRatioThreshold) { Rect dst; int left = 0, right = 0, top = 0, bottom = 0; @@ -301,7 +305,7 @@ std::tuple Identify::find_image(const Mat& cu std::optional