告别 VisionMaster 脚本痛苦!这个开源神器让 AI 帮你写 C# 脚本
用 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 + Xoffset,z = 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 里封装好了 ImageData 和 Mat/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 会:
- 读取你的
UserProperty.cs和UserScript.cs,理解现有代码 - 查阅类型映射表、数据结构定义、转换方法
- 匹配最合适的代码模式,组合生成
- 校验编译(调用 MSBuild,或做静态审查)
- 输出可直接粘贴到 VM 中的代码
整个过程你不是在"问 AI",而是在和一个懂 VM 的专家结对编程。
怎么使用?
环境准备
- 安装 Claude Code(推荐 VS Code 扩展或命令行版本)
- 克隆 Skill 仓库到
~/.claude/skills/目录 - 在 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。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)