Python 手势识别常用的库主要分为传统计算机视觉和深度学习两类。

以下是目前最主流、最实用的几个选择,从易用到强大排序:
MediaPipe —— 首推(最推荐)
由 Google 开发,目前最流行、最成熟的手部关键点检测库。
-
特点:无需 GPU 也能流畅运行,可以检测出 21个手部关键点(手指关节坐标),并提供手势分类的基础。
-
适用场景:实时视频流、桌面应用、需要稳定追踪手指位置的场景。
-
代码示例(检测手部关键点):
import cv2 import mediapipe as mp mp_hands = mp.solutions.hands mp_draw = mp.solutions.drawing_utils hands = mp_hands.Hands() cap = cv2.VideoCapture(0) while True: success, img = cap.read() img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) results = hands.process(img_rgb) if results.multi_hand_landmarks: for hand_lms in results.multi_hand_landmarks: # 绘制关键点 mp_draw.draw_landmarks(img, hand_lms, mp_hands.HAND_CONNECTIONS) cv2.imshow("Image", img) if cv2.waitKey(1) & 0xFF == ord('q'): break
OpenCV(Haar Cascade + 背景分割)
传统方法,不需要安装深度学习框架,非常轻量级。
- 特点:主要依赖颜色分割(肤色检测)或形态学操作来提取手部轮廓,但缺乏精细的关键点检测,无法识别复杂的动态手势(如捏、抓、比数字)。
- 适用场景:简单的静态手势(如拳头、手掌朝向),或手势控制(如音量、鼠标移动)。
- 缺点:受光照、背景影响大,适合高度可控的环境。
TensorFlow / PyTorch + 自定义模型
- 特点:可以使用 YOLOv8(目标检测)、或者自己训练 MobileNet 等轻量级网络。
- 适用场景:需要识别特定的自定义手势(如13种手势、手语翻译)。
- 配套数据集:
- HaGRID(大规模手势识别数据集,常见于 YOLO 训练)
- 手写手势图片集
- 代表性库:YOLOv8(ultralytics 库)—— 可以同时实现手部检测 + 手势分类。
from ultralytics import YOLO model = YOLO('yolov8n-hand.pt') # 使用预训练的手部检测模型 results = model('your_image.jpg')
OpenPose(不推荐,但历史悠久)
- 曾经是标准,可以检测身体 + 手部关键点。
- 缺点:速度慢、配置复杂、体积大(>1GB),现在已被 MediaPipe 替代。
特殊用途:Leap Motion / Intel RealSense
- 需要专用硬件(红外摄像头),精度极高(亚毫米级),但需要额外的硬件成本。
- 库:
LeapC(官方 C++ 包装,Python 可通过leapmotion或pyleap调用)。
总结建议(按场景选择)
| 你的需求 | 推荐库 | 说明 |
|---|---|---|
| 快速开发、实时、稳定 | MediaPipe | 几乎可以满足90%的普通手势识别需求。 |
| 只用手势控制鼠标/翻页 | OpenCV(肤色+凸包检测) | 轻量,不需要深度学习依赖。 |
| 识别自定义手势(如手语) | YOLOv8 或 TensorFlow + Keras | 需要自己准备数据集并训练。 |
| 需要极高精度(毫米级) | Leap Motion 官方 SDK | 需要购买硬件。 |
最推荐的入门路径:先从 MediaPipe 开始,因为它可以在几乎任何电脑上运行,代码简单,效果出色,如果需要识别特定的静态手势(如比“OK”、“剪刀”),可以在 MediaPipe 提取到 21 个手指坐标后,通过计算手指间的夹角和距离来分类,无需训练深度学习模型。