mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-15 17:30:27 +08:00
feat.支持企鹅物流api的关卡json转识别用的关卡json
This commit is contained in:
41694
3rdparty/resource/penguin-stats-recognize/json/stages.json
vendored
Normal file
41694
3rdparty/resource/penguin-stats-recognize/json/stages.json
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@@ -36,6 +36,7 @@ Assistance::Assistance(AsstCallback callback, void* callback_arg)
|
||||
m_callback(AsstMsg::InitFaild, callback_json, m_callback_arg);
|
||||
};
|
||||
|
||||
/* 项目本身的Configer */
|
||||
bool ret = Configer::get_instance().load(GetResourceDir() + "config.json");
|
||||
if (!ret) {
|
||||
callback_error("config.json");
|
||||
@@ -57,6 +58,7 @@ Assistance::Assistance(AsstCallback callback, void* callback_arg)
|
||||
throw "resource broken";
|
||||
}
|
||||
|
||||
/* 项目使用的图片模板 */
|
||||
m_identify_ptr = std::make_shared<Identify>();
|
||||
for (const auto& [name, info] : TaskConfiger::get_instance().m_all_tasks_info) {
|
||||
if (info->algorithm != AlgorithmType::MatchTemplate) {
|
||||
@@ -77,6 +79,7 @@ Assistance::Assistance(AsstCallback callback, void* callback_arg)
|
||||
}
|
||||
}
|
||||
|
||||
/* 第三方库`OcrLite`所需资源*/
|
||||
m_identify_ptr->set_ocr_param(Configer::get_instance().m_options.ocr_gpu_index, Configer::get_instance().m_options.ocr_thread_number);
|
||||
ret = m_identify_ptr->ocr_init_models(GetResourceDir() + "OcrLiteOnnx\\models\\");
|
||||
if (!ret) {
|
||||
@@ -84,6 +87,10 @@ Assistance::Assistance(AsstCallback callback, void* callback_arg)
|
||||
throw "resource broken";
|
||||
}
|
||||
|
||||
/* 第三方库`penguin-stats-recognize`(企鹅物流掉落识别)所需资源*/
|
||||
m_identify_ptr->penguin_load_server("CN");
|
||||
m_identify_ptr->penguin_load_json(GetResourceDir() + "penguin-stats-recognize\\json\\stages.json", GetResourceDir() + "penguin-stats-recognize\\json\\hash_index.json");
|
||||
|
||||
for (const auto& file : std::filesystem::directory_iterator(GetResourceDir() + "penguin-stats-recognize\\items")) {
|
||||
ret = m_identify_ptr->penguin_load_templ(file.path().stem().u8string(), file.path().u8string());
|
||||
if (!ret) {
|
||||
@@ -91,9 +98,8 @@ Assistance::Assistance(AsstCallback callback, void* callback_arg)
|
||||
throw "resource broken";
|
||||
}
|
||||
}
|
||||
m_identify_ptr->penguin_load_json(GetResourceDir() + "penguin-stats-recognize\\json\\stage_index.json", GetResourceDir() + "penguin-stats-recognize\\json\\hash_index.json");
|
||||
m_identify_ptr->penguin_load_server("CN");
|
||||
|
||||
/* 用户配置 */
|
||||
ret = UserConfiger::get_instance().load(GetCurrentDir() + "user.json");
|
||||
if (!ret) {
|
||||
callback_error("user.json");
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
#include <opencv2/opencv.hpp>
|
||||
#include <opencv2/imgproc/types_c.h>
|
||||
|
||||
#include <json.h>
|
||||
|
||||
namespace penguin {
|
||||
#include <penguin-stats-recognize/penguin_wasm.h>
|
||||
}
|
||||
@@ -254,15 +256,14 @@ std::vector<TextArea> asst::Identify::find_text(const cv::Mat& image, const std:
|
||||
|
||||
bool asst::Identify::penguin_load_server(const std::string& server)
|
||||
{
|
||||
m_penguin_server = server;
|
||||
penguin::load_server(server.c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool asst::Identify::penguin_load_json(const std::string& stage_path, const std::string& hash_path)
|
||||
{
|
||||
// TODO:文件检查
|
||||
|
||||
auto load_json_string = [](const std::string& path) -> std::string {
|
||||
auto load_file = [](const std::string& path) -> std::string {
|
||||
std::ifstream ifs(path, std::ios::in);
|
||||
if (!ifs.is_open()) {
|
||||
return std::string();
|
||||
@@ -273,7 +274,45 @@ bool asst::Identify::penguin_load_json(const std::string& stage_path, const std:
|
||||
return iss.str();
|
||||
};
|
||||
|
||||
penguin::load_json(load_json_string(stage_path).c_str(), load_json_string(hash_path).c_str());
|
||||
auto stage_parse_ret = json::parse(load_file(stage_path));
|
||||
if (!stage_parse_ret) {
|
||||
return false;
|
||||
}
|
||||
// stage_json 来自 https://penguin-stats.io/PenguinStats/api/v2/stages
|
||||
// 和接口需要的json有点区别,这里做个转换
|
||||
json::value stage_json = std::move(stage_parse_ret.value());
|
||||
json::object cvt_stage_json;
|
||||
try {
|
||||
for (const json::value& stage_info : stage_json.as_array()) {
|
||||
if (!stage_info.exist("dropInfos")) { // 这种一般是以前的活动关,现在已经关闭了的
|
||||
continue;
|
||||
}
|
||||
std::string key = stage_info.at("code").as_string();
|
||||
json::value stage_dst;
|
||||
stage_dst["stageId"] = stage_info.at("stageId");
|
||||
std::vector<json::value> drops_vector;
|
||||
for (const json::value& drop_info : stage_info.at("dropInfos").as_array()) {
|
||||
if (drop_info.exist("itemId")) {
|
||||
if (drop_info.at("dropType").as_string() == "FURNITURE") { // 幸运掉落,家具啥的,企鹅物流不接,忽略掉
|
||||
continue;
|
||||
}
|
||||
drops_vector.emplace_back(drop_info.at("itemId"));
|
||||
}
|
||||
}
|
||||
stage_dst["drops"] = json::array(std::move(drops_vector));
|
||||
std::string server = m_penguin_server.empty() ? "CN" : m_penguin_server;
|
||||
stage_dst["existence"] = stage_info.at("existence").at(server).at("exist");
|
||||
|
||||
cvt_stage_json.emplace(std::move(key), std::move(stage_dst));
|
||||
}
|
||||
}
|
||||
catch (json::exception& e) {
|
||||
DebugTraceError(stage_path, "parse error", e.what());
|
||||
return false;
|
||||
}
|
||||
std::string cvt_stage_string = cvt_stage_json.to_string();
|
||||
//DebugTrace("stage_index | ", cvt_stage_string);
|
||||
penguin::load_json(cvt_stage_string.c_str(), load_file(hash_path).c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -293,7 +332,9 @@ std::string asst::Identify::penguin_recognize(const cv::Mat& image)
|
||||
{
|
||||
std::vector<uchar> buf;
|
||||
cv::imencode(".png", image, buf);
|
||||
return penguin::recognize(buf.data(), buf.size());
|
||||
std::string res = penguin::recognize(buf.data(), buf.size());
|
||||
DebugTrace("penguin_recognize | ", res);
|
||||
return res;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -67,6 +67,8 @@ namespace asst {
|
||||
std::unordered_map<std::string, cv::Mat> m_mat_map;
|
||||
std::unordered_map<std::string, std::pair<cv::Rect, cv::Mat>> m_cache_map; // 位置、直方图缓存
|
||||
|
||||
std::string m_penguin_server;
|
||||
|
||||
OcrLiteCaller m_ocr_lite;
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user