前语
大家好,我是阿光。
本专栏整理了《PyTorch深度学习项目实战100例》,内包括了各种不同的深度学习项目,包括项目原理以及源码,每一个项目实例都顺便有完好的代码+数据集。
正在更新中~ ✨
我的项目环境:
- 渠道:Windows10
- 言语环境:python3.7
- 编译器:PyCharm
- PyTorch版别:1.8.1
项目专栏:【PyTorch深度学习项目实战100例】
在这儿刺进图片描述
「安装所需模块:」
pipinstallcv2
pipinstallmidiapipe
MediaPipe
MediaPipe 为直播和流媒体提供跨渠道、可定制的机器学习解决方案。
- 端到端加快引擎:内置的快速 ML 推理和处理即便在常见硬件上也能加快
- 一次构建,任意部署:一致解决方案适用于 Android、iOS、桌面/云、Web 和物联网
- 即用型解决方案:先进的机器学习解决方案展现了结构的全部功用
- 免费开源:Apache 2.0下的结构和解决方案,彻底可扩展和可定制
image-20211205181548455
「MediaPipe首要应用:」
- 人脸检测
- 脸部几何
- 物体检测
- 即时物体追寻
咱们首先构建一个Hand目标,然后创立hands和mpDraw两个目标,别离用于检测手和绘制手指要害点。
「手地标模型:」
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
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个要害点的相对方位,判别此刻图画的手势情况。
image-20211205182825010
完好代码
本项目可以运用文件输入和摄像头进行输入,下面代码选用的是文件输入,假如需求运用摄像头作为输入源,只需求将 cap = cv2.VideoCapture("video/finger3.MP4")
内部参数置为0即可,不过还需求调整一下其它方位,这儿不做过多叙说。
【PyTorch深度学习项目实战100例】—— Python+OpenCV+MediaPipe手势辨认系统 | 第2例_咕 嘟的博客-CSDN博客_python深度学习实战