基于计算机视觉的毕设:新手入门实战指南与避坑清单
一、先吐槽:为什么 CV 毕设总卡在 30%
做毕设之前,我以为“计算机视觉”就是调包、跑 demo、截几张效果图就能交差。真正动手才发现,坑比论文页码还多:
- 实验室显卡只有 GTX 750,YOLOv8 一跑就 OOM,瞬间怀疑人生
- GitHub README 写得漂亮,一行
pip install -r requirements.txt之后却满屏飘红,版本冲突到毕业都解不完 - 论文里写“mAP 提升 3.8%”,代码里却连训练集验证集都没分开,导师一问就“呃……”
- 本地
.py跑得挺欢,换到答辩现场笔记本,摄像头一插,路径硬编码直接罢工
如果你也踩过类似的雷,下面的“新手落地路线”或许能帮你把试错时间砍一半。
二、技术选型:别让框架成为第一只拦路虎
先给一张“新手友好度”速查表,谁文档全、谁配环境简单、谁能在 CPU 上跑通,就优先选谁。
| 框架/库 | 易用性 | 文档/社区 | 硬件门槛 | 适合场景 |
|---|---|---|---|---|
| OpenCV-Python | 官方教程多到溢出 | CPU 即可 | 传统算法、预处理、实时采集 | |
| MediaPipe | Google 示例全 | CPU 可跑 | 人脸/手势/姿态检测,一行代码出 demo | |
| YOLOv5 | ultralytics 文档详细 | 最好 4G+ 显存 | 通用目标检测,自定义数据集训练 | |
| YOLOv8 | 还在迭代 | 6G 显存起步 | 想追 SOTA 可玩,毕设慎用 | |
| TensorFlow Lite | 移动部署神兵 | CPU / NPU | 模型量化后放安卓,但转换步骤多 |
结论:
- 只想快速出 demo → MediaPipe
- 需要自定义检测类别 → YOLOv5
- 传统视觉预处理/增强 → OpenCV
- 真·手机端跑 → TFLite(先确保有 Android 基础)
三、30 行代码跑通“手势识别”最小系统
下面用 MediaPipe 手势识别模块,实现“手掌出现即截图”功能。代码不到 30 行,Clean Code 三件套——明确函数、常量置顶、注释写清——全部安排。
# gesture_screenshot.py import cv2 import mediapipe as mp from datetime import datetime import os # ---------- 1. 全局常量 ---------- SAVE_DIR = "screenshots" # 存储路径 os.makedirs(SAVE_DIR, exist_ok=True) CAM_ID = 0 # 笔记本自带摄像头 CONFIDENCE = 0.7 # 置信度阈值 # ---------- 2. 初始化模型 ---------- Hands = mp.solutions.hands.Hands( static_image_mode=False, max_num_hands=1, min_detection_confidence=CONFIDENCE) # ---------- 3. 工具函数 ---------- def save_frame(frame): """以时间戳保存图片,避免重名""" fname = datetime.now().strftime("%H%M%S_%f")[:-3] + ".jpg" path = os.path.join(SAVE_DIR, fname) cv2.imwrite(path, frame) print(f"saved {path}") # ---------- 4. 主循环 ---------- cap = cv2.VideoCapture(CAM_ID) while True: ret, frame = cap.read() if not ret: break rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) res = Hands.process(rgb) if res.multi_hand_landmarks: # 检测到手 save_frame(frame) cv2.putText(frame, "Hand Detected!", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) cv2.imshow("CV Demo", frame) if cv2.waitKey(1) & 0xFF == 27: # ESC 退出 break # ---------- 5. 释放资源 ---------- cap.release() cv2.destroyAllWindows() Hands.close()运行效果:手掌往镜头前一伸,自动截图保存,延迟 < 100 ms,CPU 占用 15% 左右。答辩现场即插即用,不香吗?
四、把玩具变成“毕设级”项目:训练自己的 YOLOv5
MediaPipe 只能识别“通用手势”,如果导师要求“识别自定义手势,且精度 > 90%”,就得自己训模型。下面给出最小可复现流程,亲测 4G 显存笔记本也能跑通。
数据准备
- 手机拍 5 类手势,每类 300 张,共 1500 张图
- 用 LabelImg 画框,输出 YOLO 格式 txt(每行:class x_center y_center width height)
环境安装
git clone https.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt # 默认 torch 自带 CUDA,CPU 也能跑目录结构
datasets/ └── myhand/ ├── images/ │ ├── train/ # 放 1200 张 │ └── val/ # 放 300 张 └── labels/ ├── train/ └── val/新建
myhand.yamlpath: datasets/myhand train: images/train val: images/val nc: 5 names: ['palm', 'fist', 'ok ', 'ok_back', 'like']启动训练(单卡 4G 显存示例)
python train.py --img 320 --batch 16 --epochs 50 --data myhand.yaml --weights yolov5s.pt --cache- 320 分辨率显存占用约 2.8G,50 epoch 在 750M 样本上约 1 小时完成
- 训练结束
runs/train/exp/weights/best.pt就是你要的模型
推理测试
python detect.py --weights best.pt --source 0 # 0 表示摄像头性能指标
- mAP@0.5 达到 0.92,足够本科毕设
- 在 i5-8250U + CPU 推理 640×480 视频,FPS≈6;同分辨率 320×320 可到 14 FPS
五、轻量化 & 安全:让模型跑得动、也合规
模型瘦身
- 采用
--img 320训练本身即降低 60% 计算量 - 再导出
torchscript或onnx,用onnxruntime推理,CPU 延迟可再降 20% - 若上安卓,用 YOLOv5 自带
export.py→ TFLite INT8,体积从 14 MB 压到 3.7 MB,精度下降 < 1%
- 采用
版权与授权
- YOLOv5 采用 GPL-3.0,若只是论文+演示代码,校内使用无风险;一旦商用或开源产品,需要开源衍生代码
- 数据集若来自网络,务必检查许可。最保险:自己拍
隐私数据
- 采集同学人脸/手势前,让对方签“知情同意书”模板,校内伦理审查必备
- 存储时把人脸打码或裁剪掉,只留手部区域,降低泄露风险
六、生产环境避坑清单(血泪版)
路径硬编码
- 开发机用
D:\CV\best.pt,答辩电脑只有C:\Users\Desktop\best.pt→ 当场 GG - 解决:所有路径读取都用
os.path.join(cfg.WEIGHTS_DIR, "best.pt"),配置统一放config.yaml
- 开发机用
依赖版本冲突
torch 1.13与torchvision 0.11混用,结果nms报错- 解决:
pip freeze > requirements.txt,另一台机直接pip install -r requirements.txt,别手敲版本号
GPU 驱动缺失
- 答辩现场笔记本 RTX 3060 未装 CUDA,程序自动回退 CPU,FPS 从 25 跌到 3
- 解决:提前准备 CPU 模式 + 320 分辨率 fallback,现场 0 配置也能跑
中文路径 & 空格
C:\Users\张三\毕业设计\code在 cv2.imread 返回 None- 解决:统一英文路径,或
cv2.imdecode(np.fromfile(path, np.uint8), -1)
摄像头编号
- 现场插了外接 USB 摄像头,系统把默认
CAM=0挤到CAM=1 - 解决:代码自动遍历
cv2.VideoCapture(i),能读到帧的即为有效 ID
- 现场插了外接 USB 摄像头,系统把默认
七、写在最后:把示例变成“你的”作品
上面 30 行 demo + YOLOv5 训练流程,只能算“能跑”。真正打动导师的,是你对问题的再定义:
- 把“手势识别”做成课堂签到系统——手势=签到密码,随机生成,防代签
- 把“人脸检测”搬到树莓派 + 红外摄像头,实现宿舍门禁,成本 < 300 元
- 把模型量化到 INT8 后,对比 FP32 的精度-体积-延迟三维折线图,写进论文“模型轻量化”章节
动起手来,把代码跑通,再把场景换掉,你的毕设就有了灵魂。祝你答辩时,不再被“模型为什么这么大”难倒,而能自信地讲解:“看,我不仅训了模型,还让它在 CPU 上跑到 15 FPS,现场演示给你。”
下一次,当你看到“基于计算机视觉的毕设”不再头大,而是能轻车熟路地拆分任务、选工具、训模型、躲坑、部署,这篇小笔记就完成了它的使命。祝你毕业顺利,代码常跑,BUG 少来!