嵌入式视觉系统开发需要考虑的因素

简介: 所谓“嵌入式视觉”, 是指一种通过视觉方法去理解周边环境的机器,主要涉及到两种技术:嵌入式系统和计算机视觉(有时也称为机器视觉)。   然而,由于缺乏共通的标准,致使嵌入式视觉技术发展受阻,唯有采用兼容各层面功能的标准,以及对处理器类别选取的严格把控,才能真正开启并普及嵌入式视觉应用。

所谓“嵌入式视觉”, 是指一种通过视觉方法去理解周边环境的机器,主要涉及到两种技术:嵌入式系统和计算机视觉(有时也称为机器视觉)。  

然而,由于缺乏共通的标准,致使嵌入式视觉技术发展受阻,唯有采用兼容各层面功能的标准,以及对处理器类别选取的严格把控,才能真正开启并普及嵌入式视觉应用。

实际上,我们中的很多人每天就携着一个嵌入式机器视觉系统,比如在我们的智能手机中。这些智能设备不仅能够捕获图像和录制视频,而且还能执行增强现实的应用,嵌入式视觉在消费类、产业和政府领域被广泛接受。
我们要根据时间限制,重点弄清楚开发过程中的哪部分活动能实现附加价值,然后做出正确选择,分清哪部分应该自己开发(增值活动),哪部分可以购买商用现成产品 (COTS) 或者分包出去。重点关注增值活动并利用硬件、软件和 FPGA 层面的 IP 模块,是满足上市时间要求的重要促成因素之一。
大部分视觉系统都遵循可预测的流水线
大部分视觉系统都遵循可预测的流水线

除了上市时间要求,嵌入式视觉系统开发过程中还要经常考虑尺寸、重量、功耗和成本 (SWAP-C) 要求。究竟哪种要求占主导,取决于具体应用领域,例如手持设备在功耗方面就要比驾驶员辅助系统更为严格。然而,对于高级驾驶员辅助系统来说,由于要生产几百万台,因此方案成本就成了主导因素。

要在尺寸、重量、功耗和成本方面获得很好的效果,应该在传感器和处理系统中实现更为紧密的系统集成,即使用数量更少但功能更强的集成组件。

每种应用领域都具有不同增值点以及不同的尺寸、重量、功耗和成本考量,因此几乎所有嵌入式视觉系统都需要我们实现所谓的图像处理流水线。这种流水线可与所选的传感器建立接口连接,并且执行所需的操作以生成适合进一步加工或直接在网络上传输的图像。基本的图像处理流水线包含:

照相机接口 — 接收来自传感器的原始图像;
颜色滤波阵列 — 重建像素颜色;
色彩空间转换 — 转换成针对编解码器的正确色彩空间;
输出格式化 — 与输出介质进行接口连接。
在图像处理流水线中对接收的图像执行和应用算法。所实现应用不同,算法也会不同;不过,有一些常用的图像处理算法可用来提高对比度,检测图像中的特性、目标或运动,或者校正模糊图像。

应该在一个框架中开发这些算法,以便我们以最短时间将产品推向市场,并鼓励重复使用,降低非重复性和重复性工程成本。有几种现成的框架我们可以考虑使用。

OpenVX — 用于开发图像处理应用的开源应用程序;
OpenCV — 开源计算机视觉,多个面向实时计算机视觉的库,基于 C/C++;
OpenCL — 基于 C++ 的开源计算机语言,用于开发 GPU、FPGA 等器件中常见的并行处理应用;
SDSoC — 赛灵思的一款设计环境,借助该环境开发人员可在 Zynq 或 UltraScale+ MPSoC 器件的 ARM 处理系统中最初实现用 C/C++ 编写的算法,分析代码库特性以找出性能瓶颈,然后利用赛灵思高层次综合功能将这些瓶颈转换到硬件支持的 IP 核,并在器件的可编程逻辑 (PL) 部分运行。
采用 FPGA 或 All Programmable SoC 方案时,将这些框架与 HLS 结合使用,能够高效开发出嵌入式视觉应用,并通过硬件在闭环中快速演示。

图像经过处理流水线后,数据从系统的输出方式也很重要,我们有三种选择。

利用视频图形阵列 (VGA)、高清多媒体接口 (HDMI)、串行数字接口 (SDI) 或 DisplayPort 等标准将图像输出到显示器。很多电动车采用触摸式显示屏对系统进行控制和配置。

将图像或从图像中提取的信息传送到另一个系统,该系统像云处理应用那样使用图像或提取出的信息。

将图像存储在非易失存储介质中,供以后访问。

对于绝大多数方式而言,在完成成像链后,我们都需要确定图像格式化方式,以便使用。此时,我们需要决定是否使用诸如 H.264(MPEG-4 Part 10 高级视频编码)或 H.265(高效率视频编码)等行业标准图像/视频压缩算法对图像进行编码,这些实现方案通常称为编解码器。编解码器能提高通信和网络带宽的使用效率,或降低实现高保真度所需的存储空间,因为编码通常存在较大失真 。如果因使用编解码器导致失真度无法接受,还可以按原始格式发送和存储图像,或者以无损格式进行编码。

大多数编解码器所使用的色彩空间都与图像传感器输出的色彩空间(前提是系统使用彩色器件)不同。嵌入式视觉中常用的色彩空间是:

红、绿、蓝 — 包含 RGB 信息作为图像传感器的输出,常用作 VGA 等简单接口的输出;

YUV — 包含亮度 (Y) 和色度 (U 和 V),该色彩空间用于大多数编解码器和一些显示标准。常用的 YUV 格式为 YUV4:4:4 和 YUV4:2:2。两种格式的区别在于:4:4:4 格式下,每像素由 8 位表示,得到 24 位像素。在 4:2:2 格式下,U 值和 V 值在像素之间共享,得到 16 位像素,可节省存储空间。

另一个对图像处理链和 SWAP-C 具有很大影响的决策是:大部分图像处理链应该在哪实现:

在边缘,即在嵌入式视觉系统之内。这样会提高系统的功耗和处理/存储要求,但能够实现更快的响应。在边缘处理将在大部分嵌入式应用(例如高级驾驶员辅助、机器视觉等)中成为主导。

在云中,这需要嵌入式视觉系统捕获图像,并且利用网络技术将图像发送到云。可在云中处理的典型应用包括医疗成像或科研应用。这类应用中,处理非常密集,且不需要实时结果。

为实现处理链,处于嵌入式视觉系统核心的处理内核不仅要能控制所选的图像传感器,还要能接收和实现图像处理流水线,并通过指定网络基础设施传送图像或发送到选定的显示器。考虑到这些严苛要求,因此经常要选择 FPGA,或者越来越多的情况下需要使用 All Programmable 片上系统,例如 Zynq 器件。

Zynq 器件将两个高性能 ARM A9 处理器与 FPGA 架构相结合。这样使得处理系统 (PS) 可用来通过 GigE、PCIe 或 CAN 等接口与主机系统通信,同时执行系统的一般管理和日常事务。器件的另一半,即可编程逻辑 (PL) 可用来接收和处理图像,充分利用 FPGA 架构的并行处理特性。如果要求通过网络基础设施传送图像,那么可使用 Zynq 中的直接存储器访问 (DMA) 控制器高效地将图像数据从 PL 移动到 PS DDR 存储器。图像到了 PS DDR 存储器内,可利用所选传输介质的 DMA 控制器进一步访问。

当然,一旦图像处在 PS DDR,高性能 A9 处理器也可提供进一步的处理操作。Zynq 架构的特点在于还可将处理后的图像从 PS DDR 移回 PL 中的图像流水线。

很多情况下,需要将嵌入式视觉应用的输出与其他传感器数据进行融合,使产生的图像包含多个不同传感器的信息。最简单的传感器融合应用是将不同频谱的图像相结合,例如可见光与红外线融合以实现更好的夜视效果。

传感器融合的另一个更为复杂的用途是将成像系统、全球导航卫星系统 (GNSS)、数字地图信息以及不同波长下运行的其他传感器(例如雷达)进行融合,以确定另一辆汽车的相对位置,从而实现避碰功能。

十多年来,在嵌入式系统业界中已经开发了许多图像采集卡和相机接口板卡,以支持PMC夹层卡。随着所谓的“交换结构”接口的出现,许多这些相机接口板卡已经迁移到XMC设计。像较早的基于PMC的设计一样,它们支持多种类型的相机接口。虽然许多公司支持PCIe标准、允许具有不同输出的相机与主机连接,但是希望降低系统成本和尺寸的嵌入式视觉系统设计人员,现在可以利用多种小尺寸PCIExpress迷你卡的功能执行此任务。

相关文章
|
1月前
|
人工智能 边缘计算 测试技术
预见未来:构建全息开发者环境
随着技术进步,全息开发者环境成为可能,它结合了全息技术和人工智能,提供三维代码视图、多维度交互和增强团队协作。本文探讨其关键技术,如高分辨率三维显示、精确手势识别及云计算支持,并设想了从项目浏览到实时协作的工作流程,展示了未来开发环境的巨大潜力。
|
5月前
|
存储 人工智能 安全
移动应用与系统:探索开发与操作系统的融合安卓应用开发:打造高效用户界面的关键技术
【5月更文挑战第27天】 随着移动互联网的飞速发展,移动应用和操作系统已经成为了我们日常生活中不可或缺的一部分。本文将深入探讨移动应用开发的关键要素,以及移动操作系统的核心功能。我们将分析移动应用开发的挑战和机遇,并讨论移动操作系统如何适应不断变化的技术环境。通过深入研究这些主题,我们希望为读者提供对移动应用和系统领域的全面理解。
|
5月前
|
传感器 人工智能 编译器
2023 年嵌入式世界的3 大趋势分析
2023 年嵌入式世界的3 大趋势分析
532 1
|
传感器 机器学习/深度学习 算法
嵌入式模拟智能为机器人提供了新的自主水平
机器人不仅需要人工智能(AI)才能实现自主。他们还需要大量传感器,传感器融合以及边缘的实时推理。之前我们已经尝到了深度卷积神经网络的好处,如今来自激光雷达的更高数据处理的需求正在推动神经网络到新拓扑以获得自主。
1436 0
|
传感器 机器学习/深度学习 安全
|
Linux C语言 SoC
嵌入式学习难点 嵌入式软件学习
嵌入式学习不是一蹴而就的,需要不断的积累,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式Linux方向,关注这个方向,我认为大概分3个阶段:     嵌入式学习难点 嵌入式软件学习3个阶段 1、嵌入式linux上层应用,包括QT的GUI开发 2、嵌入式linux系统开发 3、嵌入式linux驱动开发 嵌入式目前主要面向的几个操作系统是,LINUX,WINCE、VxWorks等等。
1764 0