From b3ce662820d36fa4768dc3621783cf196c393fa7 Mon Sep 17 00:00:00 2001 From: MistEO Date: Mon, 2 May 2022 00:28:06 +0800 Subject: [PATCH] =?UTF-8?q?fix.=E6=8E=89=E8=90=BD=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E6=94=B9=E7=94=A8=E5=8E=9F=E5=9B=BE=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/395 --- src/MeoAssistant/Controller.cpp | 10 ++++++++-- src/MeoAssistant/Controller.h | 2 +- src/MeoAssistant/StageDropsTaskPlugin.cpp | 2 +- src/MeoAssistant/Version.h | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/MeoAssistant/Controller.cpp b/src/MeoAssistant/Controller.cpp index b18de0ad56..04cf5b258c 100644 --- a/src/MeoAssistant/Controller.cpp +++ b/src/MeoAssistant/Controller.cpp @@ -476,7 +476,7 @@ std::optional> asst::Controller::call_command(const s read_num = read(m_pipe_out[PIPE_READ], m_pipe_buffer.get(), PipeBuffSize); }; } while (::waitpid(m_child, &exit_ret, WNOHANG) == 0 && !check_timeout()); -} + } else { // failed to create child process return std::nullopt; @@ -832,7 +832,7 @@ int asst::Controller::swipe_without_scale(const Rect & r1, const Rect & r2, int return swipe_without_scale(rand_point_in_rect(r1), rand_point_in_rect(r2), duration, block, extra_delay, extra_swipe); } -cv::Mat asst::Controller::get_image() +cv::Mat asst::Controller::get_image(bool raw) { // 有些模拟器adb偶尔会莫名其妙截图失败,多试几次 for (int i = 0; i != 20; ++i) { @@ -841,6 +841,12 @@ cv::Mat asst::Controller::get_image() } } + if (raw) { + std::shared_lock image_lock(m_image_mutex); + cv::Mat copy = m_cache_image.clone(); + return copy; + } + return get_resized_image(); } diff --git a/src/MeoAssistant/Controller.h b/src/MeoAssistant/Controller.h index 76d51d9929..365789b768 100644 --- a/src/MeoAssistant/Controller.h +++ b/src/MeoAssistant/Controller.h @@ -37,7 +37,7 @@ namespace asst static void set_dirname(std::string dirname) noexcept; bool try_capture(const EmulatorInfo& info, bool without_handle = false); - cv::Mat get_image(); + cv::Mat get_image(bool raw = false); std::vector get_image_encode(); // 点击和滑动都是异步执行,返回该任务的id diff --git a/src/MeoAssistant/StageDropsTaskPlugin.cpp b/src/MeoAssistant/StageDropsTaskPlugin.cpp index 2a847312bc..2f29e9aeb3 100644 --- a/src/MeoAssistant/StageDropsTaskPlugin.cpp +++ b/src/MeoAssistant/StageDropsTaskPlugin.cpp @@ -72,7 +72,7 @@ bool asst::StageDropsTaskPlugin::recognize_drops() if (need_exit()) { return false; } - cv::Mat image = Ctrler.get_image(); + cv::Mat image = Ctrler.get_image(true); std::string res = Resrc.penguin().recognize(image); Log.trace("Results of penguin recognition:\n", res); m_cur_drops = json::parse(res).value(); diff --git a/src/MeoAssistant/Version.h b/src/MeoAssistant/Version.h index 2e0b3fbe22..4613bb35a2 100644 --- a/src/MeoAssistant/Version.h +++ b/src/MeoAssistant/Version.h @@ -2,5 +2,5 @@ namespace asst { - constexpr static const char* Version = "v3.2"; + constexpr static const char* Version = "v3.2.1"; }