浅析基于Python的视觉检测原型设计解决方案介绍

原型是开发机器视觉解决方案的重要组成部分。除了允许开发人员探索和了解手头的问题之外,它还允许向客户或涉众提供临时解决方案,以确保一切都朝着正确的方向发展。这样,每个人都可以看到提议的解决方案是如何工作的,并理解项目是如何取得进展的,因为可以更好地估计解决方案的时间和成本。

加快原型制作过程对每一个参与的人都是非常有益的。在CVB 2019中引入了支持C++、.NET和Python的三种新的面向对象的API,为开发机器视觉解决方案提供了一种新的方法。共同视觉Blox。新的API与现有的CVB API兼容,这意味着用户可以在现有应用程序的基础上构建,而不必重写他们的代码库。

使用Python的好处

CVBpy将CVB的功能和速度带给了一组新的用户,他们习惯于使用Python进行快速的结果和简单的编程。Python是一种免费的、开源的、解释的、通用的编程语言.Python易学易用,是使用较广泛的编程语言之一。

一项调查显示,Python不仅是开发人员较喜爱的语言之一。但也是较受欢迎的语言。它是可移植的,所以对编译器和硬件以及它可以在嵌入式、Linux和Windows平台上运行。因为它的水平很高,而且很容易学习,所以它可以很快地做很多事情,使它具有很高的生产力,因此特别适合于原型制作。在许多应用领域中已经使用了Python框架,包括物联网、机器学习、深度学习和人工智能,这意味着接口可以用于大量的库。

结合CVB和Python

为了充分利用CVB令人印象深刻的功能,须创建优化的CVB Python绑定。生成Python接口的一般方法是使用现成的工具从C接口生成它。但是,由于Python可以完成比C更多的任务,这并不是较好的方法,因为它忽略了许多强大的Python特性。原则上,是从更现代的面向对象的、功能强大的体系结构(如C++)中生成Python绑定器。虽然这是一个改进,但它仍然缺乏Python的一些特殊特性由于生成器采用一种语言并将其压缩到另一种语言中,因此忽略了这两种语言的一些关键特性。

结果通常包含较小的一组公共特性,这与开发人员所需要的功能相去甚远。解决方案是手动创建包装器。虽然乍一看这似乎很复杂,但Stemmer映像公司的开发团队对CVB和Python都非常熟悉,能够快速高效地完成任务。

生成的CVBpy绑定器提供了对许多特殊Python特性的访问,这些特性可用于用CVB进行编程和原型开发。这些措施包括:

1、显示资源管理。

Python负责管理内存或文件等资源,CVBpy支持这一点。这避免了手动释放内存或关闭文件或将这些资源的管理外包的需要。显式资源管理对于涉及大图像的获取或处理以及使用高帧速率和或大量不同设备的成像应用尤其重要,这些设备产生大量数据并需要大量内存。

2、内置文档。

Python特性内置文档,因此使用CVBpy,IDE将显示每个函数的文档帮助。这是内置在库本身中的,因此不需要安装单独的文档。

3、改进了手动操作的多线程和异步支持。

这允许启动本机线程并使用Python的异步特性,它本质上是通过事件处理程序工作的。

4、稳定API

Python在Python 3的生存期内提供了一个稳定的API,即ABI(应用程序二进制接口),这要归功于PEP 384。这意味着CVBPy将在每个Python版本上运行,从V3.5到当前的V3.8及更高版本,以后的Python 3版本不需要进行任何调整。

5、CVBpy为Python的NumPy提供了一个接口。

NumPy增加了对大型多维数组和矩阵的支持,以及对这些数组进行操作的大量数学函数的集合。CVBpy接口允许从实际设备中获取的图像直接传输到NumPy,在NumPy中开发的任何算法都可以应用。

6、使用PySide 2的UI。

成像应用需要有适当的显示能力来显示原始图像和任何已经开发的算法的效果。由于Python本身不附带任何用户界面,CVBpy包含到PySide2的接口,PySide2是Python用于创建UI的Qt5包装器。

支持C++、.NET和Python的新的面向对象的CVB API的结构

目标定向

CVBpy可以从面向对象的角度与许多基本类进行交互。这个访问硬件设备的主要入口点,例如照相机,是设备工厂,它还提供对不同类型设备的访问。(见上图)。有一个通用的接口,视频设备背后有的硬件,或非标式设备,只有一个控制路径。还有一些具有定义数据的模拟设备–要么作为经典媒体文件,要么作为仿真文件格式。

设备可以有一个或多个流,并且正在开发多个流的使用,但是通常至少有一个流可用。在这上有一个环形缓冲器获取图像的方法。此流提供了用于处理的图像。图像本身由多个平面组成。设备本身具有节点映射,例如用于控制路径的GenAPI节点映射。在不同的层次,地图、节点和特征可以从每个通过xml描述自己的设备中获得。此外,在设备上还有一些方便的接口,以便更容易地访问公共功能。

这个简单的CVBpy‘hello world’示例显示了获取大量图像所需的代码。

CVBpy的实例

简单的例子之一是Python‘hello world’程序。这个CVBpy‘hello world’示例显示了获取大量图像所需的代码(上图)。这是一段相当简单的代码。第一个操作是从设备工厂打开一个模拟设备并从中获取一个流。然后启动流并获取10幅图像。检查每个图像的状态,以确保其正常,然后打印出图像的数量。为了事后清理,收购被简单地中止了。

较好的例子,需要一个响应性更强、适应性更强的实时显示。UI应用程序需要多线程,以允许摄像机异步运行到UI。还需要对获取硬件进行通用处理,对于实践,UI应该与逻辑代码分离。

Python支持的出现共同视觉Blox为脚本应用程序带来了新的可能性,这些应用程序可以在运行时进行修改,较大地加快了原型开发过程。使用CVBpy与使用普通Python模块一样,为程序员和开发人员提供了CVB的好处。