From 2af89dfed6153802402db166be481e615faac835 Mon Sep 17 00:00:00 2001 From: MistEO Date: Fri, 20 Aug 2021 16:24:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86=E7=9B=AE=E5=BD=95=E7=BB=93?= =?UTF-8?q?=E6=9E=84=EF=BC=8C=E5=88=86=E7=A6=BBTask?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MeoAssistance.sln | 134 ++- MeoAssistance/AbstractTask.cpp | 145 +++ MeoAssistance/AbstractTask.h | 76 ++ MeoAssistance/{src => }/Assistance.cpp | 12 +- MeoAssistance/{include => }/Assistance.h | 0 MeoAssistance/{include => }/AsstAux.h | 0 MeoAssistance/{src => }/AsstCaller.cpp | 8 +- MeoAssistance/{include => }/AsstDef.h | 0 MeoAssistance/AsstMsg.h | 79 ++ MeoAssistance/ClickTask.cpp | 28 + MeoAssistance/ClickTask.h | 18 + MeoAssistance/{src => }/Configer.cpp | 1 + MeoAssistance/{include => }/Configer.h | 2 +- MeoAssistance/{src => }/Identify.cpp | 15 +- MeoAssistance/{include => }/Identify.h | 0 MeoAssistance/InfrastConfiger.cpp | 1 + MeoAssistance/{include => }/InfrastConfiger.h | 2 +- MeoAssistance/InfrastStationTask.cpp | 224 +++++ MeoAssistance/InfrastStationTask.h | 32 + MeoAssistance/{include => }/Logger.hpp | 0 MeoAssistance/MeoAssistance.vcxproj | 134 +-- MeoAssistance/MeoAssistance.vcxproj.filters | 150 ++- MeoAssistance/OcrAbstractTask.cpp | 37 + MeoAssistance/OcrAbstractTask.h | 61 ++ MeoAssistance/OpenRecruitTask.cpp | 224 +++++ MeoAssistance/OpenRecruitTask.h | 46 + MeoAssistance/ProcessTask.cpp | 270 +++++ MeoAssistance/ProcessTask.h | 25 + MeoAssistance/{src => }/RecruitConfiger.cpp | 1 + MeoAssistance/{include => }/RecruitConfiger.h | 2 +- MeoAssistance/Task.h | 7 + MeoAssistance/TestOcrTask.cpp | 69 ++ MeoAssistance/TestOcrTask.h | 29 + MeoAssistance/{src => }/Updater.cpp | 2 + MeoAssistance/{include => }/Updater.h | 0 MeoAssistance/{include => }/Version.h | 0 MeoAssistance/{src => }/WinMacro.cpp | 12 +- MeoAssistance/{include => }/WinMacro.h | 1 + MeoAssistance/include/Task.h | 310 ------ MeoAssistance/src/Task.cpp | 938 ------------------ Tools/Sanity/Sanity.vcxproj | 132 +-- Tools/TestCaller/TestCaller.vcxproj | 340 ++----- Tools/TestCaller/main.cpp | 2 - .../include => include}/AsstCaller.h | 0 {MeoAssistance/include => include}/AsstPort.h | 0 resource/infrast.json | 2 +- 46 files changed, 1717 insertions(+), 1854 deletions(-) create mode 100644 MeoAssistance/AbstractTask.cpp create mode 100644 MeoAssistance/AbstractTask.h rename MeoAssistance/{src => }/Assistance.cpp (96%) rename MeoAssistance/{include => }/Assistance.h (100%) rename MeoAssistance/{include => }/AsstAux.h (100%) rename MeoAssistance/{src => }/AsstCaller.cpp (99%) rename MeoAssistance/{include => }/AsstDef.h (100%) create mode 100644 MeoAssistance/AsstMsg.h create mode 100644 MeoAssistance/ClickTask.cpp create mode 100644 MeoAssistance/ClickTask.h rename MeoAssistance/{src => }/Configer.cpp (99%) rename MeoAssistance/{include => }/Configer.h (95%) rename MeoAssistance/{src => }/Identify.cpp (99%) rename MeoAssistance/{include => }/Identify.h (100%) rename MeoAssistance/{include => }/InfrastConfiger.h (93%) create mode 100644 MeoAssistance/InfrastStationTask.cpp create mode 100644 MeoAssistance/InfrastStationTask.h rename MeoAssistance/{include => }/Logger.hpp (100%) create mode 100644 MeoAssistance/OcrAbstractTask.cpp create mode 100644 MeoAssistance/OcrAbstractTask.h create mode 100644 MeoAssistance/OpenRecruitTask.cpp create mode 100644 MeoAssistance/OpenRecruitTask.h create mode 100644 MeoAssistance/ProcessTask.cpp create mode 100644 MeoAssistance/ProcessTask.h rename MeoAssistance/{src => }/RecruitConfiger.cpp (99%) rename MeoAssistance/{include => }/RecruitConfiger.h (91%) create mode 100644 MeoAssistance/Task.h create mode 100644 MeoAssistance/TestOcrTask.cpp create mode 100644 MeoAssistance/TestOcrTask.h rename MeoAssistance/{src => }/Updater.cpp (99%) rename MeoAssistance/{include => }/Updater.h (100%) rename MeoAssistance/{include => }/Version.h (100%) rename MeoAssistance/{src => }/WinMacro.cpp (99%) rename MeoAssistance/{include => }/WinMacro.h (99%) delete mode 100644 MeoAssistance/include/Task.h delete mode 100644 MeoAssistance/src/Task.cpp rename {MeoAssistance/include => include}/AsstCaller.h (100%) rename {MeoAssistance/include => include}/AsstPort.h (100%) diff --git a/MeoAssistance.sln b/MeoAssistance.sln index 39aa418ac2..4bfe51325f 100644 --- a/MeoAssistance.sln +++ b/MeoAssistance.sln @@ -1,76 +1,58 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30717.126 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MeoAssistance", "MeoAssistance\MeoAssistance.vcxproj", "{362D1E30-F5AE-4279-9985-65C27B3BA300}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Sanity", "Tools\Sanity\Sanity.vcxproj", "{36BC08F3-71CF-429A-AE69-291BE8962CB2}" - ProjectSection(ProjectDependencies) = postProject - {362D1E30-F5AE-4279-9985-65C27B3BA300} = {362D1E30-F5AE-4279-9985-65C27B3BA300} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeoAsstGui", "MeoAsstGui\MeoAsstGui.csproj", "{FFDC8F49-8EAF-45BE-B0A8-7EF0DB9875A2}" - ProjectSection(ProjectDependencies) = postProject - {362D1E30-F5AE-4279-9985-65C27B3BA300} = {362D1E30-F5AE-4279-9985-65C27B3BA300} - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{6C4B8D52-51D1-45F8-AAEC-808035443FD6}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestCaller", "Tools\TestCaller\TestCaller.vcxproj", "{63B4F1A2-291C-4C85-91E1-A1F6DAE30D64}" - ProjectSection(ProjectDependencies) = postProject - {362D1E30-F5AE-4279-9985-65C27B3BA300} = {362D1E30-F5AE-4279-9985-65C27B3BA300} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Release|x64 = Release|x64 - Release|x86 = Release|x86 - RelWithDebInfo|x64 = RelWithDebInfo|x64 - RelWithDebInfo|x86 = RelWithDebInfo|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {362D1E30-F5AE-4279-9985-65C27B3BA300}.Release|x64.ActiveCfg = Release|x64 - {362D1E30-F5AE-4279-9985-65C27B3BA300}.Release|x64.Build.0 = Release|x64 - {362D1E30-F5AE-4279-9985-65C27B3BA300}.Release|x86.ActiveCfg = Release|Win32 - {362D1E30-F5AE-4279-9985-65C27B3BA300}.Release|x86.Build.0 = Release|Win32 - {362D1E30-F5AE-4279-9985-65C27B3BA300}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 - {362D1E30-F5AE-4279-9985-65C27B3BA300}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 - {362D1E30-F5AE-4279-9985-65C27B3BA300}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Win32 - {362D1E30-F5AE-4279-9985-65C27B3BA300}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Win32 - {36BC08F3-71CF-429A-AE69-291BE8962CB2}.Release|x64.ActiveCfg = Release|x64 - {36BC08F3-71CF-429A-AE69-291BE8962CB2}.Release|x64.Build.0 = Release|x64 - {36BC08F3-71CF-429A-AE69-291BE8962CB2}.Release|x86.ActiveCfg = Release|Win32 - {36BC08F3-71CF-429A-AE69-291BE8962CB2}.Release|x86.Build.0 = Release|Win32 - {36BC08F3-71CF-429A-AE69-291BE8962CB2}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 - {36BC08F3-71CF-429A-AE69-291BE8962CB2}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 - {36BC08F3-71CF-429A-AE69-291BE8962CB2}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Win32 - {36BC08F3-71CF-429A-AE69-291BE8962CB2}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Win32 - {FFDC8F49-8EAF-45BE-B0A8-7EF0DB9875A2}.Release|x64.ActiveCfg = Release|Any CPU - {FFDC8F49-8EAF-45BE-B0A8-7EF0DB9875A2}.Release|x64.Build.0 = Release|Any CPU - {FFDC8F49-8EAF-45BE-B0A8-7EF0DB9875A2}.Release|x86.ActiveCfg = Release|Any CPU - {FFDC8F49-8EAF-45BE-B0A8-7EF0DB9875A2}.Release|x86.Build.0 = Release|Any CPU - {FFDC8F49-8EAF-45BE-B0A8-7EF0DB9875A2}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|Any CPU - {FFDC8F49-8EAF-45BE-B0A8-7EF0DB9875A2}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|Any CPU - {FFDC8F49-8EAF-45BE-B0A8-7EF0DB9875A2}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU - {FFDC8F49-8EAF-45BE-B0A8-7EF0DB9875A2}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU - {63B4F1A2-291C-4C85-91E1-A1F6DAE30D64}.Release|x64.ActiveCfg = Release|x64 - {63B4F1A2-291C-4C85-91E1-A1F6DAE30D64}.Release|x64.Build.0 = Release|x64 - {63B4F1A2-291C-4C85-91E1-A1F6DAE30D64}.Release|x86.ActiveCfg = Release|Win32 - {63B4F1A2-291C-4C85-91E1-A1F6DAE30D64}.Release|x86.Build.0 = Release|Win32 - {63B4F1A2-291C-4C85-91E1-A1F6DAE30D64}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 - {63B4F1A2-291C-4C85-91E1-A1F6DAE30D64}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 - {63B4F1A2-291C-4C85-91E1-A1F6DAE30D64}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Win32 - {63B4F1A2-291C-4C85-91E1-A1F6DAE30D64}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {36BC08F3-71CF-429A-AE69-291BE8962CB2} = {6C4B8D52-51D1-45F8-AAEC-808035443FD6} - {63B4F1A2-291C-4C85-91E1-A1F6DAE30D64} = {6C4B8D52-51D1-45F8-AAEC-808035443FD6} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {4F2C0E4B-4FE9-47C6-A878-6BD2FAD8B9B2} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30717.126 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MeoAssistance", "MeoAssistance\MeoAssistance.vcxproj", "{362D1E30-F5AE-4279-9985-65C27B3BA300}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Sanity", "Tools\Sanity\Sanity.vcxproj", "{36BC08F3-71CF-429A-AE69-291BE8962CB2}" + ProjectSection(ProjectDependencies) = postProject + {362D1E30-F5AE-4279-9985-65C27B3BA300} = {362D1E30-F5AE-4279-9985-65C27B3BA300} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeoAsstGui", "MeoAsstGui\MeoAsstGui.csproj", "{FFDC8F49-8EAF-45BE-B0A8-7EF0DB9875A2}" + ProjectSection(ProjectDependencies) = postProject + {362D1E30-F5AE-4279-9985-65C27B3BA300} = {362D1E30-F5AE-4279-9985-65C27B3BA300} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{6C4B8D52-51D1-45F8-AAEC-808035443FD6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestCaller", "Tools\TestCaller\TestCaller.vcxproj", "{63B4F1A2-291C-4C85-91E1-A1F6DAE30D64}" + ProjectSection(ProjectDependencies) = postProject + {362D1E30-F5AE-4279-9985-65C27B3BA300} = {362D1E30-F5AE-4279-9985-65C27B3BA300} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Release|x64 = Release|x64 + RelWithDebInfo|x64 = RelWithDebInfo|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {362D1E30-F5AE-4279-9985-65C27B3BA300}.Release|x64.ActiveCfg = Release|x64 + {362D1E30-F5AE-4279-9985-65C27B3BA300}.Release|x64.Build.0 = Release|x64 + {362D1E30-F5AE-4279-9985-65C27B3BA300}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {362D1E30-F5AE-4279-9985-65C27B3BA300}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {36BC08F3-71CF-429A-AE69-291BE8962CB2}.Release|x64.ActiveCfg = Release|x64 + {36BC08F3-71CF-429A-AE69-291BE8962CB2}.Release|x64.Build.0 = Release|x64 + {36BC08F3-71CF-429A-AE69-291BE8962CB2}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {36BC08F3-71CF-429A-AE69-291BE8962CB2}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + {FFDC8F49-8EAF-45BE-B0A8-7EF0DB9875A2}.Release|x64.ActiveCfg = Release|Any CPU + {FFDC8F49-8EAF-45BE-B0A8-7EF0DB9875A2}.Release|x64.Build.0 = Release|Any CPU + {FFDC8F49-8EAF-45BE-B0A8-7EF0DB9875A2}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|Any CPU + {FFDC8F49-8EAF-45BE-B0A8-7EF0DB9875A2}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|Any CPU + {63B4F1A2-291C-4C85-91E1-A1F6DAE30D64}.Release|x64.ActiveCfg = Release|x64 + {63B4F1A2-291C-4C85-91E1-A1F6DAE30D64}.Release|x64.Build.0 = Release|x64 + {63B4F1A2-291C-4C85-91E1-A1F6DAE30D64}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 + {63B4F1A2-291C-4C85-91E1-A1F6DAE30D64}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {36BC08F3-71CF-429A-AE69-291BE8962CB2} = {6C4B8D52-51D1-45F8-AAEC-808035443FD6} + {63B4F1A2-291C-4C85-91E1-A1F6DAE30D64} = {6C4B8D52-51D1-45F8-AAEC-808035443FD6} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4F2C0E4B-4FE9-47C6-A878-6BD2FAD8B9B2} + EndGlobalSection +EndGlobal diff --git a/MeoAssistance/AbstractTask.cpp b/MeoAssistance/AbstractTask.cpp new file mode 100644 index 0000000000..59415bd74e --- /dev/null +++ b/MeoAssistance/AbstractTask.cpp @@ -0,0 +1,145 @@ +#include "AbstractTask.h" + +#include +#include +#include + +#include + +#include "WinMacro.h" +#include "Identify.h" +#include "Configer.h" +#include "AsstAux.h" + +using namespace asst; + +AbstractTask::AbstractTask(AsstCallback callback, void* callback_arg) + :m_callback(callback), + m_callback_arg(callback_arg) +{ + ; +} + +void AbstractTask::set_ptr( + std::shared_ptr window_ptr, + std::shared_ptr view_ptr, + std::shared_ptr control_ptr, + std::shared_ptr identify_ptr) +{ + m_window_ptr = window_ptr; + m_view_ptr = view_ptr; + m_control_ptr = control_ptr; + m_identify_ptr = identify_ptr; +} + +void AbstractTask::set_exit_flag(bool* exit_flag) +{ + m_exit_flag = exit_flag; +} + +cv::Mat AbstractTask::get_format_image(bool hd) +{ + cv::Mat raw_image; + if (hd) { + raw_image = m_view_ptr->getAdbImage(); + } + else { + raw_image = m_view_ptr->getImage(m_view_ptr->getWindowRect()); + } + if (raw_image.empty()) { + m_callback(AsstMsg::ImageIsEmpty, json::value(), m_callback_arg); + return raw_image; + } + if (raw_image.rows < 100) { + m_callback(AsstMsg::WindowMinimized, json::value(), m_callback_arg); + return raw_image; + } + + if (hd) { + set_control_scale(1.0); + return raw_image; + } + else { + // ģ߿һȦü + const EmulatorInfo& window_info = m_view_ptr->getEmulatorInfo(); + int x_offset = window_info.x_offset; + int y_offset = window_info.y_offset; + int width = raw_image.cols - x_offset - window_info.right_offset; + int height = raw_image.rows - y_offset - window_info.bottom_offset; + + cv::Mat cropped(raw_image, cv::Rect(x_offset, y_offset, width, height)); + + // ͼߴ磬Ƶ + set_control_scale(cropped.cols, cropped.rows); + + //// ߴ磬Դнͼı׼ߴһ + //cv::Mat dst; + //cv::resize(cropped, dst, cv::Size(m_configer.DefaultWindowWidth, m_configer.DefaultWindowHeight)); + + return cropped; + } +} + +bool asst::AbstractTask::set_control_scale(double scale) +{ + m_control_ptr->setControlScale(scale, true); + return true; +} + +bool AbstractTask::set_control_scale(int cur_width, int cur_height) +{ + double scale_width = static_cast(cur_width) / Configer::DefaultWindowWidth; + double scale_height = static_cast(cur_height) / Configer::DefaultWindowHeight; + double scale = (std::max)(scale_width, scale_height); + m_control_ptr->setControlScale(scale); + return true; +} + +bool AbstractTask::sleep(unsigned millisecond) +{ + if (millisecond == 0) { + return true; + } + auto start = std::chrono::system_clock::now(); + unsigned duration = 0; + + json::value callback_json; + callback_json["time"] = millisecond; + m_callback(AsstMsg::ReadyToSleep, callback_json, m_callback_arg); + + while ((m_exit_flag == NULL || *m_exit_flag == false) + && 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); +} + +bool AbstractTask::print_window(const std::string& dir) +{ + const cv::Mat& image = get_format_image(true); + if (image.empty()) { + return false; + } + // adbֱӽͼˣòü + //// ĽͼٲüһȦȻʶ𲻳 + //int offset = Configer::get_instance().m_options.print_window_crop_offset; + //cv::Rect rect(offset, offset, image.cols - offset * 2, image.rows - offset * 2); + + std::filesystem::create_directory(dir); + const std::string time_str = StringReplaceAll(StringReplaceAll(GetFormatTimeString(), " ", "_"), ":", "-"); + const std::string filename = dir + time_str + ".png"; + + bool ret = cv::imwrite(filename.c_str(), image); + + json::value callback_json; + callback_json["filename"] = filename; + callback_json["ret"] = ret; + callback_json["offset"] = 0; + m_callback(AsstMsg::PrintWindow, callback_json, m_callback_arg); + + return ret; +} \ No newline at end of file diff --git a/MeoAssistance/AbstractTask.h b/MeoAssistance/AbstractTask.h new file mode 100644 index 0000000000..e33ee30e5d --- /dev/null +++ b/MeoAssistance/AbstractTask.h @@ -0,0 +1,76 @@ +#pragma once + +#include + +#include "AsstMsg.h" + +namespace cv +{ + class Mat; +} + +namespace asst { + class WinMacro; + class Identify; + + enum TaskType { + TaskTypeInvalid = 0, + TaskTypeWindowZoom = 1, + TaskTypeRecognition = 2, + TaskTypeClick = 4 + }; + + // ʩ + enum class FacilityType { + Invalid, + Manufacturing, // վ + Trade, // óվ + PowerStation, // վ + ControlInterface, // + ReceptionRoom, // + Dormitory, // + Office // 칫 + // ѵҺͼӹվòϣ + }; + + class AbstractTask + { + public: + AbstractTask(AsstCallback callback, void* callback_arg); + virtual ~AbstractTask() = default; + AbstractTask(const AbstractTask&) = default; + AbstractTask(AbstractTask&&) = default; + + virtual void set_ptr( + std::shared_ptr window_ptr, + std::shared_ptr view_ptr, + std::shared_ptr control_ptr, + std::shared_ptr identify_ptr); + virtual bool run() = 0; + + virtual void set_exit_flag(bool* exit_flag); + virtual int get_task_type() { return m_task_type; } + virtual void set_retry_times(int times) { m_retry_times = times; } + virtual int get_retry_times() { return m_retry_times; } + 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(bool hd = false); // hdͼһ + virtual bool set_control_scale(double scale); + virtual bool set_control_scale(int cur_width, int cur_height); + virtual bool sleep(unsigned millisecond); + virtual bool print_window(const std::string& dir); + + std::shared_ptr m_window_ptr = nullptr; + std::shared_ptr m_view_ptr = nullptr; + std::shared_ptr m_control_ptr = nullptr; + std::shared_ptr m_identify_ptr = nullptr; + + AsstCallback m_callback; + void* m_callback_arg = NULL; + bool* m_exit_flag = NULL; + std::string m_task_chain; + int m_task_type = TaskType::TaskTypeInvalid; + int m_retry_times = INT_MAX; + }; +} \ No newline at end of file diff --git a/MeoAssistance/src/Assistance.cpp b/MeoAssistance/Assistance.cpp similarity index 96% rename from MeoAssistance/src/Assistance.cpp rename to MeoAssistance/Assistance.cpp index 5fedbe2549..6e5b08c5bc 100644 --- a/MeoAssistance/src/Assistance.cpp +++ b/MeoAssistance/Assistance.cpp @@ -1,5 +1,11 @@ #include "Assistance.h" +#include +#include + +#include +#include + #include "WinMacro.h" #include "Configer.h" #include "Identify.h" @@ -9,12 +15,6 @@ #include "RecruitConfiger.h" #include "InfrastConfiger.h" -#include -#include - -#include -#include - using namespace asst; Assistance::Assistance(AsstCallback callback, void* callback_arg) diff --git a/MeoAssistance/include/Assistance.h b/MeoAssistance/Assistance.h similarity index 100% rename from MeoAssistance/include/Assistance.h rename to MeoAssistance/Assistance.h diff --git a/MeoAssistance/include/AsstAux.h b/MeoAssistance/AsstAux.h similarity index 100% rename from MeoAssistance/include/AsstAux.h rename to MeoAssistance/AsstAux.h diff --git a/MeoAssistance/src/AsstCaller.cpp b/MeoAssistance/AsstCaller.cpp similarity index 99% rename from MeoAssistance/src/AsstCaller.cpp rename to MeoAssistance/AsstCaller.cpp index ec8182583d..afb10806c4 100644 --- a/MeoAssistance/src/AsstCaller.cpp +++ b/MeoAssistance/AsstCaller.cpp @@ -1,11 +1,13 @@ #include "AsstCaller.h" + +#include + +#include + #include "Updater.h" #include "AsstAux.h" #include "Assistance.h" -#include -#include - #if 0 #if _MSC_VER // Win32ƽ̨Dll diff --git a/MeoAssistance/include/AsstDef.h b/MeoAssistance/AsstDef.h similarity index 100% rename from MeoAssistance/include/AsstDef.h rename to MeoAssistance/AsstDef.h diff --git a/MeoAssistance/AsstMsg.h b/MeoAssistance/AsstMsg.h new file mode 100644 index 0000000000..c54090da1a --- /dev/null +++ b/MeoAssistance/AsstMsg.h @@ -0,0 +1,79 @@ +#pragma once + +#include +#include +#include +#include + +#include + +namespace asst { + enum class AsstMsg { + /* Error Msg */ + PtrIsNull, + ImageIsEmpty, + WindowMinimized, + InitFaild, + /* Info Msg */ + TaskStart, + ImageFindResult, + ImageMatched, + TaskMatched, + ReachedLimit, + ReadyToSleep, + EndOfSleep, + AppendProcessTask, // ϢAssistanceⲿҪ + AppendTask, // ϢAssistanceⲿҪ + TaskCompleted, + PrintWindow, + TaskStop, + TaskError, + /* Open Recruit Msg */ + TextDetected, + RecruitTagsDetected, + OcrResultError, + RecruitSpecialTag, + RecruitResult, + /* Infrast Msg*/ + InfrastOpers, // ʶ𵽻Աs + InfrastComb // ǰõŸԱ + }; + + static std::ostream& operator<<(std::ostream& os, const AsstMsg& type) + { + static const std::unordered_map _type_name = { + {AsstMsg::PtrIsNull, "PtrIsNull"}, + {AsstMsg::ImageIsEmpty, "ImageIsEmpty"}, + {AsstMsg::WindowMinimized, "WindowMinimized"}, + {AsstMsg::InitFaild, "InitFaild"}, + {AsstMsg::TaskStart, "TaskStart"}, + {AsstMsg::ImageFindResult, "ImageFindResult"}, + {AsstMsg::ImageMatched, "ImageMatched"}, + {AsstMsg::TaskMatched, "TaskMatched"}, + {AsstMsg::ReachedLimit, "ReachedLimit"}, + {AsstMsg::ReadyToSleep, "ReadyToSleep"}, + {AsstMsg::EndOfSleep, "EndOfSleep"}, + {AsstMsg::AppendProcessTask, "AppendProcessTask"}, + {AsstMsg::TaskCompleted, "TaskCompleted"}, + {AsstMsg::PrintWindow, "PrintWindow"}, + {AsstMsg::TaskError, "TaskError"}, + {AsstMsg::TaskStop, "TaskStop"}, + {AsstMsg::TextDetected, "TextDetected"}, + {AsstMsg::RecruitTagsDetected, "RecruitTagsDetected"}, + {AsstMsg::OcrResultError, "OcrResultError"}, + {AsstMsg::RecruitSpecialTag, "RecruitSpecialTag"}, + {AsstMsg::RecruitResult, "RecruitResult"}, + {AsstMsg::AppendTask, "AppendTask"}, + {AsstMsg::InfrastOpers, "InfrastOpers"}, + {AsstMsg::InfrastComb, "InfrastComb"} + }; + return os << _type_name.at(type); + } + + // AsstCallback Ϣص + // + // AsstMsg Ϣ + // const json::value& ϢjsonÿϢͬTodoҪЭĵɶ + // void* ⲿԶÿλصȥ鴫(void*)thisָ + using AsstCallback = std::function; +} \ No newline at end of file diff --git a/MeoAssistance/ClickTask.cpp b/MeoAssistance/ClickTask.cpp new file mode 100644 index 0000000000..9168555c40 --- /dev/null +++ b/MeoAssistance/ClickTask.cpp @@ -0,0 +1,28 @@ +#include "ClickTask.h" + +#include "WinMacro.h" + +using namespace asst; + +ClickTask::ClickTask(AsstCallback callback, void* callback_arg) + : AbstractTask(callback, callback_arg) +{ + m_task_type = TaskType::TaskTypeClick; +} + +bool ClickTask::run() +{ + if (m_control_ptr == NULL) + { + m_callback(AsstMsg::PtrIsNull, json::value(), m_callback_arg); + return false; + } + json::value task_start_json = json::object{ + { "task_type", "ClickTask" }, + { "task_chain", m_task_chain}, + }; + m_callback(AsstMsg::TaskStart, task_start_json, m_callback_arg); + + m_control_ptr->click(m_rect); + return true; +} \ No newline at end of file diff --git a/MeoAssistance/ClickTask.h b/MeoAssistance/ClickTask.h new file mode 100644 index 0000000000..63796fe463 --- /dev/null +++ b/MeoAssistance/ClickTask.h @@ -0,0 +1,18 @@ +#pragma once + +#include "AsstDef.h" +#include "AbstractTask.h" + +namespace asst { + class ClickTask : public AbstractTask + { + public: + ClickTask(AsstCallback callback, void* callback_arg); + virtual ~ClickTask() = default; + + virtual bool run() override; + void set_rect(asst::Rect rect) { m_rect = std::move(rect); }; + protected: + asst::Rect m_rect; + }; +} \ No newline at end of file diff --git a/MeoAssistance/src/Configer.cpp b/MeoAssistance/Configer.cpp similarity index 99% rename from MeoAssistance/src/Configer.cpp rename to MeoAssistance/Configer.cpp index 376ff0d149..ef15fc015c 100644 --- a/MeoAssistance/src/Configer.cpp +++ b/MeoAssistance/Configer.cpp @@ -5,6 +5,7 @@ #include #include + #include "Logger.hpp" using namespace asst; diff --git a/MeoAssistance/include/Configer.h b/MeoAssistance/Configer.h similarity index 95% rename from MeoAssistance/include/Configer.h rename to MeoAssistance/Configer.h index bf4e006cef..7d96999edf 100644 --- a/MeoAssistance/include/Configer.h +++ b/MeoAssistance/Configer.h @@ -39,7 +39,7 @@ namespace asst { Configer(Configer&& rhs) noexcept = default; Configer& operator=(const Configer& rhs) = default; - Configer& operator=(Configer && rhs) noexcept = default; + Configer& operator=(Configer&& rhs) noexcept = default; bool _load(const std::string& filename); }; diff --git a/MeoAssistance/src/Identify.cpp b/MeoAssistance/Identify.cpp similarity index 99% rename from MeoAssistance/src/Identify.cpp rename to MeoAssistance/Identify.cpp index d9d06b35aa..5229e6f1d6 100644 --- a/MeoAssistance/src/Identify.cpp +++ b/MeoAssistance/Identify.cpp @@ -1,14 +1,15 @@ #include "Identify.h" -#include -#include -#include -#include -#include "Logger.hpp" -#include "AsstAux.h" - #include #include +#include +#include + +#include +#include + +#include "Logger.hpp" +#include "AsstAux.h" using namespace asst; using namespace cv; diff --git a/MeoAssistance/include/Identify.h b/MeoAssistance/Identify.h similarity index 100% rename from MeoAssistance/include/Identify.h rename to MeoAssistance/Identify.h diff --git a/MeoAssistance/InfrastConfiger.cpp b/MeoAssistance/InfrastConfiger.cpp index 16e6f01272..630576e52c 100644 --- a/MeoAssistance/InfrastConfiger.cpp +++ b/MeoAssistance/InfrastConfiger.cpp @@ -4,6 +4,7 @@ #include #include + #include "Logger.hpp" using namespace asst; diff --git a/MeoAssistance/include/InfrastConfiger.h b/MeoAssistance/InfrastConfiger.h similarity index 93% rename from MeoAssistance/include/InfrastConfiger.h rename to MeoAssistance/InfrastConfiger.h index 40ada7b9ab..7e031fe7e7 100644 --- a/MeoAssistance/include/InfrastConfiger.h +++ b/MeoAssistance/InfrastConfiger.h @@ -30,7 +30,7 @@ namespace asst { InfrastConfiger(InfrastConfiger&& rhs) noexcept = default; InfrastConfiger& operator=(const InfrastConfiger& rhs) = default; - InfrastConfiger& operator=(InfrastConfiger && rhs) noexcept = default; + InfrastConfiger& operator=(InfrastConfiger&& rhs) noexcept = default; bool _load(const std::string& filename); }; diff --git a/MeoAssistance/InfrastStationTask.cpp b/MeoAssistance/InfrastStationTask.cpp new file mode 100644 index 0000000000..3eb0e698b1 --- /dev/null +++ b/MeoAssistance/InfrastStationTask.cpp @@ -0,0 +1,224 @@ +#include "InfrastStationTask.h" + +#include +#include +#include + +#include + +#include "Configer.h" +#include "InfrastConfiger.h" +#include "WinMacro.h" +#include "Identify.h" +#include "AsstAux.h" + +using namespace asst; + +asst::InfrastStationTask::InfrastStationTask(AsstCallback callback, void* callback_arg) + : OcrAbstractTask(callback, callback_arg) +{ +} + +bool asst::InfrastStationTask::run() +{ + if (m_view_ptr == NULL + || m_identify_ptr == NULL) + { + m_callback(AsstMsg::PtrIsNull, json::value(), m_callback_arg); + return false; + } + + std::vector> all_oper_combs; // еĸԱ + std::unordered_map feature_cond_default; // ؼ֣OCRʶkeyݵȴûvalueݣһȷ + std::unordered_set feature_whatever_default; // ζ + + json::value task_start_json = json::object{ + { "task_type", "InfrastStationTask" }, + { "task_chain", m_task_chain}, + }; + m_callback(AsstMsg::TaskStart, task_start_json, m_callback_arg); + + auto swipe_foo = [&](bool reverse = false) -> bool { + bool ret = false; + if (!reverse) { + ret = m_control_ptr->swipe(m_swipe_begin, m_swipe_end); + } + else { + ret = m_control_ptr->swipe(m_swipe_end, m_swipe_begin); + } + ret &= sleep(m_swipe_delay); + return ret; + }; + std::unordered_map feature_cond = feature_cond_default; + std::unordered_set feature_whatever = feature_whatever_default; + + auto detect_foo = [&](const cv::Mat& image) -> std::vector