OpenVX基本原理与历史

OpenVX基本原理
2.1 引言
2.1.1 摘要
OpenVX 是一个低级编程框架域,用于支持软件开发人员,可高效访问计算机视觉硬件加速功能和性能的可移植性。OpenVX 旨在支持现代硬件架构,例如,移动和嵌入式 SoC 以及桌面系统。其中许多系统是并行和异构的:多个处理器类型包括多核 CPU、DSP 子系统、GPU、专用视觉计算结构,以及硬连线功能。此外,视觉系统内存层次结构通常具有复杂、分布式、不连贯性。OpenVX 旨在最大限度地提高功能和性能的可移植性,这些不同的硬件平台,提供了一个计算机视觉框架,并对应用程序的产生极小的负面冲击。
OpenVX 包含以下几个内容。
1)预定义和可定制的视觉功能库。
2)基于图形的执行模型,用于组合功能,使任务和与数据无关的执行。
3)一组抽象物理内存的内存对象。
OpenVX 定义了一个 C 应用程序编程接口(API),用于构建验证和协调图形执行,以及访问内存对象。图形抽象使 OpenVX 实现者,能够优化执行底层加速架构的图表。
OpenVX还定义了vxu实用程序库,该库将每个OpenVX预定义函数共享为可直接调用的C函数,而无需首先创建图形。使用vxu库构建的应用程序,不会从图形所启用的优化中受益;然而,vxu库可作使用OpenVX的最简单方法,并作为移植现有视觉应用程序的第一步。
由于计算机视觉领域仍在快速发展,OpenVX 提供了扩展性机制,使开发人员定义的函数,能够添加到应用程序图。
2.1.2 版本/变更历史
OpenVX 1.0 Provisional - 2013 年 11 月
OpenVX 1.0 临时 V2 - 2014 年 6 月
OpenVX 1.0 - 2014 年 9 月
OpenVX 1.0.1 - 2015 年 4 月
OpenVX 1.1 - 2016 年 5 月
OpenVX 1.2 - 2017 年 5 月
OpenVX 1.2.1 - 2018 年 5 月
OpenVX 1.3 - 2019 年 6 月
OpenVX 1.3.1 - 内核模块注册 API - 2021 年 10 月
演变过程中被弃用的某些项目将删除。兼容性头文件中列出的项目仅为临时项目,当这些项目不再支持向后兼容性时,这些项目将被永久删除。
2.1.3 规范约定
OpenVX中使用了以下规范约定。
在OpenVX中,给出的代码示例突出显示了 特定问题使用如下所示的格式:
/* 示例代码部分 */
int main(int argc, char *argv[])
{
   return 0;
}
2.1.4 命名约定
OpenVX中使用了以下命名约定。
不透明对象和原子被命名为vx_object,例如vx_image或vx_uint8,并用下划线将对象名称与vx前缀隔开。
定义的结构被命名为vx_struct_t,例如vx_imagepatch_addressing_t,下划线将结构与vx前缀分隔开,并用t表示它是一个结构。
定义的枚举被命名为vx_enum_e,例如vx_type_e,下划线将枚举与vx前缀分隔开,并用e表示它是一个枚举值。
应用程序编程接口使用骆驼风格大小写,命名为vxsomeFunction(),以小写字母开头,没有下划线,例如vxCreateContext()。
视觉函数还具有遵循类似于Java包的小写、反点层次结构的命名约定,例如,
org.khronos.openvx.color_convert
这最大限度地减少了名称冲突的可能性,并促进了排序和查询可用视觉函数的命名空间时的可读性。每个视觉函数都应具有唯一的虚线名称:tld.vendor.library.function。这种视觉函数命名空间的层次结构是在子域org.khronos,但它们确实遵循现有的国际标准。对于 OpenVX 指定的视觉函数,将唯一名称不使用骆驼风格大小写,而是使用下划线分隔单词。
2.1.5 供应商命名约定
以下命名约定将用于特定于供应商的扩展。
不透明对象和原子被命名为vx_object_vendor,例如vx_ref_array_acme,并用下划线将供应商名称与对象名称隔开。
定义的结构命名为vx_struct_vendor_t,例如vx_mdview_acme_t,下划线将供应商与结构名称隔开,t表示它是一个结构。
定义的枚举被命名为vx_enum_销售方_e,例如vx_convolution _name_acme_e,下划线将供应商与枚举名称隔开,e表示它是枚举值。
定义的枚举值命名为VX_ENUMVALUE_销售方,例如VX_PARAM_STRUCT_ATTRIBUTE_SIZE_ACME,仅使用以vx前缀开头的大写字母和分隔单词的下划线。
应用程序编程接口使用驼色大小写命名为vxSomeFunctionVendor(),以小写字母开头,没有下划线,例如vxCreateRefArrayAcme()。
2.1.6 词汇表和缩略语
原子
原子意味着C基元数据类型。具有额外的用法,如原子操作。
应用程序接口
应用程序编程接口,指定软件组件如何与另一个组件交互。
引擎
一种特定用途的软件抽象,可由用户进行调整。
框架
一种通用软件抽象,其中用户可以产生特定应用程序的功能。
内核
OpenVX使用术语内核来表示抽象的计算机视觉功能,而不是操作系统内核。内核也可以指一些计算机视觉的卷积系数(例如,Sobel内核)。OpenVX不使用此含义。OpenCL使用内核(特别是cl_kernel)来限定用cl编写的函数,OpenCL可以直接调用该函数。这接近OpenVX使用的含义;然而,OpenVX并没有定义一种语言。
运行时
程序的执行阶段。
实现定义
OpenVX API 未指定所述条件下的实现行为,实现开发人员自主开发。
禁止
应用程序应确保未使用所描述的条件。
2.2 OpenVX设计概述
2.2.1软件环境
OpenVX旨在直接由应用程序使用,或作为更高级别视觉框架、引擎或平台API的加速层,如图 2-1所示。
 
图 2-1. OpenVX 软件使用概述

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

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

相关文章

L4D2自制角色Mod - HUI篇

如何以相对简易的思路自制求生之路2求生者头像Mod本文是笔者尝试制作 求生之路2 角色 Mod 的过程中编写的笔记,笔者的背景是有基础的计算机知识和图像处理软件的使用经验,相信大多数读者朋友都有同样的水平。本文面向希望能快速简单地自定义游戏内角色图像/模型,但对更深层次…

使用Netty与前端请求进行交互实现实时通讯

引言因为不满足与一般的SpringBoot CRUD开发(太无聊了)所以去学一下网络编程,第一站就是通过B站老罗的EasyChat项目了解到了Netty这个网络框架,在学习这个项目之前也是去学习了一下Netty框架的使用以及相关的原理知识所以是有一定了解的,但是只是一味的学习不去实践总感觉是空中…

如何使用 Filebeat 8 连接 Easysearch

在日志场景,还是有很多小伙伴在使用 Filebeat 采集日志的。今天我来实战下使用 Filebeat 8 连接 Easysearch 。本次使用 Easysearch-1.9.0 版本和 Filebeat-8.17.0 版本做演示,也适用 Filebeat-oss-8.17.0 版本。 Easysearch 不开启兼容参数的情况 Easysearch 默认情况下未开…

25.2.7小记

异常捕捉 try{} catch{} import java.util.Scanner;public class ArrayIndex {public static void main(String[] args) {int [] a =new int[10];int idx;Scanner in = new Scanner(System.in);idx = in.nextInt();try{a[idx] = 10;System.out.println("hello");}cat…

《笨办法学Python3》PDF、EPUB免费下载

本书是一本Python入门书,适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用。这本书以习题的方式引导读者一步一步学习编程,从简单的打印一直讲到完整项目的实现,让初学者从基础的编程技术入手,最终体验到软件开发的基本过程。本书是基于Python 3.6版本编…

RocketMQ实战—5.消息重复+乱序+延迟的处理

大纲 1.根据RocketMQ原理分析为什么会重复发优惠券 2.引入幂等性机制来保证数据不会重复 3.如何用死信队列处理优惠券系统数据库宕机 4.基于RocketMQ的订单库同步为什么会消息乱序 5.如何解决RocketMQ的消息乱序问题 6.RocketMQ的顺序消息机制的代码实现 7.基于RocketMQ的数据过…

VSCODE接入DeepSeek R1实现AI完成自动化脚本实战开发

大家好,我是六哥,今天还是我们喜爱的DeepSeek的玩法,今天来个实战案例,和大家分享一下如何将DeepSeek接入VS Code,结合AI Toolkit插件完成自动化脚本的实战开发。 一、准备 微软官方为我们提供了一个针对AI辅助的插件——AI Toolkit for Visual Studio Code。这个插件功能…

L0G2-Python 前置基础

L0G2-Python 前置基础 1. 任务一 Leetcode 383 通过的截图通过的代码 class Solution(object):def canConstruct(self, ransomNote, magazine):""":type ransomNote: str:type magazine: str:rtype: bool"""# 只使用 defaultdict(int) 避免 if 语…

L0G3-Git 基础知识

L0G3-Git 基础知识 1. 任务一 破冰活动之自我介绍 1.1 配置 git 直接采用全局设置的方式 git config --global user.name "sakuralggm" git config --global user.email "myemail@qq.com"查看全局配置 git config --global --list1.2 fork 项目1.3 克隆项目…

L0G4-玩转HF魔搭魔乐社区

L0G4-玩转HF/魔搭/魔乐社区 1. Hugging Face平台 1.1 任务一 模型下载 1.1.1 创建github codespace 访问github codespace,并使用Jupyter Notebook模板。创建完成后,进入“Create frome a template”页面对已经创建的codespace选择“open in visual studio code”点击后会经过…

2024 年度总结:与自己对话

搬运自洛谷博客,原发表时间:2024-12-27(实际写成:12-31)\[\mathsf{那跑过去的昼夜\ \ 是孤独的修炼\qquad——\ 林俊杰《黑夜问白天》} \] 孤独而不孤独.又来到写年度总结的时刻了。这一年无疑比去年更具故事的戏剧性与心境的跌宕起伏了。 被各种事件聚在一起搅和,高一上…