用 Claude Code + 这个 Skill,1 分钟生成可直接运行的 VM 脚本,连 3D 点云都支持


写在前面

如果你用过 VisionMaster(以下简称 VM),一定对它的 C# 脚本模块又爱又恨。

  • 变量类型映射全靠记,IMAGE、POINT、ROIBOX……经常搞混
  • GetIntValue/SetFloatValue 接口又臭又长,每写一行都要翻 API
  • 想用 OpenCV 处理图像?还得自己去查 ImageData 和 Mat 怎么互转
  • 偶尔碰个 3D 激光轮廓仪,深度图怎么解析、点云怎么提——两眼一抹黑

这些问题,我曾经都经历过。直到我整理了一个开源项目——visionmaster-scripthelper,把它作为 Claude Code 的 Skill 来用,从此写 VM 脚本的效率至少提升了 5 倍。

今天就把这个工具分享给你。


这是个什么东西?

简单说:它是一个 Claude Code Skill,让 AI 助手深度理解 VM 脚本开发的全部细节——从变量类型映射、API 签名,到代码模式、编译校验,一应俱全。

项目地址:https://github.com/Chris-zixuan/AgentHub(在 visionmaster-scripthelper 目录下)

它不是什么黑盒插件,而是一套结构化的知识库 + AI 工作流指引,所有内容用 Markdown 和 C# 源码开放,你可以随时审查、修改、扩展。


核心一:告别 Get/Set,拥抱直接赋值

VM 4.x 之前的脚本风格是这样写的:

GetIntValue("in0", ref val);
SetFloatValue("out0", result);

不仅啰嗦,而且变量名是字符串,没有编译期检查,运行时出错了都不知道。

这个 Skill 从 v2.5 开始强制推行直接赋值范式

int val = in0;          // 读取标量输入
out0 = val * 2;         // 写入标量输出
ImageData img = imgIn;  // 读取图像
imgOut = img;           // 写入图像
PointData[] pts = in0;  // 读取复合类型
out0 = pts;             // 写入复合类型

干净、直观、类型安全。AI 生成的代码全部遵循这个范式,你不用再手动改。

唯一保留 Get/Set 的场景:需要按字符串动态访问变量名时(比如遍历全局变量列表),可以用遗留接口作为后备。


核心二:14 种代码模式,直接抄

Skill 库内置了一份 code-patterns.md,收录了 14 种高频场景的代码模板:

模式 场景 说明
1 基础数据透传 最简单的输入→处理→输出
2 多类型数据读写 int/float/string/byte[] 混用
3 数组数据处理 批量处理数组元素
4 图像处理管道(OpenCV) ImageData↔Mat 互转 + OpenCvSharp 算法
4b 图像处理管道(Bitmap) 用 System.Drawing,不用 OpenCV
5 ROI 处理 RoiboxData 几何变换
6 ROI 网格分割 一个 ROI 切分成 rows×cols 个子区域
7 全局变量控制流程 模块间通过全局变量传参
8 模块参数动态调整 根据条件改其他模块的配置
9 带状态的多次执行 Process 间保持累积状态
10 通信数据发送 TCP/PLC/Modbus 发送结果
11 异常处理模板 try-catch 的错误处理框架
12 资源管理模板 Mat 等非托管资源的生命周期管理
13 深度图转点云 StereoImageData → 物理坐标点云
14 深度图区间过滤 Z 阈值过滤 + 回写 StereoImageData

模式 13 和 14 是最新加入的 3D 支持(后面会详说)。

你只需要告诉 AI 你的场景,它会自动匹配模式、组合、生成完整脚本。你也可以手动翻阅,直接复制代码片段。


核心三:3D 支持——激光轮廓仪深度图处理

今年制造业视觉检测中 3D 的需求越来越多。这个 Skill 在最新版本中完整支持了 VM 的 3D 数据类型

支持的 3D 类型

VM 类型 C# 类型 说明
STEREO_IMAGE StereoImageData 立体图像(深度图容器)
POINT3D Point3DData 3D 点坐标
POSE_INFO PoseInfoData 位姿数据(欧拉角/四元数/变换矩阵)

深度图解析

激光轮廓仪采集的深度图格式:

  • 每像素 2 字节,S16 有符号整型
  • 无效值-32768
  • 物理坐标转换:x = col * Xscale + Xoffsetz = raw * Zscale + Zoffset
// 逐行提取有效点,转换为物理坐标
StereoImageData rangeImg = 深度图in;
short raw = BitConverter.ToInt16(buf, row * width * 2 + col * 2);
if (raw != -32768) {
    float x = col * rangeImg.Xscale + rangeImg.Xoffset;
    float z = raw * rangeImg.Zscale + rangeImg.Zoffset;
    // 加入点云列表...
}

完整示例见 05-stereo-depth-pointcloud.cs,可以直接复制使用。


核心四:类型映射速查——再也不怕搞混

Skill 里有一份 interface-quickref.md,所有变量类型映射一表打尽:

VM 类型 C# 类型 赋值示例
INT int int val = in0;
FLOAT float float val = in1;
IMAGE ImageData ImageData img = imgIn;
POINT PointData[] PointData[] pts = in0;
ROIBOX RoiboxData[] RoiboxData[] rs = in0;
CIRCLE CircleData[] CircleData[] cs = in0;
LINE LineData[] LineData[] ls = in0;
STEREO_IMAGE StereoImageData StereoImageData img = 深度图in;

规律很好记

  • 标量 → 基础类型(int, float 等)
  • IMAGE → ImageData(唯一的非数组特例)
  • 其他所有复合类型 → <Type>Data[] 数组
  • 3D 类型 → 对应类名

核心五:图像处理——OpenCV 和 Bitmap 两条路都通了

这是日常最高频的需求。Skill 里封装好了 ImageDataMat/Bitmap 之间的互转方法:

// 方案 A:OpenCvSharp
Mat matImage = ImageDataToMat(imgData);
// 用 OpenCV 算法处理...
ImageData result = MatToImageData(matImage);

// 方案 B:System.Drawing(不用额外装库)
Bitmap bmpImage = ImageDataToBitmap(imgData);
// 用 Graphics 绘制...
ImageData result = BitmapToImageData(bmpImage);

转换方法自动处理了 BGR↔RGB 通道顺序、stride 对齐、灰度图调色板等细节,你只管写业务逻辑。


它是怎么工作的?

整个 Skill 采用分层架构设计:

visionmaster-scripthelper/
├── SKILL.md                 # 规则定义 + 代码生成工作流(AI 的行为准则)
├── references/              # 原始 API 定义
│   ├── Script.Interface.cs  # 遗留接口签名
│   ├── Script.DataStruct.cs # 数据结构定义
│   └── Script.ExMethods.cs  # Mat/Bitmap↔ImageData 转换
├── examples/                # 可参考的代码
│   ├── 01~05*.cs            # 完整脚本示例
│   ├── interface-quickref.md# 类型映射速查
│   └── code-patterns.md     # 14 种代码模式
└── assets/
    └── find_msbuild.ps1     # 编译校验脚本

当你通过 Claude Code 请求生成脚本时,AI 会:

  1. 读取你的 UserProperty.csUserScript.cs,理解现有代码
  2. 查阅类型映射表、数据结构定义、转换方法
  3. 匹配最合适的代码模式,组合生成
  4. 校验编译(调用 MSBuild,或做静态审查)
  5. 输出可直接粘贴到 VM 中的代码

整个过程你不是在"问 AI",而是在和一个懂 VM 的专家结对编程


怎么使用?

环境准备

  1. 安装 Claude Code(推荐 VS Code 扩展或命令行版本)
  2. 克隆 Skill 仓库~/.claude/skills/ 目录
  3. 在 VM 项目中打开终端,运行 claude 启动对话

使用示例

“帮我把这张图做 Canny 边缘检测,结果输出到下一模块”

AI 会自动:

  • 读取你的 UserProperty.cs 确认输入输出变量
  • 引用 02-canny-edge-detection.cs 示例
  • 生成带 ImageData↔Mat 转换的完整脚本
  • 检查变量名是否一致

“我的激光轮廓仪深度图需要过滤 Z 在 -10~10mm 以外的点,输出点云”

AI 会:

  • 匹配模式 13 + 模式 14
  • 读取 05-stereo-depth-pointcloud.cs 示例
  • 生成完整脚本,包含 S16 解析、坐标转换、阈值过滤

写在最后

VisionMaster 作为国内主流的机器视觉平台,其 C# 脚本模块的潜力其实很大,但官方文档分散、接口风格老派,导致很多开发者宁愿用外部程序绕一圈,也不愿意写 VM 脚本。

这个 Skill 的目标就是填平这些坑,让开发者专注于业务逻辑本身,而不是在 API 细节上浪费时间。

项目基于 Apache 2.0 协议 完全开源:

👉 https://github.com/Chris-zixuan/AgentHub

这是一个开放共建的项目。当前 Skill 虽然已经覆盖了大部分常见场景,但 VM 的生态太庞大了——总会有新的传感器型号、新的算法需求、新的数据类型出现。

所以我非常希望你能:

  • 下载试用 — 克隆到本地,在真实项目中跑一遍,看看能省多少时间
  • 提 Issue / 反馈 — 遇到 bug、有困惑、或者发现某个场景没覆盖到,直接去 GitHub 开 Issue
  • 一起增强 Skill — 如果你熟悉 VM 的某个特定领域(比如通信协议、特定品牌相机、3D 重建……),欢迎提交 PR 来扩展 references、examples 和 code patterns

一个人的精力有限,但一群人可以把这个 Skill 打磨成 VM 脚本开发的事实标准工具

如果你觉得有用,不妨点个 Star ⭐,让更多 VM 开发者看到。


希望有一天,每个 VM 开发者都能用 AI 写脚本——你负责思考,代码交给 AI。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐