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

news2024/11/15 21:25:21

文章目录

  • 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.coloradmin.cn/o/1612498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++:面向对象三大特性之一:继承

继承 1.继承理解2.继承方式引起访问变化表格表格理解 3.赋值转换1.普通对象赋值2.继承对象赋值:赋值转换注意 4.继承的作用域5.派生类默认成员函数1.构造函数2.析构函数3.拷贝构造4.赋值重载 6.继承与友元7.继承与静态成员 1.继承理解 继承机制是面向对象程序设计使…

驶向成功:如何选择适合国际拓展的完美CRM

一、出海企业应该怎么选择CRM? 出海企业在选择CRM系统时,需要考虑行业特性以及在对外业务过程中可能遇到的问题。接触了一些出海企业客户,总结了以下出海企业在选择CRM时的诉求。 1、合法合规风险 出海企业的业务遍布不同国家地区&#xff…

【考研数学】基础跟武忠祥,同步刷《660》的正确方法

听我的,现在立刻马上停下来 你这不是在做题,你这是在看题,效果最差的那种,做完过两天就忘的一干二净了 我不敢说我特别会学习考研数学,但是我考研的时候,最后数学一的成绩是120,不算特别好&am…

搞定这些python自动化测试面试题与答案汇总,offer拿到手软!

1、什么项目适合做自动化测试? 关键字:不变的、重复的、规范的 1)任务测试明确,需求不会频繁变动 2)项目周期要足够长 3)自动化测试脚本可重复使用,比如:比较频繁的回归测试 4&…

01-大语言模型发展

AI大模型的相关的一些基础知识,一些背景和基础知识。 多模型强应用AI 2.0时代应用开发者的机会。 0 大纲 AI产业的拆解和常见名词应用级开发者,在目前这样一个大背景下的一个职业上面的一些机会实战部分的,做这个agent,即所谓智…

基于pytest自动化测试框架分享

一、pytest运行方式与基本规范 1.简单介绍 pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点: 简单灵活,容易上手支持参数化能够支持简单的单元测试和复杂的功能测试,还可以用来做Web UI自动化测试&#xff0…

第 7 章 导航实现(自学二刷笔记)

重要参考: 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 准备工作 请先安装相关的ROS功能包: 安装 gmapping 包(用于构建地图): sudo apt inst…

详细UI色彩搭配方案分享

UI 配色是设计一个成功的用户界面的关键之一。UI 配色需要考虑品牌标志、用户感受、应用程序的使用场景,这样可以帮助你创建一个有吸引力、易于使用的应用程序。本文将分享 UI 配色的相关知识,帮助设计师快速构建 UI 配色方案,以满足企业的需…

webgl canvas系列——animation中基本旋转、平移、缩放(模拟冒泡排序过程)

文章目录 ⭐前言⭐canvas绘制图片💖状态保存和恢复💖移动、旋转、缩放、变形💖移动绘制一个渐变的box💖旋转💖缩放 ⭐模拟冒泡排序过程⭐结束 ⭐前言 大家好,我是yma16,本文分享webgl canvas系…

EMD分解

ref:【EMD经验模态分解-哔哩哔哩】 https://b23.tv/LfepZjU 流程: IMF 固有模态函数 imf1 迭代直到是一个imf 8次迭代后,满足是一个imf residual的得到:原始信号-均值(上下包络线的均值) imf2 为什么时序…

【公司UI自动化学习】

公司课程链接:https://l.jd.com/student/project/project.du?project_id697509403 公司的课程,是给一个学习方向。 一、 PC自动化 1)什么项目适合 2)PC自动化介入时间点 3)自动化率: 频繁改动的&…

【Harmony3.1/4.0】笔记二

概述 列表是一种复杂的容器,当列表项达到一定数量,内容超过屏幕大小时,可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集,例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求(如通讯录、…

深度学习500问——Chapter08:目标检测(2)

文章目录 8.2.4 R-FCN 8.2.5 FPN 8.2.6 Mask R-CNN 8.2.4 R-FCN R-FCN 有哪些创新点 R-FCN仍然属于two-stage目标检测算法:RPN R-FCN Fully convolutional位置敏感得分图(position-sentive score maps) our region-based detector is ful…

java-Spring-入门学习-第二天(单例模式和多例模式)

目录 Bean作用域 单例模式(默认可以不写) Spring下的 AutoWired 依赖注入 JaveEE下的 Resource 依赖注入 多例模式 Bean作用域 ​在Spring框架中,Bean是按照作用域来创建的,常见的作用域有两种:Singleton 和 Prototype。Singleton (单例…

6.SpringBoot 日志文件

文章目录 1.日志概述2.日志作用3.使用和观察日志3.1如何观察日志3.2使用日志3.3日志级别3.4日志持久化3.5日志分割 4.日志框架4.1门面模式(外观模式)4.2 SLF4J框架介绍4.3 日志格式的说明4.3.1日志名称 5.日志颜色设置6.总结 大家好,我是晓星航。今天为大家带来的是…

【Java】HashMap、HashTable和ConcurrentHashMap的区别

文章目录 区别一、HashMap1.1基本定义与特性1.2工作原理与实现1.3常用方法1.4性能与优化 二、HashTable三、ConcurrentHashMap3.1基本特点3.2实现原理3.3常用方法3.4适用场景3.5性能优化 HashTable、HashMap和ConcurrentHashMap之间的区别主要体现在线程安全、继承关系与实现接…

(2024|ICLR,变分扩散模型(VDM),可学习编码器,时间相关的均值函数)DiffEnc:使用学到的编码器进行变分扩散

DiffEnc: Variational Diffusion with a Learned Encoder 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 2. 变分扩散模型的基础 3. DiffEnc 4. 编码器和生成模型的参数化 …

Linux--地址空间

目录 看一个现象 基本概念 细节问题--理解它 1.如何理解地址空间? 2.为什么要有地址空间? 3. 进一步了解页表和写时拷贝 4.如何理解虚拟地址? 看一个现象 先通过一段代码,看一看现象 int g_val 100;int main() {printf(&quo…

Linux 认识与学习Bash——2

1 read 从键盘读取变量的值 read 后面不带变量,那么默认会给REPLY变量赋值 #!/bin/bash echo -n "请输入你的名字:" read name echo "欢迎您 $name" echo "----------------"echo -n "请输入你的名字2:&q…

我与深拷贝

前言 最近在掘金读到了一篇文章《Radash 能取代 Lodash???真幽默 - 掘金》,文章的评论区讨论起了深拷贝。"深拷贝" 我的"老朋友",还记得在学习我人生中的第二道面试题的时候认识了它,…