mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-16 09:50:40 +08:00
59 lines
1.4 KiB
C++
59 lines
1.4 KiB
C++
#include "BestMatcher.h"
|
|
|
|
#include "Utils/NoWarningCV.h"
|
|
|
|
#include "Config/TaskData.h"
|
|
#include "Config/TemplResource.h"
|
|
#include "Matcher.h"
|
|
#include "Utils/Logger.hpp"
|
|
#include "Utils/StringMisc.hpp"
|
|
|
|
using namespace asst;
|
|
|
|
void BestMatcher::append_templ(std::string name, const cv::Mat& templ)
|
|
{
|
|
m_templs.emplace_back(TemplInfo { std::move(name), templ });
|
|
}
|
|
|
|
BestMatcher::ResultOpt BestMatcher::analyze() const
|
|
{
|
|
Matcher match_analyzer(m_image, m_roi);
|
|
match_analyzer.set_params(m_params);
|
|
#ifdef ASST_DEBUG
|
|
match_analyzer.set_log_tracing(m_log_tracing);
|
|
#else
|
|
match_analyzer.set_log_tracing(false);
|
|
#endif
|
|
|
|
Result result;
|
|
for (const auto& templ_info : m_templs) {
|
|
auto&& [name, templ] = templ_info;
|
|
|
|
if (templ.empty()) {
|
|
match_analyzer.set_templ(name);
|
|
}
|
|
else {
|
|
match_analyzer.set_templ(templ);
|
|
}
|
|
|
|
const auto& cur_opt = match_analyzer.analyze();
|
|
if (!cur_opt) {
|
|
continue;
|
|
}
|
|
const auto& cur_matched = cur_opt.value();
|
|
if (result.score < cur_matched.score) {
|
|
result = Result { .rect = cur_matched.rect, .score = cur_matched.score, .templ_info = templ_info };
|
|
}
|
|
}
|
|
|
|
if (!result.score) {
|
|
return std::nullopt;
|
|
}
|
|
|
|
if (m_log_tracing) {
|
|
Log.trace("The best match is", result.to_string(), result.templ_info.name);
|
|
}
|
|
m_result = std::move(result);
|
|
return m_result;
|
|
}
|