From c9a9fb3656d494a3a17a7154eedcbc0632b76ff1 Mon Sep 17 00:00:00 2001 From: MistEO Date: Sun, 15 Aug 2021 03:35:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90SURF=E7=AE=97=E6=B3=95?= =?UTF-8?q?=E7=9A=84demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MeoAssistance/include/AsstDef.h | 1 + MeoAssistance/include/Task.h | 2 +- MeoAssistance/include/WinMacro.h | 5 +- MeoAssistance/src/Configer.cpp | 1 + MeoAssistance/src/Identify.cpp | 44 ++++---- MeoAssistance/src/Task.cpp | 170 ++++++------------------------- MeoAssistance/src/WinMacro.cpp | 71 +++++++++---- resource/config.json | 32 +++--- resource/operators/screen.bat | 4 +- update_resource.bat | 5 +- 10 files changed, 128 insertions(+), 207 deletions(-) diff --git a/MeoAssistance/include/AsstDef.h b/MeoAssistance/include/AsstDef.h index e0d1e190d0..6da5540b34 100644 --- a/MeoAssistance/include/AsstDef.h +++ b/MeoAssistance/include/AsstDef.h @@ -106,6 +106,7 @@ namespace asst { std::string swipe; std::string display; std::string display_regex; + std::string screencap; int display_width = 0; int display_height = 0; }; diff --git a/MeoAssistance/include/Task.h b/MeoAssistance/include/Task.h index 1d00123a15..d71e983bb8 100644 --- a/MeoAssistance/include/Task.h +++ b/MeoAssistance/include/Task.h @@ -139,7 +139,7 @@ namespace asst { virtual void set_task_chain(std::string name) { m_task_chain = std::move(name); } virtual const std::string& get_task_chain() { return m_task_chain; } protected: - virtual cv::Mat get_format_image(); + virtual cv::Mat get_format_image(bool hd = false); // 参数hd:高清截图,会慢一点 virtual bool set_control_scale(int cur_width, int cur_height); virtual bool sleep(unsigned millisecond); virtual bool print_window(const std::string& dir); diff --git a/MeoAssistance/include/WinMacro.h b/MeoAssistance/include/WinMacro.h index 1170a99a5d..522abdf150 100644 --- a/MeoAssistance/include/WinMacro.h +++ b/MeoAssistance/include/WinMacro.h @@ -28,7 +28,8 @@ namespace asst { bool swipe(const Point& p1, const Point& p2); bool swipe(const Rect& r1, const Rect& r2); void setControlScale(double scale); - cv::Mat getImage(const Rect& rect); + cv::Mat getImage(const Rect& rect); // 通过Win32 Api对窗口截图 + cv::Mat getAdbImage(); // 通过Adb截图,会高清一点,但是比较慢(通过adb pull出来,有io操作) Rect getWindowRect(); const EmulatorInfo& getEmulatorInfo() const noexcept { return m_emulator_info; } const HandleType& getHandleType() const noexcept { return m_handle_type; } @@ -45,6 +46,8 @@ namespace asst { bool m_is_adb = false; std::string m_click_cmd; // adb点击命令,不是adb的句柄用不到这个 std::string m_swipe_cmd; // adb滑动命令,不是adb的句柄用不到这个 + std::string m_screencap_cmd;// adb截图命令,不是adb的句柄用不到这个 + std::string m_adb_screen_filename; std::minstd_rand m_rand_engine; int m_width = 0; int m_height = 0; diff --git a/MeoAssistance/src/Configer.cpp b/MeoAssistance/src/Configer.cpp index 42b0b862b8..27c0f3c9f9 100644 --- a/MeoAssistance/src/Configer.cpp +++ b/MeoAssistance/src/Configer.cpp @@ -256,6 +256,7 @@ bool asst::Configer::_load(const std::string& filename) emulator_info.adb.swipe = emulator_json["adb"]["swipe"].as_string(); emulator_info.adb.display = emulator_json["adb"]["display"].as_string(); emulator_info.adb.display_regex = emulator_json["adb"]["displayRegex"].as_string(); + emulator_info.adb.screencap = emulator_json["adb"]["screencap"].as_string(); } emulator_info.x_offset = emulator_json.get("xOffset", 0); emulator_info.y_offset = emulator_json.get("yOffset", 0); diff --git a/MeoAssistance/src/Identify.cpp b/MeoAssistance/src/Identify.cpp index 95c5f1fe06..099a19ce2e 100644 --- a/MeoAssistance/src/Identify.cpp +++ b/MeoAssistance/src/Identify.cpp @@ -82,7 +82,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 = 1000; + constexpr int min_hessian = 4000; // SURF特征点检测 cv::Ptr detector = SURF::create(min_hessian); std::vector keypoints; @@ -181,30 +181,41 @@ std::vector