
最近在看python,发现有关于手部识别的项目,好奇研究了一下,感觉还挺好玩,因为用了 OpenCV 和 MediaPipe ,所以实现起来比较简单。
OpenCV是一个跨平台的计算机视觉库(主要操作对象是图像)。 我们之前有介绍过,并且和OpenGL、OpenCL相结合做了介绍,可以点击下面的卡片回看。
[b2_insert_post id=”https://www.cgworld.wiki/44246.html”]
而MediaPipe 是一个跨平台框架,用于构建多模式应用机器学习管线。他有一大堆的机器学习模型,比如:人脸识别,表情捕捉,手部追踪等。


安装运行环境
接下来我们安装Python的运行环境,我这里选择了pycharm,直接到官网下载,有30天的试用期,觉得不错可以购买正版。
安装完成后打开软件,选择试用。新建一个项目。
接下来依次打开 file -> seting -> plugins 然后在右边的 Marketplace 里面搜索 chinese 【如下图】

点击安装后,重启IDE即可。
安装依赖包
点击终端,在弹出的窗口输入 下方代码来安装opencv
pip install opencv-python

然后输入下方代码来安装 MediaPipe
pip install mediapipe
安装方式与opencv一致
上代码
然后把这段代码复制进去运行下,看下会发生什么?
import cv2 import mediapipe as mp import time # 括号里面的数字 2 代表本地摄像头编号,大家可以根据自己实际情况改变数字来调用摄像头 cap = cv2.VideoCapture(2) mphands = mp.solutions.hands hands = mphands.Hands() mpDraw = mp.solutions.drawing_utils mpHandlmsStyle = mpDraw.DrawingSpec(color=(0,0,255),thickness=5) mpHandlineStyle = mpDraw.DrawingSpec(color=(0,255,0),thickness=5) # 定义时间 pTime = 0 cTime = 0 while True: ret, img = cap.read() if ret: imgrgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) result = hands.process(imgrgb) # 定义视口的宽度和高度 imgheight = img.shape[0] imgwidth = img.shape[1] if result.multi_hand_landmarks: for handLms in result.multi_hand_landmarks: mpDraw.draw_landmarks(img,handLms,mphands.HAND_CONNECTIONS,mpHandlmsStyle,mpHandlineStyle) for i,lm in enumerate(handLms.landmark): xPos = int(lm.x * imgwidth) yPos = int(lm.y * imgheight) # 单独调整某个位置的属性 if i == 4: cv2.circle(img,(xPos,yPos),10,(255,0,255),cv2.FILLED) print(i,xPos,yPos) # 写入时间 cTime = time.time() fps = 1/(cTime-pTime) pTime = cTime # 文本在画面中的位置 cv2.putText(img,f"FPS:{int(fps)}",(30,50),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),3) cv2.imshow('im g', img) # 按键盘Q退出 if cv2.waitKey(1) == ord('q'): break
我的可以完美运行,有没有运行的失败的小伙伴儿,可以交流一下。
下回研究研究其他的模型,新手路漫漫,一起来玩儿!
原创文章,作者:CG世界,如若转载,请注明出处:https://www.cgworld.wiki/46477.html
评论列表(2条)
这是个什么意思呢?
👍