VisionPro 脚本教程专栏:深入理解与实践

文章目录

  • VisionPro 脚本教程专栏:深入理解与实践。
    • 目录
    • 1. 脚本简介
      • 1.1 VisionPro 项目组成
      • 1.2 脚本的作用
    • 2. 脚本类与方法
      • 2.1 ToolGroup 脚本类
      • 2.2 ToolBlock 脚本类
      • 2.3 Job 脚本类
    • 3. 脚本使用案例
      • 3.1 Job脚本:自动调节曝光时间
      • 3.2 ToolBlock脚本:显示Blob区域的中心坐标
    • 4. 脚本进阶
      • 4.1 脚本作为“插件”程序集
      • 4.2 事件与委托
    • 5. 脚本调试与优化
      • 5.1 使用Visual Studio进行调试
      • 5.2 语法错误与逻辑错误
      • 5.3 调试技巧
    • 结语

VisionPro 脚本教程专栏:深入理解与实践。

VisionPro 是康耐视公司推出的一款功能强大的机器视觉软件,它通过脚本功能允许用户实现定制化的视觉处理逻辑。

目录

  1. 脚本简介
  2. 脚本类与方法
  3. 脚本使用案例
  4. 脚本进阶
  5. 脚本调试与优化

1. 脚本简介

VisionPro 的 QuickBuild 开发环境中,Job 是工程的基本组成单位。每个 Job 中可以包含多个工具和工具块(ToolBlock),而脚本功能允许用户在这些组件的基础上实现更高级的逻辑控制。

1.1 VisionPro 项目组成

  • Job:工程的基本组成单位,可以看作是一个独立的任务。
  • ToolGroupToolBlock:工具的“容器”,用于封装具有特定功能的一组工具。
    在这里插入图片描述

1.2 脚本的作用

脚本在 VisionPro 中的作用类似于编程语言中的函数,它允许用户根据特定需求编写自定义的逻辑代码,实现工具的自动化控制和数据处理。

2. 脚本类与方法

VisionPro 通过多态技术实现脚本功能,每个 Job、ToolGroup、ToolBlock 对象都含有一个接口对象,用户可以通过重写接口方法来实现自定义功能。

2.1 ToolGroup 脚本类

以 ToolGroup 脚本为例,它继承自 CogToolGroupBaseScript,实现了 ICogToolGroupScript 接口。该接口定义了以下方法:

  • Initialize()
  • GroupRun()
  • ModifyCurrentRunRecord()
  • ModifyLastRunRecord()
    在这里插入图片描述

2.2 ToolBlock 脚本类

ToolBlock 脚本与 ToolGroup 类似,但提供了更高级的控制,如动态定义输入输出终端等。

2.3 Job 脚本类

Job 脚本用于控制与图像获取相关的设备属性与参数,基类为 CogJobBaseScript,实现 ICogJobScript 接口。
在这里插入图片描述

3. 脚本使用案例

3.1 Job脚本:自动调节曝光时间

在图像采集过程中,根据图像的亮度自动调节曝光时间是一个常见的需求。以下是使用 Job 脚本来实现这一功能的示例:

public override void PreAcquisition()
{ICogAcqExposure IExposure = job.AcqFifo.OwnedExposureParams;IExposure.Exposure = exposure;
}

3.2 ToolBlock脚本:显示Blob区域的中心坐标

ToolBlock 脚本可以用于控制工具的运行逻辑,修改生成的 Record,拓展数据逻辑等。以下是在 Blob 区域显示其中心坐标的示例:

public override bool GroupRun(ref string message, ref CogToolResultConstants result)
{mLabels.Clear();mToolBlock.RunTool(mBlob, ref message, ref result);CogBlobResultCollection blobs = mBlob.Results.GetBlobs();foreach(CogBlobResult blob in blobs){CogGraphicLabel tempLabel = new CogGraphicLabel();tempLabel.Alignment = CogGraphicLabelAlignmentConstants.BaselineCenter;tempLabel.SetXYText(blob.CenterOfMassX, blob.CenterOfMassY, $"{blob.CenterOfMassX},{blob.CenterOfMassY}");tempLabel.Color = CogColorConstants.Red;mLabels.Add(tempLabel);}return false;
}

4. 脚本进阶

脚本不仅是“填空题”,更是实现复杂逻辑的强有力工具。用户可以通过脚本实现事件响应、异常处理、数据逻辑处理等高级功能。

4.1 脚本作为“插件”程序集

脚本类会被编译为程序集加载到内存中,并且每次编辑后都会重新编译。这意味着脚本的性能和稳定性直接影响到整个 VisionPro 程序的运行。

4.2 事件与委托

在脚本中实现事件响应函数时,需要增加异常处理机制(Try…Catch),以避免程序运行出现异常。

5. 脚本调试与优化

调试脚本是确保其正确运行的重要步骤。以下是一些调试技巧:

5.1 使用Visual Studio进行调试

可以通过 Visual Studio 附加到 VisionPro 进程进行调试,这样可以在脚本出错时快速定位问题。
步骤如下:

  • 打开Visual Studio软件,继续但无需代码
    在这里插入图片描述
  • 选择附加进程(前提是vision pro在运行着)在这里插入图片描述
  • vision pro点击运行即可在这里插入图片描述

5.2 语法错误与逻辑错误

语法错误会在编译时提示,而逻辑错误则需要在运行时通过调试来发现。
例如:下面工具查找到多个结果,在脚本中引用时直接用结果[ ].来调用,而不是item
在这里插入图片描述
在这里插入图片描述

5.3 调试技巧

  • 使用断点进行单步调试。
  • 检查变量值和程序流程是否符合预期。
  • 使用日志记录关键信息,便于问题追踪。
    在这里插入图片描述

结语

VisionPro 脚本是实现定制化视觉处理逻辑的关键,通过本专栏的深入学习,你应该能够掌握脚本的编写、使用和调试。在后续的文章中,我将分享更多关于 VisionPro 高级功能的脚本实现技巧。


希望本专栏能够帮助你在机器视觉领域更进一步。如果你有任何问题或建议,欢迎在评论区留言。


注意:本教程基于康耐视官方文档和网络资源编写,建议读者结合实际软件操作进行学习。同时,对于软件的深入理解和应用,官方文档和社区支持是不可或缺的资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/638057.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Django】django.core.exceptions.AppRegistryNotReady: Apps aren‘t loaded yet.

其中django后台manage.py入口程序报错,检索很多问题解决方案,这里记录下个人问题原因 1.django启动异常问题详情 django.core.exceptions.AppRegistryNotReady: Apps aren’t loaded yet. 2.问题原因 Python第三方包安装版本不一致或缺少依赖包&…

江西智博环境| 邀您参加2024全国水科技大会暨技术装备成果展览会

展位号:A28 企业介绍 江西智博环境技术有限公司始创于2008年初,总部位于江西省域副中心城市-赣州。公司主要从事一体化净水设备、单村供站、泵船、无负压供水设备自动化控制系统、低配电系统、工艺设备及智慧水务的设计研发、生产、销售、安装、调试等业…

[练习]用Js获取html页面中表单提交的数据并且返回到控制台

代码地址​​​​​​​​​​​​​​​​​​​​​&#xff1a; ​​​​​​​将前端页面提交的数据返回到前端控制台 Dduo/前端学习仓库 - 码云 - 开源中国 (gitee.com) 效果图 项目结构 html <!DOCTYPE html> <html lang"en"> <head><…

spring版本介绍

Spring Framework 是一个广泛使用的 Java 平台&#xff0c;用于构建企业级应用程序。它提供了一个全面的编程和配置模型&#xff0c;支持现代 Java 应用程序的最佳实践&#xff0c;如依赖注入、面向切面编程以及基于注解的编程模型。自从 Spring 1.0 发布以来&#xff0c;已经经…

Android14 - WindowManagerService之客户端Activity布局

Android14 - WindowManagerService之客户端Activity布局 一、主要角色 WMS作为一个服务端&#xff0c;有多种客户端与其交互的场景。我们以常见的Activity为例&#xff1a; Activity&#xff1a;在ActivityThread构建一个Activity后&#xff0c;会调用其attach方法&#xff0c;…

redis底层数据结构之ziplist

目录 一、概述二、ziplist结构三、Entry结构四、为什么ZipList特别省内存五、ziplist的缺点 上一篇 redis底层数据结构之SDS 下一篇 明天更新 一、概述 一种连续内存空间存储的顺序数据结构&#xff0c;每个元素可以是字符串或整数。优点:节省内存空间。适用于存储小规模的列表…

# 从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(3)

从浅入深 学习 SpringCloud 微服务架构&#xff08;三&#xff09;注册中心 Eureka&#xff08;3&#xff09; 段子手168 1、eureka&#xff1a;高可用的引入 Eureka Server 可以通过运行多个实例并相互注册的方式实现高可用部署&#xff0c; Eureka Server 实例会彼此增量地…

next.js app目录 i18n国际化简单实现

最近在用next写一个多语言的项目&#xff0c;找了好久没找到简单实现的教程&#xff0c;实践起来感觉都比较复杂&#xff0c;最后终于是在官方文档找到了&#xff0c;结合网上找到的代码demo&#xff0c;终于实现了&#xff0c;在这里简单总结一下。 此教程适用于比较简单的项…

模板初阶.

模板初阶 泛型编程&#xff1a; 编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。模板是泛型编程的基础 初阶模板&#xff1a; 函数模板 函数模板代表了一个函数家族&#xff0c;该函数模板与类型无关&#xff0c;在使用时被参数化&#xff0c;根据实参类型生成…

《大话数据结构》10 树

1. 二叉树遍历算法 1.1 前序遍历算法 二叉树的定义是用递归的方式&#xff0c;所以&#xff0c;实现遍历算法也可以采用递归&#xff0c;而且极其简洁明了。先来看看二叉树的前序遍历算法。代码如下&#xff1a; 假设我们现在有如下图这样一棵二叉树T。这树已经用二叉链表结构…

分类神经网络1:VGGNet模型复现

目录 分类网络的常见形式 VGG网络架构 VGG网络部分实现代码 分类网络的常见形式 常见的分类网络通常由特征提取部分和分类部分组成。 特征提取部分实质就是各种神经网络&#xff0c;如VGG、ResNet、DenseNet、MobileNet等。其负责捕获数据的有用信息&#xff0c;一般是通过…

第一届 _帕鲁杯_ - CTF挑战赛

Mis 签到 题目附件&#xff1a; 27880 30693 25915 21892 38450 23454 39564 23460 21457 36865 112 108 98 99 116 102 33719 21462 21069 27573 102 108 97 103 20851 27880 79 110 101 45 70 111 120 23433 20840 22242 38431 22238 22797 112 108 98 99 116 102 33719 2…