mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-17 01:59:33 +08:00
43 lines
1.3 KiB
C++
43 lines
1.3 KiB
C++
#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;
|
|
} |