基于MediaPipe的手语识别项目实战

首先介绍一下mediapipe库:

MediaPipe 是一款由 Google Research 开发并开源的多媒体机器学习模型应用框架。在谷歌,一系列重要产品,如 、Google Lens、ARCore、Google Home 以及 ,都已深度整合了 MediaPipe。

就简单来说,这个东西直接pip install mediapipe库就解决问题,可以识别到人身上各个位置的关键点,如图:

首先从简单做起:

1.识别图片里人像的关键点

import cv2import mediapipe as mpmp_drawing = mp.solutions.drawing_utilsmp_holistic = mp.solutions.holistic file = '4.jpg'holistic = mp_holistic.Holistic(static_image_mode=True) image = cv2.imread(file)image_hight, image_width, _ = image.shapeimage = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)results = holistic.process(image)

首先,我们导入需要的第三方库,并配置一下需要画图的点的尺寸,线的尺寸以及颜色等,这些信息都可以自行修改,这里我们直接引用官方的配置进行设计(mp.solutions.drawing_utils函数)

当然我们如何修改画图的点的尺寸和颜色等信息呢:

可以参考drawing_utils里面的参数进行修改就可以

然后定义一个holistic检测模型函数:这里就是定义了一个函数然后使用我们前期介绍的opencv的相关知识从系统中读取我们需要检测的图片,并获取图片的尺寸

mp_holistic = mp.solutions.holistic file = '4.jpg'holistic = mp_holistic.Holistic(static_image_mode=True)
image = cv2.imread(file)image_hight, image_width, _ = image.shape

由于OpenCV默认的颜色空间是BGR,但是一般我们说的颜色空间为RGB,这里mediapipe便修改了颜色空间

然后使用我们前面建立的holistic检测模型,对图片进行检测即可

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)results = holistic.process(image)

模型检测完成后的结果保存在results里面,我们需要访问此结果,并把检测到的人脸,人手,以及姿态评估的数据点画在原始检测的图片上,以便查看

if results.pose_landmarks:  print(f'Nose coordinates: ('f'{results.pose_landmarks.landmark[mp_holistic.PoseLandmark.NOSE].x * image_width}, 'f'{results.pose_landmarks.landmark[mp_holistic.PoseLandmark.NOSE].y * image_hight})')annotated_image = image.copy()mp_drawing.draw_landmarks(annotated_image, results.face_landmarks, mp_holistic.FACE_CONNECTIONS)mp_drawing.draw_landmarks(annotated_image, results.left_hand_landmarks, mp_holistic.HAND_CONNECTIONS)mp_drawing.draw_landmarks(annotated_image, results.right_hand_landmarks, mp_holistic.HAND_CONNECTIONS)mp_drawing.draw_landmarks(annotated_image, results.pose_landmarks, mp_holistic.POSE_CONNECTIONS)

这里我们打印了图片检测的结果,并分别画出人脸检测模型数据,人左右手的检测数据,以及人体姿态检测数据

#cv2.imshow('annotated_image',annotated_image)cv2.imwrite('4.png', annotated_image)cv2.waitKey(0)holistic.close()

画图完成后,我们可以显示图片方便查看,也可以直接使用OpenCV的imwrite 函数进行结果图片的保存,最后只需要holistic.close()检测模型

2.加大一点难度:识别视频里人的特征关键点

import cv2import timeimport mediapipe as mpmp_drawing = mp.solutions.drawing_utilsmp_holistic = mp.solutions.holistic holistic = mp_holistic.Holistic(min_detection_confidence=0.5, min_tracking_confidence=0.5)

首先跟图片检测一致,我们建立一个holistic检测模型,然后便可以打开摄像头进行模型的检测

cap = cv2.VideoCapture(0)time.sleep(2)while cap.isOpened():success, image = cap.read()if not success:print("Ignoring empty camera frame.")continueimage = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB)image.flags.writeable = Falseresults = holistic.process(image)

首先我们打开默认摄像头,并从摄像头中获取检测的实时图片

cap = cv2.VideoCapture(0)while cap.isOpened():success, image = cap.read()

检测到图片后,我们便可以直接使用图片检测的步骤,进行模型的检测

image = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB)image.flags.writeable = Falseresults = holistic.process(image)

这里我们使用到了cv2.flip(image, 1)图片翻转函数来增强数据图片,由于我们摄像头中的影像跟我们是镜像关系

cv2.flip(image, 1)

使用此函数便可以镜像我们的图片影像,最后把图片赋值给holistic模型进行检测

image.flags.writeable = Trueimage = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)mp_drawing.draw_landmarks(image, results.face_landmarks, mp_holistic.FACE_CONNECTIONS)mp_drawing.draw_landmarks(image, results.left_hand_landmarks, mp_holistic.HAND_CONNECTIONS)mp_drawing.draw_landmarks(image, results.right_hand_landmarks, mp_holistic.HAND_CONNECTIONS)mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_holistic.POSE_CONNECTIONS)cv2.imshow('MediaPipe Holistic', image)if cv2.waitKey(5) & 0xFF == ord('q'):breakholistic.close()cap.release()


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空