mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-19 18:47:55 +08:00
feat: 肉鸽技能识别不准,所以不识别了.jpg
This commit is contained in:
@@ -61,29 +61,16 @@ std::string asst::RoguelikeSkillSelectionImageAnalyzer::name_analyze(const Rect&
|
||||
|
||||
std::vector<asst::Rect> asst::RoguelikeSkillSelectionImageAnalyzer::skill_analyze(const Rect& roi)
|
||||
{
|
||||
const auto task_ptr = Task.get<MatchTaskInfo>("Roguelike1SkillSelectionRect");
|
||||
Rect cor_roi = roi.move(task_ptr->roi);
|
||||
cv::Mat image_roi = m_image(utils::make_rect<cv::Rect>(cor_roi));
|
||||
static const std::vector<std::string> TasksName = {
|
||||
"Roguelike1SkillSelectionMove1",
|
||||
"Roguelike1SkillSelectionMove2",
|
||||
"Roguelike1SkillSelectionMove3"
|
||||
};
|
||||
std::vector<Rect> result;
|
||||
result.reserve(TasksName.size());
|
||||
|
||||
std::vector<Rect> result_vec;
|
||||
|
||||
int skill_width = cor_roi.width / MaxNumOfSkills;
|
||||
for (int x = 0; x + skill_width < cor_roi.width; x += skill_width) {
|
||||
Rect single_skill_rect(x, 0, skill_width, cor_roi.height);
|
||||
cv::Mat skill = image_roi(utils::make_rect<cv::Rect>(single_skill_rect));
|
||||
cv::Mat skill_gray;
|
||||
cv::cvtColor(skill, skill_gray, cv::COLOR_BGR2GRAY);
|
||||
cv::Scalar avg = cv::mean(skill_gray);
|
||||
Log.trace(__FUNCTION__, "gray avg", avg[0]);
|
||||
if (avg[0] < task_ptr->templ_threshold) {
|
||||
break;
|
||||
}
|
||||
Rect result = cor_roi.move(single_skill_rect.move(task_ptr->rect_move));
|
||||
#ifdef ASST_DEBUG
|
||||
cv::rectangle(m_image_draw, utils::make_rect<cv::Rect>(result), cv::Scalar(0, 255, 0), 3);
|
||||
#endif
|
||||
result_vec.emplace_back(result);
|
||||
for (const std::string& task_name : TasksName) {
|
||||
result.emplace_back(roi.move(Task.get(task_name)->rect_move));
|
||||
}
|
||||
|
||||
return result_vec;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -36,27 +36,20 @@ bool asst::RoguelikeSkillSelectionTaskPlugin::_run()
|
||||
|
||||
const auto& rg_src = Resrc.roguelike_recruit();
|
||||
for (const auto& [name, skill_vec] : analyzer.get_result()) {
|
||||
Log.info(__FUNCTION__, name, " skill size:", skill_vec.size());
|
||||
if (name.empty()) {
|
||||
continue;
|
||||
}
|
||||
const auto& oper_info = rg_src.get_oper_info(name);
|
||||
int index = 0;
|
||||
auto usage = BattleSkillUsage::Possibly;
|
||||
if (skill_vec.size() >= oper_info.skill) {
|
||||
index = oper_info.skill - 1;
|
||||
usage = oper_info.skill_usage;
|
||||
}
|
||||
else if (skill_vec.size() >= oper_info.alternate_skill) {
|
||||
index = oper_info.alternate_skill - 1;
|
||||
usage = oper_info.alternate_skill_usage;
|
||||
}
|
||||
|
||||
if (index >= 0) {
|
||||
Log.info(__FUNCTION__, name, " select skill:", index + 1);
|
||||
m_ctrler->click(skill_vec.at(index));
|
||||
if (oper_info.alternate_skill > 0) {
|
||||
Log.info(__FUNCTION__, name, " select alternate skill:", oper_info.alternate_skill);
|
||||
m_ctrler->click(skill_vec.at(oper_info.alternate_skill - 1));
|
||||
}
|
||||
m_status->set_number("RoguelikeSkillUsage-" + name, static_cast<int>(usage));
|
||||
if (oper_info.skill > 0) {
|
||||
Log.info(__FUNCTION__, name, " select main skill:", oper_info.skill);
|
||||
m_ctrler->click(skill_vec.at(oper_info.skill - 1));
|
||||
}
|
||||
m_status->set_number("RoguelikeSkillUsage-" + name, static_cast<int>(oper_info.skill_usage));
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user