如何使用YOLOv8仅检测人物类别并裁剪首个人物至分类模型
使用YOLOv8实现指定人物检测+首目标裁剪+分类模型输入
步骤1:加载YOLOv8并限定仅检测人物类别
YOLOv8基于COCO数据集训练,其中人物对应的类别ID为0,推理时通过classes参数即可限定检测范围。
示例代码:
from ultralytics import YOLO # 加载预训练YOLOv8检测模型(可选n/s/m/l/x版本) det_model = YOLO('yolov8n.pt') # 对目标图像推理,仅保留person类别的检测结果 infer_results = det_model('target_image.jpg', classes=0)
步骤2:提取首个人物检测框并裁剪图像
从推理结果中取出第一个有效检测框,基于坐标对原图进行裁剪操作。
示例代码:
import cv2 # 读取原图并转换颜色通道(适配YOLO的RGB格式) raw_img = cv2.imread('target_image.jpg') raw_img = cv2.cvtColor(raw_img, cv2.COLOR_BGR2RGB) # 检查是否检测到人物 if len(infer_results[0].boxes) > 0: # 提取第一个检测框的坐标(x1, y1, x2, y2)并转为整数 first_box = infer_results[0].boxes[0] x1, y1, x2, y2 = map(int, first_box.xyxy[0]) # 裁剪出人物区域 cropped_person = raw_img[y1:y2, x1:x2] else: print("未检测到人物目标")
步骤3:将裁剪图像输入分类模型
将裁剪后的人物图像预处理后直接输入分类模型即可,以下以YOLOv8分类模型为例:
示例代码:
# 加载YOLOv8分类模型 cls_model = YOLO('yolov8n-cls.pt') # 对裁剪后的人物图像执行分类推理 cls_results = cls_model(cropped_person) # 输出Top5分类结果及对应置信度 print("分类结果:", cls_results[0].probs.top5)
补充说明
- 若处理视频流,只需将单帧图像替换为视频的逐帧输入,逻辑完全一致。
- 若分类模型对输入尺寸有要求,可通过
cv2.resize(cropped_person, (target_w, target_h))调整裁剪图尺寸。 - 检测框坐标也可通过
boxes.xywh获取中心坐标+宽高格式,按需转换即可。
内容的提问来源于stack exchange,提问作者Dheeraj Reddy Balasani
相关产品推荐
相关产品推荐

