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

相关推荐
NAGNIP5 小时前
万字长文!回归模型最全讲解!
算法·面试
知乎的哥廷根数学学派5 小时前
面向可信机械故障诊断的自适应置信度惩罚深度校准算法(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习·矩阵
且去填词5 小时前
DeepSeek :基于 Schema 推理与自愈机制的智能 ETL
数据仓库·人工智能·python·语言模型·etl·schema·deepseek
人工干智能5 小时前
OpenAI Assistants API 中 client.beta.threads.messages.create方法,兼谈一星*和两星**解包
python·llm
databook6 小时前
当条形图遇上极坐标:径向与圆形条形图的视觉革命
python·数据分析·数据可视化
阿部多瑞 ABU6 小时前
`chenmo` —— 可编程元叙事引擎 V2.3+
linux·人工智能·python·ai写作
acanab6 小时前
VScode python插件
ide·vscode·python
666HZ6666 小时前
数据结构2.0 线性表
c语言·数据结构·算法
知乎的哥廷根数学学派7 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
实心儿儿7 小时前
Linux —— 基础开发工具5
linux·运维·算法