AI项目一:mediapipe测试

news2024/10/7 9:17:11

若该文为原创文章,转载请注明原文出处。

一. 引言


MediaPipe 是一款由 Google Research 开发并开源的多媒体机器学习模型应用框架。在谷歌,一系列重要产品,如 YouTube、Google Lens、ARCore、Google Home 以及 Nest,都已深度整合了 MediaPipe。MediaPipe大有用武之地,可以做物体检测、自拍分割、头发分割、人脸检测、手部检测、运动追踪,等等。基于此可以实现更高级的功能。

更多详细可以查看官方文档地址MediaPipe  |  Google for Developers

mediaipe提供了很多功能,包含目标识别,骨骼识别,图像分割,人脑识别检测等功能

官方也提供了基于Android,python和web的例子,这里测试是基于python

这里测试的是手指骨骼识别,模型包检测21个手关节的关键点定位 检测到的手区域内的坐标。

 二、环境搭建

1、创建虚拟环境(conda环境搭建,请参考前面文章)

conda create -n mediapipe python=3.8

2、激活

conda activate mediapipe

3、安装mediapipe

pip install mediapipe 
或
pip install mediapipe -i https://pypi.douban.com/simple

4、安装OpenCV

pip install opencv-python

5、安装OpenCV拓展

pip install opencv-contrib-python

6、安装pycharm

pycharm使用的是社区版本,喜欢使用指令的,可以不用安装

安装后界面

7、pycharm配置环境

导入虚拟环境 

确定后,会发现,pycharm会把环境切换成创建的虚拟环境。 

这里有个要注意的,如果终端显示的不是我们的虚拟环境,我这边显示的是base需要修改

修改Terminal的Application Settings改成powershell.exe

三、测试

程序参考Example:Gesture recognition guide for Python  |  MediaPipe  |  Google for Developers

代码流程

1、导入库
2、使用cv2打开摄像头
3、使用mediapipe推理摄像头捕捉到的图片
4、显示结果

源代码

import sys
import cv2
import mediapipe as mp

mp_face_detection = mp.solutions.face_detection
mp_drawing = mp.solutions.drawing_utils
mp_drawing = mp.solutions.drawing_utils
mp_hands = mp.solutions.hands
# For webcam input:
cap = cv2.VideoCapture(0)
with mp_hands.Hands(
        min_detection_confidence=0.9,
        min_tracking_confidence=0.9) as hands:
    while cap.isOpened():
        success, image = cap.read()
        if not success:
            print("Ignoring empty camera frame.")
            # If loading a video, use 'break' instead of 'continue'.
            continue

        # Flip the image horizontally for a later selfie-view display, and convert
        # the BGR image to RGB.
        image = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB)
        # To improve performance, optionally mark the image as not writeable to
        # pass by reference.
        image.flags.writeable = False
        results = hands.process(image)

        # Draw the hand annotations on the image.
        image.flags.writeable = True
        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
        if results.multi_hand_landmarks:
            for hand_landmarks in results.multi_hand_landmarks:
                mp_drawing.draw_landmarks(
                    image, hand_landmarks, mp_hands.HAND_CONNECTIONS)
        cv2.imshow('MediaPipe Hands', image)
        if cv2.waitKey(5) & 0xFF == 27:
            break
cap.release()

 使用的电脑是cpu版本,测试显示感觉还是可以的。

至此测试结束,接下来将使用mediapipe做手势识别及音量控制等。

如有侵权,或需要完整代码,请及时联系博主。

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

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

相关文章

自我介绍的重要性:留下深刻的第一印象

标题:自我介绍的重要性:留下深刻的第一印象 摘要: 自我介绍是我们在社交和职业场合中常常需要面对的一项任务。一个出色的自我介绍可以帮助我们在短时间内给他人留下深刻的第一印象,从而建立良好的人际关系和职业机会。本论文旨在…

Java多线程(4)---死锁和Synchronized加锁流程

目录 前言 一.synchronized 1.1概念 1.2Synchronized是什么锁? 1.3Synchronized加锁工作过程 1.4其他优化操作 二.死锁 2.1什么是死锁 2.2死锁的几个经典场景 2.3死锁产生的条件 2.4如何解决死锁 🎁个人主页:tq02的博客_CSDN博客…

19-求正数数组的最小不可组成和

题目 给定一个全是正数的数组arr,定义一下arr的最小不可组成和的概念: arr的所有非空子集中,把每个子集内的所有元素加起来会出现很多的值,其中最小的记为min,最大的记为max;在区间[min,max]上&#xff0…

腾讯云香港服务器租用_2核2G20M_2核4G30M

腾讯云香港服务器租用费用表,目前中国香港地域轻量应用服务器可选配置2核2G20M、2核2G30M、2核4G30M,操作系统可选Windows和Linux,不只是香港云服务器,新加坡、硅谷、法兰克福和东京服务器均有活动,腾讯云服务器网分享…

c语言每日一练(6)

前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情…

Stephen Wolfram:意义空间和语义运动规律

Meaning Space and Semantic Laws of Motion 意义空间和语义运动规律 We discussed above that inside ChatGPT any piece of text is effectively represented by an array of numbers that we can think of as coordinates of a point in some kind of “linguistic feature …

ShardingSphere简单介绍

此文章为笔记,为阅读其他文章的感受、补充、记录、练习、汇总,非原创,感谢每个知识分享者。 文章目录 第01章 高性能架构模式1、读写分离架构2、数据库分片架构2.1、垂直分片2.2、水平分片 3、读写分离和数据分片架构4、实现方式4.1、程序代…

智能与本体

世界的本体是一个复杂而广泛的话题,可以根据不同的学科、思想体系和信仰背景来进行不同的解释和理解。它涉及到人类对于现实和存在的思考,以及对于世界本质的追寻和探索。 在哲学上,世界的本体指的是存在的实质或基本特征。它探讨了世界的本源…

Android14操作系统全新功能发布,允许用户撤销全屏权限

最新发布的Android 14操作系统带来了一系列全新功能和改进,其中之一是新增了选项,让用户能够撤销应用的全屏权限。这样一来,用户可以阻止一些应用在全屏模式下隐藏状态栏和导航栏,从而更方便地查看时间、电量和其他信息。 此外&a…

Go项目初始化不再困扰你:gonew全方位解析

近日,Go官博介绍了一个名为gonew的新工具[1]。该工具支持基于go project template clone并创建一个属于你的Go项目。gonew工具的引入大幅简化了Go项目的创建,同时由于对自定义项目模板的支持,也可以提高Go项目的标准化水平。gonew工具刚刚被放…

Java程序猿搬砖笔记(十六)

文章目录 狂神说-Elasticsearch 7.6入门学习笔记Windows Elasticsearch IK分词器插件启动报错Elasticsearch的ik分词器自定义字典myDict.dic的编码格式需要为UTF-8,否则无效Elasticsearch使用term查询无数据返回的原因Elasticsearch如果没给映射,字段默认使用standa…

k8s node 误删除了如何自动创建 csr重新加入集群

worker node 节点当部署晚 kubelet、kube-proxy就会加入集群,如何加入呢, [rootkube-node01 ssl]# mv kubelet-client-2023-08-13-01-19-00.pem kubelet-client-current.pem kubelet.crt kubelet.key /tmp/kubelet [rootkube-node01 ssl]# systemctl da…

使用LSH 进行特征提取

局部敏感哈希(LSH)通常用于近似最近邻算法(ANN) 操作(向量搜索)。LSH的特性也可以在以矢量为输入的神经网络模型中得到利用(例如,各种的音频、视频和文本嵌入等内容信号)。 通常情况下,特定领域模型中输入的流形是复杂的(非i. i. d&#xff…

免费AI学习文档(二)

国内绘画midjourney网站 http://aijiaolian.chat优质提示词分解教学 https://q3iylvv7qj.feishu.cn/docx/UGMzdPVGjo1fHcxu1kjcuXFcnff?fromfrom_copylink设计图AI实战,如何用AI提高83%的出图效率?https://q3iylvv7qj.feishu.cn/docx/Fsxxd3MncowFUix5…

Java SpringBoot 加载 yml 配置文件中字典项

实际项目中,如果将该类信息放配置文件中的话,一般会结合Nocas一起使用 将字典数据,配置在 yml 文件中,通过加载yml将数据加载到 Map中 Spring Boot 中 yml 配置、引用其它 yml 中的配置。# 在配置文件目录(如&#xff…

windows电脑简单实时tts语音播报wsay;python pyttsx3语言实时播报text-to-speech

1、wsay 参考: https://github.com/p-groarke/wsay 下载安装: https://github.com/p-groarke/wsay/releases/tag/v1.5.0 下载exe文件,并把加入环境变量就可 使用 # Say something. wsay "Hello there."wsay "你好"…

Node.js躬行记——接口管理

在页面发生线上问题时,你要做的事情就是去查接口,响应数据是否正确,查接口的方法有两种: 第一种是在浏览器中打开地址,但是你必须得知道详细的 URL,并且有些页面还需要附带参数。 第二种是打开编辑器&#…

赴日IT培训 你到底适不适合做赴日IT?

有很多正在学习或者已经从事IT行业的小伙伴,问自己到底适不适合做赴日程序员,问什么赴日IT这么褒贬不一,自己内心很纠结。今天小编就来从多个角度为大家分析一下,希望能对徘徊、犹豫的IT工程师们有所帮助。 为什么会有一部分人犹…

九、解析应用程序——分析应用程序(2)

文章目录 一、确定服务器端功能二、解析受攻击面 一、确定服务器端功能 通过留意应用程序向客户端披露的线索,通常可推断与服务器端功能和结构有关的大量信息,或者至少可做出有根据的猜测。以下面用于访问搜索功能的URL为例: 可见,.jsp文件扩…

R语言 列表中嵌套列名一致的多个数据框如何整合为一个数据框

在批量建模后容易得到list&#xff0c;list中的每个元素都是单个的tibble 或者 dataframe&#xff0c;如何将这些数据整合为一张表呢&#xff1f; 载入R包 library(broom) library(tidyverse) 模拟数据 models <- txhousing %>% group_by(city) %>% do(modlm(lo…