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

实时手势识别(C++与python都可实现)

一、前提配置:

Windows,visual studio 2019,opencv,python10,opencv-python,numpy,tensorflow,mediapipe,math

1.安装python环境

这里我个人使用的安装python10(google官方使用的python8)
安装相应的包,python路径添加到系统路径去,方便使用pip

pip install mediapipe opencv-python
pip install numpy==1.22.4 
pip install tensorflow-cpu

二、基于python手势识别

打开运行infer.py

如果能正常运行使用,说明python环境没有问题。
infer.py下载在我gitee上,下面是链接地址
https://gitee.com/cnlycs/hand_static-lib/tree/master
如果只是使用python进行手势识别的话,把infer进行魔改就到此已经完成了
看看效果
0在这里插入图片描述

在这里插入图片描述
label一共为[0,1,2,3,4,5]

三、C++实现

前面python的配置都得安装

最本质的原理是通过python对c++的接口实现的
(我也尝试过编译mediapipe源码给生成DLL文件,只能说现在各方面条件还不允许,不是网络问题,就是编译问题,能不能成功看运气,最后虽然成功了,但卡在了部署阶段)

1.创建新项目

通过visual studio 2019创建一个新项目,我选择的是控制台应用,毕竟展示出来给大家看,也可自己打包成静态库
在这里插入图片描述

2.在pose_demo.cpp中复制该代码

#include<iostream>
#include<Python.h>
#include <numpy/arrayobject.h>//numpy的头文件
#include<opencv/cv.hpp>//opencv的头文件
using namespace cv;
using namespace std;PyObject* Init_Hand_Model() {//加载numpy相关的库import_array();//命令行执行语句PyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append('./script')");//PyImport_ImportModule:动态加载python模块,相当于导入python脚本文件PyObject* pModule = PyImport_ImportModule("infer");if (pModule == NULL) {cout << "pModule not found" << endl;}//调用模型加载PyObject* pFunc_load = PyObject_GetAttrString(pModule, "load_model");if (pFunc_load == NULL || PyCallable_Check(pFunc_load) == NULL) {cout << "pFunc_load not found!" << endl;return 0;}PyObject_CallObject(pFunc_load, NULL);//准备推理模型PyObject* pInfer = PyObject_GetAttrString(pModule, "infer_image");if (pInfer == NULL || PyCallable_Check(pInfer) == NULL) {cout << "pInfer not found!" << endl;return 0;}Py_DECREF(pModule);Py_DECREF(pFunc_load);return pInfer;
}cv::Mat Hand_Infer(cv::Mat img, PyObject* pInfer,int *res)
{PyArrayObject* array_com = NULL;PyObject* pRet = NULL;npy_intp dims[] = { img.rows, img.cols, img.channels() };//生成包含这个多维数组的PyObject对象,使用PyArray_SimpleNewFromData函数,//第一个参数2表示维度,第二个为维度数组Dims,第三个参数指出数组的类型,第四个参数为数组PyObject* pValue = PyArray_SimpleNewFromData(3, dims, NPY_UINT8, img.data);PyObject* pArgs = PyTuple_New(1);PyTuple_SetItem(pArgs, 0, pValue);	/* pValue的引用计数被偷偷减一,无需手动再减 */pRet = PyObject_CallObject(pInfer, pArgs);Py_DECREF(pValue);Py_DECREF(pArgs);// 解析返回结果 //PyArrayObject* array_com;*res = -1;PyArray_OutputConverter(PyList_GetItem(pRet, 0), &array_com);npy_intp* shape = PyArray_SHAPE(array_com);Mat com(shape[0], shape[1], CV_8UC3, PyArray_DATA(array_com));PyArg_Parse(PyList_GetItem(pRet, 1),"i",res);return com;
}int hand_infer_by_camera() {//初始化python解释器Py_Initialize();PyObject* pInfer = Init_Hand_Model();VideoCapture cap(0);if (!cap.isOpened()){printf("Can not open a camera\n");return -1;}while (true){Mat img;cap >> img;if (img.empty())break;cv::flip(img, img, 1);int* res = new int;Mat com = Hand_Infer(img, pInfer, res);cout << *res;cv::imshow("com", com);cv::waitKey(10);/*cv::imshow("pha", pha);cv::waitKey(0);*/img.release();}Py_DECREF(pInfer);Py_Finalize();return 0;
}int main()
{hand_infer_by_camera();return 0;
}

到现在为止已经完成了一大半,还有很多报红的信息,别急,现在处理

3.环境配置

项目改为Release X64
在这里插入图片描述
配置项目属性
在这里插入图片描述

3.1包含目录的设置

项目include包含,python环境的include,script文件夹(gitee就能下载,里面就是infer.py),opencv下build/include,numpy/core/include
numpy在python的包文件夹里面,opencv自行下载
在这里插入图片描述

3.2库目录设置

python10环境下libs,numpy\core\lib,opencv\build\x64\vc15\lib设置3个lib路径即可
在这里插入图片描述

3.3附加依赖项

只需要配置opencv_world3410.lib即可
在这里插入图片描述

3.4设置script文件路径

前往https://gitee.com/cnlycs/hand_static-lib下载即可
把该文件夹放在pose_demo.cpp同一文件下即可
在这里插入图片描述

4.运行查看效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

实时手势识别(C++与python都可实现)

一、前提配置&#xff1a; Windows&#xff0c;visual studio 2019&#xff0c;opencv&#xff0c;python10&#xff0c;opencv-python&#xff0c;numpy&#xff0c;tensorflow&#xff0c;mediapipe&#xff0c;math 1.安装python环境 这里我个人使用的安装python10&#…...

15个Spring扩展点,一般人知道的不超过5个!

Spring的核心思想就是容器&#xff0c;当容器refresh的时候&#xff0c;外部看上去风平浪静&#xff0c;其实内部则是一片惊涛骇浪&#xff0c;汪洋一片。Spring Boot更是封装了Spring&#xff0c;遵循约定大于配置&#xff0c;加上自动装配的机制。很多时候我们只要引用了一个…...

Elasticsearch:以 “Painless” 方式保护你的映射

Elasticsearch 是一个很棒的工具&#xff0c;可以从各种来源收集日志和指标。 它为我们提供了许多默认处理&#xff0c;以便提供最佳用户体验。 但是&#xff0c;在某些情况下&#xff0c;默认处理可能不是最佳的&#xff08;尤其是在生产环境中&#xff09;&#xff1b; 因此&…...

js几种对象创建方式

适用于不确定对象内部数据方式一&#xff1a;var p new Object(); p.name TOM; p.age 12 p.setName function(name) {this.name name; }// 测试 p.setName(jack) console.log(p.name,p.age)方式二&#xff1a; 对象字面量模式套路&#xff1a;使用{}创建对象&#xff0c;同…...

阿里云服务器ECS适用于哪些应用场景?

云服务器ECS具有广泛的应用场景&#xff0c;既可以作为Web服务器或者应用服务器单独使用&#xff0c;又可以与其他阿里云服务集成提供丰富的解决方案。 云服务器ECS的典型应用场景包括但不限于本文描述&#xff0c;您可以在使用云服务器ECS的同时发现云计算带来的技术红利。 阿…...

Ajax学习笔记01

引入 翻译成中文就是“异步的Javascript和XML”。即使用Javascript语言与服务器进行异步交互&#xff0c;传输的数据为XML&#xff08;当然&#xff0c;传输的数据不只是XML&#xff09;。 AJAX 不是新的编程语言&#xff0c;而是一种使用现有标准的新方法。 AJAX 最大的优点…...

Jinja2----------过滤器的使用、控制语句

目录 1.过滤器的使用 1.过滤器和测试器 2.过滤器 templates/filter.html app.py 效果 3.自定义过滤器 app.py templates/filter.html 效果 2.控制语句 1.if app.py templates/control.html 2.for app.py templates/control.htm 1.过滤器的使用 1.过滤器和测…...

面试了1个自动化测试,开口40W年薪,只能说痴人做梦...

公司前段缺人&#xff0c;也面了不少测试&#xff0c;结果竟然没有一个合适的。一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在10-20k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是3年工作经验&#xff0c;但面试…...

冲鸭!33% 程序员月薪达到 5 万元以上~

2023年&#xff0c;随着互联网产业的蓬勃发展&#xff0c;程序员作为一个自带“高薪多金”标签的热门群体&#xff0c;被越来越多的人所关注。在过去充满未知的一年中&#xff0c;他们的职场现状发生了一定的改变。那么&#xff0c;程序员岗位的整体薪资水平、婚恋现状、职业方…...

【RSA】HTTPS中SSL/TLS握手时RSA前后端加密流程

SSL/TLS层的位置 SSL/TLS层在网络模型的位置&#xff0c;它属于应用层协议。接管应用层的数据加解密&#xff0c;并通过网络层发送给对方。 SSL/TLS协议分握手协议和记录协议&#xff0c;握手协议用来协商会话参数&#xff08;比如会话密钥、应用层协议等等&#xff09;&…...

clion在linux设置桌面启动图标(jetbrains全家桶均适用)

clion在linux设置桌面启动图标&#xff08;jetbrains全家桶均适用&#xff09; 网上大部分步骤都只是pycharm的教程&#xff0c;其实对于jetbrains全家桶都适合&#xff0c;vs code编辑器也可以这样。 刚开始是使用pycharm在linux设置的教程&#xff0c;参照&#xff1a;http…...

Java数据结构LinkedList单链表和双链表模拟实现及相关OJ题秒AC总结知识点

本篇文章主要讲述LinkedList链表中从初识到深入相关总结&#xff0c;常见OJ题秒AC&#xff0c;望各位大佬喜欢 一、单链表 1.1链表的概念及结构 1.2无头单向非循环链表模拟实现 1.3测试模拟代码 1.4链表相关面试OJ题 1.4.1 删除链表中等于给定值 val 的所有节点 1.4.2 反转…...

立创EDA 学习 day01 应用下载安装,基本使用的操作

1.下载网站 1.链接&#xff1a;立创EDA下载-立创EDA官方版-PC下载网 (pcsoft.com.cn) 2.安装立创EDA 1.直接 next &#xff08;简单的操作&#xff09; 3.注册账号 1. 最好注册一个账号&#xff0c;等下在原理图转PCB 板的时候要登录&#xff0c;才可以。 4.新建工程 1.新…...

华为OD机试真题Python实现【火星文计算】真题+解题思路+代码(20222023)

火星文计算 题目 已经火星人使用的运算符号为# $ 其与地球人的等价公式如下 x#y=2*x+3*y+4 x$y=3*x+y+2 x y是无符号整数 地球人公式按照 c 语言规则进行计算 火星人公式中$符优先级高于#相同的运算符按从左到右的顺序运算 🔥🔥🔥🔥🔥👉👉👉👉👉👉 华…...

yolov8 修改类别 自定义数据集

yolov8 加载yolo网络模型 yolov8n.yaml nc: 80 # number of classes 分类数量 depth_multiple: 0.33 # scales module repeats 重复规模 width_multiple: 0.25 # scales convolution channels 缩放卷积通道 backbone head 指定配置 coco128.yaml path: ../datasets/coco128 # d…...

Linux环境下验证python项目

公司大佬开发的python rpa跑数项目&#xff0c;Windows运行没问题后&#xff0c;需要搭建一个linux环境进行验证&#xff0c;NOW START&#xff01; Install VMware官网 下载好之后打开按步骤安装 最后一步会让填许可证&#xff08;密钥&#xff09;&#xff0c;这里自行百…...

MAC开发使用技巧

1. 查看所有安装的程序 您可以通过以下步骤在 macOS 中查看所有已安装的程序&#xff1a; 点击屏幕左上角的苹果图标&#xff0c;选择“关于本机”。 在打开的窗口中&#xff0c;选择“系统报告”。 在系统报告窗口中&#xff0c;选择“软件”选项卡&#xff0c;然后选择“安…...

第三章-OpenCV基础-7-形态学

前置 形态学主要是从图像中提取分量信息&#xff0c;该分量信息通常是图像理解时所使用的最本质的形状特征,对于表达和描绘图像的形状有重要意义。 大体就是通过一系列操作让图像信息中的关键信息更加凸出。同时&#xff0c;形态学的操作都是基于灰度图进行。 相关操作最主要…...

DeepFaceLab 中Ubuntu(docker gpu) 部署

DeepFaceLab 在windows图形界面部署比较多&#xff0c;下面用ubuntu 部署在服务器上。部署过程中python版本&#xff0c;或者protobuf版本可能有问题&#xff0c;所以建议用docker 代码下载 cd /trainssdgit clone --depth 1 https://github.com/nagadit/DeepFaceLab_Linux.g…...

分析帆软填报报表点提交的逻辑

1 点提交这里首先会校验数据,校验成功后就去入库数据,这里不分析校验,分析下校验成功后数据是怎么入库的。 2 我们知道当点提交时,发送的请求中的参数为 op=fr_write,cmd=submit_w_report. 在帆软报表中op表示服务,cmd表示服务中的一个动作处理。比如op=fr_write这个服务…...

【ROS学习笔记9】ROS常用API

【ROS学习笔记9】ROS常用API 文章目录【ROS学习笔记9】ROS常用API前言一、 初始化二、 话题与服务相关对象三、 回旋函数四、时间函数五、其他函数Reference写在前面&#xff0c;本系列笔记参考的是AutoLabor的教程&#xff0c;具体项目地址在 这里 前言 ROS的常用API&#xf…...

客户关系管理挑战:如何保持客户满意度并提高业绩?

当今&#xff0c;各行业市场竞争愈发激烈&#xff0c;对于保持客户满意度并提高业绩是每个企业都面临的挑战。而客户关系管理则是实现这一目标的关键&#xff0c;因为它涉及到与客户的互动和沟通&#xff0c;以及企业提供优质的产品和服务。在本文中&#xff0c;我们将探讨客户…...

Cartesi 2023 年 2 月回顾

2023年2月28日&#xff0c;通过ETH Denver和Cartesi的在线全球黑客马拉松一起开启黑客马拉松赛季!ETH Denver 正在热火朝天的进行着&#xff0c;我们正在为3月25日开始的首个全球在线黑客马拉松做准备。但这并不是本月发生的所有事情。我们在继续扩展和发展在全世界各地的社区&…...

《爆肝整理》保姆级系列教程python接口自动化测试框架(二十六)--批量执行用例 discover(详解)

简介  我们在写用例的时候&#xff0c;单个脚本的用例好执行&#xff0c;那么多个脚本的时候&#xff0c;如何批量执行呢&#xff1f;这时候就需要用到 unittest 里面的 discover 方法来加载用例了。加载用例后&#xff0c;用 unittest 里面的 TextTestRunner 这里类的 run 方…...

Ubuntu学习篇

前言 环境&#xff1a;Ubuntu 20.4lts Ubuntu系统跟centos还是有很多区别的&#xff0c;笔者之前一直使用的是centos7.x版本。 镜像下载地址&#xff1a;https://ubuntu.com/download/server#downloads 其他版本下载地址&#xff1a;https://launchpad.net/ubuntu/cdmirrors&a…...

extern关键字

1、基本解释&#xff1a; extern可以置于变量或者函数前&#xff0c;以标示变量或者函数的定义在别的文件中&#xff0c;提示编译器遇到此变量和数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用。   第一个,当它与"C"一起…...

T3 出行云原生容器化平台实践

作者&#xff1a;林勇&#xff0c;就职于南京领行科技股份有限公司&#xff0c;担任云原生负责人&#xff0c;也是公司容器化项目的负责人。主要负责 T3 出行云原生生态相关的所有工作&#xff0c;如服务容器化、多 Kubernetes 集群建设、应用混部、降本增效、云原生可观测性基…...

从0开始学python -44

Python3 正则表达式 -2 检索和替换 Python 的re模块提供了re.sub用于替换字符串中的匹配项。 语法&#xff1a; re.sub(pattern, repl,string, count0, flags0)参数&#xff1a; pattern : 正则中的模式字符串。repl : 替换的字符串&#xff0c;也可为一个函数。string : …...

22- estimater使用 (TensorFlow系列) (深度学习)

知识要点 estimater 有点没理解透 数据集是泰坦尼克号人员幸存数据. 读取数据&#xff1a;train_df pd.read_csv(./data/titanic/train.csv) 显示数据特征&#xff1a;train_df.info() 显示开头部分数据&#xff1a;train_df.head() 提取目标特征&#xff1a;y_train tr…...

eKuiper 1.8.0 发布:零代码实现图像/视频流的实时 AI 推理

LF Edge eKuiper 是 Golang 实现的轻量级物联网边缘分析、流式处理开源软件&#xff0c;可以运行在各类资源受限的边缘设备上。eKuiper 的主要目标是在边缘端提供一个流媒体软件框架&#xff08;类似于 Apache Flink &#xff09;。eKuiper 的规则引擎允许用户提供基于 SQL 或基…...

手机网站怎么建设/网站创建的流程是什么

软件测试--概念1. 软件测试的生命周期2. 如何描述一个 BUG?3. BUG 级别的定义?4. BUG 的生命周期1. 软件测试的生命周期 软件测试的生命周期&#xff1a; 需求分析→测试计划→ 测试设计、测试开发→ 测试执行→ 测试评估 需求阶段 –测试人员了解需求、对需求进行分解&am…...

游戏类企业网站模板/设计师必备的6个网站

在看专业英语的时候&#xff0c;学习JS的Timer Event.正好有一个例子&#xff0c;实现的是&#xff0c;图片自动切换&#xff0c;当鼠标点击图片的时候&#xff0c;停止切换。于是想要动手实践一下&#xff0c;并且添加上自己的想法。于是就有了下面的图片和代码。首先&#xf…...

深圳做网站公/网站关键词优化软件效果

2019独角兽企业重金招聘Python工程师标准>>> 首先 注意&#xff1a;rman备份的时候并不会备份临时表空间的数据文件&#xff08;想想也是&#xff0c;反正是临时的&#xff0c;备它干嘛&#xff09;&#xff0c;所以完全恢复之后&#xff0c; 如果临时表空间的数据文…...

wordpress图片上传失败/网址推广

目录传送门&#xff1a;《Flutter快速上手指南》先导篇在 Dart 中&#xff0c;仅使用 int 和 double 两种数据类型来表示整数和浮点数。int不同于 Java 等语言&#xff0c;在 Dart 中&#xff0c;int 的取值范围是 -2^63 &#xff5e; 2^63 - 1 。var x 1; var hex 0xDEADBEE…...

建设网站需要什么知识/徐州百度seo排名

披萨店销售集 一个虚构的比萨饼店一年的销售额&#xff0c;包括每个订单的日期和时间以及提供的比萨饼&#xff0c;以及有关类型、大小、数量、价格和成分的其他详细信息。 数据集基本情况 文件类型 CSV文件 标签 商业食品与饮料时间序列&#xff0c;数据结构&#xff0c…...

浅谈政府门户网站建设/上海站优云网络科技有限公司

概述 通过可视化设置好ip地址&#xff0c;子网掩码&#xff0c;网关&#xff0c;dns后&#xff0c;重启电脑或者关机后&#xff0c;网卡的网关会自动消失&#xff0c;自己不见了&#xff0c;导致上不去网。 解决办法 方法一&#xff1a;通过注册表解决 1、开始–运行–输入“…...