feat: 肉鸽技能识别不准,所以不识别了.jpg

This commit is contained in:
MistEO
2022-08-01 23:29:32 +08:00
parent dbc4ee7316
commit ecfa2753bf
3 changed files with 43 additions and 53 deletions

View File

@@ -7481,22 +7481,32 @@
22
]
},
"Roguelike1SkillSelectionRect": {
"template": "empty.png",
"roi": [
170,
2,
170,
2
],
"Roguelike1SkillSelectionMove1": {
"algorithm": "JustReturn",
"rectMove": [
5,
-45,
45,
45
],
"templThreshold": 60,
"Doc": "这里的阈值作为平均灰度值(亮度)阈值使用"
180,
-40,
40,
30
]
},
"Roguelike1SkillSelectionMove2": {
"algorithm": "JustReturn",
"rectMove": [
180,
-40,
30,
30
]
},
"Roguelike1SkillSelectionMove3": {
"algorithm": "JustReturn",
"rectMove": [
300,
-40,
30,
30
]
},
"Roguelike1StartAction": {
"template": "Roguelike1StartAction.png",

View File

@@ -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;
}

View File

@@ -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;