LE

loclove/electronics-design-competition-skill

API development
42 stars 品質 70 トレンド 70

灵眸:电赛-视觉skill

概要

灵眸是一个面向全国大学生电子设计竞赛视觉任务的 Codex Skill,目标是把“赛题理解、硬件适配、视觉识别、高帧率优化、串口控制、现场调参”串成一条可落地的工程链路。 它既支持从零写一套清晰的 OpenCV/cv_lite 框架,也支持在官方固件例程、YYB 仓库代码、用户已有脚本上继续叠加优化。默认原则是:先按赛题分层,最终输出多通道方案,识别通道可按任务降低分辨率以保护 FPS。 最终处理必须按多通道思路设计。即使硬件不支持真正并行,也要用“分帧调度”模拟多通道。 灵眸现在同时覆盖黑白类和颜色类任务。颜色识别默认仍然服从多通道原则:低分辨率颜色识别通道先锁目标,ROI 或低频高分辨率通道再验证,显示通道只负责清晰反馈。 颜色 mask 只能产生候选,不能直接决定结果。灵眸会默认叠加几何条件,降低误识别。 完整表见 references/target-matching-algorithms.md。圆形/环形目标、多目标、遮挡、ID 连续性相关任务优先加载这份参考。 串口默认原则:发送最新稳定结果,不发旧队列;必要时加入 lock/lost 和 heartbeat。 推荐语气:积极、具体、能落地。不要只说“你可以调参”,要说“先把识别通道降到 320x192,再测 FPS;如果稳了,再加黑框采样”。

README

灵眸 (Lingmou)

灵眸是一个面向全国大学生电子设计竞赛视觉任务的 Codex Skill,目标是把“赛题理解、硬件适配、视觉识别、高帧率优化、串口控制、现场调参”串成一条可落地的工程链路。

它既支持从零写一套清晰的 OpenCV/cv_lite 框架,也支持在官方固件例程、YYB 仓库代码、用户已有脚本上继续叠加优化。默认原则是:先按赛题分层,最终输出多通道方案,识别通道可按任务降低分辨率以保护 FPS。

快速信息

项目 内容
中文名 灵眸
Skill ID lingmou
主要方向 电赛视觉、自动瞄准、黑白/颜色目标识别、串口输出、高帧率优化
优先框架 OpenCV / cv_lite / OpenCV-like API
核心架构 多通道:低分辨率识别 + ROI/验证 + 高分辨率显示/映射 + 串口控制
仓库 https://github.com/Loclove/Electronics-Design-Competition-Skill
推荐使用 手动唤醒:需要时在请求里写 Use $lingmou 或明确说“灵眸”
可选全局路径 C:\Users\YaoYanbo\.codex\skills\lingmou,只有想让 Codex 自动发现时才安装
2026 彩蛋 2026-07-29 至 2026-08-01,包含 26 + 电赛 的请求会先触发钢球视觉彩蛋

能力总览

能力层 灵眸会做什么 关键原则
赛题理解 读取题面,拆出目标、精度、时间、通信、显示和控制要求 不盲写,先分层
硬件适配 询问开发板、固件、SDK、摄像头、显示和串口 先查官方文档
例程学习 网络资料不足时,找固件/SDK 例程、YYB 仓库、用户可运行基线 在能跑的 1 上扩展到无穷
从零实现 当平台清楚且无合适例程时,直接搭建干净框架 先决策树,再写代码
多通道优化 构建识别、验证、显示、串口/控制通道 最终方案必须多通道
高帧率 降低识别通道分辨率、ROI 跟踪、OSD 降频、候选 Top N 先保 FPS,再堆复杂度
2026 钢球 K230 一类钢球模型、224x224 识别通道、二维 Kalman、RTSP 图传 小球单目标优先轻量高帧
匹配跟踪 中心/尺寸、中心/半径、IoU/DIoU、Kalman、Hungarian、ByteTrack/SORT 思路 优先几何 + 运动,不先上重外观模型
调参闭环 输出代码、调参步骤、询问效果、继续迭代 直到用户确认够稳
情绪价值 像队友一样稳住现场节奏,给清晰鼓励和下一步 不让使用者陷入“我不行”

使用前会先问什么

阶段 必问内容 为什么问
固件类型 K230/CanMV、OpenMV、MaixPy、树莓派、Jetson、USB 摄像头等 不同固件 API 差异很大
SDK/版本 固件版本、Python/MicroPython、OpenCV/cv_lite 是否可用 决定代码能不能直接跑
摄像头链路 分辨率、像素格式、帧率目标、镜头、曝光 决定识别通道怎么降采样
显示链路 LCD、IDE、HDMI、OpenCV window 决定 OSD 和 FPS 显示方式
串口需求 是否串口、哪一路、发什么、包格式、坐标系 避免和 STM32/云台协议错位

赛题任务分层

灵眸会先把任务拆成层,再做算法选择。

层级 要解决的问题 常见输出
约束层 题目要求什么、几秒内完成、精度多少、是否运动 评分优先级
采集层 哪个摄像头、什么分辨率、什么像素格式 sensor/capture 初始化
预处理层 灰度、阈值、滤波、降采样、局部增强 二值图/边缘图/ROI
检测层 找 blob、矩形、圆、角点、线、激光点、模板或模型 候选目标
验证层 面积、长宽比、黑白采样、时序一致、预测一致 可信目标
跟踪层 ROI、EMA、alpha-beta、Kalman、匹配代价、Hungarian、deadband、coast 平滑坐标/角点,保持目标 ID
输出层 串口包、中心点、误差量、锁定状态、心跳 给控制器的数据
显示层 默认仅左上角 FPS;框、十字、锁定状态、调参信息按需显示 干净比赛画面
调参层 FPS 低、抖、误检、丢目标、串口错怎么处理 下一步优化

决策树

读取赛题/需求
-> 明确硬件与固件
-> 查官方文档和例程
-> 若例程/YYB/用户代码可运行:基于它逐步增强
-> 若无合适基线:从零搭建 OpenCV/cv_lite 多通道框架
-> 拆分识别、验证、跟踪、串口、显示、调参层
-> 识别通道优先降分辨率保 FPS
-> 加验证过滤和时序平滑保稳定
-> 串口发送最新稳定结果
-> 左上角 FPS 优先显示
-> 根据用户反馈继续优化

多通道硬规则

最终处理必须按多通道思路设计。即使硬件不支持真正并行,也要用“分帧调度”模拟多通道。

通道 推荐分辨率 职责 优化要点
识别/控制通道 低分辨率,如 320x192、400x240、QVGA 快速找目标、输出中心/角点/误差 FPS 不够先降这个通道
验证/复核通道 ROI 或低频高分辨率 crop 排除误识别、复核边框/白纸/圆心 不要每帧全图重算
跟踪通道 ROI 附近 锁定后只看目标附近 ROI、预测、coast
显示/调试通道 LCD/IDE/window 分辨率 默认只显示左上角 FPS,其他覆盖层按需打开 OSD 可每 2-4 帧更新
串口/控制通道 坐标系固定 发最新稳定结果 复用 packet,别阻塞

算法方案库

类别 方案 作用 适用场景
阈值 Otsu 自适应 每 N 帧算一次灰度阈值 光照缓慢变化
阈值 Otsu + EMA 平滑阈值 防止阈值跳变
阈值 局部阈值 分区域算阈值 光照不均
阈值 双阈值 白纸阈值 + 黑框阈值 黑白靶纸/边框
预处理 gaussian(1) 去小噪点 轻噪声
预处理 中值滤波 去椒盐噪声 高亮/黑点干扰
预处理 开运算 去小白点/小黑点 二值 mask 清理
预处理 闭运算 补断裂边框 黑框/线条断裂
预处理 Canny 边缘 给 cv_lite/线段法用 矩形/边缘任务
预处理 灰度直方图均衡 抗光照 明暗不均
预处理 降采样 降算力 FPS 优先

颜色视觉算法库

灵眸现在同时覆盖黑白类和颜色类任务。颜色识别默认仍然服从多通道原则:低分辨率颜色识别通道先锁目标,ROI 或低频高分辨率通道再验证,显示通道只负责清晰反馈。

颜色任务 首选算法链路 适合场景 FPS 保护点
彩色块/blob resize -> HSV/LAB/RGB 阈值 -> 开闭运算 -> contour/blob -> 几何过滤 红/绿/蓝色块、标志物、交通灯区域 低分辨率全图,锁定后 ROI
彩色线/巡线 HSV/LAB mask -> close -> 八邻域/轮廓追踪 -> 中心线/角度 彩色赛道、彩色导引线 只处理下半屏或预测 ROI
激光/LED 光点 曝光锁定 -> HSV 色相 + S/V 亮度 -> Top-hat/Otsu -> 小 blob 最大亮度 红点、绿点、激光打靶 限面积、限亮度、限候选数量
彩色圆/圆环 color mask -> Gaussian -> contour/minEnclosingCircle/Hough -> 圆度验证 彩色圆环、靶心、灯环 Hough/PnP 低频运行,跟踪每帧运行
彩色矩形/角点 mask -> morphology gradient -> minAreaRect/corners -> 角度/长宽比 色卡、矩形框、彩色靶纸 先 mask 降候选,再算角点
黑白 + 颜色标记 灰度阈值主识别 -> ROI 内颜色验证 黑框白纸带红/蓝标记 灰度快通道为主,颜色只做复核

OpenCV / cv_lite 对照

目标 OpenCV 常用接口 cv_lite / OpenCV-like 参考 调参重点
颜色阈值 cvtColor, inRange rgb888_find_blobs.py, rgb888_threshold_binary.py HSV/LAB/RGB 阈值上下限
高斯滤波 GaussianBlur(3x3/5x5) rgb888_gaussian_blur.py 先 3x3,别一上来大核
均值/中值 blur, medianBlur rgb888_mean_blur.py 中值只在椒盐噪声明显时用
Otsu threshold(..., THRESH_OTSU) 灰度/V/Y/L 通道阈值例程 每 N 帧计算一次并 EMA 平滑
形态学 erode, dilate, morphologyEx rgb888_open.py, rgb888_close.py, rgb888_erode.py, rgb888_dilate.py 小核、少迭代、ROI 优先
特征增强 MORPH_GRADIENT/TOPHAT/BLACKHAT rgb888_gradient.py, rgb888_tophat.py, rgb888_blackhat.py 适合边缘、光点、暗特征
轮廓/blob findContours, connectedComponents rgb888_find_blobs.py 面积、密度、凸度过滤
圆/矩形 HoughCircles, minAreaRect, approxPolyDP rgb888_find_circles.py, rgb888_find_rectangle_with_corners.py 圆度、角点顺序、长宽比
白平衡/曝光 灰世界、白块、曝光增益 rgb888_white_balance_*, rgb888_adjust_exposure_fast.py 比赛时尽量锁曝光/白平衡
距离/姿态 solvePnP rgb888_pnp_distance.py 标定、角点质量、ROI 复核

颜色几何验证

颜色 mask 只能产生候选,不能直接决定结果。灵眸会默认叠加几何条件,降低误识别。

几何条件 建议范围/写法 解决的问题
面积范围 area_min < area < area_max 去小噪声和整屏误检
长宽比 ratio_min < w/h < ratio_max 彩色块/矩形框不乱认
圆度 4*pi*area/(perimeter^2) 圆、灯环、靶心验证
凸度/实心度 area / hull_area, area / (w*h) 排除破碎 mask
边界距离 候选离图像边缘至少 N 像素 避免半截目标
颜色比例 R/G/B 或 HSV S/V 比值 抗亮度变化
预测距离 与上一帧/滤波预测中心距离小于阈值 防目标跳变
稳定帧数 连续 2-3 帧命中再 lock 防瞬时误检

目标验证过滤

验证项 判断什么 作用
面积过滤 太大太小都不要 去掉噪声和整屏误检
长宽比过滤 靶纸比例是否合理 排除非纸面目标
边缘距离过滤 贴边的不信 避免半截目标误锁
密度/实心度/凸度 blob 是否像纸 排除破碎形状
四边黑框采样 外侧是否黑 验证边框
内部白纸采样 内侧是否白 验证纸面
白黑对比 白纸均值 - 黑框均值 提高鲁棒性
时序一致性 连续两帧一致再锁 防跳变
与预测位置一致 锁定后不乱跳 防误切目标

检测策略选择

目标/任务 首选方案 备用方案
黑白矩形靶纸 灰度阈值 + 轮廓/角点 + 黑白验证 cv_lite 矩形角点
黑框白纸 固定/双阈值黑框 blob -> min_corners() -> 白纸验证 Otsu 白纸 blob -> 几何 -> 黑框验证
彩色块/blob HSV/LAB 阈值 + 形态学 + blob 几何 RGB888 cv_lite blob
彩色线/巡线 颜色 mask + 八邻域/轮廓中心线 RGB 阈值 + ROI
激光/LED 光点 颜色 + 亮度阈值 + 小 blob Otsu on V/Y + Top-hat
彩色矩形/角点 color mask + minAreaRect/corners cv_lite RGB888 矩形角点
彩色圆/圆环 color mask + 圆拟合/Hough + 圆度 cv_lite RGB888 圆检测
圆环/同心圆 cv_lite/Hough 圆检测 极坐标梯度 + robust circle fit
线段/四边交点 找四条边线 -> 求交点 Canny + 线段法
模板目标 ROI 内 NCC/模板匹配 关键点/轮廓匹配
复杂目标 KPU YOLO 检测 YOLO-OBB 旋转框
高鲁棒混合 快算法主跑,重算法补救 低频高精度复核

跟踪和平滑

方案 作用 什么时候用
直接输出检测中心 最简单 调通第一版
移动平均 平滑坐标 低速目标
EMA 一阶低通 简单稳 默认可用
alpha-beta 滤波 同时估计位置和速度 运动目标
Kalman 滤波 更完整的位置速度估计 高速/噪声大
deadband 死区 小抖动不输出 控制发抖
ROI 跟踪 锁定后只看目标附近 保 FPS
coast 预测 漏一两帧继续输出 短暂遮挡/漏检
角点平滑 框不乱抖 矩形/靶纸
限速/限加速度 串口坐标不突跳 云台/舵机控制

匹配算法与常用场景

完整表见 references/target-matching-algorithms.md。圆形/环形目标、多目标、遮挡、ID 连续性相关任务优先加载这份参考。

方法 常用场景 灵眸默认建议
中心点距离 / 最近邻 单目标、目标数量少、运动平稳 第一版快速跑通
圆心 + 半径匹配 圆形目标、环形目标、圆形标记 圆形目标首选
IoU / DIoU / CIoU 检测框稳定或框位移较大 作为框级辅助匹配分数
面积 / 尺寸过滤 目标真实尺寸相对稳定 作为误检过滤门控
模板 / 颜色 / 特征点匹配 外观明显、纹理明显或背景简单 只在几何不够时补充
KLT 光流 连续帧、小幅运动、可见纹理 中间帧跟踪,检测结果校正
alpha-beta / Kalman 运动连续、短暂遮挡或漏检 嵌入式默认先 alpha-beta,需要时 Kalman
Mahalanobis 距离 Kalman 多目标匹配 用预测不确定性做门控
匈牙利算法 多个轨迹和多个检测候选 多目标时避免最近邻误配
贪心匹配 目标少、CPU 很紧 轻量备选
ByteTrack 二阶段 置信度波动、弱检测容易漏 高/低置信度分阶段补救
SORT / OC-SORT 轻量实时框跟踪 K230/OpenCV 可借鉴结构
DeepSORT / BoT-SORT 人/车等复杂遮挡场景 通常不作为电赛嵌入式首选

通用几何匹配默认组合:

圆心距离 + 半径变化过滤 + alpha-beta/Kalman 预测
-> 多目标时用 Hungarian 全局分配
-> 短暂遮挡用 max_age coast
-> IoU/DIoU 只作为有框时的辅助项

例程优先增强

当网络资源不够或固件 API 不清楚时,灵眸会主动找例程,而不是硬猜。

来源 学什么 用法
官方固件例程 camera/display/UART 初始化 保留初始化,替换识别逻辑
YYB 仓库 阈值 UI、OpenMV、K230、串口、PID、激光、E 题代码 当作经验池,不盲复制
用户当前代码 已经跑通的板级细节 从可运行处增量优化
cv-lite examples Canny、矩形、圆、PnP、曝光、白平衡 作为 OpenCV-like 参考
近期视觉任务 K230 高帧率、E 题跟踪、左上角 FPS、双框高帧 沉淀为默认策略

示例增强路径:

基础巡线阈值例程
-> 二值 mask
-> 八邻域连通/追踪
-> 面积与连续性过滤
-> ROI 跟踪
-> center/angle error
-> PID + 串口输出
-> OSD 降频 + 左上角 FPS

串口协议

模式 格式 用途
xy_u16 55 AA XL XH YL YH CHECKSUM 精确中心点坐标
xy_lock_u16 55 AA LOCK XL XH YL YH CHECKSUM 带锁定状态
ASCII T,x,y,lock,fps\n 调试和上位机
legacy u8 0-255 缩放坐标 兼容旧控制器

串口默认原则:发送最新稳定结果,不发旧队列;必要时加入 lock/lost 和 heartbeat。

显示规则

项目 规则
默认画面 保持干净,只显示左上角 FPS
FPS 左上角优先显示,层级最高,始终不被遮挡
比赛模式 默认 FPS-only;中心点、框、十字、锁定状态只有需要验证时才临时显示
调试模式 通过 debug 开关显示阈值、ROI、候选框、串口信息,用完及时关闭
OSD 频率 CPU 紧张时每 2-4 帧刷新一次
坐标映射 低分辨率识别结果必须映射回显示/串口坐标系

情绪价值与协作风格

灵眸要像比赛队友,而不是冷冰冰的代码生成器。

场景 应该怎么回应
用户刚开始 先帮他把任务拆开,让他觉得可以做
用户说不会/卡住 先稳住,再给最小下一步
FPS 很低 明确告诉他先保帧率,复杂算法后置
误识别很多 用验证表格逐项排查,不甩锅
现场快比赛 少讲理论,直接给可执行改法
效果变好 认可进展,再问下一项瓶颈

推荐语气:积极、具体、能落地。不要只说“你可以调参”,要说“先把识别通道降到 320x192,再测 FPS;如果稳了,再加黑框采样”。

使用示例

Use $lingmou 帮我做 2025 年电赛 E 题视觉。
开发板 K230 CanMV,LCD 800x480,需要串口把中心点发给 STM32。
优先高帧率,最后必须多通道,识别通道可以降分辨率。
Use $lingmou 网络资料不够,帮我找这个固件里的巡线例程,
在例程基础上加八邻域算法、ROI 跟踪、PID 串口输出。
Use $lingmou 从零写也可以,但先根据赛题给我任务分层和决策树,
再写 OpenCV/cv_lite 风格的多通道代码。
Use $lingmou 26 电赛钢球识别加图传,开发板 K230,帮我直接给 224x224 高帧率版本。

仓库结构

lingmou/
├── SKILL.md
├── README.md
├── agents/
│   └── openai.yaml
├── references/
│   ├── task-decision-tree.md
│   ├── example-first-learning.md
│   ├── color-vision-algorithms.md
│   ├── target-matching-algorithms.md
│   ├── hardware-official-docs.md
│   ├── optimization-playbook.md
│   ├── serial-protocols.md
│   ├── tuning-loop.md
│   ├── contest-2026-steel-ball.md
│   └── emotional-support.md
└── assets/
    ├── k230/
    └── cv-lite-examples/

使用方式

为了避免灵眸长期自动参与普通对话,推荐把仓库作为手动参考资料保留,需要时明确说 Use $lingmou、使用灵眸 或直接贴出本仓库路径。

手动唤醒方式

git clone https://github.com/Loclove/Electronics-Design-Competition-Skill.git
cd Electronics-Design-Competition-Skill
git pull

对话里这样写即可:

Use $lingmou 帮我做多目标识别和匹配跟踪,优先 K230 高帧率。

可选全局安装

只有当你希望 Codex 自动发现这个 skill 时,才克隆到全局 skills 目录:

git clone https://github.com/Loclove/Electronics-Design-Competition-Skill.git C:\Users\YaoYanbo\.codex\skills\lingmou

如果担心它影响普通对话,就不要放进 C:\Users\YaoYanbo\.codex\skills。

设计取向

取向 说明
先分层 赛题先拆层,再决定算法
可从零 平台清楚时直接搭 OpenCV/cv_lite 框架
更擅长从 1 到无穷 有例程就基于例程连续增强
多通道硬规则 最终处理必须多通道或分帧模拟多通道
低分辨率识别 识别通道优先降清晰度保 FPS
官方优先 API 先查官方文档和固件例程
手动唤醒 默认不要求全局安装,需要时再显式使用
情绪价值 让使用者感觉问题可拆、能推进、有把握

Recent Vision Memory

File What it preserves
references/recent-vision-lessons.md Recent K230 tracking, FPS optimization, 2025 E-problem, left-top FPS, multi-channel, and skill-design lessons.
references/contest-2026-steel-ball.md 2026 steel-ball K230 + 图传 + 224x224 + Kalman easter egg solution rules.
references/target-matching-algorithms.md Matching algorithms, common scenarios, and generic geometry-based defaults for center/size, center/radius, IoU/DIoU, Kalman, Hungarian, SORT, and ByteTrack-style tracking.

Lingmou uses this compact memory when the user asks it to learn from recent vision-related discussions.

View this README on GitHub

推奨ツール

別のキーワードを試すか、フィルタを外してください。

インストール

npx skillfish add loclove/electronics-design-competition-skill