From a4a8b0cfb062811a8b52eae136f3016ecf3eeebf Mon Sep 17 00:00:00 2001 From: MistEO Date: Sat, 21 Aug 2021 23:57:04 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8D=E5=B9=B2=E5=91=98=E5=90=8D?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MeoAssistance/Assistance.cpp | 2 +- MeoAssistance/IdentifyOperTask.cpp | 95 +++++++++++++++++++++++------ MeoAssistance/IdentifyOperTask.h | 4 +- resource/config.json | 2 + resource/infrast.json | 4 +- resource/operators/空.png | Bin 0 -> 5061 bytes resource/operators/阿.png | Bin 0 -> 4677 bytes 7 files changed, 86 insertions(+), 21 deletions(-) create mode 100644 resource/operators/空.png create mode 100644 resource/operators/阿.png diff --git a/MeoAssistance/Assistance.cpp b/MeoAssistance/Assistance.cpp index d081e666ab..56703687a4 100644 --- a/MeoAssistance/Assistance.cpp +++ b/MeoAssistance/Assistance.cpp @@ -256,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(800, 600, 0, 0), Rect(600, 600, 0, 0), 200); + task_ptr->set_swipe_param(Rect(2400, 800, 0, 0), Rect(400, 800, 0, 0), 2000); task_ptr->set_task_chain("IdentifyOpers"); m_tasks_queue.emplace(task_ptr); diff --git a/MeoAssistance/IdentifyOperTask.cpp b/MeoAssistance/IdentifyOperTask.cpp index eaa282fa2c..f9bb8e07a5 100644 --- a/MeoAssistance/IdentifyOperTask.cpp +++ b/MeoAssistance/IdentifyOperTask.cpp @@ -42,14 +42,17 @@ bool asst::IdentifyOperTask::run() std::unordered_set feature_whatever = InfrastConfiger::get_instance().m_oper_name_feat_whatever; std::unordered_set detected_opers; + int times = 0; + bool reverse = false; // һʶһ߻иԱץ - // 첽л - m_keep_swipe = true; - std::future swipe_future = std::async( - std::launch::async, &IdentifyOperTask::keep_swipe, this, false); + // һ飬ٷһ飬ʶ while (true) { const cv::Mat& image = OcrAbstractTask::get_format_image(true); + // 첽л + std::future swipe_future = std::async( + std::launch::async, &IdentifyOperTask::swipe, this, reverse); + auto cur_name_textarea = detect_opers(image, feature_cond, feature_whatever); int oper_numer = detected_opers.size(); @@ -77,17 +80,35 @@ bool asst::IdentifyOperTask::run() opers_json["all"] = json::array(opers_json_vec); m_callback(AsstMsg::InfrastOpers, opers_json, m_callback_arg); - // ˵ʶһµĶûʶ𵽣Ӧǻˣֱӽѭ - if (oper_numer == detected_opers.size()) { - break; + // 򻬶ʱ + if (!reverse) { + ++times; + // ˵ʶһµĶûʶ𵽣Ӧǻˣֱӽѭ + if (oper_numer == detected_opers.size()) { + reverse = true; + } } - if (need_exit()) { + else { // 򻬶ʱ + if (--times <= 0) { + break; + } + } + // ȴλ + if (!swipe_future.get()) { return false; } } - // ȴ - m_keep_swipe = false; - swipe_future.wait(); +#ifdef LOG_TRACE + for (const std::string& name : InfrastConfiger::get_instance().m_all_opers_name) { + auto iter = std::find_if(detected_opers.cbegin(), detected_opers.cend(), + [&](const OperInfrastInfo& oper) -> bool { + return oper.name == name; + }); + if (iter == detected_opers.cend()) { + std::cout << "δ⵽" << Utf8ToGbk(name) << std::endl; + } + } +#endif // LOG_TRACE return true; } @@ -96,8 +117,8 @@ std::vector