mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-15 17:30:27 +08:00
feat.完成基建干员笑脸识别
This commit is contained in:
@@ -631,6 +631,16 @@
|
||||
"ReturnToInfrast"
|
||||
]
|
||||
},
|
||||
"Return": {
|
||||
"algorithm": "justReturn",
|
||||
"action": "clickRect",
|
||||
"specificRect": [
|
||||
20,
|
||||
20,
|
||||
135,
|
||||
35
|
||||
]
|
||||
},
|
||||
"EnterInfrast": {
|
||||
"templThreshold": 0.85,
|
||||
"histThreshold": 0.85,
|
||||
@@ -810,5 +820,38 @@
|
||||
"action": "stop",
|
||||
"cache": false,
|
||||
"next": []
|
||||
},
|
||||
"InfrastSkillsUpper": {
|
||||
"algorithm": "justReturn",
|
||||
"roi": [
|
||||
400,
|
||||
250,
|
||||
880,
|
||||
110
|
||||
]
|
||||
},
|
||||
"InfrastSkillsLower": {
|
||||
"algorithm": "justReturn",
|
||||
"roi": [
|
||||
400,
|
||||
530,
|
||||
880,
|
||||
110
|
||||
]
|
||||
},
|
||||
"InfrastSmileyOnRest": {
|
||||
"template": "SmileyOnRest.png",
|
||||
"maskRange": [100, 255],
|
||||
"templThreshold": 0.8
|
||||
},
|
||||
"InfrastSmileyOnWork": {
|
||||
"template": "SmileyOnWork.png",
|
||||
"maskRange": [100, 255],
|
||||
"templThreshold": 0.8
|
||||
},
|
||||
"InfrastSmileyOnDistract": {
|
||||
"template": "SmileyOnDistract.png",
|
||||
"maskRange": [100, 255],
|
||||
"templThreshold": 0.8
|
||||
}
|
||||
}
|
||||
BIN
resource/template/SmileyOnDistract.png
Normal file
BIN
resource/template/SmileyOnDistract.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 905 B |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 936 B After Width: | Height: | Size: 936 B |
@@ -9,6 +9,7 @@
|
||||
#include "Controller.h"
|
||||
#include "AsstUtils.hpp"
|
||||
#include "Logger.hpp"
|
||||
#include "Resource.h"
|
||||
|
||||
using namespace asst;
|
||||
|
||||
@@ -75,6 +76,11 @@ bool asst::AbstractTask::click_return_button()
|
||||
{
|
||||
LogTraceFunction;
|
||||
|
||||
const static Rect ConfirmButtonRect(20, 20, 135, 35);
|
||||
return ctrler.click(ConfirmButtonRect);
|
||||
static Rect ReturnButtonRect;
|
||||
if (ReturnButtonRect.empty()) {
|
||||
const static auto return_task_ptr = std::dynamic_pointer_cast<MatchTaskInfo>(
|
||||
resource.task().task_ptr("Return"));
|
||||
ReturnButtonRect = return_task_ptr->specific_rect;
|
||||
}
|
||||
return ctrler.click(ReturnButtonRect);
|
||||
}
|
||||
@@ -11,6 +11,12 @@
|
||||
#include "AsstUtils.hpp"
|
||||
#include "Resource.h"
|
||||
|
||||
#include "ProcessTask.h"
|
||||
#include "RecruitTask.h"
|
||||
#include "ScreenCaptureTask.h"
|
||||
#include "CreditShoppingTask.h"
|
||||
#include "InfrastShiftTask.h"
|
||||
|
||||
using namespace asst;
|
||||
|
||||
Assistance::Assistance(AsstCallback callback, void* callback_arg)
|
||||
@@ -225,7 +231,7 @@ bool Assistance::start_debug_task()
|
||||
//}
|
||||
{
|
||||
constexpr static const char* DebugTaskChain = "Debug";
|
||||
auto shift_task_ptr = std::make_shared<CreditShoppingTask>(task_callback, (void*)this);
|
||||
auto shift_task_ptr = std::make_shared<InfrastShiftTask>(task_callback, (void*)this);
|
||||
shift_task_ptr->set_task_chain(DebugTaskChain);
|
||||
m_tasks_deque.emplace_back(shift_task_ptr);
|
||||
}
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
#include <deque>
|
||||
|
||||
#include "AsstDef.h"
|
||||
#include "Task.h"
|
||||
#include "AsstMsg.h"
|
||||
#include "AbstractTask.h"
|
||||
|
||||
namespace cv {
|
||||
class Mat;
|
||||
|
||||
23
src/MeoAssistance/InfrastShiftTask.cpp
Normal file
23
src/MeoAssistance/InfrastShiftTask.cpp
Normal file
@@ -0,0 +1,23 @@
|
||||
#include "InfrastShiftTask.h"
|
||||
|
||||
#include "Resource.h"
|
||||
#include "Controller.h"
|
||||
#include "InfrastSkillsImageAnalyzer.h"
|
||||
|
||||
bool asst::InfrastShiftTask::run()
|
||||
{
|
||||
json::value task_start_json = json::object{
|
||||
{ "task_type", "InfrastShiftTask" },
|
||||
{ "task_chain", m_task_chain}
|
||||
};
|
||||
m_callback(AsstMsg::TaskStart, task_start_json, m_callback_arg);
|
||||
|
||||
const auto& image = ctrler.get_image();
|
||||
|
||||
InfrastSkillsImageAnalyzer skills_analyzer(image);
|
||||
|
||||
if (skills_analyzer.analyze()) {
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
14
src/MeoAssistance/InfrastShiftTask.h
Normal file
14
src/MeoAssistance/InfrastShiftTask.h
Normal file
@@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
#include "AbstractTask.h"
|
||||
|
||||
namespace asst {
|
||||
class InfrastShiftTask : public AbstractTask
|
||||
{
|
||||
public:
|
||||
using AbstractTask::AbstractTask;
|
||||
virtual ~InfrastShiftTask() = default;
|
||||
virtual bool run() override;
|
||||
protected:
|
||||
};
|
||||
}
|
||||
28
src/MeoAssistance/InfrastSkillsImageAnalyzer.cpp
Normal file
28
src/MeoAssistance/InfrastSkillsImageAnalyzer.cpp
Normal file
@@ -0,0 +1,28 @@
|
||||
#include "InfrastSkillsImageAnalyzer.h"
|
||||
|
||||
#include "Resource.h"
|
||||
#include "InfrastSmileyImageAnalyzer.h"
|
||||
|
||||
bool asst::InfrastSkillsImageAnalyzer::analyze()
|
||||
{
|
||||
const auto upper_task_ptr = resource.task().task_ptr("InfrastSkillsUpper");
|
||||
const auto lower_task_ptr = resource.task().task_ptr("InfrastSkillsLower");
|
||||
|
||||
bool upper_ret = skills_roi_analyze(upper_task_ptr->roi);
|
||||
bool lower_ret = skills_roi_analyze(lower_task_ptr->roi);
|
||||
|
||||
return upper_ret && lower_ret;
|
||||
}
|
||||
|
||||
bool asst::InfrastSkillsImageAnalyzer::skills_roi_analyze(const Rect& roi)
|
||||
{
|
||||
InfrastSmileyImageAnalyzer smiley_analyzer(m_image, roi);
|
||||
|
||||
if (!smiley_analyzer.analyze()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const auto& smiley_res = smiley_analyzer.get_result();
|
||||
|
||||
return true;
|
||||
}
|
||||
14
src/MeoAssistance/InfrastSkillsImageAnalyzer.h
Normal file
14
src/MeoAssistance/InfrastSkillsImageAnalyzer.h
Normal file
@@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
#include "AbstractImageAnalyzer.h"
|
||||
|
||||
namespace asst {
|
||||
class InfrastSkillsImageAnalyzer : public AbstractImageAnalyzer
|
||||
{
|
||||
public:
|
||||
using AbstractImageAnalyzer::AbstractImageAnalyzer;
|
||||
virtual ~InfrastSkillsImageAnalyzer() = default;
|
||||
virtual bool analyze() override;
|
||||
protected:
|
||||
bool skills_roi_analyze(const Rect& roi);
|
||||
};
|
||||
}
|
||||
43
src/MeoAssistance/InfrastSmileyImageAnalyzer.cpp
Normal file
43
src/MeoAssistance/InfrastSmileyImageAnalyzer.cpp
Normal file
@@ -0,0 +1,43 @@
|
||||
#include "InfrastSmileyImageAnalyzer.h"
|
||||
|
||||
#include "Resource.h"
|
||||
#include "MultiMatchImageAnalyzer.h"
|
||||
#include "AsstUtils.hpp"
|
||||
|
||||
bool asst::InfrastSmileyImageAnalyzer::analyze()
|
||||
{
|
||||
const static std::unordered_map<SmileyType, std::string> smiley_map =
|
||||
{
|
||||
{SmileyType::Rest, "InfrastSmileyOnRest"},
|
||||
{SmileyType::Work, "InfrastSmileyOnWork"},
|
||||
{SmileyType::Distract, "InfrastSmileyOnDistract"}
|
||||
};
|
||||
|
||||
m_result.clear();
|
||||
|
||||
#ifdef LOG_TRACE
|
||||
cv::Mat image_draw = m_image.clone();
|
||||
#endif
|
||||
|
||||
MultiMatchImageAnalyzer mm_analyzer(m_image, m_roi);
|
||||
|
||||
decltype(m_result) temp_result;
|
||||
for (const auto& [type, task_name] : smiley_map) {
|
||||
const auto task_ptr = std::dynamic_pointer_cast<MatchTaskInfo>(resource.task().task_ptr(task_name));
|
||||
mm_analyzer.set_templ_name(task_ptr->templ_name);
|
||||
mm_analyzer.set_threshold(task_ptr->templ_threshold);
|
||||
mm_analyzer.set_mask_range(task_ptr->mask_range);
|
||||
if (!mm_analyzer.analyze()) {
|
||||
return false;
|
||||
}
|
||||
auto& res = mm_analyzer.get_result();
|
||||
for (const MatchRect& mr : res) {
|
||||
temp_result.emplace_back(SmileyInfo{ type, mr.rect });
|
||||
#ifdef LOG_TRACE
|
||||
cv::rectangle(image_draw, utils::make_rect<cv::Rect>(mr.rect), cv::Scalar(0, 0, 255), 2);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
m_result = std::move(temp_result);
|
||||
return true;
|
||||
}
|
||||
32
src/MeoAssistance/InfrastSmileyImageAnalyzer.h
Normal file
32
src/MeoAssistance/InfrastSmileyImageAnalyzer.h
Normal file
@@ -0,0 +1,32 @@
|
||||
#pragma once
|
||||
#include "AbstractImageAnalyzer.h"
|
||||
|
||||
#include "AsstDef.h"
|
||||
|
||||
namespace asst {
|
||||
enum class SmileyType {
|
||||
Invalid = -1,
|
||||
Rest, // 休息完成,绿色笑脸
|
||||
Work, // 工作中,黄色笑脸
|
||||
Distract // 注意力涣散,红色哭脸
|
||||
};
|
||||
struct SmileyInfo {
|
||||
SmileyType type;
|
||||
Rect rect;
|
||||
};
|
||||
|
||||
class InfrastSmileyImageAnalyzer : public AbstractImageAnalyzer
|
||||
{
|
||||
public:
|
||||
using AbstractImageAnalyzer::AbstractImageAnalyzer;
|
||||
virtual ~InfrastSmileyImageAnalyzer() = default;
|
||||
|
||||
virtual bool analyze() override;
|
||||
|
||||
const std::vector<SmileyInfo>& get_result() const noexcept {
|
||||
return m_result;
|
||||
}
|
||||
protected:
|
||||
std::vector<SmileyInfo> m_result;
|
||||
};
|
||||
}
|
||||
@@ -24,6 +24,9 @@
|
||||
<ClInclude Include="CreditShopImageAnalyzer.h" />
|
||||
<ClInclude Include="GeneralConfiger.h" />
|
||||
<ClInclude Include="CreditShoppingTask.h" />
|
||||
<ClInclude Include="InfrastShiftTask.h" />
|
||||
<ClInclude Include="InfrastSkillsImageAnalyzer.h" />
|
||||
<ClInclude Include="InfrastSmileyImageAnalyzer.h" />
|
||||
<ClInclude Include="MultiMatchImageAnalyzer.h" />
|
||||
<ClInclude Include="OcrImageAnalyzer.h" />
|
||||
<ClInclude Include="OcrPack.h" />
|
||||
@@ -38,7 +41,6 @@
|
||||
<ClInclude Include="ProcessTaskImageAnalyzer.h" />
|
||||
<ClInclude Include="RecruitConfiger.h" />
|
||||
<ClInclude Include="ScreenCaptureTask.h" />
|
||||
<ClInclude Include="Task.h" />
|
||||
<ClInclude Include="TaskData.h" />
|
||||
<ClInclude Include="MatchImageAnalyzer.h" />
|
||||
<ClInclude Include="TemplResource.h" />
|
||||
@@ -53,6 +55,9 @@
|
||||
<ClCompile Include="AbstractTask.cpp" />
|
||||
<ClCompile Include="CreditShopImageAnalyzer.cpp" />
|
||||
<ClCompile Include="CreditShoppingTask.cpp" />
|
||||
<ClCompile Include="InfrastShiftTask.cpp" />
|
||||
<ClCompile Include="InfrastSkillsImageAnalyzer.cpp" />
|
||||
<ClCompile Include="InfrastSmileyImageAnalyzer.cpp" />
|
||||
<ClCompile Include="MultiMatchImageAnalyzer.cpp" />
|
||||
<ClCompile Include="OcrImageAnalyzer.cpp" />
|
||||
<ClCompile Include="OcrPack.cpp" />
|
||||
|
||||
@@ -43,6 +43,18 @@
|
||||
<Filter Include="源文件\Utils">
|
||||
<UniqueIdentifier>{a5c43813-70af-4b0e-94ac-9ddecc2e4a3c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="源文件\ImageAnalyzer\Infrast">
|
||||
<UniqueIdentifier>{a37e0b23-e8f8-499c-adf5-9990277e9ffe}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="源文件\ImageAnalyzer\General">
|
||||
<UniqueIdentifier>{51165426-1842-491a-b5d5-9d26c59facdd}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="头文件\ImageAnalyzer\General">
|
||||
<UniqueIdentifier>{c600668a-0d70-4694-b1e5-6a78cffd0b1a}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="头文件\ImageAnalyzer\Infrast">
|
||||
<UniqueIdentifier>{d173e449-880b-4064-bbab-97007e3d090b}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="Controller.h">
|
||||
@@ -87,9 +99,6 @@
|
||||
<ClInclude Include="AsstMsg.h">
|
||||
<Filter>头文件\Utils</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Task.h">
|
||||
<Filter>头文件\Task</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="AbstractConfiger.h">
|
||||
<Filter>头文件\Resource</Filter>
|
||||
</ClInclude>
|
||||
@@ -111,9 +120,6 @@
|
||||
<ClInclude Include="ItemConfiger.h">
|
||||
<Filter>头文件\Resource</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="AbstractImageAnalyzer.h">
|
||||
<Filter>头文件\ImageAnalyzer</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="ProcessTaskImageAnalyzer.h">
|
||||
<Filter>头文件\ImageAnalyzer</Filter>
|
||||
</ClInclude>
|
||||
@@ -129,12 +135,6 @@
|
||||
<ClInclude Include="PenguinPack.h">
|
||||
<Filter>头文件\Resource</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="OcrImageAnalyzer.h">
|
||||
<Filter>头文件\ImageAnalyzer</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="MatchImageAnalyzer.h">
|
||||
<Filter>头文件\ImageAnalyzer</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="RecruitImageAnalyzer.h">
|
||||
<Filter>头文件\ImageAnalyzer</Filter>
|
||||
</ClInclude>
|
||||
@@ -144,8 +144,26 @@
|
||||
<ClInclude Include="CreditShopImageAnalyzer.h">
|
||||
<Filter>头文件\ImageAnalyzer</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="InfrastShiftTask.h">
|
||||
<Filter>头文件\Task</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="AbstractImageAnalyzer.h">
|
||||
<Filter>头文件\ImageAnalyzer\General</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="MatchImageAnalyzer.h">
|
||||
<Filter>头文件\ImageAnalyzer\General</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="MultiMatchImageAnalyzer.h">
|
||||
<Filter>头文件\ImageAnalyzer</Filter>
|
||||
<Filter>头文件\ImageAnalyzer\General</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="OcrImageAnalyzer.h">
|
||||
<Filter>头文件\ImageAnalyzer\General</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="InfrastSkillsImageAnalyzer.h">
|
||||
<Filter>头文件\ImageAnalyzer\Infrast</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="InfrastSmileyImageAnalyzer.h">
|
||||
<Filter>头文件\ImageAnalyzer\Infrast</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
@@ -194,9 +212,6 @@
|
||||
<ClCompile Include="ItemConfiger.cpp">
|
||||
<Filter>源文件\Resource</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="AbstractImageAnalyzer.cpp">
|
||||
<Filter>源文件\ImageAnalyzer</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="ProcessTaskImageAnalyzer.cpp">
|
||||
<Filter>源文件\ImageAnalyzer</Filter>
|
||||
</ClCompile>
|
||||
@@ -212,12 +227,6 @@
|
||||
<ClCompile Include="PenguinPack.cpp">
|
||||
<Filter>源文件\Resource</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="OcrImageAnalyzer.cpp">
|
||||
<Filter>源文件\ImageAnalyzer</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="MatchImageAnalyzer.cpp">
|
||||
<Filter>源文件\ImageAnalyzer</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="RecruitImageAnalyzer.cpp">
|
||||
<Filter>源文件\ImageAnalyzer</Filter>
|
||||
</ClCompile>
|
||||
@@ -227,8 +236,26 @@
|
||||
<ClCompile Include="CreditShopImageAnalyzer.cpp">
|
||||
<Filter>源文件\ImageAnalyzer</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="InfrastShiftTask.cpp">
|
||||
<Filter>源文件\Task</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="InfrastSkillsImageAnalyzer.cpp">
|
||||
<Filter>源文件\ImageAnalyzer\Infrast</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="InfrastSmileyImageAnalyzer.cpp">
|
||||
<Filter>源文件\ImageAnalyzer\Infrast</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="AbstractImageAnalyzer.cpp">
|
||||
<Filter>源文件\ImageAnalyzer\General</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="MatchImageAnalyzer.cpp">
|
||||
<Filter>源文件\ImageAnalyzer\General</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="MultiMatchImageAnalyzer.cpp">
|
||||
<Filter>源文件\ImageAnalyzer</Filter>
|
||||
<Filter>源文件\ImageAnalyzer\General</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="OcrImageAnalyzer.cpp">
|
||||
<Filter>源文件\ImageAnalyzer\General</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "ProcessTask.h"
|
||||
#include "RecruitTask.h"
|
||||
#include "ScreenCaptureTask.h"
|
||||
#include "CreditShoppingTask.h"
|
||||
@@ -18,11 +18,11 @@ int main(int argc, char** argv)
|
||||
while (ch != 'q') {
|
||||
//AsstStartSanity(ptr);
|
||||
//AsstStartVisit(ptr, true);
|
||||
{
|
||||
const int required[] = { 3, 4, 5, 6 };
|
||||
AsstStartRecruiting(ptr, required, sizeof(required) / sizeof(int), true);
|
||||
}
|
||||
//AsstStartDebugTask(ptr);
|
||||
//{
|
||||
// const int required[] = { 3, 4, 5, 6 };
|
||||
// AsstStartRecruiting(ptr, required, sizeof(required) / sizeof(int), true);
|
||||
//}
|
||||
AsstStartDebugTask(ptr);
|
||||
|
||||
ch = getchar();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user