随着计算机视觉技术在各个领域的广泛应用,开发高效、可靠的计算机视觉应用变得越来越重要。本文将介绍基于OpenVX标准的英特尔计算机视觉软件开发工具包(SDK),探讨其为开发者带来的便利和优势。
OpenVX是一个开放、免版税的跨平台加速计算机视觉应用的标准。该标准由Khronos集团定义,这是一个致力于创建免版税开放标准的行业联盟。Khronos集团是一个非盈利、成员资助的联盟,专注于图形、并行计算、视觉处理等领域的开放标准创建。英特尔于2006年3月加入Khronos集团,成为其推广成员之一。
OpenVX API为计算机视觉应用提供了标准化的应用接口,这使得计算机视觉处理的性能和功耗得到优化,并允许应用层透明地使用特定于供应商的硬件优化和加速。此外,OpenVX还定义了一个API独立的标准文件格式,用于在训练系统和推理引擎之间交换深度学习数据,称为神经网络交换格式(NNEF)。
通过OpenVX的扩展,开发者可以将卷积神经网络(CNN)拓扑表示为OpenVX图,这允许开发者将CNN与传统视觉功能混合使用。
英特尔计算机视觉SDK包含了针对OpenVX 1.1 API的优化实现,以及自定义扩展和内核。此外,还包括预构建的OpenCV二进制文件,这些文件带有用于性能分析的Intel® VTune™ Amplifier钩子。SDK还包括视觉算法设计器(VAD),这是一个集成开发环境(IDE)工具,用于开发OpenVX算法、工作负载和功能。还包括深度学习模型优化工具、深度学习推理引擎和示例应用程序。
开发者可以在使用CMake管理构建的Ubuntu* 64位开发平台上使用C/C++编程CV SDK。推荐的开发平台硬件是第六代英特尔®酷睿™处理器或更好的处理器,集成了Iris® Pro图形或HD图形。
目标平台包括下一代英特尔Atom®处理器(以前称为Apollo Lake)、英特尔®酷睿™处理器和英特尔®至强®处理器。目标处理器集成了Iris Pro图形或HD图形,以使用OpenCL GPU内核。
英特尔计算机视觉SDK提供了针对英特尔硬件的优化和加速。该SDK提供了多线程(使用Intel®线程构建块)和向量化(使用Intel®集成性能原语)的CPU内核。此外,该SDK的优化实现支持集成Iris Pro或HD图形平台上的英特尔GPU。
使用英特尔计算机视觉SDK,开发者可以访问下一代英特尔Atom®处理器(以前称为Apollo Lake)上新专用IPU(图像处理单元)的早期支持。这些新处理器具有集成的四向量图像处理单元,能够支持高级视觉功能和多达4个并发高清IP摄像头。
英特尔计算机视觉SDK通过特定的API和许多内核扩展扩展了原始OpenVX标准,允许开发者将性能高效的版本(例如,分块的)算法添加到处理流程中。
英特尔计算机视觉SDK支持任务和数据并行性,以最大限度地利用所有可用的计算资源,包括CPU、GPU和新的专用IPU(图像处理单元)。
英特尔计算机视觉SDK有一个预构建的OpenCV实现。这个OpenCV实现集成了用于仪器和跟踪技术(ITT)的钩子,允许使用Intel® VTune™ Amplifier对视觉应用程序进行性能分析。
人类最重要的感官之一是视觉,与环境的互动有80%是基于视觉的。到目前为止,物联网依赖于多个传感器来执行基本的遥测和自动化任务,因为计算机视觉昂贵、复杂且对大多数开发者来说难以接触。
然而,随着廉价、高清摄像头、内置CV加速器的处理器和强大的计算机视觉软件堆栈的出现,使用基于摄像头的计算机视觉作为物联网传感器的趋势正在上升。与机器学习和深度学习系统的集成为计算机视觉在物联网中的应用打开了新的用例,并将嵌入式CNN和DNN的力量带到了边缘。
Intel® VTune™ Amplifier – 用于分析、可视化和调整支持仪器和跟踪技术(ITT)的多处理器、多线程或向量化英特尔®平台的高级英特尔工具包。
Intel® Vision Algorithm Designer – 在OpenVX之上的IDE,用于以直观和可视化的方式开发OpenVX算法、工作负载和功能。
Intel® Deep Learning (DL) Deployment toolkit – 一个跨平台的DL模型优化工具,帮助将DL推理与应用程序逻辑集成。
Intel® Deep Learning Inference Engine - 支持多个流行的图像分类网络的推理操作,并通过提供统一的API将推理与应用程序逻辑集成,支持深度学习解决方案的部署。
Intel® SDK for OpenCL™ applications - 通过英特尔®图形技术计算卸载和高性能媒体管道,加速和优化应用程序性能。
// 示例代码,展示如何使用SDK进行简单的图像处理
#include <opencv2/opencv.hpp>
#include <vx.h>
int main() {
cv::Mat image = cv::imread("image.jpg");
vx_image img = vxCreateImageFromHandle(/* context */, /* image handle */);
// 进行图像处理...
vxReleaseImage(&img);
return 0;
}