利用谷歌开发的mediapipe框架,做一个轻量化的手部追踪模型
效果图:
import cv2
# mediapipe工具包
import mediapipe as mp
import time
#python绘图函数
import matplotlib.pyplot as plt
#将绘制出的图像直接嵌入在notebook单元格中
%matplotlib inline
#定义可视化图像函数
def look_img(img):
'''将BGR转RGB'''
img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img_RGB)
plt.show()
#导入solution中的hands模型
mp_hands = mp.solutions.hands
#模型实例化
hands = mp_hands.Hands(static_image_mode=False, # 是静态图片还是连续视频帧
max_num_hands=4, # 最多检测几只手
min_detection_confidence=0.5, # 置信度阈值
min_tracking_confidence=0.5) # 追踪阈值
#绘图函数
mpDraw = mp.solutions.drawing_utils
#读入图像
img = cv2.imread('./images/shoubu01.jpg')
#镜像翻转图像,使图中左右手与真实左右手对应
img = cv2.flip(img, 1)
img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
#将图像输入模型中,得到处理结果
results = hands.process(img_RGB)
if results.multi_hand_landmarks: # 如果有检测到手
# 遍历每一只检测出的手
for hand_idx in range(len(results.multi_hand_landmarks)):
hand_21 = results.multi_hand_landmarks[hand_idx] # 获取该手的所有关键点坐标
mpDraw.draw_landmarks(img, hand_21, mp_hands.HAND_CONNECTIONS) # 可视化
look_img(img)
#代码来源网络,目的学习交流,如有侵权,联系作者#



