03 MaixCAM 视觉项目
项目定位
这是一个面向 MaixCAM / MaixPy 的视觉实验项目集合,原始资料位于 raw/projects/maixcam-my-project。当前资料覆盖巡线、颜色阈值学习、几何图形识别、三子棋/棋盘识别、物流车二维码与目标检测等方向,适合整理成“嵌入式视觉算法 + 串口控制接口 + 视觉任务案例库”。
本页的目标不是替代源码,而是给后续维护提供入口:知道每个目录做什么、关键参数在哪里、数据怎样从摄像头流向 MCU 或上位逻辑。
原始资料位置
| 类别 | 路径 | 用途 |
|---|---|---|
| 巡线识别 | Line_Track/main.py | 8 分区 ROI 巡线,串口输出 8 位 0/1 状态 |
| 线段角度 | Line_Track_angle/main.py | 通过回归线提取 theta/rho 等线段参数 |
| 颜色/色块 | Find_blood/main.py | LAB 阈值学习、色块检测、几何绘制实验 |
| 矩形识别 | Find_rec/main.py、Find_rec/main_move.py | 矩形轮廓或目标识别实验 |
| 圆形识别 | Find_yuan/2.py、Find_yuan/main_move.py | 圆形检测实验 |
| 三子棋 | sanziqi/line.py | 棋盘、透视变换、棋子状态识别相关代码 |
| 物流车视觉 | wuliu_car/code/QR.py、find_blob.py、find_circle.py | 二维码、色块、圆形任务识别 |
| OpenCV 笔记 | docs/line.py视觉识别API笔记.md | 摄像头、显示、Canny、轮廓、透视变换、棋盘识别笔记 |
目录结构
maixcam-my-project/
├─ Line_Track/ 8 区域巡线识别,串口输出二进制状态
├─ Line_Track_angle/ 线段回归与角度/极径计算
├─ Find_blood/ 色块识别、颜色学习、图形绘制实验
├─ Find_rec/ 矩形识别实验
├─ Find_yuan/ 圆形识别实验
├─ sanziqi/ 三子棋/棋盘识别相关逻辑
├─ wuliu_car/code/ 物流车视觉任务:QR、色块、圆形
├─ Python_code/ 通用 Python 工具代码
├─ rec_pro/ 识别处理实验代码
└─ docs/ 视觉 API 与算法笔记运行主线:8 分区巡线
Line_Track/main.py 是当前最完整的视觉到控制链路示例。
Camera(320x240) 初始化
-> Display 初始化
-> UART /dev/serial0, 115200 初始化
-> 按键触发 LAB 阈值学习
-> 在 LEARNING_ROI 采样 30 帧颜色统计
-> 生成 LAB threshold
-> 将图像横向划分为 8 个 ROI
-> 每个 ROI 调用 find_blobs 判断目标色块是否存在
-> 组合为 8 位 0/1 字符串
-> 通过串口发送给 MCU关键参数:
| 参数 | 当前值 | 含义 |
|---|---|---|
| 摄像头 | 320 x 240 | MaixCAM 输入分辨率 |
DETECT_Y | 120 | 巡线检测带中心 y 坐标 |
SECTION_HEIGHT | 40 | 单个 ROI 高度 |
SECTION_COUNT | 8 | 横向检测区数量 |
BLOB_PIXELS_THRESHOLD | 500 | 色块最小像素阈值 |
LEARNING_ROI | [120, 100, 80, 40] | 按键学习颜色的采样区域 |
| 串口 | /dev/serial0, 115200 | 与外部 MCU 通信 |
视觉算法地图
| 方向 | 关键词 | 当前资料 | 后续可拆页 |
|---|---|---|---|
| 颜色阈值 | LAB、get_statistics、find_blobs | Line_Track、Find_blood、find_blob.py | MaixCAM LAB 阈值学习 |
| 巡线 | ROI 分区、8 位状态、串口输出 | Line_Track/main.py | MaixCAM 巡线识别链路 |
| 线段回归 | get_regression、theta、rho | Line_Track_angle/main.py | 线段角度与车体坐标系 |
| 棋盘识别 | 透视变换、棋盘格、状态编码 | sanziqi/line.py、视觉 API 笔记 | 棋盘状态识别 |
| 物流车任务 | QR、色块、圆形 | wuliu_car/code/* | 物流车视觉任务拆解 |
| OpenCV 基础 | Canny、轮廓、透视变换 | docs/line.py视觉识别API笔记.md | OpenCV 图像处理笔记 |
与底盘/MCU 的接口
当前确定的接口是串口输出巡线状态:
00011000含义:8 个检测区从左到右分别输出 0/1。1 表示对应 ROI 检测到目标色块,0 表示未检测到。底盘侧需要定义这 8 位状态到转向、偏差或路口判断的映射。
建议后续明确三件事:
- 位序:第 0 位是否对应最左侧 ROI。
- 发送频率:当前主循环每帧发送,底盘侧是否需要限频或帧头帧尾。
- 容错:全 0、全 1、多个连续 1、左右边缘 1 分别代表什么动作。
调试与维护要点
- 光照变化会直接影响 LAB 阈值,巡线前应先按键完成颜色学习。
get_histogram在代码注释中被标记为不可用或不稳定,当前以get_statistics替代。find_blobs的pixels_threshold=500会过滤小噪点,但也可能漏检细线,需要结合画面尺寸重新调。- 若底盘接收不稳定,优先检查串口设备名、波特率、发送格式和是否需要换行。
- 图像任务建议统一记录输入分辨率、ROI 坐标、阈值、输出格式,否则后续很难复现实验结果。
后续补全计划
- 拆出
MaixCAM 巡线识别链路:整理Line_Track/main.py的完整流程、参数表和串口协议。 - 拆出
MaixCAM 线段角度识别:说明theta/rho与车体坐标系的关系。 - 拆出
棋盘状态识别:整理透视变换、格点提取、棋子分类和状态编码。 - 拆出
物流车视觉任务:分别归档 QR、色块、圆形识别的输入输出。 - 对每个实验保存一张实际画面截图和一组典型阈值,便于后续复现。