使用 wxPython 和 OpenCV 实现手势识别相机:胜利和拳头手势控制拍照

在这篇博客中,我将分享一个有趣的 Python 项目:通过 wxPython 创建图形界面,利用 OpenCV 的计算机视觉技术实现实时手势识别,当检测到“V”字(胜利)手势时自动连拍 9 张照片,而检测到拳头手势时立即停止拍照。这个程序结合了摄像头输入、手势检测和文件保存功能,适合作为学习计算机视觉和 GUI 开发的入门项目。
C:\pythoncode\new\output\usepytorchcamera.py
以下是项目的完整实现过程,包括代码分析、使用说明和可能的优化建议。


项目概述

功能

  • 实时视频捕获:通过摄像头捕获视频流并显示在 wxPython 界面上。
  • 手势识别
    • Victory 手势:检测到“V”字手势时,触发连拍 9 张照片。
    • 拳头手势:检测到拳头时,立即停止正在进行的拍照。
  • 照片保存:照片以时间戳命名,保存到指定文件夹(victory_photos)。
  • 冷却时间:拍照完成后有 5 秒冷却时间,避免重复触发。
  • 界面反馈:实时显示摄像头画面、手势检测状态、手指数量和轮廓密实度。

技术栈

  • wxPython:用于创建图形用户界面(GUI)。
  • OpenCV:用于摄像头视频处理和手势检测。
  • NumPy:用于图像数组操作。
  • Python 标准库:用于文件管理和时间戳生成。

依赖安装

运行程序前,请确保安装以下依赖:

pip install wxPython opencv-python numpy

实现原理

手势检测逻辑

手势识别基于 OpenCV 的肤色检测和轮廓分析,主要步骤如下:

  1. 肤色检测

    • 将图像从 BGR 转换为 HSV 颜色空间。
    • 使用预定义的肤色范围(lower_skinupper_skin)生成二值掩码。
    • 通过形态学操作(膨胀和高斯模糊)优化掩码,去除噪声。
  2. 轮廓检测

    • 使用 cv2.findContours 找到掩码中的轮廓。
    • 选择面积最大的轮廓,假设其为手部。
  3. 凸包与缺陷分析

    • 计算轮廓的凸包(cv2.convexHull),用于检测手指间的凹陷。
    • 使用 cv2.convexityDefects 找到凸缺陷,计算手指数量。
    • 通过角度过滤(小于 90 度)判断缺陷是否为手指间隙。
  4. 手势判定

    • Victory 手势:检测到 2 个手指。
    • 拳头手势:轮廓密实度(solidity = contour_area / hull_area)大于 0.8 且手指数量少于等于 1。
  5. 可视化

    • 在界面上绘制手部轮廓(绿色)、凸缺陷点(红色圆点)。
    • 显示手指数量、密实度和手势类型。

拍照控制

  • 触发拍照:当检测到 Victory 手势且不在冷却时间内,开始连拍。
  • 停止拍照:检测到拳头手势时立即中断。
  • 保存照片:每张照片以时间戳和序号命名,保存到 victory_photos 文件夹。

代码分析

以下是代码的关键部分分析:

主窗口类 (MainFrame)

class MainFrame(wx.Frame):
    def __init__
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值