mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-15 17:30:27 +08:00
opt.优化干员费用及职业识别
This commit is contained in:
@@ -3036,8 +3036,14 @@
|
||||
},
|
||||
"BattleOperAvailable": {
|
||||
"template": "empty.png",
|
||||
"specialThreshold": 100,
|
||||
"specialThreshold_Doc": "用于做V通道平均值阈值"
|
||||
"specialThreshold": 110,
|
||||
"specialThreshold_Doc": "用于做V通道平均值阈值",
|
||||
"rectMove": [
|
||||
-41,
|
||||
6,
|
||||
31,
|
||||
25
|
||||
]
|
||||
},
|
||||
"BattleOperRoleRange": {
|
||||
"algorithm": "JustReturn",
|
||||
@@ -3064,6 +3070,8 @@
|
||||
},
|
||||
"BattleOperRoleWarrior": {
|
||||
},
|
||||
"BattleOperRoleDrone": {
|
||||
},
|
||||
"BattleOperCostRange": {
|
||||
"algorithm": "hash",
|
||||
"hash": [
|
||||
@@ -3123,7 +3131,8 @@
|
||||
"BattleOperCost3": {
|
||||
"algorithm": "hash",
|
||||
"hash": [
|
||||
"3ffe7ffffc3ff81fe01f001f03fe07fc07fe003f001fe01fe01ff83fffff7ffe"
|
||||
"3ffe7ffffc3ff81fe01f001f03fe07fc07fe003f001fe01fe01ff83fffff7ffe",
|
||||
"07f01ffe700e700700070007000c0078003c000700070007e007700e1e7e0ff0"
|
||||
]
|
||||
},
|
||||
"BattleOperCost4": {
|
||||
@@ -3135,7 +3144,8 @@
|
||||
"BattleOperCost5": {
|
||||
"algorithm": "hash",
|
||||
"hash": [
|
||||
"3ffe7c007c0078007ff87ffe7ffe7c3f781f0007e007f81ffc1fffff7ffe3ffc"
|
||||
"3ffe7c007c0078007ff87ffe7ffe7c3f781f0007e007f81ffc1fffff7ffe3ffc",
|
||||
"3ffe38003800780070007ff87ffe703e000f000fc00ff81ffc3f7ffe3ffc07e0"
|
||||
]
|
||||
},
|
||||
"BattleOperCost6": {
|
||||
|
||||
BIN
resource/template/BattleOperRoleDrone.png
Normal file
BIN
resource/template/BattleOperRoleDrone.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.8 KiB |
@@ -18,6 +18,8 @@ const std::vector<asst::BattleImageAnalyzer::Oper>& asst::BattleImageAnalyzer::g
|
||||
|
||||
bool asst::BattleImageAnalyzer::opers_analyze()
|
||||
{
|
||||
LogTraceFunction;
|
||||
|
||||
MultiMatchImageAnalyzer flags_analyzer(m_image);
|
||||
flags_analyzer.set_task_info("BattleOpersFlag");
|
||||
if (!flags_analyzer.analyze()) {
|
||||
@@ -28,11 +30,14 @@ bool asst::BattleImageAnalyzer::opers_analyze()
|
||||
const auto click_move = Task.get("BattleOperClickRange")->rect_move;
|
||||
const auto role_move = Task.get("BattleOperRoleRange")->rect_move;
|
||||
const auto cost_move = Task.get("BattleOperCostRange")->rect_move;
|
||||
const auto avlb_move = Task.get("BattleOperAvailable")->rect_move;
|
||||
|
||||
for (const MatchRect& flag_mrect : flags_analyzer.get_result()) {
|
||||
Oper oper;
|
||||
oper.rect = flag_mrect.rect.move(click_move);
|
||||
oper.available = oper_available_analyze(oper.rect);
|
||||
|
||||
Rect available_rect = flag_mrect.rect.move(avlb_move);
|
||||
oper.available = oper_available_analyze(available_rect);
|
||||
|
||||
#ifdef ASST_DEBUG
|
||||
if (oper.available) {
|
||||
@@ -65,12 +70,13 @@ asst::BattleImageAnalyzer::Role asst::BattleImageAnalyzer::oper_role_analyze(con
|
||||
{ Role::Special, "Special" },
|
||||
{ Role::Support, "Support" },
|
||||
{ Role::Tank, "Tank" },
|
||||
{ Role::Warrior, "Warrior" }
|
||||
{ Role::Warrior, "Warrior" },
|
||||
{ Role::Drone, "Drone" }
|
||||
};
|
||||
|
||||
MatchImageAnalyzer role_analyzer(m_image);
|
||||
|
||||
Role result = Role::Invaild;
|
||||
Role result = Role::Unknown;
|
||||
double max_score = 0;
|
||||
for (auto&& [role, role_name] : RolesName) {
|
||||
role_analyzer.set_task_info("BattleOperRole" + role_name);
|
||||
@@ -86,7 +92,15 @@ asst::BattleImageAnalyzer::Role asst::BattleImageAnalyzer::oper_role_analyze(con
|
||||
}
|
||||
|
||||
#ifdef ASST_DEBUG
|
||||
cv::putText(m_image_draw, RolesName.at(result), cv::Point(roi.x, roi.y - 5), 1, 1, cv::Scalar(0, 255, 255));
|
||||
std::string role_name;
|
||||
if (auto iter = RolesName.find(result);
|
||||
iter == RolesName.cend()) {
|
||||
role_name = "Unknown";
|
||||
}
|
||||
else {
|
||||
role_name = iter->second;
|
||||
}
|
||||
cv::putText(m_image_draw, role_name, cv::Point(roi.x, roi.y - 5), 1, 1, cv::Scalar(0, 255, 255));
|
||||
#endif
|
||||
|
||||
return result;
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace asst
|
||||
public:
|
||||
enum class Role
|
||||
{
|
||||
Invaild,
|
||||
Unknown,
|
||||
Caster,
|
||||
Medic,
|
||||
Pioneer,
|
||||
@@ -16,12 +16,13 @@ namespace asst
|
||||
Special,
|
||||
Support,
|
||||
Tank,
|
||||
Warrior
|
||||
Warrior,
|
||||
Drone
|
||||
};
|
||||
struct Oper
|
||||
{
|
||||
int cost = 0;
|
||||
Role role = Role::Invaild;
|
||||
Role role = Role::Unknown;
|
||||
bool available = false;
|
||||
Rect rect;
|
||||
};
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "HashImageAnalyzer.h"
|
||||
|
||||
#include "AsstUtils.hpp"
|
||||
#include "Logger.hpp"
|
||||
|
||||
bool asst::HashImageAnalyzer::analyze()
|
||||
{
|
||||
@@ -31,11 +32,13 @@ bool asst::HashImageAnalyzer::analyze()
|
||||
to_hash = bound_bin(to_hash);
|
||||
}
|
||||
std::string hash_result = shash(to_hash);
|
||||
Log.trace(hash_result);
|
||||
|
||||
int min_dist = INT_MAX;
|
||||
std::string cur_min_dist_name;
|
||||
for (auto&& [name, templ] : m_hash_templates) {
|
||||
int hm = hamming(hash_result, templ);
|
||||
Log.trace(name, "dist:", hm);
|
||||
if (hm < min_dist) {
|
||||
cur_min_dist_name = name;
|
||||
min_dist = hm;
|
||||
|
||||
Reference in New Issue
Block a user