2024 暑期集训:电赛视觉学习路线

2024 暑期集训:电赛视觉学习路线

OpenMV

OpenMV适合实现轻量级的计算机视觉任务,如颜色检测、形状识别,使用OpenMV 的 nn库可以运行简单的目标检测算法。

必学内容

  • 基础图像处理:灰度转换、二值化、滤波和边缘检测等 图像处理流程,了解大部分转换的作用,在不同场景下的效果

  • 颜色检测:了解 RGB,LAB,HSV 颜色空间,能够进行相互转换,并能够对图像中的颜色做到识别,

  • 形状识别:直线,线段,矩形、圆形等简单几何图形的识别,对识别结果进行处理,能从库函数提供的结果中得到需要的信息

  • ROI:会框定 ROI,在 ROI 内进行所需的操作

  • 数据传输:了解如何将获取到的数据打包,了解OpenMV的串口收发与STM32的通讯

  • 调试接口:学习留出调试接口,如LCD屏,串口屏,按键等,便于赛场调整颜色阈值等重要参数

  • 特征检测&模板匹配:至少学会一种对复杂目标的检测方法,在没有办法利用算法流程检测目标时备用

提高内容

  • 神经网络:掌握拍摄数据集,数据集处理,打标,训练,部署全流程,可以使用公开数据集走一遍流程,也可以自己拍摄数据(一般训练目标检测模型用的多一些)
  • 分类器:HaarCascade 分类器的使用( 星瞳科技 使用的是人脸识别)这个分类器是用OpenCV 相关软件训练出的,在 OpenMV 上面使用需要一层处理(参考 GitHub 代码 生成适用于 OpenMV 的分类器文件,之后进行部署;关于如何训练,参考 OpenCV 文档
  • 文件读写:OpenMV 使用 MicroPython,具有文件系统,比单片机使用 Flash 保存参数方便,所以可学文件读写,在比赛场地的 30min 准备时间中,可以把环境参数保存下来(验收中途老师不一定允许继续调试)
  • 矩阵运算:使用 OpenMV 已经实现的矩阵运算库,相较于自己写循环,可以加快一些计算过程。矩阵运算库是 ulab.numpy ,可以参照 Python 的矩阵运算库 numpy 来学习;

其他

  • OpenMV 是一块 STM32,它也可以驱动 GPIO,IIC,SPI等,可以尝试用 OpenMV 做一些不止视觉的东西。

  • 平常多使用,了解 OpenMV 的性能,处理各种常用流程的速度,在比赛时考虑性能决定算法,根据赛题和处理方案所需的速度,合理安排 OpenMV 的计算工作

  • 多准备一些 SD卡,便于调试过程中尝试多个版本的代码

参考链接

网站 网址 说明
OpenMV 教程 https://book.openmv.cc/
OpenMV 官方文档 https://docs.openmv.io/ 尽量看英文原版,星瞳科技翻译的版本已经过时了,有些内容不适用最新 OpenMV 固件
OpenMV 官方教程 https://docs.openmv.io/openmvcam/tutorial/index.html 同上
星瞳科技教程 https://www.bilibili.com/video/BV1G8411w72w/
Python教程 https://www.runoob.com/python3/python3-tutorial.html

OpenCV

基础必学

  • 树莓派镜像烧录和备份:要会烧录镜像,会配置环境;将镜像备份起来,如果Linux系统被搞坏了可以恢复

  • Linux:基本的 Linux 命令,重要的系统配置文件等;SSH 连接,SCP 文件传输等

  • Python:包括但不限于:NumPy,Pillow,PySerial 等库

  • 基础图像处理:灰度转换、二值化、滤波和边缘检测等 图像处理流程,了解大部分转换的作用,在不同场景下的效果

  • 颜色检测:了解 RGB,LAB,HSV 颜色空间,能够进行相互转换,并能够对图像中的颜色做到识别,

  • 形状识别:直线,线段,矩形、圆形等简单几何图形的识别,对识别结果进行处理,能从库函数提供的结果中得到需要的信息

  • ROI:框定 ROI,了解不规则 ROI 处理的方法

  • 数据传输:了解如何将获取到的数据打包,了解树莓派的串口收发与STM32的通讯

  • YOLO:使用 YOLO 进行目标检测

提高内容

  • 优化算法:了解一些常用的优化算法加快处理速度,如多线程和多进程、降采样、模型量化等
  • GPU:Python 环境下利用ncnn 使用树莓派的 GPU 可以稍微加快一点速度,效果有限,可以尝试
  • 项目结构:使用 OpenCV 写一些复杂的处理流程,可以适当安排项目结构,也能保证代码的可复用性
  • 版本控制:如果系统坏了,或者误修改不能撤销,可以使用版本控制工具快速恢复
  • 深度学习:学习 SciPy 和 sk-learn 相关的工具,在很多场景下神经网络不是唯一的选择;学习 PyTorch 框架,自己写神经网络用于一些任务(YOLO 一般会很慢)
  • 分类器:使用 OpenCV 提供的 trainCascade 工具训练级联分类器并部署到树莓派

其他

  • 阅读经典论文,了解经典算法,在树莓派部署了解性能
  • YOLO 使用的是 PyTorch 框架,所以尽量直接学 PyTorch;而且 PyTorch 环境配置比 TensorFlow 要简单方便,不要浪费太多时间在配置环境上
  • 如果想进一步加快运算速度,可以尝试使用 C++ 编写程序
  • 树莓派是一个完整的 Linux 系统,灵活性很大,可以更加自由的尝试各种更复杂的算法,多尝试
  • Vim 可学可不学,树莓派可以用 VS Code 做远程连接

参考链接

网站 链接 说明
Python教程 https://www.runoob.com/python3/python3-tutorial.html
OpenCV 中文文档 https://cv2.neolux.eu.org/
OpenCV 官方文档 https://docs.opencv.org/4.x/index.html 英文版,推荐
OpenCV 级联分类器 https://docs.opencv.org/3.4/dc/d88/tutorial_traincascade.html 同上
学 NumPy https://www.runoob.com/numpy/numpy-tutorial.html
学 SciPy https://www.runoob.com/scipy/scipy-tutorial.html
Linux 命令手册 https://www.linuxcool.com/
PyTorch 教程 https://pytorch.org/tutorials/ PyTorch 官方的一套教程,英文的但是很好懂,一学就停不下来

视觉的要求只有三个字 “快”、“准”、“稳”,全部实现也不难,到了赛场上,实际的影响因素并没有很多,比赛期间和验收的调试期间细心调试问题一般就不大。

预祝电协成员 2024年电赛取得圆满成功