GenICam标准(三)

news2025/2/26 18:15:02

在这里插入图片描述

系列文章目录


GenICam标准(一)
GenICam标准(二)
GenICam标准(三)


文章目录

  • 系列文章目录
  • 6、缓存
  • 7、识别并判断相机描述文件的版本
    • 7.1. 格式的版本
    • 7.2. 相机描述文件的版本
    • 7.3. 识别并缓存相机描述文件
  • 参考


6、缓存

    如果某个实现对每个写操作支持范围、实现和可用状态的检查,通常会触发一系列对相机的读操作。大多数用于有效性检查的数值很少或不会发生变化,所以可以放入缓存。相机描述文件包含所有必需的定义以确保缓存的一致性。



在这里插入图片描述
    图 8:感兴趣的区域

    为说明这一点,需要用到更复杂的例子。图 8 显示了相机图像上的 AOI 。相机只需要发送 AOI 内的图像,图中的 AOI 是由 Top、Left、Width 和 Height 四个参数给出的矩形。



在这里插入图片描述
    图 9:控制感兴趣的区域

    如图 9 所示,这四个参数都从寄存器中取出。当然,这种简单的方式不能很好地处理,因为这四个参数的取值范围都不是无限的。假定像素坐标从 0 开始,有下面的限制:

0 ≤ Left ≤ ImagerWidth −Width
   
0 ≤ Top ≤ ImagerHeight − Height
   
1 ≤ Width ≤ ImagerWidth − Left
   
1 ≤ Height ≤ ImagerHeight − Top


    为了处理这些限制,每个参数的最大值都必须用 SwissKnife 节点计算;最小值是固定的。结果 GenApi 节点图如图 10 所示。注意,这里加入了第二层的 Integer 节点并且最大值由 IntSwissKnife 节点处理。

在这里插入图片描述
    图 10 在考虑限制的同时控制感兴趣的区域



    假定图像处理器有 VGA 模式(640 x 480),TopMax 节点的 XML 代码看起来可能是这个样子的:

<IntSwissKnife Name="TopMax">
	<pVariable Name="CURHEIGHT">HeightReg</pVariable>
	<Formula>480-CURHEIGHT</Formula>
</IntSwissKnife>

    让我们再回到缓存的话题,你应该不会希望每次设置 Left 属性的时候都去读一次 HeightReg 或者判断一次 TopMax 节点。这的确是不必要的,当(且仅当)你确定 HeightReg 只在 GenApi 自身写了一个新的值到这个寄存器的情况下才发生改变。这种情况下,你可以把 HeightReg 和 TopMax 的值放入缓存。

    如果用户写了一个新的值到 HeightReg ,HeightReg 缓存的值可以立即发生变化,并且需要令 TopMax 缓存无效。当下一次有人要访问 Left 节点的时候,会去读 TopMax ,因此为 TopMax 创建一个新的缓存入口。

    规则:当一个节点的内容发生变化的时候,要通知其所有的客户端,以便客户端可以令缓存无效。

    通常,相机描述文件中结点间的连接包含了所有需要的信息,以便实现程序能处理缓存而不需要用户操心。不过,在有些情况下,相对于节点直接描述的,相机本身包含更多的依存关系。

    某些相机包含一个叫做 Binning(装箱) 的属性,当 Binning 被置为 ON,相邻像素的值(charge)被合并,实现较好的效果,但代价是分辨率较低。假设一个 VGA 分辨率的图像卡,典型的配置如下:

  • 无 Binning (640 x 480)

  • 水平 Binning (320 x 480)

  • 垂直 Binning (640 x 240)

  • 全 Binning (320 x 240)

    在 GenICam 中,这个属性要用一个含有四个值的枚举型来描述(见图 11)。改变 binning 就意味着改变图像卡尺寸——不是实际的物理图像卡,而是用来表示 AOI 参数的限制的逻辑图像卡尺寸。

在这里插入图片描述
    图 11 通过考虑到装箱情况来控制感兴趣的区域(Controlling the Area of Interest taking binning into account)

    我们假定相机通过寄存器提供有关当前(逻辑)图像卡尺寸的信息。如图 11 所示,我们引入了两个新的节点:ImagerHeightReg 和 ImagerWidthReg 。TopMax 的 XML 代码看起来像这个样子:

<IntSwissKnife Name="TopMax">
	<pVariable Name="CURHEIGHT">HeightReg</pVariable>
	<pVariable Name="IMAGERHEIGHT">ImagerHeightReg</pVariable>
	<Formula>IMAGERHEIGHT-CURHEIGHT</Formula>
</IntSwissKnife>

    正如我们所见,如果用户改变 Binning 属性,ImagerHeightReg 的值将会改变。然而这两个节点间没有数据流。为确保在 BinningReg 节点的内容变化的时候,ImagerHeightReg 节点的缓存无效,必须在两个节点间引入一个连接。这个连接的唯一用途是,说明这两个属性间隐藏的依存关系,以及确保缓存总是一致的。

7、识别并判断相机描述文件的版本

Identifying and Versioning a Camera Description File

    必须能够通过一种统一的方式,来识别一个相机描述文件,及其所描述的相机。另外,随着时间的推移,相机描述文件也要相应地扩展,例如,当相应的相机产品增加了属性的时候。这就产生了对版本机制的需求。GenApi 语法本身也要与时俱进,例如,当加入了新的节点类型的时候,所以也要求对规范提供版本机制。

    在 <RegisterDescription> 元素的属性列表中可以发现必要的方法,这个元素是 XML 文件最外层的框。下面来看一个例子:

<RegisterDescription 
	ModelName="Example01" 
	VendorName="Test" 
	ToolTip="Example 01 from the GenApi standard" 
	StandardNameSpace="None" 
	SchemaMajorVersion="1" 
	SchemaMinorVersion="1" 
	SchemaSubMinorVersion="0" 
	MajorVersion="1" 
	MinorVersion="0" 
	SubMinorVersion="0" 
	ProductGuid="1F3C6A72-7842-4edd-9130-E2E90A2058BA" 
	VersionGuid="7645D2A1-A41E-4ac6-B486-1531FB7BECE6" 
	xmlns="http://www.genicam.org/GenApi/Version_1_1" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://www.genicam.org/GenApi/Version_1_1
../GenApiSchema_Version_1_1.xsd">

    所描述的相机由 VendorName: / ModelName 对来标识。因为有商标保护,我们可以假定 VendorName 是唯一的。ToolTip 属性用来提供设备的附加信息,并且可以显示给用户,例如,用总线上设备的选择列表的方式。

    相机描述文件内的名称可能来自不同的命名空间,关于这一点在第 8.1 节有更详细的说明。在一个给定的相机描述文件中,名称要么来自自定义的命名空间,要么来自标准命名空间。属性 StandardNameSpace 表示文件中所使用的标准命名空间。

    一个相机描述文件中不同项目的版本信息遵循共通的规则,并使用一个由三部分组成的版本号(version number):

<Major>.<Minor>.<SubMinor>
   
例如,“1.4.2”

    兼容性规则(compatibility rules)如下:

  • Major 版本号高的文件不向下兼容

  • Minor 版本号高的文件向下兼容

  • 改变 SubMinor 仅仅表示修复了问题;总是应该使用 SubMinor 最高的文件

    例:版本 1.3.0 兼容版本 1.1.*,1.2.* 和 1.3.* (星号表示不关心)。它不兼容版本 2.*.* 。如果版本 1.3.2 可用,则应该用它来代替 1.3.0 。

7.1. 格式的版本

Versioning the Schema

    属性 SchemaMajorVersion 、SchemaMinorVersion 和 SchemaSubMinorVersion 描述 XML 文件用的 GenApi 格式的版本。这些属性是强制的,目的是提供信息。另外,格式的 Major 和 Minor 版本号也反映在命名空间(参见 xmlns 入口)和格式的文件名(参见 xsi:schemaLocation 入口)。

    在这个例子中,命名空间是 “http://www.genicam.org/GenApi/Version_1_0” 。需要用到这个格式文件的程序既可以根据 URL 通过互联网来得到它,也可以通过由 schemaLocation 的第二部分给出的路径来找到这个文件,这个路径是可选的,在这个例子中是 “…/…/GenApi/GenApiSchema_Version_1_0.xsd” ,并假定 XML 文件存放在 GenICam 参考实现的目录结构中。

    xmlns:xsi 入口的 “http://www.w3.org/2001/XMLSchema-instance” 描述了格式语言自身的命名空间。

    注意,如果一个实现支持,例如版本 1.3.* 的格式,则必须提供 3 个格式文件:版本 1.0.*、1.2.* 和 1.3.*,这是向下兼容的要求,因为旧的 XML 文件带有旧的命名空间,需要旧的格式文件;另一方面,这个实现不支持使用新版本格式文件的 XML 文件,例如 1.4.* 要被拒绝。因此,有必要把版本号反映到格式的命名空间。

7.2. 相机描述文件的版本

Versioning the Camera Description File

    属性 MajorVersion、MinorVersion 和 SubMinorVersion 描述 XML 文件自身的版本。相机的制造商有责任遵守兼容性规则。

    相机描述文件的向下兼容是什么意思呢。假设一个相机,其版本 1.0 仅仅实现了一个属性。现在假定这个相机为另一个属性扩展了 firmware 。有两个方法可以在相机描述文件中处理这个情况。如果仅仅把这个属性添加到 XML 文件,就是暗示这个属性已经存在了。因为对旧版的相机来说情况并非如此,所以新的文件不是向下兼容的,结果其版本号必须是 2.0 。

    另一个更智能的解决办法是,在相机中(!)引入一个查询寄存器,用户可以检查这个寄存器以判断这个新的属性是否已经实现。现在可以加入这个新的属性,并允许用户通过属性的访问模式来判断属性是否实现。这样这个新的文件就是向下兼容的,其版本可以是 1.1。当然,只有在一开始相机就提供这个查询机制的情况下,这个方法才是可行的。采用第二种方法的优点是,对于这个相机的整个家族,只需要维护一个相机描述文件。

    注意,这里的兼容性(compatibility)指的仅仅是属性节点(feature nodes)及其功能,而不是实现节点(implementation nodes,参见 8.2 节以获得详细信息)。

7.3. 识别并缓存相机描述文件

Identifying and Caching the Camera Description File

    加载一个相机描述文件可能包含一个或多个预处理步骤。为加快处理速度,预处理过的 XML 文件可以被放入缓存。在缓存中,需要一个 key 来唯一标识相机描述文件。把元素 <RegisterDescription> 的属性 VendorName、ModelName、MajorVersion、MinorVersion 和 SubMinorVersion 合并起来是足够了,但是用起来有点不方便。

    为简化缓存,引入了 VersionGuid 属性,属性 VersionGuid 含有一个 GUID ,每当属性 VendorName、ModelName、MajorVersion、MinorVersion 或 SubMinorVersion 中任何一个发生变化的时候,都必须要改变这个 GUID 。VersionGuid 唯一地标识一个相机描述文件的某个版本,和文件名。

    不必把所有不同的相机描述文件都放入缓存,可以只放最新的文件,最新的文件通过向下兼容的方式包含了所有其它的。对于每个 VendorName、ModelName 和 MajorVersion 号,都有一个这样的文件。这种文件的缓存 key 是 ProductGuid,ProductGuid 也有一个 GUID ,每当 VendorName、ModelName 或 MajorVersion 发生改变的时候必须改变。

参考

GenIcam标准(一)
GenIcam标准(二)
GenIcam标准(三)
GenIcam标准(四)
GenIcam标准(五)
GenIcam标准(六)

GenIcam标准介绍


GenIcam标准(一)
GenIcam标准(二)
GenIcam标准(三)
GenIcam标准(四)
GenIcam标准(五)
GenIcam标准(六)

   
 

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

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

相关文章

2024年6月14日 (周五) 叶子游戏新闻

期刊杂志: 聚合读者、意林、知音、故事会、花火以及国内各大知名报纸电子版&#xff0c;无需付费即可观看各种免费资源 WPS免登录一键修改器: 去除烦人的登录且能正常使用 EA招募退伍军人重塑下一代《战地》游戏EA正通过“雇用我们的英雄”计划&#xff08;HOH&#xff09;雇用…

OpenAI函数调用:使用Assistants API函数工具的一个示例

Are you looking to expand GPTs capabilities? Check out this tutorial for a complete example of an AI Assistant that can send emails whenever we ask it to. 您是否希望扩展GPT的功能&#xff1f;查看这个教程&#xff0c;它提供了一个完整的示例&#xff0c;展示了…

多模态革新:Ferret-v2在高分辨率图像理解与细粒度交互的突破

在多模态大模型&#xff08;MLLMs&#xff09;的研究中&#xff0c;如何将视觉理解能力与语言模型相结合&#xff0c;以实现更精细的区域描述和推理&#xff0c;是一个重要的研究方向。先前的工作如Ferret模型&#xff0c;通过整合区域理解能力&#xff0c;提升了模型在对话中的…

开源大模型的新星:ChatGPT-Next-Web 项目解析与推荐

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

蓝卓为中小制造企业注入数字化转型活力

随着劳动力成本上升,原材料价格上涨,企业生产成本逐年增加&#xff0c;市场竞争越来越激烈&#xff0c;传统的中小制造企业面临着巨大的压力。 通过数字化转型应对环境的变化已成为行业共识&#xff0c;在数字化的进程中&#xff0c;中小企业首要考虑生存问题&#xff0c;不能…

Sklearn中逻辑回归建模

分类模型的评估 回归模型的评估方法&#xff0c;主要有均方误差MSE&#xff0c;R方得分等指标&#xff0c;在分类模型中&#xff0c;我们主要应用的是准确率这个评估指标&#xff0c;除此之外&#xff0c;常用的二分类模型的模型评估指标还有召回率&#xff08;Recall&#xff…

串口屏介绍

一、串口屏简介 串口屏&#xff08;Serial LCD/Serial TFT Display&#xff09;是一种集成了串行通讯功能的显示屏&#xff0c;广泛应用于各种嵌入式系统、工业控制、人机界面&#xff08;HMI&#xff09;等领域。该显示屏通过串口&#xff08;如UART、RS232、RS485等&#xf…

记录一下PHP使用微信小程序支付

记录一下PHP使用微信小程序支付V3版本经历 官方文档&#xff1a;https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_0.shtml 请详细查看文档中小程序支付接入前准备&#xff08;https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_1.shtml&#xff…

计算机系统的主要概念

这篇文章通过研究“hello&#xff0c;world”这个简单程序的生命周期来介绍计算机系统的主要概念。 1. 信息就是位 上下文 我们以 hello 程序为例&#xff0c;在 linux 系统中&#xff0c;我们编辑文本文件 hello.c&#xff0c;使用编译器将其编译成可执行的 源程序&#xf…

618有什么值得推荐?2024数码产品推荐,轻松拿捏选购!

随着618购物节即将来临&#xff0c;你是否已被琳琅满目的商品所吸引&#xff0c;难以抉择&#xff1f;团团特意为你筛选出一系列经过亲身试验的优质好物&#xff0c;旨在帮助你在这场购物盛宴中迅速锁定心仪之选。这些推荐不仅走在时尚的前沿&#xff0c;更能满足你日常生活的各…

任务3.8.2 利用RDD计算总分与平均分

实战&#xff1a;使用RDD 计算学生成绩的总分与平均分 项目背景 本项目旨在利用 Apache Spark 的强大数据处理能力&#xff0c;对存储在 HDFS 上的学生成绩文件进行处理&#xff0c;计算每个学生的总分和平均分。 项目目标 读取存储在 HDFS 上的成绩文件。计算每个学生的总…

波卡近期活动一览| Polkadot Decoded 2024 重磅来袭,300 万 DOT 将用于 DeFi 增长

Polkadot 生态近期活动精彩纷呈&#xff0c;线上线下火热进行中&#xff01;此外&#xff0c;Polkadot 2.0 的关键升级即将到来&#xff0c;Gavin Wood 博士也将在最新访谈节目中分享更多关于波卡的未来发展蓝图。波卡 DAO 通过提案&#xff0c;分配 300 万 DOT 支持 DeFi 生态…

双向转发检测BFD(学习笔记)

定义 双向转发检测BFD&#xff08;Bidirectional Forwarding Detection&#xff09;是一种全网统一的检测机制&#xff0c;用于快速检测、监控网络中链路或者IP路由的转发连通状况 BFD检测机制 BFD的检测机制是两个系统建立BFD会话&#xff0c;并沿它们之间的路径周期性发送B…

企业如何抓住“AI+出海”新机遇?2024光亚展现场,全屋智能出海AI营销第一课行业大咖齐聚点拨

2024年6月9日至12日&#xff0c;第29届广州国际照明展览会&#xff08;光亚展&#xff09;于在中国进出口商品交易会展馆举办。连同同期举行的第21届广州国际建筑电气技术展览会&#xff08;GEBT&#xff09;&#xff0c;雄据广州中国进出口商品交易会展馆A及B区的26个展馆&…

技术速递|介绍 .NET API 文档的源代码链接

作者&#xff1a;Min Huang&#xff0c;Matt Trilby-Bassett 排版&#xff1a;Alan Wang 开发人员在阅读 API 参考文档时&#xff0c;有时会需要或希望查看相应的源代码。直到不久之前&#xff0c;.NET API 参考文档还没有提供指向源代码的链接&#xff0c;这引起社区添加这一功…

【Python】Numpy的使用

文章目录 数组创建数组属性ndarray数组索引ndarray数组的基本索引和切片ndarray数组的布尔索引ndarray数组的花式索引 ndarray数组的转置和轴对换ndarray通用函数一元ufunc二元ufunc NumPy的where函数使用常用统计函数排序 ndarray数组的去重以及集合运算numpy中的线性代数nump…

优思学院|如何选择六西格玛黑带的项目?

不管六西格玛的实施着重于变革式的还是渐进式的目标&#xff0c;项目都是六西格玛最核心的部分。选择和使用组织中最好的人才本身并不一定能保证达到最好的结果&#xff0c;项目的选取是领导层无可推卸的责任。选择一个项目意味着什么&#xff1f;领导团队必须将无数的问题、困…

DAC测试实验——FPGA学习比

一、DAC简介 DAC全称Digital to Analog Converter&#xff0c;即数模转换器。它用于将主控芯片产生的数字值(0和1)转换为模拟值(电压值)。 1、DAC参数指标 2、DAC类型 常用的DAC可大致分为权电阻网络DAC、T型电阻网络DAC、倒T型电阻网络DAC以及权电流型DAC。 3、AD9708/3PD9…

html中a标签的多用性

在HTML中&#xff0c;<a> 标签&#xff08;通常称为锚标签或链接标签&#xff09;具有多种用途和强大的功能。以下是<a>标签的一些主要多用性&#xff1a; 网页间的导航&#xff1a; 这是<a>标签最常见的用途。通过href属性&#xff0c;可以指定一个URL&am…

【问题解决】国际化messages_zh_CN.properties中乱码问题

打开 messages_zh_CN.properties 文件 之前用中文写的现在都是各种各样的符号 解决方法&#xff1a; 打开idea 找到File>Settings>Editor>File Encodings 确定这三个地方是否都是utf-8&#xff0c;改好之后点确定&#xff0c;就能正常显示了