refactor: use MatchTemplate instead of OcrDetect to recognise the current zone

This commit is contained in:
Weiyou Wang
2024-06-10 18:51:22 +10:00
parent 60d58bf93e
commit 7ef398bd54
14 changed files with 49 additions and 185 deletions

View File

@@ -7031,57 +7031,6 @@
72
]
},
"Sami@Roguelike@CheckCollapsalParadigms_onStage": {
"algorithm": "OcrDetect",
"action": "DoNothing",
"cache": false,
"text": [
"初霜湖泽",
"密静林地",
"昧明冻土",
"积冰岩骸",
"无瑕花园",
"远见之构",
"永恒之尘",
"深埋迷境"
],
"ocrReplace": [
[
"Brisk Marshalands",
"初霜湖泽"
],
[
"Placid Forests",
"密静林地"
],
[
"Dawning Frostbounds",
"昧明冻土"
],
[
"Gelid Rockshelves",
"积冰岩骸"
],
[
"Immaculate Garden",
"无瑕花园"
],
[
"Clayrovant Carcass",
"远见之构"
],
[
"Secluded Passage",
"深埋迷境"
]
],
"roi": [
530,
30,
240,
60
]
},
"Sami@Roguelike@CheckCollapsalParadigms_loading": {
"algorithm": "OcrDetect",
"action": "DoNothing",

View File

@@ -8266,57 +8266,6 @@
"深埋の迷境"
]
},
"Sami@Roguelike@CheckCollapsalParadigms_onStage": {
"algorithm": "OcrDetect",
"action": "DoNothing",
"cache": false,
"text": [
"初霜湖泽",
"密静林地",
"昧明冻土",
"积冰岩骸",
"无瑕花园",
"远见之构",
"永恒之尘",
"深埋迷境"
],
"ocrReplace": [
[
"初霜の湖沼",
"初霜湖泽"
],
[
"静謐な森",
"密静林地"
],
[
"夜明けの凍",
"昧明冻土"
],
[
"凍てつく岩骸",
"积冰岩骸"
],
[
"汚れなき花園",
"无瑕花园"
],
[
"遠見の巨構",
"远见之构"
],
[
"深埋の迷境",
"深埋迷境"
]
],
"roi": [
530,
30,
240,
60
]
},
"Sami@Roguelike@CheckCollapsalParadigms_loading": {
"algorithm": "OcrDetect",
"action": "DoNothing",

View File

@@ -6874,57 +6874,6 @@
"숨겨진비경"
]
},
"Sami@Roguelike@CheckCollapsalParadigms_onStage": {
"algorithm": "OcrDetect",
"action": "DoNothing",
"cache": false,
"text": [
"初霜湖泽",
"密静林地",
"昧明冻土",
"积冰岩骸",
"无瑕花园",
"远见之构",
"永恒之尘",
"深埋迷境"
],
"ocrReplace": [
[
"은빛의호수",
"初霜湖泽"
],
[
"고요한숲",
"密静林地"
],
[
"여명의툰드라",
"昧明冻土"
],
[
"얼어붙은바위",
"积冰岩骸"
],
[
"무결점의정원",
"无瑕花园"
],
[
"예견의구상",
"远见之构"
],
[
"숨겨진비경",
"深埋迷境"
]
],
"roi": [
530,
30,
240,
60
]
},
"Sami@Roguelike@CheckCollapsalParadigms_loading": {
"algorithm": "OcrDetect",
"action": "DoNothing",

View File

@@ -15253,24 +15253,25 @@
]
},
"Sami@Roguelike@CheckCollapsalParadigms_onStage": {
"algorithm": "OcrDetect",
"algorithm": "MatchTemplate",
"template": [
"Sami@Roguelike@OnStage_1",
"Sami@Roguelike@OnStage_2",
"Sami@Roguelike@OnStage_3",
"Sami@Roguelike@OnStage_4",
"Sami@Roguelike@OnStage_5",
"Sami@Roguelike@OnStage_6",
"Sami@Roguelike@OnStage_7",
"Sami@Roguelike@OnStage_0"
],
"templThreshold": 0.96,
"action": "DoNothing",
"cache": false,
"text": [
"初霜湖泽",
"密静林地",
"昧明冻土",
"积冰岩骸",
"无瑕花园",
"远见之构",
"永恒之尘",
"深埋迷境"
],
"roi": [
530,
30,
240,
60
590,
45,
45,
35
]
},
"Sami@Roguelike@CheckCollapsalParadigms_loading": {

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -6,6 +6,7 @@
#include "Task/ProcessTask.h"
#include "Utils/Logger.hpp"
#include "Vision/OCRer.h"
#include "Vision/Matcher.h"
#include <algorithm>
@@ -39,7 +40,7 @@ bool asst::RoguelikeCollapsalParadigmTaskPlugin::verify(const AsstMsg msg, const
}
if(msg == AsstMsg::SubTaskStart && m_panel_triggers.find(task_name) != m_panel_triggers.end()) {
if (new_level()) {
if (new_zone()) {
m_need_check_panel = true;
m_verification_check = false;
}
@@ -287,7 +288,8 @@ void asst::RoguelikeCollapsalParadigmTaskPlugin::exit_then_restart()
.run();
}
void asst::RoguelikeCollapsalParadigmTaskPlugin::clp_pd_callback(std::string cur, int deepen_or_weaken, std::string prev) {
void asst::RoguelikeCollapsalParadigmTaskPlugin::clp_pd_callback(std::string cur, int deepen_or_weaken, std::string prev)
{
callback(AsstMsg::SubTaskExtraInfo, json::object {
{ "what", "RoguelikeCollapsalParadigms" },
{ "details", json::object {
@@ -304,7 +306,8 @@ void asst::RoguelikeCollapsalParadigmTaskPlugin::toggle_collapsal_status_panel()
sleep(500);
}
void asst::RoguelikeCollapsalParadigmTaskPlugin::wait_for_loading(unsigned int millisecond) {
void asst::RoguelikeCollapsalParadigmTaskPlugin::wait_for_loading(unsigned int millisecond)
{
OCRer analyzer(ctrler()->get_image());
// if (DEBUG) { analyzer.save_img(utils::path("debug") / utils::path("collapsalParadigms")); }
analyzer.set_task_info(m_config->get_theme() + "@Roguelike@CheckCollapsalParadigms_loading");
@@ -316,25 +319,27 @@ void asst::RoguelikeCollapsalParadigmTaskPlugin::wait_for_loading(unsigned int m
sleep(millisecond);
}
void asst::RoguelikeCollapsalParadigmTaskPlugin::wait_for_stage(unsigned int millisecond) {
OCRer analyzer(ctrler()->get_image());
void asst::RoguelikeCollapsalParadigmTaskPlugin::wait_for_stage(unsigned int millisecond)
{
Matcher matcher(ctrler()->get_image());
// if (DEBUG) { analyzer.save_img(utils::path("debug") / utils::path("collapsalParadigms")); }
analyzer.set_task_info(m_config->get_theme() + "@Roguelike@CheckCollapsalParadigms_onStage");
while (!analyzer.analyze()) {
matcher.set_task_info(m_config->get_theme() + "@Roguelike@CheckCollapsalParadigms_onStage");
while (!matcher.analyze()) {
sleep(100);
analyzer.set_image(ctrler()->get_image());
matcher.set_image(ctrler()->get_image());
// if (DEBUG) { analyzer.save_img(utils::path("debug") / utils::path("collapsalParadigms")); }
}
sleep(millisecond);
}
bool asst::RoguelikeCollapsalParadigmTaskPlugin::new_level() const {
OCRer analyzer(ctrler()->get_image());
analyzer.set_task_info(m_config->get_theme() + "@Roguelike@CheckCollapsalParadigms_onStage");
if (analyzer.analyze()) {
std::string level = analyzer.get_result().front().text;
if (level != m_level) {
m_level = level;
bool asst::RoguelikeCollapsalParadigmTaskPlugin::new_zone() const
{
Matcher matcher(ctrler()->get_image());
matcher.set_task_info(m_config->get_theme() + "@Roguelike@CheckCollapsalParadigms_onStage");
if (matcher.analyze()) {
std::string zone = m_zone_dict.at(matcher.get_result().templ_name);
if (zone != m_zone) {
m_zone = zone;
return true;
}
}

View File

@@ -25,7 +25,7 @@ namespace asst
mutable bool m_check_panel = false;
mutable bool m_need_check_panel = false;
mutable bool m_verification_check = false;
mutable std::string m_level;
mutable std::string m_zone;
const std::unordered_set<std::string_view> m_banner_triggers_start = {
"NeedCheckCollapsalParadigmBanner",
@@ -108,7 +108,18 @@ namespace asst
"Sami@Roguelike@StageFerociousPresage"
};
bool new_level() const;
const std::unordered_map<std::string_view, std::string> m_zone_dict = {
{"Sami@Roguelike@OnStage_0", "深埋迷境"},
{"Sami@Roguelike@OnStage_1", "初霜湖泽"},
{"Sami@Roguelike@OnStage_2", "密静林地"},
{"Sami@Roguelike@OnStage_3", "昧明冻土"},
{"Sami@Roguelike@OnStage_4", "积冰岩骸"},
{"Sami@Roguelike@OnStage_5", "无瑕花园"},
{"Sami@Roguelike@OnStage_6", "远见之构"},
{"Sami@Roguelike@OnStage_7", "永恒之尘"}
};
bool new_zone() const;
bool check_collapsal_paradigm_banner();
bool check_collapsal_paradigm_panel();