You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何直接获取Ultralytics YOLO指定类别Person的目标计数?

如何直接获取Ultralytics YOLO中指定类别的目标计数?

你不需要把检测结果转成JSON再遍历统计,Ultralytics YOLO的Results对象本身就提供了直接获取类别计数的高效方式,和日志里显示的计数逻辑完全一致。

方法一:通过类别ID直接统计(高效且直接)

COCO数据集中,"person"对应的类别ID是0,直接对检测结果的类别张量做统计即可:

from ultralytics import YOLO

def test_yolo(image_path):
    model = YOLO('yolov8n.pt')
    results = model(image_path)
    return results

if __name__ == "__main__":
    results = test_yolo('/home/myuser/test/yolo/data/persone.jpg')
    # 获取所有检测框的类别ID张量
    cls_ids = results[0].boxes.cls
    # 统计类别ID为0(person)的数量,转成Python整数
    person_count = (cls_ids == 0).sum().item()
    print("Persons: ", person_count)

方法二:通过类别名映射统计(更通用,无需硬编码ID)

如果不想硬编码类别ID,可以通过结果中的类别名字典动态获取目标ID再统计:

from ultralytics import YOLO

def test_yolo(image_path):
    model = YOLO('yolov8n.pt')
    results = model(image_path)
    return results

if __name__ == "__main__":
    results = test_yolo('/home/myuser/test/yolo/data/persone.jpg')
    result = results[0]
    # 获取类别ID到名称的映射字典
    class_map = result.names
    # 找到"person"对应的类别ID
    person_id = next(k for k, v in class_map.items() if v == 'person')
    # 统计数量
    person_count = (result.boxes.cls == person_id).sum().item()
    print("Persons: ", person_count)

为什么这种方法更高效?

这种方式直接操作YOLO返回的张量数据,避免了JSON序列化、反序列化以及Python循环遍历的额外开销,和YOLO日志中显示的计数逻辑同源,性能提升明显。

内容的提问来源于stack exchange,提问作者andrea1493

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:58:20