Python轻松实现炫酷的手势检测
大家好,今天分享一个非常有意思且十分简单的python库——mediapipe库。该库集成了大量的深度学习模型,短短几行代码,就可以快速实现一个炫酷的实例,本文就以手势检测为例,展示一下这个强大的开源库。
mediapipe由Google开发,集合了人脸识别、姿势检测、图像分割、目标识别等多种深度学习模型,主要有以下几个特点:
- 端到端加速:内置快速 ML 推理和处理加速,即使在普通硬件上也是如此
- 一次构建,随处部署:统一解决方案适用于Android、iOS、桌面、Web和loT
- 即用型解决方案:展示框架全部功能的尖端 ML 解决方案
- 免费和开源:Apache 2.0 下的框架和解决方案,完全可扩展和可定制
mediapipe中集合的模型,包含人脸识别、面部检测、手势检测、即时运动追踪、姿势检测、物体识别等,下图对其进行展示。
| | |
人脸识别 | 面部检测 | 手势检测 |
| | |
即时运动追踪 | 姿势检测 | 物体识别 |
| | |
头发分割 | 3D识别 | 目标追踪 |
下面以手势检测为例,介绍一下mediapipe的用法。
首先定义一个手势检测的模型,第7、8行分别是手21个点的样式和点与点连线的样式,21个关键点的分布如图所示。
import cv2
import mediapipe as mp
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
mpHands = mp.solutions.hands
hands = mpHands.Hands()
#设置线和点的样式
handLmsStyle = mpDraw.DrawingSpec(color = (0,0,255),thickness=5)
handConnStyle = mpDraw.DrawingSpec(color = (0,255,0),thickness=10)
使用while循环,处理每一帧图像即可,就是这么简单,第7行的if判断,如果检测到了手,那么就遍历手势检测的21个点,然后使用第10行的函数画上线和点即可。
while True:
#获取每一帧图像ret, img = cap.read()if ret:imgRGB = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)res = hands.process(imgRGB)if res.multi_hand_landmarks:for handLms in res.multi_hand_landmarks:#画线mpDraw.draw_landmarks(img,handLms,mpHands.HAND_CONNECTIONS,handLmsStyle,handConnStyle) cv2.imshow('img',img)if cv2.waitKey(1) == ord('q'):break
直接运行代码,即可实现手势检测。而且,官方有详细的文档,如感兴趣可以自行进行学习,并调整一些参数让程序更加符合某些实际需求。
相关文章:

Python轻松实现炫酷的手势检测
大家好,今天分享一个非常有意思且十分简单的python库——mediapipe库。该库集成了大量的深度学习模型,短短几行代码,就可以快速实现一个炫酷的实例,本文就以手势检测为例,展示一下这个强大的开源库。 mediapipe由Goog…...

什么是信噪比
大家好,今天给大家介绍什么是信噪比,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 “信噪比”是电子技术中经常用到的一个词组,知道它的确切含义有一定意…...

学习redis有效期和数据类型
1、安装redis和连接redis 参考:ubuntu安装单个redis服务_ubuntu redis单机版安装-CSDN博客 连接redis:redis-cli.exe -h localhost -p 6379 -a 123456 2、Redis数据类型 以下操作我们在图形化界面演示。 2.1、五种常用数据类型介绍 Redis存储的是key…...

【linux】进程管理
前言 linux也有类似于windows的任务管理器的功能,我们也可以通过这个功能查看当前的进程情况。 语法 ps [-e] [-f] -e显示所有进程 -f显示完整的信息 我们可以直接用-ef来简化指令。 案例演示 信息过滤 但是如果我们直接这么输入的话,可以看到他回复…...
k8s operator从0到1实践
文章目录 环境准备一个k8s集群开发工具包mac安装 实践初始化operator项目核心逻辑编写测试验证验证 部署 参考 环境准备 一个k8s集群 推荐使用docker-desktop,本地单机集群 开发工具包 这里推荐使用脚手架工具kubebuilder 使用脚手架工具,能生成项目…...

【动态规划】dp多状态问题
欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:【LeetCode】winter vacation training 目录 👉🏻按摩师👉&…...

docker安裝gocd-server,并配置gitlab授权登录
gocd的地址:Installing GoCD server on Windows | GoCD User Documentation gocd文档:GitHub - gocd/docker-gocd-server: Docker server image for GoCD 一、docker拉取gocd镜像 #拉取server镜像 docker pull gocd/gocd-server:v21.1.0docker pull g…...

使用pygame实现简单的烟花效果
import pygame import sys import random import math# 初始化 Pygame pygame.init()# 设置窗口大小 width, height 800, 600 screen pygame.display.set_mode((width, height)) pygame.display.set_caption("Fireworks Explosion")# 定义颜色 black (0, 0, 0) wh…...

ubantu系统运维命令,端口相关操作
1、使用sudo ufw status命令查看所有开放的端口,如下图: 2、使用命令sudo ufw allow 8443,打开端口8443.如下图: 3、使用 sudo ufw reload刷新端口配置,如下图:...
Java中的Stream API进阶使用
Java的Stream API是Java 8引入的一个强大的功能,它允许以声明性方式处理数据集合,例如过滤、映射、排序等。下面是一些Stream API的进阶使用: 自定义中间操作:你可以定义自己的中间操作,然后在Stream上使用它。例如&am…...
R语言【paleobioDB】——pbdb_collection():从PBDB获取单个采集号的基本信息
Package paleobioDB version 0.7.0 paleobioDB 包在2020年已经停止更新,该包依赖PBDB v1 API。 可以选择在Index of /src/contrib/Archive/paleobioDB (r-project.org)下载安装包后,执行本地安装。 Usage pbdb_collection (id, ...) Arguments 参数【…...

阿里云服务器的tcp端口无法访问(云服务厂家问题?)
问题->无法访问 阿里云服务器的tcp端口 最近一台阿里云服务器的一个端口61616无法访问,在服务器内用外网地ip发现无法访问,用内网ip访问是正常的,通过技术排查: 解决->无法访问 阿里云服务器的tcp端口 1 配置官网的安全组…...

BikeDNA(九) 特征匹配
BikeDNA(九) 特征匹配 特征匹配采用参考数据并尝试识别 OSM 数据集中的相应特征。 特征匹配是比较单个特征而不是研究区域网格单元水平上的特征特征的必要前提。 方法 将两个道路数据集中的特征与其数字化特征的方式以及边缘之间潜在的一对多关系进行…...
vuex是什么?怎么使用?哪种功能场景使用它?
Vuex是Vue.js官方推荐的状态管理库,用于在Vue应用程序中管理和共享状态。它基于Flux架构和单向数据流的概念,将应用程序的状态集中管理,使得状态的变化更可追踪、更易于管理。Vuex提供了一个全局的状态树,以及一些用于修改状态的方…...

求斐波那契数列矩阵乘法的方法
斐波那契数列 先来简单介绍一下斐波那契数列: 斐波那契数列是指这样一个数列:1,1,2,3,5,8,13,21,34,55,89……这个数列从第3项开始 &…...

【IPC通信--消息队列】
消息队列(也叫做报文队列)是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息…...

读写分离的手段——主从复制,解决读流量大大高于写流量的问题
应用场景 假设说有这么一种业务场景,读流量显著高于写流量,你要怎么优化呢。因为写是要加锁的,可能就会阻塞你读请求。而且其实读多写少的场景还很多见,比如电商平台,用户浏览n多个商品才会买一个。 大部分人的思路可…...

Day02
今日任务: 977 有序数组的平方209 长度最小的子数组59 螺旋矩阵Ⅱ 977 有序数组的平方 题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/ 双指针问题,以及数组本身时有序的; 思路: 左、右两个…...
编程语言的发展未来?
编程语言的未来? 随着科技的飞速发展,编程语言在计算机领域中扮演着至关重要的角色。它们是软件开发的核心,为程序员提供了与机器沟通的桥梁。那么,在技术不断进步的未来,编程语言的走向又将如何呢? 方向…...
docsify阿里云上部署
使用Markdown格式安装和部署Nginx 本文将介绍如何使用Markdown格式安装和部署Nginx。 步骤 安装Nginx: 打开终端,并根据您的操作系统执行以下命令来安装Nginx: 对于Ubuntu或Debian系统: sudo apt-get update sudo apt-get insta…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...