Python操作 调用yolov8n-pose

环境准备

复制代码
pip install -U ultralytics

图片位置

放在项目根目录下面

样例代码

python 复制代码
# 1. 导入必备工具(只留最核心的,无多余代码)
from ultralytics import YOLO  # YOLO检测专用

# 2. 加载人体关键点模型(书包绝对检测不出关键点)
model = YOLO('yolov8n-pose.pt')

# 3. 你的图片路径(根目录图片,直接写文件名)
source = r'test_picture_5.jpg'

# 4. 模型检测(完全保留你的 conf=0.5,坚决不动!)
results = model.predict(
    source=source,
    conf=0.5,        # 你的要求:0.5阈值
    classes=0,       # 只检测人
    show=False,      # 过滤完再显示
    save=False       # 过滤完再保存
)

# 5. 核心过滤:100%剔除书包(极简逻辑,绝无例外)
for result in results:
    boxes = result.boxes       # 所有检测框(真人/误检书包)
    keypoints = result.keypoints # 所有关键点
    valid_boxes = []           # 只存真人框

    # 逐个判断每个框:是真人?还是书包?
    for i in range(len(boxes)):
        # 取出当前框的 17个关键点置信度(0=无,1=百分百)
        kp_conf = keypoints[i].conf[0]
        
        # 🔥 调试打印:亲眼看到数值(书包=全0,真人=全大于0)
        print(f"第{i+1}个框的关键点置信度:{kp_conf}")
        # 计算置信度总和(书包总和=0,真人总和=很大)
        total_conf = kp_conf.sum().item()
        print(f"第{i+1}个框的置信度总和:{total_conf}")

        # ✅ 终极规则:总和=0 → 绝对是书包(直接剔除);总和>0 → 真人(保留)
        if total_conf > 0:
            valid_boxes.append(boxes[i])
            print("→ 这个框是:真人 ✅")
        else:
            print("→ 这个框是:书包 ❌(已剔除)")

    # 替换成纯真人框
    result.boxes = valid_boxes

# 6. 显示+保存最终结果
for result in results:
    result.show()
    result.save()

# 7. 最终输出(只有书包的话,这里一定是0)
for r in results:
    print(f"\n🎯 最终检测到的真实人数:{len(r.boxes)}")

classes的可选的值:

0: person(人)
1: bicycle(自行车)
2: car(小汽车)
3: motorcycle(摩托车)
4: airplane(飞机)
5: bus(公交车)
6: train(火车)
7: truck(卡车)
8: boat(船)
9: traffic light(交通灯)
10: fire hydrant(消防栓)
11: stop sign(停车标志)
12: parking meter(停车计时器)
13: bench(长椅)
14: bird(鸟)
15: cat(猫)
16: dog(狗)
17: horse(马)
18: sheep(羊)
19: cow(牛)
20: elephant(大象)
21: bear(熊)
22: zebra(斑马)
23: giraffe(长颈鹿)
24: backpack(背包)
25: umbrella(雨伞)
26: handbag(手提包)
27: tie(领带)
28: suitcase(行李箱)
29: frisbee(飞盘)
30: skis(滑雪板)
31: snowboard(滑雪板)
32: sports ball(运动球)
33: kite(风筝)
34: baseball bat(棒球棒)
35: baseball glove(棒球手套)
36: skateboard(滑板)
37: surfboard(冲浪板)
38: tennis racket(网球拍)
39: bottle(瓶子)
40: wine glass(红酒杯)
41: cup(杯子)
42: fork(叉子)
43: knife(刀)
44: spoon(勺子)
45: bowl(碗)
46: banana(香蕉)
47: apple(苹果)
48: sandwich(三明治)
49: orange(橙子)
50: broccoli(西兰花)
51: carrot(胡萝卜)
52: hot dog(热狗)
53: pizza(披萨)
54: donut(甜甜圈)
55: cake(蛋糕)
56: chair(椅子)
57: couch(沙发)
58: potted plant(盆栽)
59: bed(床)
60: dining table(餐桌)
61: toilet(马桶)
62: tv(电视)
63: laptop(笔记本电脑)
64: mouse(鼠标)
65: remote(遥控器)
66: keyboard(键盘)
67: cell phone(手机)
68: microwave(微波炉)
69: oven(烤箱)
70: toaster(烤面包机)
71: sink(水槽)
72: refrigerator(冰箱)
73: book(书)
74: clock(时钟)
75: vase(花瓶)
76: scissors(剪刀)
77: teddy bear(泰迪熊)
78: hair drier(吹风机)
79: toothbrush(牙刷)

17个人体关键点

索引 英文名称 中文名称
0 nose 鼻子
1 left_eye 左眼
2 right_eye 右眼
3 left_ear 左耳
4 right_ear 右耳
5 left_shoulder 左肩
6 right_shoulder 右肩
7 left_elbow 左肘
8 right_elbow 右肘
9 left_wrist 左手腕
10 right_wrist 右手腕
11 left_hip 左胯
12 right_hip 右胯
13 left_knee 左膝
14 right_knee 右膝
15 left_ankle 左脚踝
16 right_ankle 右脚踝
相关推荐
weixin_580614002 小时前
CSS如何处理颜色在不同浏览器的兼容性_利用特性查询适配色彩
jvm·数据库·python
2501_914245932 小时前
Go语言如何遍历字符串_Go语言字符串遍历方法教程【指南】
jvm·数据库·python
Shorasul2 小时前
SQL事务隔离级别详解_隔离级别差异对比
jvm·数据库·python
2301_815279522 小时前
如何让 Bootstrap 图标在 Vue 3 中持续旋转动画
jvm·数据库·python
2401_837163892 小时前
Layui怎么在表格标题栏中嵌入一个迷你的HTML搜索表单
jvm·数据库·python
cmc10282 小时前
230.C语言循环的相关延时计算
c语言·开发语言
qq_372906932 小时前
Alembic 多分支迁移中依赖顺序的正确配置方法
jvm·数据库·python
Fate_I_C2 小时前
Kotlin 基础语法快速回顾
android·开发语言·kotlin
一只大袋鼠2 小时前
MyBatis 进阶实战(四): 连接池、动态 SQL、多表关联(一对多 / 多对一 / 多对多)
java·开发语言·数据库·sql·mysql·mybatis