feat: 新增标签过滤器类

This commit is contained in:
bmy
2024-05-22 18:50:21 +08:00
parent 0817fb1fd1
commit 64970fd6a7
6 changed files with 148 additions and 20 deletions

View File

@@ -19,7 +19,8 @@ task_queue.put(sb.task(sb.get_bball.exec, sb.get_bball.find, cfg_main['task']['G
task_queue.put(sb.task(sb.up_tower.exec, sb.up_tower.find, cfg_main['task']['UpTower_enable'])) task_queue.put(sb.task(sb.up_tower.exec, sb.up_tower.find, cfg_main['task']['UpTower_enable']))
task_queue.put(sb.task(sb.get_rball.exec, sb.get_rball.find, cfg_main['task']['GetRBall_enable'])) task_queue.put(sb.task(sb.get_rball.exec, sb.get_rball.find, cfg_main['task']['GetRBall_enable']))
task_queue.put(sb.task(sb.put_bball.exec, sb.put_bball.find, cfg_main['task']['PutBBall_enable'])) task_queue.put(sb.task(sb.put_bball.exec, sb.put_bball.find, cfg_main['task']['PutBBall_enable']))
task_queue.put(sb.task(sb.put_hanoi.exec, sb.put_hanoi.find, cfg_main['task']['PutHanoi_enable'])) task_queue.put(sb.task(sb.put_hanoi1.exec, sb.put_hanoi1.find, True)) # 无论是否进行任务,检测标识并转向都是必须进行的
task_queue.put(sb.task(sb.put_hanoi2.exec, sb.put_hanoi2.find, cfg_main['task']['PutHanoi_enable']))
task_queue.put(sb.task(sb.move_area.exec, sb.move_area.find, cfg_main['task']['MoveArea_enable'])) task_queue.put(sb.task(sb.move_area.exec, sb.move_area.find, cfg_main['task']['MoveArea_enable']))
task_queue.put(sb.task(sb.kick_ass.exec, sb.kick_ass.find, cfg_main['task']['KickAss_enable'])) task_queue.put(sb.task(sb.kick_ass.exec, sb.kick_ass.find, cfg_main['task']['KickAss_enable']))

View File

@@ -67,4 +67,4 @@ class main_task():
# self.by_cmd.send_speed_x(7) # self.by_cmd.send_speed_x(7)
pid_out = self.pid1.get(self.lane_error) pid_out = self.pid1.get(self.lane_error)
# self.by_cmd.send_speed_omega(pid_out) # self.by_cmd.send_speed_omega(pid_out)
self.lane_socket.send_string("infer") # self.lane_socket.send_string("infer")

View File

@@ -1,5 +1,7 @@
from enum import Enum from enum import Enum
from loguru import logger from loguru import logger
from utils import label_filter
from utils import tlabel
import time import time
# 任务类 # 任务类
@@ -73,7 +75,16 @@ class task_queuem(task):
# 人员施救 # 人员施救
class get_block(): class get_block():
def find(): def find():
# 目标检测红/蓝方块
filter = label_filter(None)
ret1, list1 = filter.get(tlabel.RBLOCK)
ret2, list2 = filter.get(tlabel.BBLOCK)
if (ret1 > 0) or (ret2 > 0):
logger.info("[TASK1]# find label")
return True return True
else:
return False
def exec(): def exec():
pass pass
@@ -81,6 +92,12 @@ class get_block():
# 紧急转移 # 紧急转移
class put_block(): class put_block():
def find(): def find():
# 目标检测医院
filter = label_filter(None)
ret1, list1 = filter.get(tlabel.HOSPITAL)
if ret1 > 0:
return True
else:
return False return False
def exec(): def exec():
pass pass
@@ -88,6 +105,12 @@ class put_block():
# 整装上阵 # 整装上阵
class get_bball(): class get_bball():
def find(): def find():
# 目标检测黄球
filter = label_filter(None)
ret1, list1 = filter.get(tlabel.YBALL)
if ret1 > 0:
return True
else:
return False return False
def exec(): def exec():
pass pass
@@ -95,6 +118,12 @@ class get_bball():
# 通信抢修 # 通信抢修
class up_tower(): class up_tower():
def find(): def find():
# 目标检测通信塔
filter = label_filter(None)
ret1, list1 = filter.get(tlabel.YBALL)
if ret1 > 0:
return True
else:
return False return False
def exec(): def exec():
pass pass
@@ -102,6 +131,12 @@ class up_tower():
# 高空排险 # 高空排险
class get_rball(): class get_rball():
def find(): def find():
# 目标检测红球
filter = label_filter(None)
ret1, list1 = filter.get(tlabel.RBALL)
if ret1 > 0:
return True
else:
return False return False
def exec(): def exec():
pass pass
@@ -109,13 +144,40 @@ class get_rball():
# 派发物资 # 派发物资
class put_bball(): class put_bball():
def find(): def find():
# 目标检测通信塔
filter = label_filter(None)
ret1, list1 = filter.get(tlabel.BASKET)
if ret1 > 0:
return True
else:
return False return False
def exec(): def exec():
pass pass
# 物资盘点 # 物资盘点
class put_hanoi(): class put_hanoi1():
def find(): def find():
# 目标检测左右转向标识
filter = label_filter(None)
ret1, list1 = filter.get(tlabel.MARKL)
ret2, list2 = filter.get(tlabel.MARKR)
if (ret1 > 0) or (ret2 > 0):
return True
else:
return False
def exec():
pass
class put_hanoi2():
def find():
# 目标检测左右转向标识
filter = label_filter(None)
ret1, list1 = filter.get(tlabel.LPILLAR)
if ret1 > 0:
return True
else:
return False return False
def exec(): def exec():
pass pass
@@ -123,6 +185,14 @@ class put_hanoi():
# 应急避险 # 应急避险
class move_area(): class move_area():
def find(): def find():
# 目标检测标志牌
# TODO 如何确保在都检测标志牌的情况下,和下一个任务进行区分
filter = label_filter(None)
ret1, list1 = filter.get(tlabel.SIGN)
if ret1 > 0:
return True
else:
return False return False
def exec(): def exec():
pass pass
@@ -130,6 +200,14 @@ class move_area():
# 扫黑除暴 # 扫黑除暴
class kick_ass(): class kick_ass():
def find(): def find():
# 目标检测标志牌
# TODO 如何确保在都检测标志牌的情况下,和上一个任务进行区分
filter = label_filter(None)
ret1, list1 = filter.get(tlabel.SIGN)
if ret1 > 0:
return True
else:
return False return False
def exec(): def exec():
pass pass

49
utils.py Normal file
View File

@@ -0,0 +1,49 @@
from enum import Enum
# 根据标签修改
class tlabel(Enum):
BBLOCK = 1 # 蓝色方块
RBLOCK = 2 # 红色方块
HOSPITAL = 3 # 医院
BBALL = 4 # 蓝球
YBALL = 5 # 黄球
TOWER = 6 # 通信塔
RBALL = 7 # 红球
BASKET = 8 # 球筐
MARKL = 9 # 指向标
MARKR = 10 # 指向标
SPILLAR = 11 # 小柱体 (红色)
MPILLAR = 12 # 中柱体 (蓝色)
LPILLAR = 13 # 大柱体 (红色)
SIGN = 14 # 文字标牌
TARGET = 15 # 目标靶
SHELTER = 16 # 停车区
BASE = 17 # 基地
class label_filter:
def __init__(self, list_src):
self.num = 0
self.pos = []
self.list = list_src # 获取目标检测输出的接口 (含标签,位置,置信度)
# TODO 添加置信度阈值
pass
def get(self, tlabel):
# TODO 循环查找匹配的标签值
# TODO 返回对应标签的个数,以及坐标列表
return self.num, self.pos
def find(self, tlabel):
# TODO 遍历返回的列表,有对应标签则返回 True
return False
def aim_left(self, tlabel):
# TODO 如果标签存在,则返回列表中位置最靠左的目标框和中心的偏移值
error = 0
return error
def aim_right(self, tlabel):
# TODO 如果标签存在,则返回列表中位置最靠右的目标框和中心的偏移值
error = 0
return error
def aim_near(self, tlabel):
# TODO 如果标签存在,则返回列表中位置最近的目标框和中心的偏移值
error = 0
return error