news 2026/4/27 23:20:54

Python 玩转摄像头:MediaPipe 手势追踪贪吃蛇游戏(含完整环境配置教程)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 玩转摄像头:MediaPipe 手势追踪贪吃蛇游戏(含完整环境配置教程)

本文将带你从零开始搭建一个 Python 多功能项目 Project2(https://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/activate

2.2 创建虚拟环境(推荐)

# 在项目根目录下python-mvenv venv# Windows 激活venv\Scripts\activate# Linux/Mac 激活sourcevenv/bin/activate

2.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 cap=cv2.VideoCapture(0,cv2.CAP_DSHOW)ret,frame=cap.read()print("摄像头正常"ifretelse"摄像头异常")cap.release()

如果提示摄像头异常,检查:

  • 是否有其他程序占用摄像头
  • 笔记本用户确认隐私设置中允许应用访问摄像头
  • 尝试将 0 改为 1 或 2(多摄像头设备)
    ③ 运行游戏
cdSnakeGame python main.py
  • 游戏启动后,将手伸到摄像头前,食指指尖即为蛇头位置
  • 吃到甜甜圈(食物)得 1 分,蛇身增长
  • 蛇身缠绕自身则 Game Over
  • 按 R 键重新开始

3.4 核心代码逻辑解析

游戏主循环 (main.py):

# 初始化摄像头 1280x720cap=cv2.VideoCapture(0,cv2.CAP_DSHOW)cap.set(3,1280)# 宽cap.set(4,720)# 高# 初始化手势检测器,只检测一只手,置信度 0.8detector=HandDetector(detectionCon=0.8,maxHands=1)# 主循环whileTrue:success,img=cap.read()img=cv2.flip(img,1)# 水平翻转,镜像效果hands,img=detector.findHands(img,flipType=False)ifhands:lmList=hands[0]['lmList']pointIndex=lmList[8][0:2]# 食指指尖坐标img=game.update(img,pointIndex)cv2.imshow("Image",img)ifcv2.waitKey(1)==ord('r'):game.gameOver=False# 按 R 重开

碰撞检测 (SnakeGameClass.update()):

# 将蛇身点(除头部两个点)连成折线pts=np.array(self.points[:-2],np.int32)pts=pts.reshape((-1,1,2))cv2.polylines(imgMain,[pts],False,(0,200,0),3)# 计算蛇头到折线的最短距离minDist=cv2.pointPolygonTest(pts,(cx,cy),True)# 距离接近 0 说明蛇头碰到了身体 → 游戏结束if-1<=minDist<=1:self.gameOver=True

3.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(用于请求成绩查询接口),smtplib(Python 内置,用于发送邮件)。
使用前需在 cjcx.py 中配置:成绩查询接口地址、个人查询参数、邮箱账号密码、接收邮件地址等,配置完成后直接运行即可实现后台监控。

六、常见问题汇总

Q1:SnakeGame 运行报错 ModuleNotFoundError: No module named ‘cvzone’
解决方案:执行 pip install cvzone 安装依赖。
Q2:摄像头画面是黑的 / 打不开

  • 确认摄像头驱动正常
  • 检查是否有杀毒软件/隐私设置阻止了摄像头访问
  • 尝试把 cv2.VideoCapture(0) 中的 0 改为 1
    Q3:MediaPipe 相关报错(如模型加载失败)
    解决方案:确认 hand_landmarker.task 文件已放置在 SnakeGame 目录,若缺失,从 MediaPipe 官方地址重新下载。

七、总结

非常适合作为 Python 新手的综合练手项目,每个模块都可以独立运行,互相不耦合,涵盖计算机视觉(MediaPipe 手势识别)、自动化操作、网络请求+邮件通知等常用场景。

项目地址:https://github.com/WLHSDXN/Project2
如果觉得有帮助,欢迎点赞收藏 ⭐~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 23:20:35

JAMSC-B1050输出模块

YASKAWA JAMSC-B1050输出模块专为Memocon-SC系列PLC设计&#xff0c;是连接PLC逻辑与现场交流负载设备的关键接口单元。属于Memocon-SC系列的交流输出模块&#xff0c;产自20世纪80-90年代。输出额定电压为100V AC&#xff0c;工作范围85-132V AC。每通道输出电流约0.5A至1.0A&…

作者头像 李华
网站建设 2026/4/27 23:20:21

元宇宙崩盘:软件测试视角下的虚拟世界溃败分析

元宇宙概念曾被誉为下一代互联网的终极形态&#xff0c;承载着人类对虚拟与现实深度融合的无限遐想。然而&#xff0c;从2021年的资本狂欢到如今的市场沉寂&#xff0c;元宇宙的“崩盘”已是不争的事实。表面上看&#xff0c;这是技术瓶颈、商业模式不清晰与资本转向共同作用的…

作者头像 李华
网站建设 2026/4/27 23:20:17

为什么企业官网需要持续维护?关键在于这7点

当企业着手搭建官方网站时&#xff0c;很多专业的网站建设公司都会强调&#xff1a;网站上线只是第一步&#xff0c;后续的维护工作同样关键。那么&#xff0c;什么是网站建设维护&#xff1f;具体该如何进行&#xff1f;维护周期和费用又是怎样的&#xff1f;这些都是企业在网…

作者头像 李华
网站建设 2026/4/27 23:20:15

3步快速上手:用Ryujinx在电脑上免费畅玩Switch游戏

3步快速上手&#xff1a;用Ryujinx在电脑上免费畅玩Switch游戏 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想在电脑上体验《塞尔达传说&#xff1a;旷野之息》的壮丽世界&#xff…

作者头像 李华
网站建设 2026/4/27 23:20:08

【2026学术防雷】高效论文降重方案:TOP10平台功能对比与选择建议!推荐一些可以用于论文降重的软件,到底哪些降重软件可以同时降低查重率和AIGC疑似率?

CSDN 极客硬核实验室 | 2026届全网唯一“保送级”避坑实录 博主前言&#xff1a; 盲审倒计时10天&#xff0c;最近实验室的同门和粉丝群彻底炸锅了。每天都有人崩溃私信&#xff1a;“博主救命&#xff01;推荐一些可以用于论文降重的软件吧&#xff01;我花了几百块人工降重&a…

作者头像 李华
网站建设 2026/4/27 23:19:40

CAN 网络设备不共地,照样稳定通信原理彻底讲透

一、结论普通串口 / I2C / SPI&#xff1a;必须共地属于单端信号&#xff0c;靠「对地 0V」判断 3.3V/0V。CAN 总线&#xff1a;不需要共地、允许多地电位差属于差分信号通信&#xff0c;不靠对地电压&#xff0c;靠两根线互相比较。二、普通通信必须共地UART/I2C 都是 单端信号…

作者头像 李华