手势检测(充满科技感)

mediapipe库

Mediapipe是google的一个开源项目,可以提供开源的、跨平台的常用机器学习(machine learning)方案。Mediapipe实际上是一个集成的机器学习视觉算法的工具库,包含了人脸检测、人脸关键点、手势识别、头像分割和姿态识别等各种模型。我们可以直接使用pip进行安装就好。

代码部分

初始化

复制代码
import cv2
import mediapipe as mp

mp_drawing = mp.solutions.drawing_utils
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(
    static_image_mode=False,
    max_num_hands=2,
    min_detection_confidence=0.75,
    min_tracking_confidence=0.75)

mp.solutions.drawing_utils是一个绘图模块,将识别到的手部关键点信息绘制道cv2图像中,mp.solutions.drawing_style定义了绘制的风格。

mp.solutions.hands是mediapipe中的手部识别模块,可以通过它调用手部识别的api,然后通过调用mp_hands.Hands初始化手部识别类。

mp_hands.Hands中的参数:

1)static_image_mode=True适用于静态图片的手势识别,Flase适用于视频等动态识别,比较明显的区别是,若识别的手的数量超过了最大值,

True时识别的手会在多个手之间不停闪烁,而False时,超出的手不会识别,系统会自动跟踪之前已经识别过的手。默认值为False;

2)max_num_hands用于指定识别手的最大数量。默认值为2;

3)min_detection_confidence 表示最小检测信度,取值为0.0,1.0这个值约小越容易识别出手,用时越短,但是识别的准确度就越差。越大识别的越精准,

但是响应的时间也会增加。默认值为0.5;

4)min_tracking_confience 表示最小的追踪可信度,越大手部追踪的越准确,相应的响应时间也就越长。默认值为0.5。

开始检测

复制代码
cap = cv2.VideoCapture(0)
while True:
    flag = 0
    ret, frame = cap.read()
    h,w=frame.shape[:2]
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    # 因为摄像头是镜像的,所以将摄像头水平翻转
    # 不是镜像的可以不翻转
    frame = cv2.flip(frame, 1)
    results = hands.process(frame)
    frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
    #    if results.multi_handedness:
    #        for hand_label in results.multi_handedness:
    #            print(hand_label)
    if results.multi_hand_landmarks:
        for hand_landmarks in results.multi_hand_landmarks:
            # print('hand_landmarks:', hand_landmarks)
            # 计算关键点的距离,用于判断手指是否伸直
            for i in range(len(hand_landmarks.landmark)):
                x = hand_landmarks.landmark[i].x
                y = hand_landmarks.landmark[i].y
                z = hand_landmarks.landmark[i].z
                # print(x,y,z)
                cv2.putText(frame, str(i), (int(x*w),int(y*h)), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0),2)
            # 关键点可视化
            mp_drawing.draw_landmarks(frame,
                                      hand_landmarks,
                                      mp_hands.HAND_CONNECTIONS)

    cv2.imshow('MediaPipe Hands', frame)
    if cv2.waitKey(1) & 0xFF == 27:
        break
cap.release()
cv2.destroyAllWindows()

重要部分就是results = hands.process(frame),这里可以获得关键点

results.multi_hand_landmarks判断是否检测到手。

for hand_landmarks in results.multi_hand_landmarks:对每一个手进行检测。

然后对其中每个点进行循环,使用mp_drawing.draw_landmarks(frame,

hand_landmarks,

mp_hands.HAND_CONNECTIONS)

进行画出,并且在画的时候找到了那个坐标,并写出来了那个位置的索引(没啥用)

效果展示

相关推荐
南山电子nscn4 小时前
长晶科技CJA1117B系列低压差、高精度LDO稳压器赋能多元电子设备
科技·ldo稳压器
电子制造自留地6 小时前
什么是PCB碳油板:碳浆印刷按键原理与制造工艺
科技·制造·pcb工艺·电路板
爱浦路 IPLOOK8 小时前
矿山无人化作业5G专网方案:企业专网核心网络选型分析
网络·分布式·科技·5g·信息与通信
财复视界8 小时前
光智科技从“光学元件”到“稀散金属材料平台”的进化逻辑
大数据·人工智能·科技
qq_161241358 小时前
北睿科技关于单晶金刚石基底镀膜AL层对激发X射线能谱响应特性的影响研究
科技·半导体
nanoscientific10 小时前
空气纳米气泡水强化稻草–猪粪厌氧共消化——通过协同代谢与抗氧化节能实现甲烷增产 59.80%
科技·微纳米气泡
SleepNW_POV10 小时前
家居科普|床垫溜边塌陷成因解析与边缘加固床垫选购指南
人工智能·科技·智能家居·睡眠
cxk180827215 小时前
2026 年9月 AI 营销机构选型方法论:基于 GEO 精采信模式的三维评估体系
大数据·人工智能·科技·ai·geo·昆明geo
AcaDesign17 小时前
大禹水利科学技术奖ppt制作案例|科技进步奖|技术发明奖|自然科学奖|WordinPPT
科技·powerpoint
意图共鸣19 小时前
意图共鸣科技《智能体接口化白皮书2.0》从三脚架到四面体——三角模型不是平面的,是立体的
科技·平面