**个人博客:** https://blog.csdn.net/weixin_43654363
**本代码仓库博客链接:** https://blog.csdn.net/weixin_43654363/article/details/120809464
# 更新日记
> **更新日记:**
> 2022.04.18:应各位网友需求,已mp库更新后的手部识别模型代码。目前可以正常的RUN啦!!
# 前言
人工智能的浪潮正在席卷全球。一个已经被谈论了几十年的概念,如今这几年,相关技术的发展速度越来越快。机器学习、深度学习、计算机视觉等名词逐渐走进人们的生活,它们同属于人工智能的范畴之中。
计算机视觉是人工智能领域的一个分支计算机视觉实际上是一个跨领域的交叉学科,包括计算机科学,数学,工程学,物理学,生物学和心理学等领域。许多科学家认为,计算机视觉为人工智能的发展开拓了道路。
简单来说,计算机视觉就是赋予计算机一双观察世界的眼睛,再使用计算机优秀的大脑快速的计算,服务人类。
今天我们将深入浅出,简单介绍Python计算机视觉中的手势识别方法,识别手势——数字(一、二、三、四、五和大拇指的赞赏)。如果你喜欢本篇文章或对你有帮助的话,别忘了点赞+关注噢!
# 前期准备
本篇我们将会用到Python的OpenCV模块和手部模型模块mediapipe,在Python的pip安装方法中,安装方法如下:
**opencv是常用的图像识别模块**
**mediapipe是谷歌开发并开源的多媒体机器学习模型应用框架。**
```python
pip install opencv-python
pip install mediapipe
```
如果你的电脑装有Anaconda,建议选择在Anaconda的环境命令行中进行相应模块的安装,以此构建更具体的机器学习环境
当你安装好OpenCV和mediapipe模块以后,你可以在Python代码中写入
```python
import cv2
import mediapipe as mp
```
如果运行成功,那么你的Opencv-python模块即为安装成功,那么我们现在就开始进入今天的正题吧!
# 识别手部模型
既然要做手势识别,那么就要去找到我们传入图像的手部信息。本处我们将使用mediapipe模型去找到手部模型,并完成手部模型的识别模块,并命名,我们将在后续手势识别内容中将其作为模块引入
**HandTrackingModule.py**
```python
# -*- coding:utf-8 -*-
"""
CODE >>> SINCE IN CAIXYPROMISE.
MOTTO >>> STRIVE FOR EXCELLENT.
CONSTANTLY STRIVING FOR SELF-IMPROVEMENT.
@ By: CaixyPromise
@ Date: 2021-10-17
"""
import cv2
import mediapipe as mp
```
# 识别视频输入方法
完成手部模型的获取与识别,现在我们就要将内容传入到计算机当中,使其能进行手部的识别以及手势的识别。本处我们将使用OpenCV进行内容的输入流,开启计算机的摄像头获取内容,并使用刚刚我们写的HandTrackingModule模块作为手部的识别模块。
**Main.py**
```python
# -*- coding:utf-8 -*-
"""
CODE >>> SINCE IN CAIXYPROMISE.
MOTTO >>> STRIVE FOR EXCELLENT.
CONSTANTLY STRIVING FOR SELF-IMPROVEMENT.
@ By: CaixyPromise
@ Date: 2021-10-17
"""
import cv2
from HandTrackingModule import HandDetector
```
现在,当我们运行程序后,程序会运行你的计算机默认摄像头,当你露出你的手时,会传出图像圈住你的手部,并且绘制出你的手部主要关节点。
其中,你的手部主要关节点已经标好序号,你的手部分为了**21个关节点**,指尖分别为4 8 12 16 20
具体关节分为:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2d3586a4aca04886b50e42240e39d312.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAWHnkuLZQcm9taXNl,size_18,color_FFFFFF,t_70,g_se,x_16#pic_center)
# 手势识别方法
通过前面的讲解,我们完成了手部获取与识别、识别内容的输入,那么我们现在就来开始写我们的手势识别方法。这里,我们用到识别模块里的fingersUp()方法。
找到我们刚刚写的Main.py文件(识别内容输入方法),当我们找到并绘制出我们的手部位置以后,此时的findPosition()方法会得到你的手部具体方位,其中lmList是**关节位置方位(type:list)**,bbox是**边框方位(type:dict)**,当未识别到内容时两者均为**空**。所以,我们只需要写当数组中存在数据(**非空**),进行手指判断即可,那么我们可以写成
上面我们fingersUp()方法谈到,fingersUp()方法会传回从大拇指开始数的长度为5的数组,立起的手指标记为1,放下标记为0。
本次我们的目的时写一个识别我们生活常见的数字手势以及一个赞扬大拇指的手势。
完成基本的识别以后,我们要把内容表达输出出来。这里我们结合bbox返回的手部方框方位,再使用opencv里的putText方法,实现识别结果的输出。
现在,我们已经完成手势的识别与结果输出,我们把完整代码运行一下,即可验证出我们的代码效果。
# 完整代码
完整代码如下
```python
# -*- coding:utf-8 -*-
"""
CODE >>> SINCE IN CAIXYPROMISE.
STRIVE FOR EXCELLENT.
CONSTANTLY STRIVING FOR SELF-IMPROVEMENT.
@ by: caixy
@ date: 2021-10-1
"""
import cv2
from HandTrackingModule import HandDetector
```
效果一目了然,计算机成功识别了你的手势并把内容输出。快去试试吧!
# 结语
本篇计算机视觉的手势识别内容写完了,这也是本人第一篇关于人工智能类计算机视觉的推文,后续我们也会持续输出有关于人工智能类的文章,如果本篇写作有纰漏和错误或疑问的地方,还望各位能在评论区指出,让我们一起共同进步一起学习。
创作不易,如果你觉得这篇文章对你有用的话,别忘了点赞在看+关注噢!
下一篇我们将介绍手势识别的进阶——动态手势的识别,我们会将文章第一时间发送在微信公众号:“01编程小屋”当中,别忘了关注我们的公众号以免错过了噢!
![在这里插入图片描述](https://img-blog.csdnimg.cn/891fd4f33de249cd91c25cedfa86ea9f.png#pic_center)