实现手部追踪的一段Python代码

效果展示

最近在看python,发现有关于手部识别的项目,好奇研究了一下,感觉还挺好玩,因为用了 OpenCV 和 MediaPipe ,所以实现起来比较简单。

OpenCV是一个跨平台的计算机视觉库(主要操作对象是图像)。 我们之前有介绍过,并且和OpenGL、OpenCL相结合做了介绍,可以点击下面的卡片回看。

OpenCV、OpenGL、OpenCL、DirectX的区别

而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

我的可以完美运行,有没有运行的失败的小伙伴儿,可以交流一下。

下回研究研究其他的模型,新手路漫漫,一起来玩儿!

公众号精选概念作品

这不比美女香?

2021-12-27 10:58:02

公众号精选概念作品

这都是什么绝艳神作!

2021-12-31 10:39:48

2 条回复 A文章作者 M管理员
  1. 1210

    这是个什么意思呢?

  2. 锟斤拷

    👍

个人中心
今日签到
有新私信 私信列表
搜索