model与部分图片移至static下

This commit is contained in:
zhbaor 2024-11-12 12:46:09 +08:00
parent 78e6cca458
commit 40dd9c1f32
108 changed files with 106 additions and 365 deletions

View file

@ -376,7 +376,7 @@ class Arknights数据处理器:
im = cv2.erode(im, np.ones((5, 5))) im = cv2.erode(im, np.ones((5, 5)))
template[operator] = im template[operator] = im
with lzma.open("mower/models/recruit_result.pkl", "wb") as f: with lzma.open("mower/static/recruit_result.pkl", "wb") as f:
pickle.dump(template, f) pickle.dump(template, f)
def load_recruit_tag(self): def load_recruit_tag(self):
@ -398,7 +398,7 @@ class Arknights数据处理器:
recruit_tag_template[tag] = cv2.cvtColor( recruit_tag_template[tag] = cv2.cvtColor(
np.array(im.crop(im.getbbox())), cv2.COLOR_RGB2BGR np.array(im.crop(im.getbbox())), cv2.COLOR_RGB2BGR
) )
with lzma.open("./mower/models/recruit.pkl", "wb") as f: with lzma.open("./mower/static/recruit.pkl", "wb") as f:
pickle.dump(recruit_tag_template, f) pickle.dump(recruit_tag_template, f)
def 输出_公招资源(self): def 输出_公招资源(self):
@ -452,9 +452,9 @@ class Arknights数据处理器:
和添加物品至前端文件() 有联动 添加物品提供了分类的图片位置""" 和添加物品至前端文件() 有联动 添加物品提供了分类的图片位置"""
self.训练仓库的knn模型("NORMAL", "./mower/models/NORMAL.pkl") self.训练仓库的knn模型("NORMAL", "./mower/static/NORMAL.pkl")
self.训练仓库的knn模型("CONSUME", "./mower/models/CONSUME.pkl") self.训练仓库的knn模型("CONSUME", "./mower/static/CONSUME.pkl")
self.训练仓库的knn模型("MATERIAL", "./mower/models/MATERIAL.pkl") self.训练仓库的knn模型("MATERIAL", "./mower/static/MATERIAL.pkl")
def 输出_在房间内的干员名的模型(self): def 输出_在房间内的干员名的模型(self):
font = ImageFont.truetype("mower/fonts/SourceHanSansCN-Medium.otf", 37) font = ImageFont.truetype("mower/fonts/SourceHanSansCN-Medium.otf", 37)
@ -483,7 +483,7 @@ class Arknights数据处理器:
# cv2.imwrite(f"/home/zhao/Desktop/data/{operator}.png", tpl) # cv2.imwrite(f"/home/zhao/Desktop/data/{operator}.png", tpl)
data[operator] = tpl data[operator] = tpl
with lzma.open("mower/models/operator_room.model", "wb") as f: with lzma.open("mower/static/operator_room.model", "wb") as f:
pickle.dump(data, f) pickle.dump(data, f)
def avatar_and_portrait(self, save_img=False): def avatar_and_portrait(self, save_img=False):
@ -530,7 +530,7 @@ class Arknights数据处理器:
kp, des = fast_keypoints(full, mask) kp, des = fast_keypoints(full, mask)
pt = [p.pt for p in kp] pt = [p.pt for p in kp]
data = {"w": w, "h": h, "col": col, "name": name_list, "pt": pt, "des": des} data = {"w": w, "h": h, "col": col, "name": name_list, "pt": pt, "des": des}
with lzma.open(f"./mower/models/{name}.pkl", "wb") as f: with lzma.open(f"./mower/static/{name}.pkl", "wb") as f:
pickle.dump(data, f) pickle.dump(data, f)
extract("avatar", ((20, 51), (160, 146))) extract("avatar", ((20, 51), (160, 146)))
@ -666,7 +666,7 @@ class Arknights数据处理器:
def levels(self): def levels(self):
levels_json = 加载json("./ArknightsGameResource/levels.json") levels_json = 加载json("./ArknightsGameResource/levels.json")
with lzma.open("mower/models/levels.pkl", "wb") as f: with lzma.open("mower/static/levels.pkl", "wb") as f:
pickle.dump(levels_json, f) pickle.dump(levels_json, f)
def 读取模组(self): def 读取模组(self):

View file

@ -1,16 +0,0 @@
# Models
## dbnet.onnx
DBNET 的模型文件,负责提取图像中的文字
## crnn_lite_lstm.onnx
CRNN 的轻量型模型文件,负责识别图像中的文字
## svm.model
SVM 分类器的模型文件,负责图像匹配判定
## depot.pkl
仓库物品的knn模型,负责仓库中的物品

View file

@ -41,7 +41,7 @@ from mower.utils import typealias as tp
from mower.utils.csleep import MowerExit, csleep from mower.utils.csleep import MowerExit, csleep
from mower.utils.datetime import format_time, get_server_weekday from mower.utils.datetime import format_time, get_server_weekday
from mower.utils.deprecated import deprecated from mower.utils.deprecated import deprecated
from mower.utils.digit_reader import DigitReader from mower.utils.digit_reader import get_drone
from mower.utils.email import drop_template, send_message from mower.utils.email import drop_template, send_message
from mower.utils.graph import SceneGraphSolver from mower.utils.graph import SceneGraphSolver
from mower.utils.log import logger from mower.utils.log import logger
@ -77,7 +77,6 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
self.clue_count_limit = 9 self.clue_count_limit = 9
self.enable_party = True self.enable_party = True
self.leifeng_mode = False self.leifeng_mode = False
self.digit_reader = DigitReader()
self.error = False self.error = False
self.clue_count = 0 self.clue_count = 0
self.tasks = [] self.tasks = []
@ -1780,7 +1779,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
accelerate = self.find("factory_accelerate") accelerate = self.find("factory_accelerate")
if accelerate: if accelerate:
drone_count = self.digit_reader.get_drone(config.recog.gray) drone_count = get_drone(config.recog.gray)
logger.info(f"当前无人机数量为:{drone_count}") logger.info(f"当前无人机数量为:{drone_count}")
if drone_count < config.conf.drone_count_limit or drone_count > 200: if drone_count < config.conf.drone_count_limit or drone_count > 200:
logger.info(f"无人机数量小于{config.conf.drone_count_limit}->停止") logger.info(f"无人机数量小于{config.conf.drone_count_limit}->停止")
@ -1814,7 +1813,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
): ):
break break
if not_customize: if not_customize:
drone_count = self.digit_reader.get_drone(config.recog.gray) drone_count = get_drone(config.recog.gray)
logger.info(f"当前无人机数量为:{drone_count}") logger.info(f"当前无人机数量为:{drone_count}")
# 200 为识别错误 # 200 为识别错误
if ( if (
@ -1836,111 +1835,6 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
return return
self.scene_graph_step(Scene.INFRA_MAIN) self.scene_graph_step(Scene.INFRA_MAIN)
# 用于制造站切换产物,请注意在调用该函数前有足够的无人机,并补足相应制造站产物,目前仅支持中级作战记录与赤金之间的切换
# def 制造站切换产物(self, room: str, 目标产物: str, not_customize=False, not_return=False):
# # 点击进入该房间
# self.enter_room(room)
# while self.get_infra_scene() == 9:
# time.sleep(1)
# config.recog.update()
# # 进入房间详情
# self.tap((config.recog.w * 0.05, config.recog.h * 0.95), interval=3)
# # 关闭掉房间总览
# error_count = 0
# while self.find('factory_accelerate') is None:
# if error_count > 5:
# raise Exception('未成功进入制造详情界面')
# self.tap((config.recog.w * 0.05, config.recog.h * 0.95), interval=3)
# error_count += 1
# accelerate = self.find('factory_accelerate')
# 无人机数量 = self.digit_reader.get_drone(config.recog.gray, config.recog.h, config.recog.w)
# if accelerate:
# self.tap_element('factory_accelerate')
# config.recog.update()
# 剩余制造加速总时间 = self.digit_reader.识别制造加速总剩余时间(config.recog.gray, config.recog.h, config.recog.w)
# # logger.info(f'制造站 B{room[5]}0{room[7]} 剩余制造总时间为 {剩余制造加速总时间}')
# 时 = int(剩余制造加速总时间[0:3])
# if 时 > 118: 当前产物 = '经验'
# else: 当前产物 = '赤金'
# if 当前产物 == 目标产物:
# logger.info('返回基建主界面')
# while self.get_infra_scene() != 201:
# if self.find('index_infrastructure') is not None:
# self.tap_element('index_infrastructure')
# elif self.find('12cadpa') is not None:
# config.device.tap((config.recog.w // 2, config.recog.h // 2))
# else:
# self.back()
# config.recog.update()
# else:
# logger.info(f'制造站 B{room[5]}0{room[7]} 当前产物为{当前产物},切换产物为{目标产物}')
# 需要无人机数 = 0
# while 需要无人机数 < 10:
# 总分钟数 = int(剩余制造加速总时间[4:6]) + 60 * 时
# if 当前产物 == '赤金':
# 需要无人机数 = (总分钟数 % 72) // 3 + 1
# elif 当前产物 == '经验':
# 需要无人机数 = (总分钟数 % 180) // 3 + 1
# else:
# logger.warning('目前不支持该产物切换策略,尚待完善')
# logger.info('返回基建主界面')
# while self.get_infra_scene() != 201:
# if self.find('index_infrastructure') is not None:
# self.tap_element('index_infrastructure')
# elif self.find('12cadpa') is not None:
# config.device.tap((config.recog.w // 2, config.recog.h // 2))
# else:
# self.back()
# config.recog.update()
# if 需要无人机数 > 无人机数量 - 10:
# logger.warning(f'''
# 切换产物需要无人机{需要无人机数}个,当前仅有{无人机数量}个,
# 无法切换产物,建议该任务至少在{(需要无人机数 - 无人机数量 + 10) * 3.5 // 3}分钟后再执行
# ''')
# logger.info('返回基建主界面')
# while self.get_infra_scene() != 201:
# if self.find('index_infrastructure') is not None:
# self.tap_element('index_infrastructure')
# elif self.find('12cadpa') is not None:
# config.device.tap((config.recog.w // 2, config.recog.h // 2))
# else:
# self.back()
# config.recog.update()
# else:
# logger.warning(f'需要加无人机{需要无人机数}个')
# for 次数 in range(需要无人机数):
# self.tap((config.recog.w * 1320 // 1920, config.recog.h * 502 // 1080), interval=0.05)
# config.recog.update()
# 剩余制造加速总时间 = self.digit_reader.识别制造加速总剩余时间(
# config.recog.gray, config.recog.h, config.recog.w)
# # logger.info(f'制造站 B{room[5]}0{room[7]} 剩余制造总时间为 {剩余制造加速总时间}')
# 总分钟数 = int(剩余制造加速总时间[4:6]) + 60 * 时
# if 当前产物 == '赤金':
# 需要无人机数 = (总分钟数 % 72) // 3 + 1
# elif 当前产物 == '经验':
# 需要无人机数 = (总分钟数 % 180) // 3 + 1
# else:
# logger.warning('目前不支持该产物切换策略,尚待完善')
# logger.info('返回基建主界面')
# while self.get_infra_scene() != 201:
# if self.find('index_infrastructure') is not None:
# self.tap_element('index_infrastructure')
# elif self.find('12cadpa') is not None:
# config.device.tap((config.recog.w // 2, config.recog.h // 2))
# else:
# self.back()
# config.recog.update()
# self.tap((config.recog.w * 3 // 4, config.recog.h * 4 // 5), interval=3) # 确认加速
# self.tap((config.recog.w * 9 // 10, config.recog.h // 2), interval=1) # 点击当前产品
# if 目标产物 == '经验':
# self.tap((config.recog.w // 2, config.recog.h // 2), interval=1) # 点击中级作战记录
# elif 目标产物 == '赤金':
# self.tap((config.recog.w // 10, config.recog.h // 3), interval=1) # 进入贵金属分类
# self.tap((config.recog.w // 2, config.recog.h // 4), interval=1) # 点击赤金
# self.tap((config.recog.w * 3 // 4, config.recog.h * 2 // 7), interval=1) # 点击最多
# self.tap((config.recog.w * 3 // 4, config.recog.h * 5 // 6), interval=1) # 确认数量
# self.tap((config.recog.w * 3 // 4, config.recog.h * 7 // 10), interval=1) # 确认更改
def get_order(self, name): def get_order(self, name):
if name in self.op_data.operators: if name in self.op_data.operators:
return True, self.op_data.operators[name].arrange_order return True, self.op_data.operators[name].arrange_order
@ -2408,7 +2302,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
if self.drone_room is None or ( if self.drone_room is None or (
self.drone_room == room and room in self.op_data.run_order_rooms self.drone_room == room and room in self.op_data.run_order_rooms
): ):
drone_count = self.digit_reader.get_drone(config.recog.gray) drone_count = get_drone(config.recog.gray)
logger.info(f"当前无人机数量为:{drone_count}") logger.info(f"当前无人机数量为:{drone_count}")
# 200 为识别错误 # 200 为识别错误
if ( if (

View file

@ -27,11 +27,11 @@ from mower.utils.recognize import Scene
def 导入_数字模板(): def 导入_数字模板():
模板文件夹 = f"{__rootdir__}/resources/depot_num" 模板文件夹 = f"{__rootdir__}/static/depot_num"
数字模板列表 = [] 数字模板列表 = []
for 文件名 in sorted(os.listdir(模板文件夹)): for 文件名 in sorted(os.listdir(模板文件夹)):
文件路径 = os.path.join(模板文件夹, 文件名) 文件路径 = os.path.join(模板文件夹, 文件名)
数字模板列表.append(loadimg(文件路径, True)) 数字模板列表.append(loadimg.__wrapped__(文件路径, True))
return 数字模板列表 return 数字模板列表
@ -165,11 +165,11 @@ class depotREC(SceneGraphSolver):
bf = cv2.BFMatcher(cv2.NORM_HAMMING2, crossCheck=True) bf = cv2.BFMatcher(cv2.NORM_HAMMING2, crossCheck=True)
self.detector = orb self.detector = orb
self.matcher = bf self.matcher = bf
with lzma.open(f"{__rootdir__}/models/CONSUME.pkl", "rb") as pkl: with lzma.open(f"{__rootdir__}/static/CONSUME.pkl", "rb") as pkl:
self.knn模型_CONSUME = pickle.load(pkl) self.knn模型_CONSUME = pickle.load(pkl)
with lzma.open(f"{__rootdir__}/models/MATERIAL.pkl", "rb") as pkl: with lzma.open(f"{__rootdir__}/static/MATERIAL.pkl", "rb") as pkl:
self.knn模型_MATERIAL = pickle.load(pkl) self.knn模型_MATERIAL = pickle.load(pkl)
with lzma.open(f"{__rootdir__}/models/NORMAL.pkl", "rb") as pkl: with lzma.open(f"{__rootdir__}/static/NORMAL.pkl", "rb") as pkl:
self.knn模型_NORMAL = pickle.load(pkl) self.knn模型_NORMAL = pickle.load(pkl)
# self.时间模板 = self.导入_时间模板() # self.时间模板 = self.导入_时间模板()
self.物品数字 = 导入_数字模板() self.物品数字 = 导入_数字模板()

View file

@ -10,11 +10,12 @@ from mower.solvers.infra.filter import RIIC_Filter
from mower.utils import config from mower.utils import config
from mower.utils.character_recognize import operator_room_select from mower.utils.character_recognize import operator_room_select
from mower.utils.csleep import MowerExit from mower.utils.csleep import MowerExit
from mower.utils.digit_reader import get_time
from mower.utils.image import cropimg, loadres, thres2 from mower.utils.image import cropimg, loadres, thres2
from mower.utils.log import logger from mower.utils.log import logger
from mower.utils.rapidocr import engine from mower.utils.rapidocr import engine
with lzma.open(f"{__rootdir__}/models/operator_room.model", "rb") as f: with lzma.open(f"{__rootdir__}/static/operator_room.model", "rb") as f:
OP_ROOM = pickle.loads(f.read()) OP_ROOM = pickle.loads(f.read())
kernel = np.ones((12, 12), np.uint8) kernel = np.ones((12, 12), np.uint8)
@ -175,7 +176,7 @@ class BaseMixin:
config.recog.update() config.recog.update()
try: try:
if use_digit_reader: if use_digit_reader:
time_str = self.digit_reader.get_time(config.recog.gray) time_str = get_time(config.recog.gray)
else: else:
time_str = self.read_screen(config.recog.img, type="time", cord=cord) time_str = self.read_screen(config.recog.img, type="time", cord=cord)
h, m, s = str(time_str).split(":") h, m, s = str(time_str).split(":")

View file

@ -4,7 +4,7 @@ from mower.solvers.infra.base_mixin import BaseMixin
from mower.solvers.infra.enter_room import EnterRoomSolver from mower.solvers.infra.enter_room import EnterRoomSolver
from mower.utils import config from mower.utils import config
from mower.utils import typealias as tp from mower.utils import typealias as tp
from mower.utils.digit_reader import DigitReader from mower.utils.digit_reader import get_drone
from mower.utils.graph import SceneGraphSolver from mower.utils.graph import SceneGraphSolver
from mower.utils.log import logger from mower.utils.log import logger
from mower.utils.recognize import Scene from mower.utils.recognize import Scene
@ -31,7 +31,7 @@ class DroneSolver(SceneGraphSolver, BaseMixin):
self.room = room self.room = room
while cur_count is None and not all_in: while cur_count is None and not all_in:
try: try:
cur_count = DigitReader().get_drone(config.recog.gray) cur_count = get_drone(config.recog.gray)
except Exception: except Exception:
logger.exception("当前场景无法获取无人机数量") logger.exception("当前场景无法获取无人机数量")
EnterRoomSolver().run(self.room, detail=False) EnterRoomSolver().run(self.room, detail=False)

View file

@ -6,7 +6,6 @@ from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker
from mower.utils import config from mower.utils import config
from mower.utils.digit_reader import DigitReader
from mower.utils.email import report_template, send_message from mower.utils.email import report_template, send_message
from mower.utils.graph import SceneGraphSolver from mower.utils.graph import SceneGraphSolver
from mower.utils.image import cropimg, thres2 from mower.utils.image import cropimg, thres2
@ -40,7 +39,6 @@ class ReportSolver(SceneGraphSolver):
self.low_range_gray = (100, 100, 100) self.low_range_gray = (100, 100, 100)
self.high_range_gray = (255, 255, 255) self.high_range_gray = (255, 255, 255)
self.date = (datetime.datetime.now() - datetime.timedelta(hours=4)).date() self.date = (datetime.datetime.now() - datetime.timedelta(hours=4)).date()
self.digitReader = DigitReader()
self.report_res = { self.report_res = {
"作战录像": None, "作战录像": None,
"赤金": None, "赤金": None,

View file

@ -5,7 +5,7 @@ from mower.solvers.infra.get_order_remaining_time import (
GetOrderRemainingTimeSolver, GetOrderRemainingTimeSolver,
) )
from mower.utils import config from mower.utils import config
from mower.utils.digit_reader import DigitReader from mower.utils.digit_reader import get_drone
from mower.utils.graph import SceneGraphSolver from mower.utils.graph import SceneGraphSolver
from mower.utils.log import logger from mower.utils.log import logger
@ -32,7 +32,7 @@ class RunOrderSolver(SceneGraphSolver):
# 使用无人机加速 # 使用无人机加速
if drone: if drone:
# 读取当前无人机数量避免重复开关 # 读取当前无人机数量避免重复开关
cur_drone_count = DigitReader().get_drone(config.recog.gray) cur_drone_count = get_drone(config.recog.gray)
drone_count = ReadOriginalOrderRemainTimeSolver().run(room) // 180 - 1 drone_count = ReadOriginalOrderRemainTimeSolver().run(room) // 180 - 1
DroneSolver().run(room, drone_count, cur_count=cur_drone_count) DroneSolver().run(room, drone_count, cur_count=cur_drone_count)

View file

@ -7,7 +7,7 @@ from mower.solvers.infra.drone import DroneSolver
from mower.solvers.infra.enter_room import EnterRoomSolver from mower.solvers.infra.enter_room import EnterRoomSolver
from mower.utils import config from mower.utils import config
from mower.utils import typealias as tp from mower.utils import typealias as tp
from mower.utils.digit_reader import DigitReader from mower.utils.digit_reader import get_drone
from mower.utils.graph import SceneGraphSolver from mower.utils.graph import SceneGraphSolver
from mower.utils.image import cropimg, thres2 from mower.utils.image import cropimg, thres2
from mower.utils.log import logger from mower.utils.log import logger
@ -45,7 +45,7 @@ class SwitchProductSolver(SceneGraphSolver, BaseMixin):
return True return True
# 读取当前无人机数量避免重复开关 # 读取当前无人机数量避免重复开关
cur_drone_count = DigitReader().get_drone(config.recog.gray) cur_drone_count = get_drone(config.recog.gray)
# 读取生产速度 # 读取生产速度
speed = self.read_speed() speed = self.read_speed()
# 获取无人机加速的剩余时间 # 获取无人机加速的剩余时间

View file

@ -16,7 +16,7 @@ from mower.solvers.infra.run_order.read_original_order_remaining_time import (
from mower.solvers.infra.todo_list import TodoListSolver from mower.solvers.infra.todo_list import TodoListSolver
from mower.utils import config from mower.utils import config
from mower.utils.config.plan import Facility from mower.utils.config.plan import Facility
from mower.utils.digit_reader import DigitReader from mower.utils.digit_reader import get_drone
from mower.utils.log import logger from mower.utils.log import logger
from mower.utils.scheduler import scheduler from mower.utils.scheduler import scheduler
@ -167,7 +167,7 @@ class MiniBase:
break break
# 无人机拉开间隔 # 无人机拉开间隔
EnterRoomSolver().run(task_a.room, detail=False) EnterRoomSolver().run(task_a.room, detail=False)
total = DigitReader().get_drone(config.recog.gray) total = get_drone(config.recog.gray)
time_no_efficiency = timedelta( time_no_efficiency = timedelta(
seconds=ReadOriginalOrderRemainTimeSolver().run(task_a.room) seconds=ReadOriginalOrderRemainTimeSolver().run(task_a.room)
) )

View file

@ -5,8 +5,8 @@ import cv2
import numpy as np import numpy as np
from mower.data import agent_list from mower.data import agent_list
from mower.models import Digtal
from mower.solvers.navigation.utils import generate_name from mower.solvers.navigation.utils import generate_name
from mower.static import Digital
from mower.utils import config from mower.utils import config
from mower.utils.graph import SceneGraphSolver from mower.utils.graph import SceneGraphSolver
from mower.utils.image import cropimg, loadres, thres2 from mower.utils.image import cropimg, loadres, thres2
@ -132,7 +132,7 @@ class OperatorSolver(SceneGraphSolver):
min_score, rank = 1, None min_score, rank = 1, None
for i in range(1, 8): for i in range(1, 8):
im = Digtal().secret_front[i] im = Digital().secret_front[i]
result = cv2.matchTemplate(img, im, cv2.TM_SQDIFF_NORMED) result = cv2.matchTemplate(img, im, cv2.TM_SQDIFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
if min_val < min_score: if min_val < min_score:

View file

@ -10,7 +10,7 @@ from mower.data import (
agent_with_tags, agent_with_tags,
recruit_agent, recruit_agent,
) )
from mower.models import Digtal from mower.static import Digital
from mower.utils import config from mower.utils import config
from mower.utils.email import recruit_rarity, recruit_template, send_message from mower.utils.email import recruit_rarity, recruit_template, send_message
from mower.utils.graph import SceneGraphSolver from mower.utils.graph import SceneGraphSolver
@ -19,10 +19,10 @@ from mower.utils.log import logger
from mower.utils.recognize import Scene from mower.utils.recognize import Scene
from mower.utils.vector import va from mower.utils.vector import va
number = Digtal().riic_base_digits number = Digital().riic_base_digits
with lzma.open(f"{__rootdir__}/models/recruit_result.pkl", "rb") as f: with lzma.open(f"{__rootdir__}/static/recruit_result.pkl", "rb") as f:
recruit_res_template = pickle.load(f) recruit_res_template = pickle.load(f)
with lzma.open(f"{__rootdir__}/models/recruit.pkl", "rb") as f: with lzma.open(f"{__rootdir__}/static/recruit.pkl", "rb") as f:
tag_template = pickle.load(f) tag_template = pickle.load(f)
job_list = [ job_list = [
"recruit/riic_res/CASTER", "recruit/riic_res/CASTER",
@ -556,7 +556,7 @@ class RecruitSolver(SceneGraphSolver):
area = [(850, 280), (980, 400)] area = [(850, 280), (980, 400)]
img = cropimg(config.recog.gray, area) img = cropimg(config.recog.gray, area)
templates = Digtal().noto_sans templates = Digital().noto_sans
default_height = 28 default_height = 28
if height and height != default_height: if height and height != default_height:

View file

@ -2,7 +2,7 @@ from datetime import datetime, timedelta
import cv2 import cv2
from mower.models import Digtal from mower.static import Digital
from mower.utils import config from mower.utils import config
from mower.utils import typealias as tp from mower.utils import typealias as tp
from mower.utils.csleep import MowerExit from mower.utils.csleep import MowerExit
@ -103,7 +103,7 @@ class SecretFront(SceneGraphSolver):
score = [] score = []
for i in self.target: for i in self.target:
result = cv2.matchTemplate( result = cv2.matchTemplate(
img, Digtal().secret_front[i], cv2.TM_SQDIFF_NORMED img, Digital().secret_front[i], cv2.TM_SQDIFF_NORMED
) )
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
score.append(min_val) score.append(min_val)

View file

@ -1,6 +1,6 @@
import cv2 import cv2
from mower.models import shop from mower.static import shop
from mower.utils import config from mower.utils import config
from mower.utils import typealias as tp from mower.utils import typealias as tp
from mower.utils.graph import SceneGraphSolver from mower.utils.graph import SceneGraphSolver

View file

@ -8,25 +8,25 @@ from mower.utils.image import loadimg
from mower.utils.path import get_path from mower.utils.path import get_path
from mower.utils.singleton import singleton from mower.utils.singleton import singleton
with lzma.open(f"{__rootdir__}/models/avatar.pkl", "rb") as f: with lzma.open(f"{__rootdir__}/static/avatar.pkl", "rb") as f:
avatar = pickle.load(f) avatar = pickle.load(f)
with lzma.open(f"{__rootdir__}/models/portrait.pkl", "rb") as f: with lzma.open(f"{__rootdir__}/static/portrait.pkl", "rb") as f:
portrait = pickle.load(f) portrait = pickle.load(f)
with lzma.open(f"{__rootdir__}/models/navigation.pkl", "rb") as f: with lzma.open(f"{__rootdir__}/static/navigation.pkl", "rb") as f:
navigation = pickle.load(f) navigation = pickle.load(f)
with lzma.open(f"{__rootdir__}/models/shop.pkl", "rb") as f: with lzma.open(f"{__rootdir__}/static/shop.pkl", "rb") as f:
shop = pickle.load(f) shop = pickle.load(f)
@singleton @singleton
class Digtal: class Digital:
@cached_property @cached_property
def secret_front(self) -> dict[str, tp.GrayImage]: def secret_front(self) -> dict[str, tp.GrayImage]:
data = {} data = {}
for i in get_path("@install/mower/resources/digtal/secret_front").iterdir(): for i in get_path("@install/mower/static/digital/secret_front").iterdir():
try: try:
data[int(i.stem)] = loadimg.__wrapped__(i, True) data[int(i.stem)] = loadimg.__wrapped__(i, True)
except ValueError: except ValueError:
@ -36,13 +36,13 @@ class Digtal:
@cached_property @cached_property
def riic_base_digits(self) -> dict[str, tp.GrayImage]: def riic_base_digits(self) -> dict[str, tp.GrayImage]:
data = {} data = {}
for i in get_path("@install/mower/resources/digtal/riic_base_digits").iterdir(): for i in get_path("@install/mower/static/digital/riic_base_digits").iterdir():
data[int(i.stem)] = loadimg.__wrapped__(i, True) data[int(i.stem)] = loadimg.__wrapped__(i, True)
return data return data
@cached_property @cached_property
def noto_sans(self) -> dict[str, tp.GrayImage]: def noto_sans(self) -> dict[str, tp.GrayImage]:
data = {} data = {}
for i in get_path("@install/mower/resources/digtal/noto_sans").iterdir(): for i in get_path("@install/mower/static/digital/noto_sans").iterdir():
data[int(i.stem)] = loadimg.__wrapped__(i, True) data[int(i.stem)] = loadimg.__wrapped__(i, True)
return data return data

Some files were not shown because too many files have changed in this diff Show more