From b336692144e4c02e5bc73aa37efd5704e7813d9e Mon Sep 17 00:00:00 2001 From: Kevin Wong Date: Mon, 5 Jan 2026 17:55:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A4=E5=86=85=E5=AF=BC=E7=9B=B2=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=95=B0=E6=8D=AE=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflow_indoor.py | 51 ++++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/workflow_indoor.py b/workflow_indoor.py index e6c9630..71ef432 100644 --- a/workflow_indoor.py +++ b/workflow_indoor.py @@ -30,24 +30,27 @@ CLASS_CORRIDOR = 1 CLASS_SIDEWALK = 2 # 静态障碍物 (家具 + 杂物) -OBSTACLE_CLASSES = {3, 4, 5, 11, 12, 14, 15, 16, 17, 18, 19} +OBSTACLE_CLASSES = {3, 4, 5, 11, 12, 14, 15, 16, 17, 18} CLASS_CHAIR = 3 CLASS_TABLE = 4 CLASS_SOFA_BED = 5 CLASS_CABINET = 11 CLASS_TRASH_CAN = 12 -CLASS_CUP_BOTTLE = 14 -CLASS_BAG = 15 -CLASS_ELECTRONICS = 16 -CLASS_PLANT = 17 -CLASS_CLOCK = 18 -CLASS_OBSTACLE = 19 +CLASS_TRASH_CAN = 12 +# CLASS_CUP_BOTTLE = 14 (Removed) +CLASS_BAG = 14 +CLASS_ELECTRONICS = 15 +CLASS_PLANT = 16 +CLASS_OBSTACLE = 17 +CLASS_APPLIANCE = 18 # 兴趣点 -POI_CLASSES = {6, 7, 8} # door, elevator, stairs +POI_CLASSES = {6, 7, 8, 19, 20} # door, elevator, stairs, toilet, sink CLASS_DOOR = 6 CLASS_ELEVATOR = 7 CLASS_STAIRS = 8 +CLASS_TOILET = 19 +CLASS_SINK = 20 # 边界 BOUNDARY_CLASSES = {9, 10} # wall, window @@ -63,22 +66,31 @@ CLASS_NAMES = { 3: 'chair', 4: 'table', 5: 'sofa_bed', 6: 'door', 7: 'elevator', 8: 'stairs', 9: 'wall', 10: 'window', 11: 'cabinet', - 12: 'trash_can', 13: 'person', 14: 'cup_bottle', - 15: 'bag', 16: 'electronics', 17: 'plant', - 18: 'clock', 19: 'obstacle' + 12: 'trash_can', 13: 'person', + 14: 'bag', 15: 'electronics', 16: 'plant', + 17: 'obstacle', 18: 'appliance', + 19: 'toilet', 20: 'sink', + 21: 'tableware' } + # 中文名称(用于语音) CLASS_NAMES_CN = { 0: '地面', 1: '走廊', 2: '人行道', 3: '椅子', 4: '桌子', 5: '沙发', 6: '门', 7: '电梯', 8: '楼梯', 9: '墙壁', 10: '窗户', 11: '柜子', - 12: '垃圾桶', 13: '行人', 14: '杯子瓶子', - 15: '包', 16: '电子设备', 17: '绿植', - 18: '时钟', 19: '障碍物' + 12: '垃圾桶', 13: '行人', + 14: '包', 15: '电子设备', 16: '绿植', + 17: '障碍物', 18: '家电', + 19: '卫生间', 20: '洗手台', + 21: '餐具' } +# 物品类 (不播报,除非寻找模式) +ITEM_CLASSES = {21} +CLASS_TABLEWARE = 21 + # ========== 配置参数 ========== CONF_THRESHOLD = float(os.getenv('INDOOR_CONF_THRESHOLD', '0.25')) WALKABLE_MIN_AREA = int(os.getenv('INDOOR_WALKABLE_MIN_AREA', '3000')) @@ -259,10 +271,15 @@ class IndoorNavigator: masks = r0.masks.data.cpu().numpy() boxes = r0.boxes - for i, (mask, cls_id, conf) in enumerate(zip(masks, boxes.cls, boxes.conf)): cls_id = int(cls_id.item()) conf_val = float(conf.item()) + # 过滤物品类 (默认不参与导航逻辑,防止刷屏) + if cls_id in ITEM_CLASSES: + # 可以选择存入特定的 items 列表供"找东西"功能使用 + # 这里暂时忽略,避免干扰避障 + continue + # 调整 mask 尺寸 mask_resized = cv2.resize(mask, (w, h), interpolation=cv2.INTER_NEAREST) mask_bin = (mask_resized > 0.5).astype(np.uint8) @@ -430,8 +447,8 @@ class IndoorNavigator: if cy > h * 0.5: # 比较近 return f"注意前方有{name_cn}" - # 门/电梯提示 - elif cls_id in (CLASS_DOOR, CLASS_ELEVATOR): + # 门/电梯/卫生间/洗手台提示 + elif cls_id in (CLASS_DOOR, CLASS_ELEVATOR, CLASS_TOILET, CLASS_SINK): if cy > h * 0.3: # 在视野内 position = "左侧" if cx < w * 0.4 else ("右侧" if cx > w * 0.6 else "前方") return f"{position}有{name_cn}"