如何直接获取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
相关产品推荐
相关产品推荐

