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)))
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)
def load_recruit_tag(self):
@ -398,7 +398,7 @@ class Arknights数据处理器:
recruit_tag_template[tag] = cv2.cvtColor(
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)
def 输出_公招资源(self):
@ -452,9 +452,9 @@ class Arknights数据处理器:
和添加物品至前端文件() 有联动 添加物品提供了分类的图片位置"""
self.训练仓库的knn模型("NORMAL", "./mower/models/NORMAL.pkl")
self.训练仓库的knn模型("CONSUME", "./mower/models/CONSUME.pkl")
self.训练仓库的knn模型("MATERIAL", "./mower/models/MATERIAL.pkl")
self.训练仓库的knn模型("NORMAL", "./mower/static/NORMAL.pkl")
self.训练仓库的knn模型("CONSUME", "./mower/static/CONSUME.pkl")
self.训练仓库的knn模型("MATERIAL", "./mower/static/MATERIAL.pkl")
def 输出_在房间内的干员名的模型(self):
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)
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)
def avatar_and_portrait(self, save_img=False):
@ -530,7 +530,7 @@ class Arknights数据处理器:
kp, des = fast_keypoints(full, mask)
pt = [p.pt for p in kp]
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)
extract("avatar", ((20, 51), (160, 146)))
@ -666,7 +666,7 @@ class Arknights数据处理器:
def levels(self):
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)
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.datetime import format_time, get_server_weekday
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.graph import SceneGraphSolver
from mower.utils.log import logger
@ -77,7 +77,6 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
self.clue_count_limit = 9
self.enable_party = True
self.leifeng_mode = False
self.digit_reader = DigitReader()
self.error = False
self.clue_count = 0
self.tasks = []
@ -1780,7 +1779,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
accelerate = self.find("factory_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}")
if drone_count < config.conf.drone_count_limit or drone_count > 200:
logger.info(f"无人机数量小于{config.conf.drone_count_limit}->停止")
@ -1814,7 +1813,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
):
break
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}")
# 200 为识别错误
if (
@ -1836,111 +1835,6 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
return
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):
if name in self.op_data.operators:
return True, self.op_data.operators[name].arrange_order
@ -2408,7 +2302,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
if self.drone_room is None or (
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}")
# 200 为识别错误
if (

View file

@ -27,11 +27,11 @@ from mower.utils.recognize import Scene
def 导入_数字模板():
模板文件夹 = f"{__rootdir__}/resources/depot_num"
模板文件夹 = f"{__rootdir__}/static/depot_num"
数字模板列表 = []
for 文件名 in sorted(os.listdir(模板文件夹)):
文件路径 = os.path.join(模板文件夹, 文件名)
数字模板列表.append(loadimg(文件路径, True))
数字模板列表.append(loadimg.__wrapped__(文件路径, True))
return 数字模板列表
@ -165,11 +165,11 @@ class depotREC(SceneGraphSolver):
bf = cv2.BFMatcher(cv2.NORM_HAMMING2, crossCheck=True)
self.detector = orb
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)
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)
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.时间模板 = self.导入_时间模板()
self.物品数字 = 导入_数字模板()

View file

@ -10,11 +10,12 @@ from mower.solvers.infra.filter import RIIC_Filter
from mower.utils import config
from mower.utils.character_recognize import operator_room_select
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.log import logger
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())
kernel = np.ones((12, 12), np.uint8)
@ -175,7 +176,7 @@ class BaseMixin:
config.recog.update()
try:
if use_digit_reader:
time_str = self.digit_reader.get_time(config.recog.gray)
time_str = get_time(config.recog.gray)
else:
time_str = self.read_screen(config.recog.img, type="time", cord=cord)
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.utils import config
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.log import logger
from mower.utils.recognize import Scene
@ -31,7 +31,7 @@ class DroneSolver(SceneGraphSolver, BaseMixin):
self.room = room
while cur_count is None and not all_in:
try:
cur_count = DigitReader().get_drone(config.recog.gray)
cur_count = get_drone(config.recog.gray)
except Exception:
logger.exception("当前场景无法获取无人机数量")
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 mower.utils import config
from mower.utils.digit_reader import DigitReader
from mower.utils.email import report_template, send_message
from mower.utils.graph import SceneGraphSolver
from mower.utils.image import cropimg, thres2
@ -40,7 +39,6 @@ class ReportSolver(SceneGraphSolver):
self.low_range_gray = (100, 100, 100)
self.high_range_gray = (255, 255, 255)
self.date = (datetime.datetime.now() - datetime.timedelta(hours=4)).date()
self.digitReader = DigitReader()
self.report_res = {
"作战录像": None,
"赤金": None,

View file

@ -5,7 +5,7 @@ from mower.solvers.infra.get_order_remaining_time import (
GetOrderRemainingTimeSolver,
)
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.log import logger
@ -32,7 +32,7 @@ class RunOrderSolver(SceneGraphSolver):
# 使用无人机加速
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
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.utils import config
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.image import cropimg, thres2
from mower.utils.log import logger
@ -45,7 +45,7 @@ class SwitchProductSolver(SceneGraphSolver, BaseMixin):
return True
# 读取当前无人机数量避免重复开关
cur_drone_count = DigitReader().get_drone(config.recog.gray)
cur_drone_count = get_drone(config.recog.gray)
# 读取生产速度
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.utils import config
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.scheduler import scheduler
@ -167,7 +167,7 @@ class MiniBase:
break
# 无人机拉开间隔
EnterRoomSolver().run(task_a.room, detail=False)
total = DigitReader().get_drone(config.recog.gray)
total = get_drone(config.recog.gray)
time_no_efficiency = timedelta(
seconds=ReadOriginalOrderRemainTimeSolver().run(task_a.room)
)

View file

@ -5,8 +5,8 @@ import cv2
import numpy as np
from mower.data import agent_list
from mower.models import Digtal
from mower.solvers.navigation.utils import generate_name
from mower.static import Digital
from mower.utils import config
from mower.utils.graph import SceneGraphSolver
from mower.utils.image import cropimg, loadres, thres2
@ -132,7 +132,7 @@ class OperatorSolver(SceneGraphSolver):
min_score, rank = 1, None
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)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
if min_val < min_score:

View file

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

View file

@ -2,7 +2,7 @@ from datetime import datetime, timedelta
import cv2
from mower.models import Digtal
from mower.static import Digital
from mower.utils import config
from mower.utils import typealias as tp
from mower.utils.csleep import MowerExit
@ -103,7 +103,7 @@ class SecretFront(SceneGraphSolver):
score = []
for i in self.target:
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)
score.append(min_val)

View file

@ -1,6 +1,6 @@
import cv2
from mower.models import shop
from mower.static import shop
from mower.utils import config
from mower.utils import typealias as tp
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.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)
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)
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)
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)
@singleton
class Digtal:
class Digital:
@cached_property
def secret_front(self) -> dict[str, tp.GrayImage]:
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:
data[int(i.stem)] = loadimg.__wrapped__(i, True)
except ValueError:
@ -36,13 +36,13 @@ class Digtal:
@cached_property
def riic_base_digits(self) -> dict[str, tp.GrayImage]:
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)
return data
@cached_property
def noto_sans(self) -> dict[str, tp.GrayImage]:
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)
return data

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