03 MaixCAM 视觉项目

项目定位

这是一个面向 MaixCAM / MaixPy 的视觉实验项目集合,原始资料位于 raw/projects/maixcam-my-project。当前资料覆盖巡线、颜色阈值学习、几何图形识别、三子棋/棋盘识别、物流车二维码与目标检测等方向,适合整理成“嵌入式视觉算法 + 串口控制接口 + 视觉任务案例库”。

本页的目标不是替代源码,而是给后续维护提供入口:知道每个目录做什么、关键参数在哪里、数据怎样从摄像头流向 MCU 或上位逻辑。

原始资料位置

类别路径用途
巡线识别Line_Track/main.py8 分区 ROI 巡线,串口输出 8 位 0/1 状态
线段角度Line_Track_angle/main.py通过回归线提取 theta/rho 等线段参数
颜色/色块Find_blood/main.pyLAB 阈值学习、色块检测、几何绘制实验
矩形识别Find_rec/main.pyFind_rec/main_move.py矩形轮廓或目标识别实验
圆形识别Find_yuan/2.pyFind_yuan/main_move.py圆形检测实验
三子棋sanziqi/line.py棋盘、透视变换、棋子状态识别相关代码
物流车视觉wuliu_car/code/QR.pyfind_blob.pyfind_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 240MaixCAM 输入分辨率
DETECT_Y120巡线检测带中心 y 坐标
SECTION_HEIGHT40单个 ROI 高度
SECTION_COUNT8横向检测区数量
BLOB_PIXELS_THRESHOLD500色块最小像素阈值
LEARNING_ROI[120, 100, 80, 40]按键学习颜色的采样区域
串口/dev/serial0, 115200与外部 MCU 通信

视觉算法地图

方向关键词当前资料后续可拆页
颜色阈值LAB、get_statisticsfind_blobsLine_TrackFind_bloodfind_blob.pyMaixCAM LAB 阈值学习
巡线ROI 分区、8 位状态、串口输出Line_Track/main.pyMaixCAM 巡线识别链路
线段回归get_regressionthetarhoLine_Track_angle/main.py线段角度与车体坐标系
棋盘识别透视变换、棋盘格、状态编码sanziqi/line.py、视觉 API 笔记棋盘状态识别
物流车任务QR、色块、圆形wuliu_car/code/*物流车视觉任务拆解
OpenCV 基础Canny、轮廓、透视变换docs/line.py视觉识别API笔记.mdOpenCV 图像处理笔记

与底盘/MCU 的接口

当前确定的接口是串口输出巡线状态:

00011000

含义:8 个检测区从左到右分别输出 0/11 表示对应 ROI 检测到目标色块,0 表示未检测到。底盘侧需要定义这 8 位状态到转向、偏差或路口判断的映射。

建议后续明确三件事:

  • 位序:第 0 位是否对应最左侧 ROI。
  • 发送频率:当前主循环每帧发送,底盘侧是否需要限频或帧头帧尾。
  • 容错:全 0、全 1、多个连续 1、左右边缘 1 分别代表什么动作。

调试与维护要点

  • 光照变化会直接影响 LAB 阈值,巡线前应先按键完成颜色学习。
  • get_histogram 在代码注释中被标记为不可用或不稳定,当前以 get_statistics 替代。
  • find_blobspixels_threshold=500 会过滤小噪点,但也可能漏检细线,需要结合画面尺寸重新调。
  • 若底盘接收不稳定,优先检查串口设备名、波特率、发送格式和是否需要换行。
  • 图像任务建议统一记录输入分辨率、ROI 坐标、阈值、输出格式,否则后续很难复现实验结果。

后续补全计划

  • 拆出 MaixCAM 巡线识别链路:整理 Line_Track/main.py 的完整流程、参数表和串口协议。
  • 拆出 MaixCAM 线段角度识别:说明 theta/rho 与车体坐标系的关系。
  • 拆出 棋盘状态识别:整理透视变换、格点提取、棋子分类和状态编码。
  • 拆出 物流车视觉任务:分别归档 QR、色块、圆形识别的输入输出。
  • 对每个实验保存一张实际画面截图和一组典型阈值,便于后续复现。