当前位置: 首页 > news >正文

基于YOLOv8-pose的手部关键点检测(3)- 实现实时手部关键点检测

目录

前言

1.扩大检测框区域

2.先检测手部,后检测手部关键点

3.正面视角检测

4.侧面视角检测

5.摄像头视角检测

6.遮挡视角检测

7.结论


前言

        使用YOLOv8-m对图像进行手部检测,然后扩大检测框区域,并对该区域使用YOLOv8-s-pose使用关键点检测,实现实时的手部关键点检测。

        实现效果:


1.扩大检测框区域

        参考:基于YOLOv8-pose的手部关键点检测(2)- 模型训练、结果分析和超参数优化

        需要将手部区域放大:2/3 放大框的函数如下,scale=2/3:

def expand_bbox(xyxy, img_width, img_height, scale=0.1):# 计算宽度和高度,和中心点width = xyxy[2] - xyxy[0]height = xyxy[3] - xyxy[1]center_x = xyxy[0] + width / 2center_y = xyxy[1] + height / 2# 增加10%的宽度和高度new_width = width * (1 + scale)new_height = height * (1 + scale)# 计算新的边界框坐标,并确保新的边界框坐标不超过图片的边界new_x1 = max(2, int(center_x - new_width / 2))new_y1 = max(2, int(center_y - new_height / 2))new_x2 = min(int(img_width) - 2, int(center_x + new_width / 2))new_y2 = min(int(img_height), int(center_y + new_height / 2))return new_x1, new_y1, new_x2, new_y2

2.先检测手部,后检测手部关键点

        关键代码如下,下面结果开始展示容错,因为我把scale错写成了1/3

    frame, _ = resize_image(frame, 720)img_height, img_width, _ = frame.shapeimg = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)hand_all = det_shou(img)[0]for i, bbox in enumerate(hand_all.boxes.xyxy):x1, y1, x2, y2 = list(map(int, bbox))x11, y11, x22, y22 = expand_bbox(bbox, img_width, img_height, scale=1 / 3)conf = hand_all.boxes.conf[i]cls = hand_all.boxes.cls[i]label = f'{hand_all.names[int(cls)]} {float(conf):.2f}'# 绘制边界框和标签cv2.rectangle(frame, (x11, y11), (x22, y22), (0, 255, 0), 2)cv2.putText(frame, label, (x11, y11 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)image_shou = frame[y11:y22, x11:x22]shou_all = pose_shou(image_shou)[0].cpu().numpy()if len(shou_all.boxes.conf) > 0:kpts = [list(map(int, shou_all.keypoints.xy[0].reshape(1, 42)[0].tolist()))]image_shou = draw_bboxes_and_keypoints(image_shou, shou_all.boxes.xyxy, shou_all.boxes.conf,shou_all.boxes.cls,kpts=kpts, cat_order=_connections, line_color=line_color)frame[y11:y22, x11:x22] = image_shoucv2.imshow('Frame', frame)

        以下绿色框表示:YOLOv8的bbox扩大得到的检测框;

        以下红色框表示:YOLOv8-pose的bbox。


3.正面视角检测

        不遮挡,基本都能检测正确。


4.侧面视角检测

        开了二倍速,也可以完美检测,不过在手交叉时候略有检测错误。


5.摄像头视角检测

        慢速下关键点都可以识别准确。


6.遮挡视角检测

        存在遮挡情况下,检测准确度骤降。一方面,一只手被手部检测后,会得到两个检测框(数据集里有两只手交叉的情况,会有两个框重叠)。另一方面,手部关键点数据集没有点的分类,被遮挡点当做不可见点处理。这样无法预测不可见的位置。


7.结论

        非遮挡情况,不存在手部相交,基本都可以识别正确。存在手部相交时,准确率会骤降。

        遮挡情况,可能导致模型几乎不可用,需要加入前处理和后处理。合并最接近相邻手部检测框(即使是两只手也当做一只手来做)。如果一个检测框检测出多只手,只取置信度最大的那只。增加局部区域物品检测,判断是否存在遮挡。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python中的元类( metaclass )
  • 嵌入式八股-C++面试35题(20240816)
  • 如果从mysql导出百万数据级的excel
  • 记录一次内网dns解析失败的排查
  • 详解Spring MVC
  • 开源BaaS 平台介绍
  • STM32——SSD1306驱动的OLED(I2C)
  • go语言设置定时任务
  • 居住证申报系统小程序的设计
  • H7-TOOL混合脱机烧录以及1拖4不同的通道烧录不同的程序操作说明(2024-08-07)
  • 江协科技STM32学习笔记(第10章 SPI通信)
  • Redis主从哨兵模式
  • Web开发中的Cookie、Session与Token:一场身份认证之旅
  • 日期类代码实现-C++
  • windows关闭英语美式键盘
  • [deviceone开发]-do_Webview的基本示例
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【Leetcode】104. 二叉树的最大深度
  • Akka系列(七):Actor持久化之Akka persistence
  • C++11: atomic 头文件
  • CentOS 7 修改主机名
  • ECMAScript入门(七)--Module语法
  • HomeBrew常规使用教程
  • JAVA_NIO系列——Channel和Buffer详解
  • javascript 哈希表
  • Javascript弹出层-初探
  • JavaScript的使用你知道几种?(上)
  • java第三方包学习之lombok
  • Joomla 2.x, 3.x useful code cheatsheet
  • js算法-归并排序(merge_sort)
  • js写一个简单的选项卡
  • MobX
  • Nodejs和JavaWeb协助开发
  • node入门
  • Python十分钟制作属于你自己的个性logo
  • Redis学习笔记 - pipline(流水线、管道)
  • vue 个人积累(使用工具,组件)
  • Vue 2.3、2.4 知识点小结
  • Webpack 4x 之路 ( 四 )
  • Yeoman_Bower_Grunt
  • Zsh 开发指南(第十四篇 文件读写)
  • 反思总结然后整装待发
  • 数据结构java版之冒泡排序及优化
  • 我从编程教室毕业
  • 一个JAVA程序员成长之路分享
  • 移动端 h5开发相关内容总结(三)
  • No resource identifier found for attribute,RxJava之zip操作符
  • gunicorn工作原理
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #if和#ifdef区别
  • #宝哥教你#查看jquery绑定的事件函数
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (11)MATLAB PCA+SVM 人脸识别