1. 课程导学与计算机视觉概述
大家好,欢迎来到这门课。我是你们这趟旅程的向导。
先聊聊这门课到底要干嘛。说白了,就是让你从零开始,亲手跑通一个基于 OpenCV 和 YOLO 的图像检测程序。不是光讲理论,是真正能上手干活的那种。
我个人习惯是,学任何新技术之前,先搞清楚它是什么、能干什么、怎么来的。所以这一章,我们先搭个全景框架。
课程目标:学完你能做什么?
- 理解核心概念:计算机视觉是什么,YOLO 为什么快,OpenCV 怎么用。
- 搭建开发环境:装好 OpenCV、YOLO 权重文件,让代码跑起来。
- 完成第一个检测:用摄像头或图片,实时检测出物体并画框。
- 调优与部署:知道怎么调参数,怎么把模型放到实际项目里。
一句话总结:30 章之后,你手里会有一套能用的检测工具,而不是一堆零散的知识点。
学习路径:怎么走最省力?
我建议你按这个节奏来:
- 前 5 章:打基础。装环境、读代码、跑通第一个 demo。别跳,这一步卡住了后面全白搭。
- 第 6-15 章:深入原理。YOLO 的网络结构、损失函数、训练自己的数据集。这里会有点烧脑,但值得。
- 第 16-25 章:实战项目。人脸检测、车辆计数、缺陷检测……每个项目我都会给完整代码。
- 第 26-30 章:优化与部署。模型压缩、TensorRT 加速、嵌入式部署。嗯,这部分是进阶,但很有用。
我的建议:每章看完,立刻动手敲代码。光看是学不会的,你想想看,游泳教练在岸上比划再多,你不下水永远学不会。
计算机视觉发展简史:从像素到理解
计算机视觉,说白了就是让机器看懂图像。这事比想象中难得多。
我记得 2012 年之前,大家还在用手工设计的特征(比如 HOG、SIFT)做检测。效果嘛……只能说勉强能用。直到 AlexNet 在 ImageNet 上大杀四方,深度学习才真正进入这个领域。
几个关键节点:
| 时间 | 事件 | 意义 |
|---|---|---|
| 1966 年 | MIT 夏季视觉项目 | 计算机视觉作为学科诞生 |
| 2001 年 | Viola-Jones 人脸检测 | 第一个实时人脸检测算法 |
| 2012 年 | AlexNet 赢得 ImageNet | 深度学习时代开启 |
| 2015 年 | YOLO 首次提出 | 实时目标检测的里程碑 |
| 2020 年 | YOLOv5 发布 | 工程化易用性大幅提升 |
这里有个坑,我踩过。早期做检测,我总想着自己设计特征提取器,结果折腾几个月效果还不如一个预训练的 YOLO 模型。后来我学乖了:站在巨人的肩膀上,别自己造轮子。
OpenCV 简介:视觉开发的瑞士军刀
OpenCV 是什么?一个开源的计算机视觉库。从图像读取、滤波、特征提取,到摄像头调用、视频处理,它几乎什么都能干。
我刚开始用 OpenCV 时,最惊艳的是它读取一张图片只需要一行代码:
import cv2
img = cv2.imread('photo.jpg')
cv2.imshow('窗口标题', img)
cv2.waitKey(0)
就这么简单。但别小看它,背后是几十年的算法积累。
OpenCV 的几个核心模块:
- core:基础数据结构(Mat、Point、Rect)
- imgproc:图像处理(滤波、边缘检测、形态学操作)
- highgui:GUI 和视频 I/O
- dnn:深度学习推理模块(加载 YOLO 模型就用它)
- objdetect:目标检测(传统方法如 Haar Cascade)
注意:OpenCV 的 dnn 模块只支持推理,不支持训练。训练 YOLO 模型需要用 Darknet 或 PyTorch 版本。
YOLO 简介:看一眼就够了
YOLO,全称 You Only Look Once。名字很直白:只看一次。
传统检测方法(比如 R-CNN)需要先生成候选区域,再逐个分类。YOLO 不一样,它把整张图分成网格,每个网格直接预测边界框和类别。一次前向传播,结果全出来。
为什么快?因为它是端到端的回归问题,不是分类问题。你想想看,从提出候选框到分类,中间省了多少步骤。
YOLO 的几个版本对比:
| 版本 | 特点 | 适用场景 |
|---|---|---|
| YOLOv3 | 多尺度检测,稳定 | 通用检测,兼容性好 |
| YOLOv5 | 工程化好,易用 | 快速原型开发 |
| YOLOv8 | 最新,支持实例分割 | 需要分割的场景 |
| YOLO-NAS | 神经架构搜索优化 | 追求极致精度 |
这门课我们主要用 YOLOv5 和 YOLOv8。为什么?因为文档全、社区活跃、踩坑的人多,你遇到问题搜一下就有答案。
本章知识体系
下面这张图,把这一章的核心脉络串起来了:
避坑指南:我踩过的几个坑
最后,分享几个我早期犯过的错误,你注意避开:
- 版本不匹配:OpenCV 4.5 以下不支持 YOLOv5 的某些算子。我曾经折腾两天,最后发现是版本问题。建议直接用 OpenCV 4.8+。
- 路径问题:模型权重文件路径别用中文,也别有空格。OpenCV 的 dnn 模块对路径很敏感。
- GPU vs CPU:YOLO 在 CPU 上也能跑,但速度慢很多。如果你没有 GPU,建议先用轻量版(YOLOv5n 或 YOLOv8n)。
- 不要迷信参数:很多人一上来就调 confidence threshold,其实先跑通默认参数更重要。
一个小技巧:刚开始学,把代码和模型文件放在同一个目录下,路径用相对路径。这样换电脑也能直接跑,省去改路径的麻烦。