# Linux_lab **Repository Path**: wang-yxgit/linux_lab ## Basic Information - **Project Name**: Linux_lab - **Description**: 课程实验提交 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-05-23 - **Last Updated**: 2026-07-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 鼻尖控制水果游戏 基于 dlib 人脸检测和 OpenCV 的实时鼻尖跟踪游戏。玩家通过移动鼻尖控制屏幕上的黑洞光标,接住掉落的水果获得分数,躲避炸弹。 ## 产品介绍 想象这样一个场景: > 你坐在屏幕前,不需要任何手柄或键盘,只需动动鼻子就能玩游戏。屏幕上会不断掉落各种水果和炸弹,你的鼻尖就是游戏中的黑洞光标。接住水果得分,碰到炸弹扣分。 应用场景: - **体感游戏**: 无需外设,通过面部动作控制游戏 - **趣味互动**: 适合聚会娱乐、儿童互动 - **健身锻炼**: 锻炼面部肌肉,增加活动量 - **科技展示**: 展示人脸检测技术的趣味性 ## 功能特性 - **实时鼻尖跟踪**: 基于 dlib 68 点人脸特征点检测,精确识别鼻尖位置 - **混合跟踪策略**: 每5帧完整检测,中间帧通过位移估计,响应速度提升4倍 - **黑洞光标光效**: 多层径向渐变 + 呼吸脉冲动画 + 旋转粒子尾迹 - **水果下落拖尾**: 渐变透明度的位置轨迹效果 - **得分粒子爆炸**: 发光光晕 + 随机大小和颜色的粒子效果 - **边界危险提示**: 靠近屏幕边缘时红色警示光晕 - **视频流推送**: 通过 HTTP MJPEG 流推送游戏画面 ## 技术栈 | 技术 | 版本 | 用途 | |------|------|------| | **dlib** | 19.10+ | 人脸检测 + 68 点特征点预测 | | **OpenCV** | 4.5+ | 图像处理、视频流推送、UI绘制 | | **CMake** | 3.15+ | 构建系统 | | **C++** | 17 | 开发语言 | ## 快速开始 ### 1. 依赖安装 ```bash # Ubuntu/Debian sudo apt update sudo apt install -y \ build-essential cmake \ libopencv-dev \ libdlib-dev ``` ### 2. 下载模型文件 下载 dlib 68 点人脸特征点检测模型和人脸识别模型: | 模型 | 链接 | |------|------| | shape_predictor_68_face_landmarks.dat | http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2 | | dlib_face_recognition_resnet_model_v1.dat | http://dlib.net/files/dlib_face_recognition_resnet_model_v1.dat.bz2 | 下载后解压并将模型文件放在 `model/` 目录。 ### 3. 编译 ```bash cd code mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j$(nproc) ``` ### 4. 运行 ```bash # 使用摄像头 ./fruit_nose_game -p 8105 # 使用视频文件 ./fruit_nose_game -p 8105 /path/to/video.mp4 ``` 访问 `http://localhost:8105` 查看视频流。 按 `ESC` 返回菜单,按 `q` 退出游戏。 ## 配置说明 游戏参数在代码中定义,主要参数: | 参数 | 说明 | 默认值 | |------|------|--------| | `MAX_Q` | 队列最大长度 | 2 | | `detect_interval` | 完整检测间隔(帧数) | 5 | | `smooth_factor` | 光标平滑系数 | 0.05 | | `stream_width/height` | 推流分辨率 | 1280x720 | | `jpeg_quality` | JPEG编码质量 | 70 | ## 游戏规则 - **水果得分**: - 苹果: 10分 - 橙子: 20分 - 香蕉: 30分 - 西瓜: 5分 - **炸弹**: -1条生命 - **游戏时间**: 120秒 - **生命数**: 3条 ## 性能指标 | 指标 | 数值 | |------|------| | 帧率 | 25-30 FPS | | 检测延迟 | ~80ms | | CPU 占用 | ~60% | | 推流码率 | ~2Mbps | ## 项目结构 ``` fruit_nose_game/ ├── README.md # 项目说明 ├── docs/ # 项目文档 │ ├── 项目设计说明书.md │ ├── AI对话记录.md │ └── images/ # 文档图片 └── code/ # 项目代码 ├── CMakeLists.txt # 主构建文件 ├── fruit_nose_game.cpp # 主入口(游戏逻辑) ├── include/ │ └── fruit_game.h # 游戏类定义 └── model/ # dlib模型文件 ``` ## 常见问题 ### Q: 检测不到人脸? 检查以下几点: 1. 确认摄像头工作正常 2. 确保光线充足 3. 调整摄像头角度,确保人脸在画面中央 ### Q: 光标响应太慢? 当前响应速度已优化,主要策略: - 队列长度从5减少到2 - 每5帧完整检测,中间帧跟踪估计 - 平滑系数调整为0.05 ### Q: 推流卡顿? - 降低推流分辨率(当前1280x720) - 降低JPEG编码质量 ## 许可证 MIT License ## 致谢 - [dlib](http://dlib.net/) - C++ 工具库,提供优秀的人脸检测算法 - [OpenCV](https://opencv.org/) - 计算机视觉库 - [cpp-mjpeg-streamer](https://github.com/jacksonliam/cpp-mjpeg-streamer) - MJPEG 视频流推送库