C#调用VisionPro源码示例:VPP加载到结果回读的完整链路
简介一份面向C#开发者的VisionPro集成源码示例重点演示如何配置VisionPro SDK并利用CogFindCircleTool在图像中查找圆形特征、显示检测结果。VisionPro是康耐视公司出品的机器视觉工具集在制造业、物流等领域应用广泛本示例通过一个完整的WinForms工程展示了从图像读取、参数设置到圆查找与结果绘制的典型流程。资源包共30个文件、2.81MB核心内容为可直接编译运行的工程包含6个.cs源文件、解决方案/配置文件、编译生成的exe/dll/pdb以及窗体资源、说明文本与示例位图整体结构清晰适合对照学习或二次开发。示例详细呈现了CogFindCircleTool的调用方法读者可按需调整半径范围、阈值等参数并结合其他VisionPro工具扩展更复杂的图像分析任务。已有4380人学习下载非常适合刚接触机器视觉或用C#调用VisionPro的工程师作为入门模板。1. C# 调用 VisionPro 源码示例从「VPP 加载」到「结果回读」的完整链路产线视觉工位里最常见的一幕PLC 给了拍照信号上位机需要把 QuickBuild 里已经调好的 VPP 作业跑一遍拿到坐标和 OK/NG 结果再回给 PLC。很多用 VisionPro 做视觉集成的朋友在 QuickBuild 里拖工具很熟练一到 C# 调用就翻车——VPP 加了报错、CogDisplay 不显图、作业线程把界面卡死。这份 C# 调用 VisionPro 源码示例解决的就是这一整条路径从程序集引用、VPP 作业加载到 CogDisplay 显示、运行触发、结果回读和退出清理。适合做上位机集成、需要把视觉能力封进工业软件的人也适合第一次接触 VisionPro 二次开发、想照着代码把流程跑通的新手。2. 环境与引用程序集版本、运行时授权和位宽先对齐2.1 必须引用的程序集和它们的分工VisionPro 的程序集是按功能拆的不是引一个 Cognex.VisionPro.dll 就万事大吉。新建一个 WinForms 工程后首先要做的是把下面这些程序集加进引用程序集作用是否必须Cognex.VisionPro.dll核心类型CogJobManager、ICogJob、CogImage 等必须Cognex.VisionPro.Display.dllCogDisplay 控件负责图像显示和图形叠加界面显示时必须Cognex.VisionPro.ToolBlock.dllToolBlock 工具组VPP 里常封装的容器看 VPP 内容Cognex.VisionPro.ImageProcessing.dll图像预处理算法集看 VPP 内容判断该引哪个有一个笨办法但很管用在 QuickBuild 里打开目标 VPP看左侧工具树里出现了哪几类工具就去 Bin 目录找对应的名字开头程序集。见过有同事图省事一次性把 Bin 下所有 Cognex.VisionPro.*.dll 全引进来编译能过运行也没问题但部署包会大一圈而且版本冲突时特别难定位。我的习惯是先放最小集报缺失了再补。2.2 开发环境和运行环境的区别VisionPro 的二次开发有个容易忽视的前提QuickBuild 是开发调试环境而工控机上的运行环境需要单独装 VisionPro 运行时和对应授权。源码示例工程能在你的开发机上跑起来不代表拷到现场机上就一定能跑。常见做法是分别处理三样东西开发机装完整 SDK目标机装运行时 Runtime授权单独激活。注意授权类型也要看软授权依赖一个常驻服务硬加密狗则要保证驱动和系统位数一致。如果现场机是 64 位系统但装了 32 位的运行库C# 工程就得把平台目标改成 x86否则一运行就抛 BadImageFormatException。这个坑在后面的避坑章会展开。2.3 新工程引用的配置清单按这个顺序检查基本能避开九成环境问题平台目标项目属性里把平台目标显式设成 x86 或 x64不要用 Any CPU 赌运气。看现场机装的 VisionPro 是什么位宽跟随它。程序集复制本地引用属性里的复制本地建议设为 False。VisionPro 运行时会按自己的路径加载程序集强制复制反而容易出现版本不一致。.NET Framework 版本VisionPro 对 .NET 版本有要求老版本 SDK 常见支持 .NET Framework 4.6.1 或 4.7.2先按 SDK 里自带的示例工程对齐再决定要不要升级。授权服务检查 Windows 服务里有没有 VisionPro 授权相关的服务在运行首次跑之前手动确认一次激活状态。3. 从 VPP 到界面CogJobManager 加载、CogDisplay 显示与触发流程3.1 用 CogJobManager 加载 VPP 作业VisionPro 里把作业Job交给 CogJobManager 管理这是 C# 和 VPP 之间的标准接缝。下面的代码演示了最基础的加载与启动using Cognex.VisionPro; // 在窗体字段中声明避免局部变量被回收 private CogJobManager _jobManager; void LoadVpp(string vppFilePath) { // 创建作业管理器 _jobManager new CogJobManager(); // 向管理器注册一个作业把 VPP 文件路径传进去 ICogJob job _jobManager.Jobs.Add(InspectJob, vppFilePath); // 挂接运行完成事件后续在这个回调里取结果 job.Complete OnJobComplete; }这段代码有两个关键点。Jobs.Add的第一个参数是作业名建议和 VPP 里的作业名保持一致代码里将来按名字找作业时不容易搞混第二个参数是 VPP 文件的完整路径特别注意路径里不要带中文和空格某现场机就因为在 C:\视觉配置\job1.vpp 这种路径上反复加载失败改成纯英文路径后一次通过。Complete事件是异步的视觉处理跑完后在 VisionPro 内部线程触发回调参数里携带当次运行状态。不要在事件处理里直接操作窗体控件这一点到避坑章再说。3.2 CogDisplay 挂载到窗体并显示图像CogDisplay 是专门用来显示 VisionPro 图像和结果图形的控件和 PictureBox 完全不是一个概念。它支持缩放、平移还能把工具画出的坐标框、边缘线叠加显示。挂载代码很简单using Cognex.VisionPro.Display; // 创建并挂载 CogDisplay var display new CogDisplay { Dock DockStyle.Fill, AutoSize true // 图像缩放填满控件 }; // 添加到窗体的容器中 this.Controls.Add(display); // 拿到某次运行的图像赋给控件的 Image 属性 display.Image GetImageFromLastRun();AutoSize设为 true 时图像会自动缩放适配控件尺寸视觉调试时比较方便如果要严格按 1:1 像素看边缘细节就把它设为 false然后配合DisplayTransform做平移缩放。我一般会把 AutoSize 做成一个可切换按钮正常跑用自适应怀疑定位精度时切 1:1 看像素级细节。图像来源方面很多 VPP 内部封装了采图工具C# 里不需要单独采图直接让作业跑完再从结果里取图像即可。这份源码示例里给了一个模拟图像源的 VPP没有相机也能把显示链路完整跑通调试界面开发时非常有用。3.3 同步 Run 与异步回调的边界作业运行有两种最常用的姿势。同步单次运行适合按钮触发、一次拍一张的场景ICogJob job _jobManager.Jobs[InspectJob]; // 同步运行当前线程阻塞到本次作业结束 job.Run(); // 运行结束后获取结果状态 bool passed job.RunStatus CogJobRunStatus.Complete;上面这段在 UI 线程里直接调跑得快没问题一旦视觉处理耗时超过几百毫秒界面就会假死。更稳妥的方式是把运行丢到后台线程用事件回调接结果void OnTriggerButton_Click(object sender, EventArgs e) { // 后台运行UI 不被阻塞 Task.Run(() { ICogJob job _jobManager.Jobs[InspectJob]; job.Run(); }); } void OnJobComplete(object sender, EventArgs e) { // 注意此回调在 VisionPro 内部线程执行 // 不要在这里直接改 UI 控件 bool passed /* 从事件参数里取本次运行状态 */; // 把结果通过消息、队列或 BeginInvoke 送给 UI 线程 BeginInvoke(new Action(() { lblResult.Text passed ? OK : NG; })); }这里有个容易踩的认知差Run()虽然写起来像同步方法但只要你先挂好了Complete事件事件仍然会在作业线程里异步触发。很多初学者以为调用 Run 后的事件和调用者同线程结果在事件里操作控件界面随机卡死过了很久才发现是线程问题。魂。4. 避坑与排查加载失败、界面卡死、退出崩溃的五个真实案例4.1 BadImageFormatException 或加载作业报格式不正确现象程序一运行到Jobs.Add就抛异常提示程序集无法加载或者图像格式不正确有时编译正常但一执行就崩。原因八成是位宽不匹配。开发机装了 64 位 VisionPro工程平台目标却是 x86或者反过来现场机只有 32 位运行库工程却是 x64。Any CPU 在 .NET Framework 下默认按 64 位跑碰上只有 32 位组件的机器就会现场翻车。解决先在 VisionPro 安装目录下确认 dll 的位数再用 反编译工具看一眼工程引用的程序集路径。然后把项目属性里的平台目标改成和运行环境一致的位数重新生成问题就消失了。这个坑十有七八是环境不一致不是代码问题。4.2 VPP 在 QuickBuild 正常C# 里却提示缺少工具现象同一个 VPPQuickBuild 打开运行都正常拿到 C# 工程里加载时报错提示某个工具类型未找到或组件未安装。原因开发机装的是完整 SDK包含所有工具但目标机器或某些精简版环境缺少特定工具组件。还有一种情况VPP 保存的版本比当前运行库高新工具集在老环境里不存在。解决在最终运行的机器上执行一次 VisionPro 运行时完整安装别用最小安装选项同时打开 QuickBuild把 VPP 重新保存一次让作业格式对齐当前版本。保存后注意观察右下角有没有出现工具缺失警告。4.3 Complete 事件里操作界面控件界面随机卡死现象视觉运行完有时候界面正常有时候按钮点不动严重时整个窗体转圈过几秒才恢复甚至直接无响应。原因Complete事件跑在视觉作业线程上VisionPro 内部线程直接触碰 WinForms 控件属于跨线程操作轻则随机卡顿重则抛线程安全问题。解决事件回调里只保存数据和状态把 UI 更新通过BeginInvoke或自己封装的界面消息队列切回 UI 线程。我在实际项目里习惯把结果包成一个结果对象通过队列交给界面线程消费这样连并发触发时先后顺序都能控制住。4.4 关闭窗体后进程不退VS 显示正在调试现象点了窗体右上角关闭界面没了但进程还挂在后台CPU 占用还在涨或者调试器一直显示正在运行要手动停止。原因视觉作业是后台线程关窗体只销毁了界面作业还在跑。没有主动停止就退出资源泄漏在长周期运行工控机上积累几小时就能让系统卡成幻灯片。解决窗体的FormClosing事件里先把视觉作业停下来再释放管理器void OnFormClosing(object sender, FormClosingEventArgs e) { if (_jobManager ! null) { ICogJob job _jobManager.Jobs[InspectJob]; job.StopAndWait(); // 先停止当前作业 job.Complete - OnJobComplete; job.Dispose(); // 释放作业 _jobManager.Dispose(); // 最后释放管理器 } }顺序不能反先停、再拆事件、最后释放。见过有人只调 Dispose 不调 Stop释放到一半作业还在跑反而抛出更奇怪的异常。释放顺序这个事最好就按上面的顺序写成死规矩。4.5 首次运行慢或弹授权窗口现场机表现不一致现象开发机上秒开现场工控机首次运行要卡好几秒甚至弹出授权激活窗口过一会儿又恢复正常但重启后又来一次。原因软授权服务没有设置成开机自启或者首次调用时才检查授权状态检查过程被系统安全软件拦截拖慢。解决检查 Windows 服务管理器里 VisionPro 授权服务的启动类型是否为自动把部署目录加入杀毒软件白名单避免 dll 检查引入延迟。另外现场机有条件的话首次运行前用管理员身份手工激活一次后面就少很多意外。5. 触发策略与作业切换从单拍按钮改造成产线可用形态5.1 三种触发模式怎么选触发模式实现方式适合场景注意点单次触发按钮或 PLC 信号到来后Job.Run()一次静态检测、节拍慢确保上一次跑完再触发下一次连续运行视觉线程里循环 Run配合独立结果队列高速传送带、实时监控防止重入结果消费要跟上外部硬触发相机或采集卡硬信号触发采图C# 只响应高速线扫、精准同步VPP 内置采图工具C# 只做事件处理产线上最常见的需求是PLC 给一个信号跑一次。这里真正要防的是重入PLC 信号可能来得比视觉处理快如果两次触发在作业层叠在一起结果顺序就会错乱。5.2 带防重入保护的触发代码下面这段是我在项目里长期使用的一个结构核心思想是上一次运行没结束之前新的触发信号直接丢弃private readonly object _stateLock new object(); private volatile bool _isRunning; void TriggerInspect() { lock (_stateLock) { if (_isRunning) { // 上一次还没跑完本次触发丢弃 return; } _isRunning true; } Task.Run(() { try { ICogJob job _jobManager.Jobs[InspectJob]; job.Run(); } finally { lock (_stateLock) { _isRunning false; } } }); }_isRunning加 volatile 保证多线程可见性_stateLock保护检查与赋值的原子性。这里有一个容易被忽略的细节把_isRunning设为 true 的动作必须在 Task 启动之前完成否则两个相邻触发信号可能同时通过检查。上面这段把状态置位放在锁内、Task 之外正是为了保证这一点。5.3 多个 VPP 作业的切换与缓存现场经常有多产品共线的情况产品 A 和产品 B 各有一个 VPP。朴素做法是每次切换都重新Jobs.Add新作业运行完再删掉。问题是 VPP 加载本身有开销高频切换时每次都要等加载节拍就乱了。更好的做法是把已加载的作业缓存起来按产品码做键private readonly Dictionarystring, ICogJob _jobCache new Dictionarystring, ICogJob(); ICogJob GetCachedJob(string productCode, string vppPath) { if (_jobCache.TryGetValue(productCode, out var job)) { return job; } ICogJob newJob _jobManager.Jobs.Add(productCode, vppPath); _jobCache[productCode] newJob; return newJob; }切换时先停掉当前正忙的作业再从缓存里取目标作业缓存里的作业如果长时间不用可以定期释放。注意两个作业如果在同一个 CogJobManager 下同一时刻最好只跑一个避免多作业争抢视觉处理线程精度和节拍都不稳定。6. 进阶技巧显示刷新节流与一个我保留至今的检查习惯6.1 显示节流别让 CogDisplay 拖垮视觉循环视觉处理跑完一帧通常只要几十毫秒但 CogDisplay 刷新一次图像加图形叠加在性能差的工控机上可能要花掉一百多毫秒。如果每次都把图像刷到界面视觉节拍会被界面拖慢严重时表现为处理很快、界面一卡一卡整体节拍上不去。我常用的技巧是视觉线程只计算UI 线程按固定频率合并刷新。做法是维护一个帧号计数Complete事件里不碰 CogDisplay只递增帧号界面上放一个 100ms 的定时器检测到帧号变化才刷新一次 CogDisplay。这样即使视觉一秒跑十帧界面最多每秒刷新十次数据不丢界面还跟手。测试时对比一下开启和关闭节流后的视觉循环耗时差距在低配工控机上能到两倍以上。6.2 每个新环境都要强制过一遍的核对清单换电脑、换版本、从开发机搬到现场机这三类场景最容易出幺蛾子。从那以后我每次部署新环境都会强制走一遍这个流程第一步确认 VisionPro 运行时位宽和工程平台目标一致用任务管理器看进程位数第二步装完运行时后先跑一次官方的自检示例确认授权已激活再动自己的工程第三步用自己的 VPP 在 QuickBuild 里打开并重新保存一次确保工具集版本对齐。这一套流程走下来十分钟不到省掉的是反复加载失败、闪退、界面卡死这类问题几个小时的排查时间。如果你也想少在环境问题上消耗精力就从现在开始把这个清单固化进你的部署习惯。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

H2O-3 GBM / DRF 分类不平衡数据采样参数 `sample_rate_per_class` 全面解析

H2O-3 GBM / DRF 分类不平衡数据采样参数 `sample_rate_per_class` 全面解析

机器学习深度学习AutoML大数据后端 【免费下载链接】h2o-3 H2O is an Open Source, Distributed, Fast & Scalable Machine Learning Platform: Deep Learning, Gradient Boosting (GBM) & XGBoost, Random Forest, Generalized Linear Modeling (GLM with Elastic Net…

2026/10/15 2:16:17 阅读更多 →
Flask项目部署Azure全攻略:从代码改造到稳定上线

Flask项目部署Azure全攻略:从代码改造到稳定上线

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 2:16:17 阅读更多 →
TG WS Proxy代码剖析:MTProto混淆握手全解读——dd/ee密钥与64字节init包的AES-CTR解密

TG WS Proxy代码剖析:MTProto混淆握手全解读——dd/ee密钥与64字节init包的AES-CTR解密

TG WS Proxy代码剖析:MTProto混淆握手全解读——dd/ee密钥与64字节init包的AES-CTR解密 TG WS Proxy 是一款运行在本地的 MTProto 代理服务器,把 Telegram Desktop 的流量改走 WebSocket 通道,从而绕开部分加载卡顿。本文带你拆解它的握手代…

2026/10/15 2:16:17 阅读更多 →

最新新闻

从源码编译GMSSL:国密算法支持与HTTPS链接调试实战

从源码编译GMSSL:国密算法支持与HTTPS链接调试实战

1. 从源码到动态库:为什么选择自己编译GMSSL很多人第一次接触国密算法开发时,第一反应是找现成的二进制包或者系统自带的包管理器直接安装。这个思路在大多数场景下没问题,但一旦涉及国密算法,情况就完全不一样了。GMSSL作为国内广…

2026/10/15 2:46:27 阅读更多 →
SpringBoot+Vue学院管理系统开发实战

SpringBoot+Vue学院管理系统开发实战

1. 项目概述与适用场景这个基于SpringBootVue技术栈的学院个人信息管理系统,是典型的教学级全栈开发项目。我在高校信息化部门工作期间,曾主导开发过类似系统,也指导过多名学生完成此类毕业设计。这类系统之所以成为热门选题,关键…

2026/10/15 2:46:27 阅读更多 →
SpringBoot+Vue高校医务室预约管理系统设计与实践

SpringBoot+Vue高校医务室预约管理系统设计与实践

1. 项目背景与核心价值高校医务室作为校园健康保障的第一道防线,长期面临着就诊高峰期排队混乱、病历管理低效、健康数据分散等痛点。这个基于SpringBootVue的预约管理系统,正是为了解决这些实际问题而设计的数字化解决方案。我在参与某高校医疗信息化改…

2026/10/15 2:46:27 阅读更多 →
医疗陪诊小程序开发:功能架构与技术实现详解

医疗陪诊小程序开发:功能架构与技术实现详解

1. 陪诊小程序的市场需求与产品定位医疗陪诊服务正在成为城市生活中的刚需。根据我过去三年参与医疗信息化项目的经验,独居老人、术后康复患者、异地就医人群构成了核心用户群体。这类用户往往面临"挂号难""流程陌生""行动不便"三大痛…

2026/10/15 2:46:27 阅读更多 →
KingdeeERP插件开发实战:从入门到精通

KingdeeERP插件开发实战:从入门到精通

1. 项目概述KingdeeERP作为国内主流的企业管理软件,其插件开发能力为系统功能扩展提供了强大支持。作为一名在ERP领域深耕多年的开发者,我见证了从K/3到Cloud版本的技术演进过程。插件开发不仅仅是简单的功能叠加,更是对企业业务流程的深度定…

2026/10/15 2:46:27 阅读更多 →
Flutter 欢迎页实战:用 intro_slider 构建引导页并实现「只显示一次」的路由跳转(Flutter-Notebook slider_screen 示例解析)

Flutter 欢迎页实战:用 intro_slider 构建引导页并实现「只显示一次」的路由跳转(Flutter-Notebook slider_screen 示例解析)

示例工程移动开发 【免费下载链接】Flutter-Notebook FlutterDemo合集,今天你fu了吗 项目地址: https://gitcode.com/gh_mirrors/fl/Flutter-Notebook 点击查看 免费下载 本文以 Flutter-Notebook 仓库中 mecury_project/example/slider_screen 示例为核…

2026/10/15 2:45:27 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →