基于嵌入式系统的机器视觉技术简析

简介:

空间有限且要求功耗较低的应用,通常是嵌入式计算机系统发挥作用的舞台。典型的例子是移动设备,从工厂中的移动测试设备到牙科扫描仪,其中运行的都是嵌入式计算机系统。嵌入式视觉也是机器人的一个极好解决方案,尤其是将相机集成到机器人的手臂上时。
在机器视觉领域,典型的相机集成工作是通过GigE或USB接口实现的,这可以说是一种将相机连接到PC(或IPC)的即插即用解决方案。与制造商的软件开发工具包(SDK)一起使用,可以轻松访问相机,这一工作原理也可以迁移到嵌入式系统中。
机器视觉
图:(a)传统的基于PC的通用机器视觉系统;(b)针对特定解决方案的嵌入式机器视觉或图像处理系统的相机模块组件,其在性价比方面更优化。

利用单板计算机(SBC),基本的集成原理依然不变。低成本且易于获得的单板计算机,在一块SoC电路板上包含了计算机的所有部分——RAM、存储器插槽、IO端口(USB 3.0、Gig-E等)。
常用的单板机,如Raspberry Pi或Odroid,都具有兼容的接口(USB /以太网)。还有一些行业公认的来自Toradex或研华等公司的单板机,均提供这些标准接口。
工业智能相机
图:许多相机制造商提供SDK版本,允许用户将相机集成到ARM平台上,就像将相机集成到Windows PC上一样。
主要区别在于这些单板机所配备的处理器类型。虽然已经有单板机提供基于x86架构的处理器,但是目前大多数单板机上的处理单元使用的都是ARM处理器,因为它们的功耗更低。
越来越多的相机制造商也提供在ARM平台上工作的软件开发套件(SDK)版本,以便用户可以像在Windows PC中集成相机一样,以熟悉的方式将相机集成到ARM平台上。
在最好的情况下,SDK为Windows PC和ARM这两种平台提供相同的功能和API(应用程序可编程接口),甚至软件应用代码的一部分可以重用。因此,相比于标准的基于PC的视觉系统,嵌入式视觉系统的相机集成工作更为简单。
当需要剥离更多的冗余处理技术时,针对某些特定应用的嵌入式系统,可以做到更精简的水平。这就是为什么许多系统是基于模块系统的(SoM)。这些非常紧凑的板卡式电脑模块只包含一个处理器(准确地说,通常是片上系统SoC)、微控制器、存储器和其他基本元件。

这种SoM需要安装在载板上,载板上具有为特定接口准备的插口。有了这样一个相对便宜的载板,系统可以很容易地针对特定应用和系统要求进行个性化设计,因为SoM是现成的产品,所以可以保证整个系统设置的低成本。

通常,这种设置也可以配备标准接口连接器(如USB)。在这种情况下,即插即用的好处与单板机或是基于PC的机器视觉系统是一样的。但是,这往往不符合非常具体和精简的系统设置的想法。同样,由于空间、重量或功耗方面的要求,USB接口可能并不合适,相反,会使用相机到处理器之间更直接的连接方式。

此外,许多嵌入式视觉系统是基于(或包括)FPGA(现场可编程门阵列)模块的。这些器件对于立体视觉产品或面部检测应用中所需要的计算工作是理想的。

所有这些都是为什么可能需要将相机直接连接到FPGA或SoC的原因。

特定图像数据传输

直接将相机连接到SoC用于图像数据传输,可以通过基于LVDS的连接或MIPI CSI2标准实现。这两种方法在硬件方面都没有明确的标准化。这意味着没有指定的连接器,甚至没有规划电缆内的通道数量。因此,为了连接特定的相机,通常需要在载板上设计匹配的连接器,并且不是标准形式。

MIPI CSI2是来自移动设备行业的标准,用于描述信号传输和软件协议标准。很多SoC具有CSI接口,并且有可用于选定的相机模块和专用SoC的驱动程序。但是,它们并不以统一工作方式,也没有通用的驱动程序。因此,可能需要单独修改驱动程序,并且与驱动程序的数据连接,可能需要在应用程序软件侧进一步修改,以实现图像数据的收集。因此,CSI2并不是一个安装后就可立即使用的解决方案。

虽然LVDS是高速数据传输广泛使用的连接方式,具有明确定义的信号传输原理,但LVDS中也没有用于图像数据传输的标准化软件协议。因此,也没有现有的标准驱动程序。一些制造商提供补充系统,如基于专有协议的具有LVDS输出的相机、以及具有相应适配驱动程序的处理板,它们能够直接协同工作。这种方式的优点是能实现一个易于集成的完整解决方案,但是用户在硬件使用方面会受到一定的限制。

其他制造商提供开放的基于LVDS的相机输出,其对于任何硬件集成都是免费的。在这种情况下,必须要创建一个驱动程序。实际上,这个信号处理可以在FPGA上执行。这种基于FPGA的图像抓取算法可以从头开始编程,但是也有一些工具可用于减少集成工作量。

例如,在这种FPGA上使用预开发的IP核。Basler公司具有LVDS接口的板级相机dart,提供的开发套件中就包括一个带有参考实现(FPGA编程)的处理板,以为集成视觉设备提供直接样本。

相机配置

这些板对板连接的另一个方面是相机配置。控制信号可以通过各种总线系统(CAN、SPI或I²C)在SoC和相机之间交换。到目前为止,业界还没有针对这个功能设置标准。目前哪些成像参数可以控制、以及如何控制,完全取决于相机制造商;即使支持或不支持GenICam的决定,也取决于制造商。但好消息是,所有这些总线系统都得到大多数SoC的支持。因此,使用适当的驱动程序,软件可以直接访问相机进行配置和更改成像参数。

一个开放的软件协议对于访问相机配置也很重要。Basler通过其pylon SDK中的I²C(作为的BCON的一部分实现LVDS接口)支持相机访问,从而提供简化配置编程的标准化API。
对于某些应用而言,嵌入式视觉可能是一个有趣的解决方案;一些基于GigE或USB的应用,可以使用单板计算机开发。由于这些类型的硬件很受欢迎,并且在价格、性能和质量标准(消费者和企业)方面选择范围较广,这使得嵌入式视觉成了很多情况下的理想选择。朗锐智科(www.loongv.com)多年来从事嵌入式开发及机器视觉方案服务,在嵌入式视觉技术具备丰富的经验,能为客户提供全面的技术支持及服务。

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
Java API Apache
使用 Apache PDFBox 操作PDF文件
Apache PDFBox库是一个开源的Java工具,专门用于处理PDF文档。它允许用户创建全新的PDF文件,编辑现有的PDF文档,以及从PDF文件中提取内容。此外,Apache PDFBox还提供了一些命令行实用工具。
2824 6
|
编解码 Linux 编译器
使用 C++ 方式实现 GBK 到 UTF-8 转码 (win / linux)
使用 C++ 的方式处理在 Windows 平台和 Linux 平台,编码字符集从 GBK 到 UTF-8 转码,C++ 存在多种方式实现
5144 1
|
Ubuntu Linux Shell
Linux环境下VSCode快速安装终极指南:debian/ubuntu/linux平台通用
以上就是在Linux环境下安装VSCode的终极指南,抛开繁复的专业词汇,以平易近人的文字、形象生动的比喻让你轻松学会这一过程。别忘了,你的小伙伴VSCode已经在应用菜单里等你了!
3520 23
|
缓存 容灾 架构师
极客时间架构实战营总结
极客时间架构实战营总结
1067 0
|
自然语言处理 算法 开发者
通义XR实验室文生3D模型开源,魔搭社区最佳实践来啦!
通义实验室XR实验室重磅开源文生3D新模型,能够从一句文本描述构建3D模型及对应纹理,目前已经在Github面向外界开源!与该项技术一起开源的,还有通义实验室推出的Text-to-ND(文本生成深度、法向图)、Text-to-ND-MV(文本生成多视角的深度、法向图)两个大模型。我们先来直观感受一下这两个大模型的魔法能力:
|
Ubuntu 计算机视觉 C++
Ubuntu 20.04 编译 Opencv 4.11,详细步骤(带图)及报错解决,我的踩坑之旅~
Ubuntu 20.04 编译 Opencv 4.11,详细步骤(带图)及报错解决,我的踩坑之旅~
11081 0
|
C# 开发者 Windows
全面指南:WPF无障碍设计从入门到精通——让每一个用户都能无障碍地享受你的应用,从自动化属性到焦点导航的最佳实践
【8月更文挑战第31天】为了确保Windows Presentation Foundation (WPF) 应用程序对所有用户都具备无障碍性,开发者需关注无障碍设计原则。这不仅是法律要求,更是社会责任,旨在让技术更人性化,惠及包括视障、听障及行动受限等用户群体。
661 1
|
机器学习/深度学习 运维 监控
深度学习之异常检测
基于深度学习的异常检测是一项重要的研究领域,主要用于识别数据中的异常样本或行为。异常检测广泛应用于多个领域,如网络安全、金融欺诈检测、工业设备预测性维护、医疗诊断等。
1598 2
|
存储 前端开发 测试技术
Android Kotlin中使用 LiveData、ViewModel快速实现MVVM模式
使用Kotlin实现MVVM模式是Android开发的现代实践。该模式分离UI和业务逻辑,借助LiveData、ViewModel和DataBinding增强代码可维护性。步骤包括创建Model层处理数据,ViewModel层作为数据桥梁,以及View层展示UI。添加相关依赖后,Model类存储数据,ViewModel类通过LiveData管理变化,而View层使用DataBinding实时更新UI。这种架构提升代码可测试性和模块化。
1037 2
|
前端开发 容器
Bootstrap 5 保姆级教程(一):容器 & 网格系统
Bootstrap 5 保姆级教程(一):容器 & 网格系统