Skip to content

About

图像处理系统大作业——基于手势识别的智能图像滤镜系统

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

10 Commits

Folders and files

Repository files navigation

🎬 基于手势识别的智能图像系统

📋 项目简介

这是一个实时视频流中基于手势识别的智能图像系统,使用 MediaPipe 进行手部识别,支持实时切换 4 种专业图像滤镜效果,并支持通过手势序列进行照片拍摄。

✨ 核心功能

  • 🎯 实时手势识别:识别 ONE、TWO、THREE、FOUR 等手指数字手势
  • 🎨 4 种专业滤镜:直方图均衡化、流年特效、灰度、怀旧特效
  • 📸 手势拍照:通过 PALM→FIST 手势序列触发拍照,延迟 2 秒后自动捕获
  • ⚡ 高性能优化:使用 NumPy 向量化加速,所有滤镜 >20 FPS
  • 🖼️ 干净保存:保存的照片不包含 UI 文字,仅保留滤镜效果
  • 💻 多模式运行:支持实时视频、演示模式、单张图片处理

🛠️ 环境要求

  • Python: 3.10

📦 依赖包

opencv-python
mediapipe>=0.8
numpy

📥 安装

1. 克隆/下载项目

git clone https://github.com/bugmaker-zzz/Image-Processing-Homework.git

2. 创建虚拟环境

conda create -n gesturefilter python=3.10
conda activate gesturefilter

3. 安装依赖

pip install -r requirements.txt

🚀 使用方法

运行实时视频模式(默认)

python main.py

系统将启动本地摄像头,使用右手比划手势,实时识别手势并应用滤镜效果。

运行演示模式

python main.py --demo

依次展示所有 4 种滤镜效果,无需摄像头。

处理单张图片

python main.py --mode image --img_path ./data/input/apple.png

对指定图片应用指定滤镜并保存到输出目录。


👆 手势控制

滤镜切换手势

手势 效果 说明
ONE (1) 🎯 直方图均衡化 提高对比度,增强图像细节
TWO (2) ✨ 流年特效 复古怀旧风格,B 通道增强
THREE (3) ⚫ 灰度 经典黑白效果
FOUR (4) 🟤 怀旧特效 棕褐色复古风格

特殊手势

手势 功能
FIST (握拳) 保持当前滤镜不变
PALM (张开手掌) 保持当前滤镜不变
PALM → FIST 触发拍照,延迟 2 秒后自动捕获
双手同时出现 取消滤镜

⌨️ 快捷键

按键 功能
Q / ESC 退出程序
Space 立即保存当前帧(无延迟)

📂 项目结构

your_workspace/
├── main.py                 # 主程序入口
├── README.md               
├── requirements.txt        # 依赖列表
│
├── utils/
│   ├── __init__.py
│   ├── gesturedetector.py  # 手势识别模块(MediaPipe)
│   └── imagefilter.py      # 图像滤镜模块
│
└── data/
    ├── input/              # 输入图片目录
    │   ├── apple.png
    └── output/             # 输出照片目录(自动创建)
        ├── photo_20240115_120530_histogram_equalization.jpg
        └── screenshot_20240115_120545_sepia.jpg

🎬 运行效果

实时视频模式显示

═══════════════════════════════════════════════════════════════
     基于手势识别的智能图像滤镜系统
═══════════════════════════════════════════════════════════════

手势映射关系:
  ONE   (1)  → 直方图均衡化
  TWO   (2)  → 流年特效
  THREE (3)  → 灰度特效
  FOUR  (4)  → 怀旧特效

特殊功能:
  PALM → FIST → 延迟2秒后拍照保存

✓ 摄像头已打开,系统开始运行...

UI 显示信息

  • 上方左侧:当前识别的手势和滤镜名称
  • 上方右侧:FPS 和帧计数
  • 拍照倒计时:PALM→FIST 后显示 "Photo in X.Xs"
  • 下方:快捷键帮助提示

📊 性能指标

各滤镜在实时视频中的处理速度:

滤镜 FPS 优化方案
原图 252 直接复制
直方图均衡化 65 OpenCV 优化库
流年特效 39 NumPy 向量化
灰度 223 OpenCV 色彩空间转换
怀旧特效 22 NumPy 矩阵乘法

🔧 滤镜详解

1. 直方图均衡化 (Histogram Equalization)

  • 原理:独立对每个 BGR 通道进行直方图均衡化
  • 效果:增强对比度,使图像细节更清晰
  • 适用:光线不足或对比度低的图像

2. 流年特效 (Flowing Years)

  • 原理:对 B 通道进行平方根变换 → 乘以 12
  • 效果:复古怀旧风格,蓝色偏向增强
  • 适用:创意照片、艺术处理

3. 灰度 (Grayscale)

  • 原理:BGR 转灰度,再转回 BGR 三通道
  • 效果:经典黑白效果
  • 适用:肖像摄影、经典风格

4. 怀旧特效 (Sepia)

  • 原理:应用棕褐色变换矩阵
  • 效果:暖色调的复古褐色风格
  • 适用:老照片风格、怀旧主题

💡 使用技巧

最佳手势识别效果

  1. 充足光线:确保摄像头能清楚看到你的手
  2. 适当距离:保持手距摄像头 30-50 厘米
  3. 清晰手势:手指要完全展开或握紧(避免模糊状态)
  4. 稳定姿态:快速切换手势时保持稳定

照片拍摄技巧

  1. 先做出 PALM(张开手掌)
  2. 快速转变为 FIST(握拳)- 需在 0.5 秒内完成
  3. 系统会自动等待 2 秒后拍照
  4. 拍照完成后会在 ./data/output/ 目录保存照片

滤镜切换

  • 多次做同一手势时,第一次切换滤镜,后续重复不会再切换
  • 要切换到另一种滤镜,做不同的手势数字
  • FIST 和 PALM 不会改变滤镜

🐛 常见问题

Q: 摄像头无法打开

A: 检查:

  • 摄像头是否被其他程序占用
  • 权限设置是否允许程序访问摄像头
  • 系统设备管理器中摄像头状态

Q: 手势识别不准确

A: 尝试:

  • 增加光线亮度
  • 调整摄像头角度
  • 做手势时动作更清晰明显
  • 稍微靠近摄像头

Q: 模型文件下载很慢

A: 首次运行会自动下载 hand_landmarker.task (27MB),可以:

  • 检查网络连接
  • 手动下载后放到 ./model/ 目录
  • 耐心等待下载完成

Q: 滤镜效果看不到

A: 检查:

  • 是否成功识别手势(左上角显示手势类型)
  • 当前激活的滤镜名称(左上方显示)
  • 尝试在不同光线条件下测试

📝 输出文件

拍照保存

命名格式:photo_YYYYMMDD_HHMMSS_滤镜名.jpg

示例:

photo_20240115_143025_flowing_years.jpg
photo_20240115_143027_grayscale.jpg

快捷保存

命名格式:screenshot_YYYYMMDD_HHMMSS_滤镜名.jpg

位置:./data/output/ 目录


🎓 技术栈

  • 手势识别:MediaPipe Hand Landmarker (v0.10.31)
  • 图像处理:OpenCV (cv2)
  • 数值计算:NumPy (向量化)
  • 视频捕捉:OpenCV VideoCapture

📄 许可证

本项目为学习项目,可自由使用和修改。


👨‍💻 开发者

项目完成日期:2026 年 1 月

核心优化:

  • ✅ MediaPipe 0.10.31 Tasks API 集成
  • ✅ 手势状态持久化逻辑
  • ✅ NumPy 向量化性能优化 (39+ FPS)
  • ✅ 双管道架构 (display + save)
  • ✅ 无 UI 干净图像保存

🤝 反馈与改进

如有任何问题或建议,欢迎反馈!

可能的改进方向:

  • 支持更多滤镜效果
  • 实时滤镜参数调整
  • 视频录制功能
  • 多手势组合识别
  • 批量图片处理

About

图像处理系统大作业——基于手势识别的智能图像滤镜系统

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages