姿态估计 手势动作实时识别项目(基于mediapipe、keras进行实现)

姿态估计 手势动作实时识别项目(基于mediapipe、keras进行实现)

  • 0、功能展示
  • 1、项目原理介绍
  • 2、数据集采集脚本
  • 3、将采集到的动作数据集利用mediapipe库检测手部关键点信息,转换成数据信息保存到本地
  • 4、训练一个效果一般的随机森林分类器
  • 5、使用Kreas训练一个效果好点的全连接层分类器
  • 6、实时手部动作检测效果测试

项目代码下载地址
更多相关内容请参考:
姿态估计 MediaPipe实现手势,人体姿态,面部动作估计的用法

0、功能展示

在这里插入图片描述

1、项目原理介绍

本项目主要实现可以实时动态进行人的手势动作的识别,识别的手势动作由以下几类为例:
在这里插入图片描述
项目的主要思路是:
编写脚本,采集以上9类动作图像各100张作为训练集,使用mediapipe库作为工具检测手部关节,获取到手部的20个关键点信息坐标,将关键点信息坐标去除污染数据后,作为训练数据用于训练Keras全连接网络分类器,识别手势动作。
本次项目中,分别采用scikit-learn库训练随机森林分类器与Keras全连接层分类器,对比发现后者效果更好
在这里插入图片描述

opencv-python==4.7.0.68
mediapipe==0.9.0.1
scikit-learn==1.0.2
Keras==2.0.2

2、数据集采集脚本

import cv2,osDATA_DIR="./data"
if not os.path.exists(DATA_DIR):os.makedirs(DATA_DIR)number_of_classes=1
dataset_size=100
print("-------")cap=cv2.VideoCapture(0)#mac系统选择1   如果打开本地视频,就直接将0改为视频的地址就可以了
success=cap.isOpened()#返回的是bool类型,用于查看是否可以打开本地的视频
print(success)for num in range(number_of_classes):if not os.path.exists(os.path.join(DATA_DIR,str(num))):os.makedirs(os.path.join(DATA_DIR,str(num)))print("Collecting data for class {}".format(num))print("000000000000000000000000000000000000000")counter = 0while True:ret,frame=cap.read()cv2.putText(frame,"Ready? Press 'Q' !:",(100,50),cv2.FONT_HERSHEY_SIMPLEX, 1.3, (0, 255, 0), 3,cv2.LINE_AA)cv2.imshow("frame",frame)if cv2.waitKey(1)==ord('q'):breakif  counter < dataset_size:ret,frame=cap.read()frame_=frame.copy()cv2.putText(frame_, "Ready? Press 'Q' !:", (100, 50), cv2.FONT_HERSHEY_SIMPLEX, 1.3, (0, 255, 0), 3,cv2.LINE_AA)cv2.imshow("frame",frame_)if cv2.waitKey(1)==ord('w'):cv2.imwrite(os.path.join(DATA_DIR,str(num),'{}.jpg'.format(counter)),frame)print("--------------------------------------已保存本地",counter,num)counter+=1else:breakcap.release()
cv2.destroyAllWindows()

3、将采集到的动作数据集利用mediapipe库检测手部关键点信息,转换成数据信息保存到本地

import os
import pickleimport mediapipe as mp
import cv2
import matplotlib.pyplot as pltmp_hands = mp.solutions.hands
mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_styleshands = mp_hands.Hands(static_image_mode=True, min_detection_confidence=0.3)DATA_DIR = './data'data = []
labels = []
for dir_ in os.listdir(DATA_DIR):for img_path in os.listdir(os.path.join(DATA_DIR, dir_)):data_aux = []x_ = []y_ = []img 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/153844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提高软件测试覆盖率的5个重点

软件测试覆盖率是软件测试中的一个重要指标&#xff0c;它有利于保障软件质量、提高软件可靠性和可维护性。软件测试覆盖率能够发现并修复代码缺陷&#xff0c;确保代码的正确性&#xff0c;提高软件的稳定性&#xff0c;降低成本和风险。 因此进一步提高软件测试覆盖率对于软件…

Linux 之查看标准错误码工具

目录 1. Linux 之查看标准错误码工具 1. Linux 之查看标准错误码工具 $ sudo apt install moreutils$ errno -l EPERM 1 不允许的操作 ENOENT 2 没有那个文件或目录 ESRCH 3 没有那个进程 EINTR 4 被中断的系统调用 EIO 5 输入/输出错误 ENXIO 6 没有那个设备或地址 E2BIG 7 参…

Oauth2认证及Spring Security Oauth2授权码模式

Oauth2认证 Oauth2简介 简介 第三方认证技术方案最主要是解决认证协议的通用标准问题&#xff0c;因为要实现跨系统认证&#xff0c;各系统之间要遵循一定的接口协议。 OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时&#xff0c;任何第三方都可以使…

ICCV 23丨3D-VisTA:用于 3D 视觉和文本对齐的预训练Transformer

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/abs/2308.04352 开源代码&#xff1a;http://3d-vista.github.io 摘要&#xff1a; 3D视觉语言标定&#xff08;3D-VL&#xff09;是一个新兴领域&#xff0c;旨在将…

类型体系与基本数据类型(第三节)

目录 前言 一、标量 1.1 类模板的声明 1.2 基于CPU的特化版本 1.3 标量的主体类型 前言 一个深度学习框架的初步实现为例&#xff0c;讨论如何在一个相对较大的项目中深入应用元编程&#xff0c;为系统优化提供更多的可能。 以下内容结合书中原文阅读最佳&#xff01;&a…

centos7安装mysql8

打开Mysql下载页面 https://downloads.mysql.com/archives/community/ 选择版本号&#xff1a; centos选择Red Hat版本&#xff0c;复制地址 复制地址后&#xff0c;链接ssh&#xff0c;添加储存库 yum install 粘贴地址&#xff1b; yum install https://downloads.mysql…

人工智能基础_机器学习044_使用逻辑回归模型计算逻辑回归概率_以及_逻辑回归代码实现与手动计算概率对比---人工智能工作笔记0084

上面我们已经把逻辑回归的公式,以及,公式对应的图形都画画出来了,然后我们再来看看 如何用代码实现 可以看到上面是代码,咱们自己去写一下 import numpy as np from sklearn.linear_model import LogistieRegression from sklearn import datasets # 训练数据和测试数据拆分…

人工智能时代下的程序员核心竞争力:构建专属护城河

选题建议&#xff1a;《人工智能时代下的程序员核心竞争力&#xff1a;构建你的护城河》 大纲&#xff1a; I. 引言 A. 人工智能时代的发展趋势B. 程序员面临的挑战与机遇 I. 引言 A. 人工智能时代的发展趋势 随着科技的飞速进步&#xff0c;我们已经踏入了一个日新月异的人工…

Leetcode—2216.美化数组的最少删除数【中等】

2023每日刷题&#xff08;三十六&#xff09; Leetcode—2216.美化数组的最少删除数 实现代码 int minDeletion(int* nums, int numsSize) {int last nums[0], flag 1, ans 0;for(int i 1; i < numsSize; i) {if(flag) { // 前一个下标为偶数if(nums[i] last) {…

【CSS】min 和 max 函数(设置最大最小值)

文章目录 min() 函数&#xff1a;允许你从逗号分隔符表达式中选择一个最小值作为 CSS 的属性值 width: min(1vw, 4em, 80px);max() 函数&#xff1a;让你可以从一个逗号分隔的表达式列表中选择最大&#xff08;正方向&#xff09;的值作为属性的值 width: max(10vw, 4em, 80p…

Linux C 线程

线程 概述线程和进程的异同如何选择使用进程还是线程 函数获取进程自身ID  pthread_self创建线程  pthread_create退出线程  pthread_exit线程等待  pthread_join 四种线程模型1 &#xff09;单线程2 &#xff09;单线程3 &#xff09;双线程4 &#xff09;三线程 概述…

【HarmonyOS】低代码平台组件拖拽使用技巧之列表

【关键字】 HarmonyOS、低代码平台、组件拖拽、列表、列表项 1、写在前面 我们在日常开发中使用最多的组件可能就是列表组件了&#xff0c;现在几乎所有的应用都离不开列表&#xff0c;那么今天我们就来介绍一下如何利用低代码平台来实现列表的展示&#xff0c;列表实际上也是…

律师网站开发实战案例

最近关于律师的电视剧很火爆&#xff0c;各大卫视也相继播出关于律师类的电视剧&#xff0c;在互联网领域律师也不再是那种遥不可攀&#xff0c;不能触达的领域。今天我们要介绍的是律师行业网站的制作过程&#xff0c;他到底有什么功能点和用处。 律师网站的功能主要包括&…

kettle官网和中文网地址

整理的kettle相关的网站地址&#xff1a; github 地址&#xff1a; https://github.com/pentaho/pentaho-kettle kettle下载目录&#xff1a; https://sourceforge/projects/pentaho/files/ kettle9.2下载地址&#xff1a; https://sourceforge/projects/pentaho/files/Penta…

HALCON根据需要创建自定义函数

任务要求&#xff1a; 创建函数myfun(a,b,c)&#xff0c;输入浮点数a&#xff0c;b的值&#xff0c;计算c a b&#xff0c;将计算结果返回。 操作步骤&#xff1a; 1&#xff09;打开HDevelop程序 2&#xff09;打开函数菜单&#xff0c;选择“创建新函数”&#xff0c…

Spring 定时任务如何到达某一指定时间点后,触发任务机制

在Spring框架中&#xff0c;可以使用Spring Task来实现定时任务。以下是使用Spring Task触发定时任务的步骤&#xff1a; 添加依赖&#xff1a;首先&#xff0c;在你的项目中添加Spring Task的依赖。如果使用Maven管理项目&#xff0c;可以在pom.xml文件中添加以下依赖项&#…

中间件安全:Apache Tomcat 文件上传.(CVE-2017-12615)

中间件安全&#xff1a;Apache Tomcat 文件上传. 当存在漏洞的 Tomcat 运行在 Windows / Linux 主机上&#xff0c;且启用了 HTTP PUT 请求方法(例如&#xff0c;将 readonly 初始化参数由默认值设置为ialse) &#xff0c; 攻击者将有可能可通过精心构造的攻击请求数据包向服务…

java算法学习索引之数组矩阵问题

一 将正方形矩阵顺时针转动90 给定一个NN的矩阵matrix&#xff0c;把这个矩阵调整成顺时针转动90后的形式。 顺时针转动90后为&#xff1a; 【要求】额外空间复杂度为O&#xff08;1&#xff09;。 public void rotate(int[][] matrix) {int tR 0; // 左上角行坐标int tC 0;…

常用系统函数

$clog2 clogb2 系统函数 $clog2 应返回参数以 2 为底的对数的上限&#xff08;对数四舍五入为整数值&#xff09;。参数可以是整数或任意大小的向量值。参数应被视为无符号值&#xff0c;参数值为 0 将产生结果 0。 该系统函数可用于计算对给定大小的存储器进行寻址所…

使用过去20天测试未来7天,时间步是多少

在使用过去20天的数据预测未来7天时&#xff0c;时间步的设置通常取决于你对问题的理解以及模型的设计。时间步定义了每个样本中包含多少个时间步的数据。 在使用循环神经网络 (RNN) 或长短时记忆网络 (LSTM) 这样的模型时&#xff0c;你可以将时间步的选择视为一个超参数。这…