Python 玩转摄像头:MediaPipe 手势追踪贪吃蛇游戏(含完整环境配置教程)
本文将带你从零开始搭建一个 Python 多功能项目 Project2https://github.com/WLHSDXN/Project2。无论你是想学习计算机视觉、自动化脚本还是 Web 爬虫 邮件通知这个项目都能给你完整的实践参考。一、整体项目结构Project2-main/ ├── README.md# 项目总说明├── SnakeGame/# 摄像头贪吃蛇│ ├── main.py# 游戏主入口│ ├── HandTrackingModule_fixed.py# 手势追踪模块适配 MediaPipe 0.10│ ├── hand_landmarker.task# MediaPipe 手部模型文件│ ├── donut.png# 食物图片│ └── requirements.txt# 依赖清单├── AutomatedScript/# 自动化脚本│ ├── MessageBombing.py# 消息轰炸脚本│ └── README.md └── AutomatedScript_QueryScore/# 成绩监控├── cjcx.py# 核心查询 邮件发送└── README.md二、环境准备通用部分2.1 Python 版本推荐使用 Python 3.8 ~ 3.10。项目依赖中部分库如 tensorflow2.6.2、mediapipe0.8.3在高版本 Python 上可能存在兼容性问题。⚠️ 注意如果你只需要运行 SnakeGame不需要 tensorflow可以跳过安装它。# 在项目根目录下python-mvenv venv# Windows 激活venv\Scripts\activate# Linux/Mac 激活sourcevenv/bin/activate2.2 创建虚拟环境推荐# 在项目根目录下python-mvenv venv# Windows 激活venv\Scripts\activate# Linux/Mac 激活sourcevenv/bin/activate2.3 安装依赖SnakeGame 模块提供了 requirements.txt一键安装cdSnakeGame pipinstall-rrequirements.txt其他两个模块依赖较少单独安装即可# AutomatedScriptpipinstallpynput# AutomatedScript_QueryScorepipinstallrequests# smtplib 为 Python 内置库无需安装三、模块一SnakeGame摄像头贪吃蛇3.1 项目简介这是整个项目中最亮眼的模块。通过摄像头捕捉你的手部动作食指指尖控制蛇的移动方向实现隔空玩贪吃蛇的效果。###3.2 核心依赖及作用核心依赖主要为 mediapipe手势识别、cv2摄像头捕捉与画面渲染、cvzone简化OpenCV操作均已包含在 SnakeGame 目录的 requirements.txt 中一键安装即可。3.3 关键配置步骤① 下载 MediaPipe 手部模型文件项目已内置 hand_landmarker.task 文件在 SnakeGame/ 目录下。如果缺失可从 MediaPipe 官方https://ai.google.dev/edge/mediapipe/solutions/vision/hand_landmarker下载放置到 SnakeGame/ 目录。② 确认摄像头可用运行以下测试代码验证摄像头正常importcv2 capcv2.VideoCapture(0,cv2.CAP_DSHOW)ret,framecap.read()print(摄像头正常ifretelse摄像头异常)cap.release()如果提示摄像头异常检查是否有其他程序占用摄像头笔记本用户确认隐私设置中允许应用访问摄像头尝试将 0 改为 1 或 2多摄像头设备③ 运行游戏cdSnakeGame python main.py游戏启动后将手伸到摄像头前食指指尖即为蛇头位置吃到甜甜圈食物得 1 分蛇身增长蛇身缠绕自身则 Game Over按 R 键重新开始3.4 核心代码逻辑解析游戏主循环 (main.py)# 初始化摄像头 1280x720capcv2.VideoCapture(0,cv2.CAP_DSHOW)cap.set(3,1280)# 宽cap.set(4,720)# 高# 初始化手势检测器只检测一只手置信度 0.8detectorHandDetector(detectionCon0.8,maxHands1)# 主循环whileTrue:success,imgcap.read()imgcv2.flip(img,1)# 水平翻转镜像效果hands,imgdetector.findHands(img,flipTypeFalse)ifhands:lmListhands[0][lmList]pointIndexlmList[8][0:2]# 食指指尖坐标imggame.update(img,pointIndex)cv2.imshow(Image,img)ifcv2.waitKey(1)ord(r):game.gameOverFalse# 按 R 重开碰撞检测 (SnakeGameClass.update())# 将蛇身点除头部两个点连成折线ptsnp.array(self.points[:-2],np.int32)ptspts.reshape((-1,1,2))cv2.polylines(imgMain,[pts],False,(0,200,0),3)# 计算蛇头到折线的最短距离minDistcv2.pointPolygonTest(pts,(cx,cy),True)# 距离接近 0 说明蛇头碰到了身体 → 游戏结束if-1minDist1:self.gameOverTrue3.5 手势追踪模块说明项目使用了自定义的 HandTrackingModule_fixed.py专门适配了 MediaPipe 0.10 的新 API旧版 cvzone 的 HandTrackingModule 在新版 MediaPipe 上会报错。关键变化使用 mediapipe.tasks.python.vision.HandLandmarker 替代旧的 mp.solutions.hands需要加载 .task 模型文件输出格式从归一化坐标转换为像素坐标四、模块二AutomatedScript自动化脚本该模块包含自动化处理重复任务的脚本核心文件为MessageBombing.py消息轰炸脚本依赖仅需 pynput用于模拟键盘/鼠标操作。运行方式进入 AutomatedScript 目录直接执行 python MessageBombing.py可根据脚本内注释修改轰炸内容、频率等参数。五、模块三AutomatedScript_QueryScore成绩监控核心功能部署在服务器上实时监测成绩发布情况一旦有新成绩立即发送邮件到指定邮箱核心文件为 cjcx.py。依赖requests用于请求成绩查询接口smtplibPython 内置用于发送邮件。使用前需在 cjcx.py 中配置成绩查询接口地址、个人查询参数、邮箱账号密码、接收邮件地址等配置完成后直接运行即可实现后台监控。六、常见问题汇总Q1SnakeGame 运行报错 ModuleNotFoundError: No module named ‘cvzone’解决方案执行 pip install cvzone 安装依赖。Q2摄像头画面是黑的 / 打不开确认摄像头驱动正常检查是否有杀毒软件/隐私设置阻止了摄像头访问尝试把 cv2.VideoCapture(0) 中的 0 改为 1Q3MediaPipe 相关报错如模型加载失败解决方案确认 hand_landmarker.task 文件已放置在 SnakeGame 目录若缺失从 MediaPipe 官方地址重新下载。七、总结非常适合作为 Python 新手的综合练手项目每个模块都可以独立运行互相不耦合涵盖计算机视觉MediaPipe 手势识别、自动化操作、网络请求邮件通知等常用场景。项目地址https://github.com/WLHSDXN/Project2如果觉得有帮助欢迎点赞收藏 ⭐~