
目录一、整体功能总览二、依赖库说明安装命令运行前执行三、初始化模块逐行解析1. 摄像头初始化2. 手部检测器初始化3. 手势判断函数 classify_gesture(fingers)四、防抖全局变量五、主循环程序核心持续读取摄像头画面1. 画面镜像翻转2. 手部检测3. 解析手指状态、识别手势4. 手势映射键盘核心交互逻辑5. 画面底部操作提示 窗口展示6. 退出逻辑六、资源释放收尾五、代码优缺点 可优化点优点存在小问题 / 可优化六、手势对照表汇总这份代码基于OpenCV cvzone封装 MediaPipe 手部识别 pyautogui实现手势识别模拟键盘按键摄像头捕捉手部动作识别不同手势自动按下对应快捷键适合隔空控制播放器、PPT、浏览器翻页。一、整体功能总览调用电脑摄像头实时画面MediaPipe 手部模型识别手掌、5 根手指竖起 / 弯曲状态自定义 6 种手势识别握拳、点赞、OK、剪刀手、张开手掌、单食指手势映射键盘空格、左右上下箭头、回车防抖冷却机制防止手势误触发窗口实时显示识别结果按 Q 关闭程序自动释放摄像头资源。二、依赖库说明python运行import cv2 # 图像处理、摄像头读取、窗口显示 from cvzone.HandTrackingModule import HandDetector # cvzone封装好的MediaPipe手部检测器简化手部关键点识别 import pyautogui # 模拟电脑键盘按键、鼠标操作 import time # 计时做手势防抖冷却安装命令运行前执行bash运行pip install opencv-python cvzone pyautogui mediapipe三、初始化模块逐行解析1. 摄像头初始化python运行cap cv2.VideoCapture(0) if not cap.isOpened(): print(❌ 错误无法打开摄像头) print(请检查摄像头是否被其他程序占用) exit() cap.set(3, 640) # 窗口宽度640像素 cap.set(4, 480) # 窗口高度480像素cv2.VideoCapture(0)打开默认内置摄像头外接摄像头可改为 1/2判断摄像头打开失败直接退出解决摄像头被微信、Zoom 占用报错设置画面分辨率降低分辨率提升识别速度。2. 手部检测器初始化python运行detector HandDetector(detectionCon0.8, maxHands1)detectionCon0.8手部识别置信度阈值大于 0.8 才判定为手减少误识别maxHands1只识别画面中 1 只手降低运算量。3. 手势判断函数classify_gesture(fingers)参数fingers格式[拇指, 食指, 中指, 无名指, 小指]1 手指竖起0 弯曲python运行def classify_gesture(fingers): thumb, index, middle, ring, pinky fingers # 1. 握拳全部手指弯曲总和0 if sum(fingers) 0: return FIST # 2. 点赞只有拇指竖起 if fingers [1, 0, 0, 0, 0]: return THUMBS_UP # 3. OK手势拇指食指竖起其余弯曲 if thumb 1 and index 1 and middle 0 and ring 0 and pinky 0: return OK # 4. 剪刀手食指中指竖起 if fingers [0, 1, 1, 0, 0]: return HEART # 5. 张开手掌5根手指全竖起总和5 if sum(fingers) 5: return OPEN_PALM # 6. 单食指只有食指竖起 if fingers [0, 1, 0, 0, 0]: return POINT # 无法匹配任意手势返回空 return None每种手势对应唯一标识字符串后续用来匹配键盘操作。四、防抖全局变量python运行last_gesture None # 上一帧识别到的手势 last_action_time 0 # 上次执行按键的时间戳 action_cooldown 0.5 # 冷却0.5秒0.5秒内不能重复触发核心作用手轻微抖动会导致手势频繁切换加冷却避免疯狂连续按键。五、主循环程序核心持续读取摄像头画面python运行while True: # 1. 读取一帧摄像头画面 success, img cap.read() if not success: print(⚠️ 读取摄像头失败) continuecap.read()返回两个值是否读取成功、图像矩阵读取失败跳过当前帧。1. 画面镜像翻转python运行img cv2.flip(img, 1)参数1代表水平翻转画面和镜子一样抬手方向符合视觉习惯不用反向操作。2. 手部检测python运行hands, img detector.findHands(img, flipTypeFalse) current_gesture Nonedetector.findHands()在图像上绘制手部 21 个关键点返回检测到的手部列表 绘制后的画面flipTypeFalse因为我们已经手动翻转画面关闭检测器自带翻转防止镜像错乱。3. 解析手指状态、识别手势python运行if hands: hand hands[0] # 取检测到的第一只手 fingers detector.fingersUp(hand) # 获取5根手指竖起状态列表 current_gesture classify_gesture(fingers) # 判断手势 # 在画面左上角打印当前手势文字 if current_gesture: cv2.putText(img, fGesture: {current_gesture}, (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) else: cv2.putText(img, Gesture: Unknown, (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)cv2.putText()在图像上绘制文字参数分别为图像、文字、坐标、字体、字号、RGB 颜色、线条粗细。4. 手势映射键盘核心交互逻辑python运行current_time time.time() # 条件识别到有效手势 且 和上一帧手势不一样 且 超过冷却时间 if current_gesture and current_gesture ! last_gesture: if current_time - last_action_time action_cooldown: last_action_time current_time # 手势对应按键 if current_gesture FIST: pyautogui.press(space) # 握拳空格播放暂停 elif current_gesture THUMBS_UP: pyautogui.press(right) # 点赞右箭头下一页/下一曲 elif current_gesture OK: pyautogui.press(left) # OK左箭头上一页/上一曲 elif current_gesture HEART: pyautogui.press(up) # 剪刀手上箭头音量 elif current_gesture OPEN_PALM: pyautogui.press(down) # 手掌下箭头音量- elif current_gesture POINT: pyautogui.press(enter) # 单食指回车确认time.time()获取当前时间戳计算两次操作间隔实现防抖pyautogui.press(按键名)模拟按下键盘按键支持 space/left/right/up/down/enter 等触发逻辑手势切换时才执行按键保持同一个手势不会重复触发。5. 画面底部操作提示 窗口展示python运行# 底部白色小字提示所有手势映射 cv2.putText(img, FIST:Space | THUMBS_UP:Right | OK:Left | HEART:Up | PALM:Down | POINT:Enter, (10, img.shape[0] - 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1) # 弹出摄像头窗口 cv2.imshow(Air Control - 隔空操控, img)6. 退出逻辑python运行key cv2.waitKey(1) 0xFF if key ord(q) or key ord(Q): print(\n 用户退出程序) breakcv2.waitKey(1)每帧等待 1ms 检测键盘按下小写 / 大写 Q跳出循环结束程序。六、资源释放收尾python运行cap.release() # 关闭摄像头释放设备占用 cv2.destroyAllWindows() # 关闭所有OpenCV窗口 print(✅ 程序已正常退出)必须执行否则摄像头会持续被程序占用其他软件打不开相机。五、代码优缺点 可优化点优点cvzone 封装 MediaPipe不用手写复杂手部关键点逻辑代码简洁自带防抖冷却不会狂触发按键实时可视化窗口显示手势名称、操作提示异常判断摄像头打不开直接提示退出。存在小问题 / 可优化THUMBS_UP判断写了两次函数内重复冗余可以删掉一处仅支持键盘按键可扩展手势控制鼠标移动固定 0.5 秒冷却可做成可调参数仅识别单只手可修改 maxHands2 实现双手操作pyautogui 在部分笔记本 / 虚拟机权限不足会失效需要管理员运行。六、手势对照表汇总表格手势识别标识模拟按键适用场景握拳FISTspace视频播放 / 暂停竖大拇指点赞THUMBS_UPright下一页、下一首OK拇指 食指OKleft上一页、上一首剪刀手食指中指HEARTup调高音量五指全张开OPEN_PALMdown降低音量仅食指竖起POINTenter确认、弹窗确定