PiscCode实现用 YOLO 给现实世界加上「NPC 血条 HUD」

目标

不画检测框,只给被识别到的目标加一个"游戏风格 NPC HUD":

  • 血条(用置信度当 HP)

  • 名字 + 百分比

  • 自动避开画面边界

  • 支持实时视频 / 摄像头 / 流媒体


一、效果说明

传统目标检测长这样:

❌ 红框 + 类别 + 置信度(很工程)

我们要的效果是这样:

NPC 头顶血条 HUD

  • 没有检测框

  • 血条宽度 = 置信度

  • 颜色从绿 → 红

  • 文本在血条上方

  • 像 RPG / FPS 游戏一样

非常适合:

  • AI 游戏化演示

  • 直播互动

  • 装置艺术

  • 科技展览


二、核心思路

1️⃣ YOLO 负责「我是谁、在哪」

YOLO 输出:

  • xyxy:目标位置

  • conf:置信度

  • cls:类别 ID

2️⃣ 我们只做一件事

不画框,只画 HUD

HUD 包含三层:

  1. 血条背景

  2. 血条(HP)

  3. 文本(名字 + 百分比)


三、完整代码(可直接运行)

使用 Ultralytics YOLO

支持 YOLOv8 / YOLO11

复制代码
复制代码
import cv2
import numpy as np
from ultralytics import YOLO


class YOLOsObject:
    def __init__(
        self,
        model_path="yolo11n.pt",
        device="cuda",
    ):
        self.model = YOLO(model_path).to(device)
        self.device = device
        self.names = self.model.names

    # =====================================================
    # NPC HUD 绘制(无检测框,文字在血条上方)
    # =====================================================

    def _draw_npc_hud(self, img, box, cls_id, conf):
        x1, y1, x2, y2 = map(int, box)
        w = x2 - x1

        bar_h = 20
        text_h = 14
        gap = 2

        # ---------- HUD 位置 ----------
        bar_y2 = y1 - 2
        bar_y1 = bar_y2 - bar_h
        text_y = bar_y1 - gap

        # 防止越界:整体下移
        if text_y - text_h < 0:
            text_y = y2 + text_h + gap
            bar_y1 = text_y + gap
            bar_y2 = bar_y1 + bar_h

        # ---------- 血条背景 ----------
        cv2.rectangle(
            img,
            (x1, bar_y1),
            (x2, bar_y2),
            (35, 35, 35),
            -1
        )

        # ---------- 血条(置信度) ----------
        hp_w = int(w * conf)
        hp_color = (
            int(255 * (1 - conf)),   # R
            int(200 * conf),         # G
            60                        # B
        )

        cv2.rectangle(
            img,
            (x1, bar_y1),
            (x1 + hp_w, bar_y2),
            hp_color,
            -1
        )

        # ---------- 血条边框 ----------
        cv2.rectangle(
            img,
            (x1, bar_y1),
            (x2, bar_y2),
            (180, 180, 180),
            1
        )

        # ---------- 文本(在血条上方) ----------
        label = f"{self.names[int(cls_id)]} {int(conf * 100)}%"
        (tw, th), _ = cv2.getTextSize(
            label,
            cv2.FONT_HERSHEY_SIMPLEX,
            0.45,
            1
        )

        tx = x1
        ty = text_y

        # 文本底色(增强可读性)
        cv2.rectangle(
            img,
            (tx, ty - th - 2),
            (tx + tw + 4, ty + 2),
            (0, 0, 0),
            -1
        )

        cv2.putText(
            img,
            label,
            (tx + 2, ty),
            cv2.FONT_HERSHEY_SIMPLEX,
            0.45,
            (255, 255, 255),
            1,
            cv2.LINE_AA
        )

    # =====================================================
    # 主入口(device 必须存在)
    # =====================================================

    def do(self, frame, device):
        if frame is None:
            return None

        img = frame.copy()

        res = self.model.track(
            frame,
            persist=True,
            verbose=False,
            device=device
        )[0]

        if res.boxes is None:
            return img

        boxes = res.boxes.xyxy.cpu().numpy()
        confs = res.boxes.conf.cpu().numpy()
        clss  = res.boxes.cls.cpu().numpy()

        for box, conf, cls_id in zip(boxes, confs, clss):
            self._draw_npc_hud(
                img,
                box,
                cls_id,
                conf
            )

        return img

四、为什么不用检测框?

方式 观感
检测框 工程 / Debug
HUD 游戏 / 视觉化

现实世界 + HUD = "数字世界叠加现实"

这是很多:

  • AR

  • AI 艺术

  • 互动装置

都会用到的视觉范式。


五、几个可以继续进化的方向

🔥 1. 真·血量系统

复制代码

hp -= damage hp = max(0, hp)

🧠 2. 跟踪 ID → NPC 身份

复制代码

res.boxes.id

✨ 3. 状态特效

  • 低血量闪烁

  • 被锁定变红

  • Boss 专属 HUD

🎮 4. 与你前面的「泡泡 / 掉魂 / 佛光」组合

你现在这套代码已经是:

YOLO + 游戏特效引擎

不是"检测 demo"了。


六、总结

YOLO 不只是检测

它是一个:

  • 世界理解器

  • 实时语义引擎

  • 游戏 UI 触发器

对 PiscTrace or PiscCode感兴趣?更多精彩内容请移步官网看看~🔗 PiscTrace

相关推荐
ZCXZ12385296a6 分钟前
YOLOv26在水果图像识别与分类中的应用:苹果、猕猴桃、橙子和红毛丹的检测研究
yolo·分类·数据挖掘
数研小生15 分钟前
构建命令行单词记忆工具:JSON 词库与艾宾浩斯复习算法的完美结合
算法·json
芒克芒克16 分钟前
LeetCode 题解:除自身以外数组的乘积
算法·leetcode
Python 老手42 分钟前
Python while 循环 极简核心讲解
java·python·算法
@Aurora.1 小时前
优选算法【专题九:哈希表】
算法·哈希算法·散列表
爱看科技1 小时前
微美全息(NASDAQ:WIMI)研究拜占庭容错联邦学习算法,数据安全与隐私保护的双重保障
算法
qq_417129251 小时前
C++中的桥接模式变体
开发语言·c++·算法
开源技术2 小时前
如何将本地LLM模型与Ollama和Python集成
开发语言·python
weixin_437044642 小时前
Netbox批量添加设备——堆叠设备
linux·网络·python
我有医保我先冲2 小时前
AI 时代 “任务完成“ 与 “专业能力“ 的区分:理论基础、行业影响与个人发展策略
人工智能·python·机器学习