OpenVX一些技术杂谈

OpenVX一些技术杂谈
 
OpenCV和OpenVX有什么联系和区别
联系和区别是:OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库。OpenVX 实现了跨平台加速处理,OpenVX在嵌入式和实时性系统中可以更好地发挥它的优势,在某些场合配合OpenCV的强大功能可以实现更好的效果。OpenVX和OpenCV并不冲突,他们可以说是互补的。
OpenCV
OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令,如今也提供对于C#、Ch、Ruby,GO的支持。
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ch、Ruby的支持。
OpenVX
OpenVX 实现了跨平台加速处理,OpenVX在嵌入式和实时性系统中可以更好地发挥它的优势,在某些场合配合OpenCV的强大功能可以实现更好的效果。OpenVX和OpenCV并不冲突,他们可以说是互补的。OpenVX 目的方便不同的硬件平台,实现相同的接口。就像一个骨架,包含一些头文件声明了很多宏、枚举、变量类型、函数等等。OpenVX实现了计算机视觉处理中性能和能耗方面的优化,特别是嵌入式和实时应用案例中起到重要作用,例如面部、身体和动作跟踪,智能视频监控,高级驾驶协助系统(ADAS),物体和场景重建,增强现实,视觉检测,机器⼈学等等。OpenVX定义了比例如OpenCL™那些计算框架更高水平的执行抽象和内存模型,为在更多架构上的执行创新和高效执行带来重要意义,同时确保这是和以往一致的视觉加速API,完全实现应用可移植性。
OpenCV的优势
计算机视觉市场巨大而且持续增长,且这方面没有标准API,如今的计算机视觉软件大概有以下三种:
1)研究代码(慢,不稳定,独立并与其他库不兼容)
2)耗费很高的商业化工具(比如Halcon, MATLAB+Simulink)
3)依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备)这是如今的现状,而标准的API将简化计算机视觉程序和解决方案的开发,OpenCV致力于成为这样的标准API。
OpenCV致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(Integrated Performance Primitives)得到更快的处理速度。图1为OpenCV与当前其他主流视觉函数库的性能比较。
OpenVX在计算机视觉中的应用
一、简介
OpenVX是一个图像和视觉处理库,它是由Khronos Group维护的标准API。OpenVX的目的是提供高性能的硬件加速计算机视觉功能。它提供了一种用于构建和处理图像和视频流的标准界面,使开发人员可以更加容易地利用硬件加速功能。
二、OpenVX的核心概念
OpenVX的核心概念是图和图算子。一个图是由节点和边组成的,每个节点表示一个算法,边表示节点之间的依赖关系。另外,OpenVX还定义了一些图算子,用于实现各种功能。
用于计算机视觉的OpenVX
OpenVX™是由Khronos集团开发的用于计算机视觉应用程序跨平台加速的开放、无版税的API标准。Khronos集团是一个开放的行业联盟,由150多家领先的硬件和软件公司组成,为3D图形、增强和虚拟现实、视觉和机器学习创建先进的免版税加速标准。Khronos标准包括Vulkan®、OpenCL™,SSYCL™,OOpenVX™,NNNEF™,以及许多其他方面。
现在添加树莓派
Khronos集团和树莓派共同致力于OpenVX的开源实现™11.3,通过了树莓派的一致性。开源实现通过了树莓派上OpenVX 1.3中指定的Vision、Enhanced Vision和Neural Net一致性配置文件。
当Khronos标准在目标系统上可用时,应用程序开发人员可以始终自由使用这些标准。为了使公司能够测试其产品的一致性,Khronos h。
OpenVX实现了性能和功率优化的计算机视觉处理,在人脸、身体和手势跟踪、智能视频监控、高级驾驶员辅助系统(ADAS)、物体和场景重建、增强现实、视觉检查、机器人等嵌入式和实时用例中尤为重要。开发人员可以利用在他们的应用程序中使用这种强大的API,并知道该应用程序在所有符合要求的硬件上都是可移植的。
三、OpenVX的基本操作
1、创建一个OpenVX上下文
vx_context context = vxCreateContext();
if (context == NULL) {
    printf("无法创建OpenVX上下文!\n");
    return -1;
}
2、创建一个输入图像
vx_image input_image = vxCreateImage(context, width, height, VX_DF_IMAGE_U8);
if (input_image == NULL) {
    printf("创建输入图像失败!\n");
    vxReleaseContext(&context);
    return -1;
}
3、创建一个输出图像
vx_image output_image = vxCreateImage(context, width, height, VX_DF_IMAGE_U8);
if (output_image == NULL) {
    printf("创建输出图像失败!\n");
    vxReleaseImage(&input_image);
    vxReleaseContext(&context);
    return -1;
}
4、创建一个算子
vx_threshold threshold = vxCreateThreshold(context, VX_THRESHOLD_TYPE_BINARY, VX_TYPE_UINT8);
if (threshold == NULL) {
    printf("创建算子失败!\n");
    vxReleaseImage(&output_image);
    vxReleaseImage(&input_image);
    vxReleaseContext(&context);
    return -1;
}
5、将输入图像和输出图像绑定到算子上
vx_status status = vxSetParameterByIndex(threshold, 0, (vx_reference)input_image);
if (status != VX_SUCCESS) {
    printf("绑定输入图像失败!\n");
    vxReleaseThreshold(&threshold);
    vxReleaseImage(&output_image);
    vxReleaseImage(&input_image);
    vxReleaseContext(&context);
    return -1;
}
status = vxSetParameterByIndex(threshold, 1, (vx_reference)output_image);
if (status != VX_SUCCESS) {
    printf("绑定输出图像失败!\n");
    vxReleaseThreshold(&threshold);
    vxReleaseImage(&output_image);
    vxReleaseImage(&input_image);
    vxReleaseContext(&context);
    return -1;
}
6、执行算子
status = vxProcessGraph(graph);
if (status != VX_SUCCESS) {
    printf("执行算子失败!\n");
    vxReleaseThreshold(&threshold);
    vxReleaseImage(&output_image);
    vxReleaseImage(&input_image);
    vxReleaseContext(&context);
    return -1;
}
四、OpenVX在计算机视觉中的应用
1、图像滤波
图像滤波是一种常见的计算机视觉处理方法,它可以使图像更加清晰、更加自然。使用OpenVX实现图像滤波功能非常简单,只需要使用vxGaussian3x3算子即可:
vx_image input_image = vxCreateImage(context, width, height, VX_DF_IMAGE_U8);
vx_image output_image = vxCreateImage(context, width, height, VX_DF_IMAGE_U8);
vxGaussian3x3(context, input_image, output_image);
2、图像分割
图像分割是一种常见的计算机视觉处理方法,它可以将图像分成若干个区域,从而便于对图像进行进一步处理。使用OpenVX实现图像分割功能也非常简单,只需要使用vxMeanShift算子即可:
vx_image input_image = vxCreateImage(context, width, height, VX_DF_IMAGE_U8);
vx_image output_image = vxCreateImage(context, width, height, VX_DF_IMAGE_U8);
vxMeanShift(context, input_image, spatial_window, range_window, output_image);
3、特征提取
特征提取是一种常见的计算机视觉处理方法,它可以从图像中提取出一些重要的特征,从而便于进行更高级的计算机视觉处理。使用OpenVX实现特征提取功能也非常简单,只需要使用vxHarrisCorners算子即可:
vx_image input_image = vxCreateImage(context, width, height, VX_DF_IMAGE_U8);
vx_array corners = vxCreateArray(context, VX_TYPE_KEYPOINT, max_corners);
vxHarrisCorners(context, input_image, strength_thresh, min_distance, sensitivity, gradient_size, block_size, corners);
五、小结
OpenVX提供了一种便于开发人员利用硬件加速功能实现计算机视觉处理的标准API,它可以实现图像滤波、图像分割、特征提取等功能。使用OpenVX进行计算机视觉处理非常简单,可以使开发人员更加专注于算法的开发,而无需太关注底层的实现细节。
嵌入式OpenVX-计算机视觉库
OpenVX觉得可以认为是OpenCV的嵌入式版本(计算机视觉和人工智能),OpenVX提供一些图像处理的标准的API,系统第三方Vendor可以用硬件来实现一些图像处理功能,效率更高,而OpenCV则偏向于用Software的方式来实现这一些定义的功能。
在OpenVX当中,有一个关键词叫做内核,这里的内核并不是指操作系统的内核,而是指OpenVX中的一种功能,比如对一个图片进行高通滤波的功能就是openVX的一个功能,这在OpenVX里面叫做一个用户内核。既然内核是一种提供给用户使用的功能,那么这个功能函数一般支持传参,通过参数的不同来改变内核的运行结果(比如传入的图片就算一个参数),在OpenVX当中,把参数定义初始化好后的内核叫做node,  因此,node就是内核的一个实例化即拥有指定参数的内核。在CNN中,OpenVX的node就是一个layer层,而OpenVX的运行是基于node来运行的,所有的node会被链接到图(graph)中,最后由graph统一运行。运行例子如下:
既然存在用户内核(这个功能运行在当前CPU上),TI在openVX的基础上增加了远程内核即这个内核函数是运行在其他CPU上面的,这样做可以让多个CPU并行运算,提升运行效率,比如将不同功能分发给擅长该功能的CPU运行,可以事半功倍(这里就简单提一下,不详细说具体实现)。
TI的多核并行运算TIOpenVX数据逻辑如下(远程CPU之间通信是通过共享内存和rpmsg实现,下图是一个DSP+ARM流程图):

TI修改后的TiOpenVX代码初始化,逻辑框架如下:
 
 
参考文献链接
https://registry.khronos.org/OpenVX/specs/1.3.1/html/OpenVX_Specification_1_3_1.html

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx中文URL请求404

这两天正在搞我的静态网站。方案是:从思源笔记Markdown笔记,用MkOcs build成静态网站,上传到到Nginx服务器。遇到一个问题:URL含有中文会404,全英文URL则正常访问。 ‍ 比如: ​​ ‍ 设置了utf-8 http {charset utf-8;# 其他配置... }中文URL依然404,英文URL则正常访问…

Easysearch 数据可视化和管理平台:INFINI Console 使用介绍

上次在《INFINI Easysearch 尝鲜 Hands on》中,我们部署了两个节点的 Easysearch,并设置了 Console 进行集群监控。今天,我们将介绍 INFINI Console 的使用。 Dashboard INFINI Console 是一个功能强大的数据管理和分析平台,其仪表盘页面提供了直观简洁的界面,使用户能够快…

Quartus Ⅱ调用FIFO IP核方法实现求和(Mega Wizard)

本次实验学习记录主题为“FIFO_IP核实现算术求和”,主要内容是上位机通过串口向FPGA发送一定规格的数字矩阵,FPGA对矩阵处理,按规定逻辑实现求和运算,将结果返回串口转发至上位机。摘要:本次实验学习记录主题为“FIFO_IP核实现算术求和”,主要内容是上位机通过串口向FPGA…

INFINI Easysearch 尝鲜 Hands on

INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个自主可控的轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和…

全网最适合入门的面向对象编程教程:13 类和对象的Python实现-可视化阅读代码神器Sourcetrail的安装使用

本文主要介绍了可视化阅读代码神器Sourcetrail的安装与使用,包括软件简介和特性、下载地址、安装方式、新建工程和如何查看分析源码,同时简单介绍了PyCharm中Sourcetrail插件的使用。全网最适合入门的面向对象编程教程:13 类和对象的 Python 实现-可视化阅读代码神器 Source…

2024年7.4-7.8学习总结/暑假day7-11

2024年7.4-7.8学习总结/暑假day7-11 日记 上班有点小累,每天早上六点二十就得起床,每天偷摸着学java,回家了也学点,打算这段时间快速看完javaweb就开始做项目。 java day02-10~04-08 JS对象 Array,String,JSON,BOM,DOM等 Bom 概念:Browser Object Model 浏览器对象模型,允…

基于极大似然估计方法的diffusion

1、极大似然估计就是求概率的最大值2、VAE (1)q(x|z)是编码器的隐向量,可以是任意分布,通过化简,得到了最低下界,最大化这个最低下界就行:(2)类比出DDPm的目标(3)DDPM的最终下界:(4)红色部分化简一波(5)红色部分化简一波(6)红色部分也是高斯分布,让两个高斯分布均值相近…

六大主流商业模式的对比一览图

六大主流商业模式的对比一览图

算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、Loss Function、Bad Gradient

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」今日 216/10000 抱个拳,送个礼神经网络设计与选择 参数初始化与优化 学习率调整与正则化 数据预处理与标准化 训练过程与监控 特定模型技巧 其他训练技巧1. 神经网络设…

k8s安装v1.30.2(contanerd容器运行时)实录

一、主机准备主机名 NAT IP 系统 配置k8s-master 192.168.1.201 ubuntu 18.04.6 2C2Gk8s-node01 192.168.1.202 ubuntu 18.04.6 2C2Gk8s-node02 192.168.1.203 ubuntu 18.04.6 2C2G 二、前提 主机配置好网络、ntp,关闭ufw,swap,安装好containerd,runc服务 三、安装步骤 mas…

Docker入门(三):nodejs后端服务部署

本文主要内容是通过dockerfile创建镜像,并通过kubernets(简称k8s)来启动集群服务。最后你会得到一个简单的nodejs提供的api服务。写在前面 需要安装的有node(如何安装?),kubectl(如何安装?) 一,创建nodejs应用 本文主要是用于实践k8s,所以nodejs项目写的非常简单,除了…

如何不错过手机的重要消息-草稿

你是不是手机里有许多未读消息,许多“小红点”,系统通知里有很多通知,久而久之你已习惯并麻木了?你只在自己需要的时候主动去找,而对于推送的信息一概不理。有时也有朋友向你抱怨发给你的信息你久久不回。或者反过来,你经常去看推送的消息,但大多是不太重要的,是广告,…