前语

大家好,我是阿光。

本专栏整理了《PyTorch深度学习项目实战100例》,内包括了各种不同的深度学习项目,包括项目原理以及源码,每一个项目实例都顺便有完好的代码+数据集。

正在更新中~ ✨

我的项目环境:

  • 渠道:Windows10
  • 言语环境:python3.7
  • 编译器:PyCharm
  • PyTorch版别:1.8.1

项目专栏:【PyTorch深度学习项目实战100例】


【PyTorch深度学习项目实战100例】—— Python+OpenCV+MediaPipe手势识别系统 | 第2例

在这儿刺进图片描述

「安装所需模块:」

pipinstallcv2
pipinstallmidiapipe

MediaPipe

MediaPipe 为直播和流媒体提供跨渠道、可定制的机器学习解决方案

  • 端到端加快引擎:内置的快速 ML 推理和处理即便在常见硬件上也能加快
  • 一次构建,任意部署:一致解决方案适用于 Android、iOS、桌面/云、Web 和物联网
  • 即用型解决方案:先进的机器学习解决方案展现了结构的全部功用
  • 免费开源:Apache 2.0下的结构和解决方案,彻底可扩展和可定制

【PyTorch深度学习项目实战100例】—— Python+OpenCV+MediaPipe手势识别系统 | 第2例

image-20211205181548455

「MediaPipe首要应用:」

  • 人脸检测
  • 脸部几何
  • 物体检测
  • 即时物体追寻

咱们首先构建一个Hand目标,然后创立hands和mpDraw两个目标,别离用于检测手和绘制手指要害点。

「手地标模型:」

【PyTorch深度学习项目实战100例】—— Python+OpenCV+MediaPipe手势识别系统 | 第2例

image-20211205182136432

mpHands=mp.solutions.hands
hands=mpHands.Hands(args.mode,args.maxHands,args.model_complexity,args.detectionCon,args.trackCon)#用于检测手
mpDraw=mp.solutions.drawing_utils#绘制要害点
results=0

【PyTorch深度学习项目实战100例】—— Python+OpenCV+MediaPipe手势识别系统 | 第2例

image-20211205182145584

该目标会辨认出人手的21个要害点部位,如上图所示,21个要害点别离对应人手的不同关节方位,用于定位手的方位。

deffindHands(img,draw=True):
imgRGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
globalresults
results=hands.process(imgRGB)
ifresults.multi_hand_landmarks:
forhandLmsinresults.multi_hand_landmarks:
ifdraw:
mpDraw.draw_landmarks(img,handLms,mpHands.HAND_CONNECTIONS)
returnimg

该段代码用于检测图画中的手,首先将图片转成RGB图画,然后运用hands目标进行辨认,然后再运用mpDrwa在人手上绘制要害点。

#获取关节点方位
deffindPosition(img,draw=True):
lmLists=[]
ifresults.multi_hand_landmarks:
forhandLmsinresults.multi_hand_landmarks:
forid,lminenumerate(handLms.landmark):
h,w,c=img.shape
cx,cy=int(lm.x*w),int(lm.y*h)
lmLists.append([id,cx,cy])
ifdraw:
cv2.circle(img,(cx,cy),12,(255,0,255),cv2.FILLED)
returnlmLists

假如已经检测到手部,之后会进行检测要害点方位,将其进行返回,返回的是一个包括21个元素的列表,每个元素由为一个列表,内置有不同要害点的相对坐标。

iflen(lmList)!=0:
max_list=[lmList[4][2],lmList[8][2],lmList[12][2],lmList[16][2],lmList[20][2]]#每个手指的顶级部位
count=0#手势数字成果
#手势为4
ifmax_list[1]<lmList[9][2]andmax_list[2]<lmList[9][2]andmax_list[3]<lmList[9][2]andmax_list[
4]<\
lmList[9][2]andmax_list[0]>lmList[9][2]andmax_list[0]>lmList[17][2]:
count=4
#手势为3
elifmax_list[1]<lmList[9][2]andmax_list[2]<lmList[9][2]andmax_list[3]<lmList[9][2]and\
lmList[20][
2]>lmList[9][2]:
count=3
#手势为2
elifmax_list[1]<lmList[9][2]<lmList[16][2]andmax_list[2]<lmList[9][2]<lmList[20][2]:
count=2
#手势为1
elifmax_list[1]<lmList[9][2]<lmList[16][2]andlmList[20][2]>lmList[9][2]andlmList[12][2]>\
lmList[9][
2]:
count=1
#手势为5
else:
count=5

该段代码用于进行手势辨认,按照21个要害点的相对方位,判别此刻图画的手势情况。

【PyTorch深度学习项目实战100例】—— Python+OpenCV+MediaPipe手势识别系统 | 第2例

image-20211205182825010

完好代码

本项目可以运用文件输入和摄像头进行输入,下面代码选用的是文件输入,假如需求运用摄像头作为输入源,只需求将 cap = cv2.VideoCapture("video/finger3.MP4") 内部参数置为0即可,不过还需求调整一下其它方位,这儿不做过多叙说。

【PyTorch深度学习项目实战100例】—— Python+OpenCV+MediaPipe手势辨认系统 | 第2例_咕 嘟的博客-CSDN博客_python深度学习实战