基于飞腾平台的OpenCV的编译与安装

news2024/9/24 9:33:19
    【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。 点击这里开始你的技术升级之旅吧

image.png​​​​

本文分享至飞腾开发者平台《飞腾平台OpenCV编译安装说明》

1 介绍

  OpenCV(Open Source Computer Vision Library)是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。软件库包含了超过2500种计算机视觉和机器学习领域内的通用算法,广泛应用于人脸检测、人脸识别、目标检测、视频内行为分析、3D建模、相似图像检测、眼动追踪和增强现实等等。OpenCV同时提供了C++, Java, MATLAB等语言的接口,可利用处理器相关SIMD指令集对程序进行加速,也支持CUDA和OpenCL。OpenCV是模块化的结构设计,包括了多个共享或静态库,如表1.1所示。关于OpenCV的更多信息请查阅参考文献【1】(文末)。

核心功能(core)定义了基本的的数据结构,包含矩阵的数据结构和基本操作方式。
图像处理(imgproc)包括线性和⾮线性的图像滤波、⼏何图像转换(缩放、仿射和透视调整)、颜⾊模式转换、直⽅图等等。
视频分析(video)包含了运动估计、背景消除和⽬标跟踪算法。
立体标定和3D重建(calib3d)提供基本的多视图⼏何算法、平⾯和⽴体影像校正、目标姿态估计和3D重建算法。
二维特征框架(Features2d)显著特征探测器、描述符和描述符匹配器。
目标检测(Objectect)检测对象和预定义的类的实例(例如:脸部、眼睛、杯⼦、⼈、⻋等等)。
图像界面(Highgui)提供⼀个简单易⽤的UI。
视频接口(videoio)提供⼀个简单易⽤的视频捕获和编码解码界⾯。
其他FLANN(神经⽹络)和Google测试封装、 Python绑定等等

2 环境说明

2.1 硬件环境

  硬件环境如下表所示。

项目说明
CPUFT-2000/4
网络可访问外网
存储无要求
内存无要求

2.2 软件环境

2.2.1 操作系统

  操作系统环境如下表所示。

项目说明
KylinV10
Kernel4.4.131

2.2.2 软件环境

软件环境如下表所示。

项目版本下载地址
GCC5.4.0
cmake3.18.0https://github.com/Kitware/CMake/releases/download/v3.18.6/cmake-3.18.0.tar.gz
OpenCV4.4.0https://github.com/opencv/opencv/archive/4.4.0.tar.gz
OpenCV_extra4.4.0https://github.com/opencv/opencv_extra/archive/4.4.0.tar.gz

3 编译安装

3.1 安装OpenCV所需依赖库

  依赖版本要求:
    GCC 4.4.x or later
    CMake 2.8.7 or higher
    Git
    GTK+2.x or higher, including headers (libgtk2.0-dev)
    pkg-config
    Python 2.6 or later and Numpy 1.5 or later with developer packages (python-dev,python-numpy)
    ffmpeg or libav development packages: libavcodec-dev, libavformat-dev,libswscale-dev

  可选项:
    libtbb2 libtbb-dev
    libdc1394 2.x
    libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev
    CUDA Toolkit 6.5 or higher

  安装方式:

# sudo apt-get install build-essential
# sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev
libavformat-dev libswscale-dev python-dev python-numpy libopenblas-dev

  安装选装库:

方式一:
# sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev
libtiff-dev libjasper-dev libdc1394-22-dev
方式二:
选择相应的配置选项后,OpenCV会在安装过程中自动下载相关项依赖库。

3.2 编译安装OpenCV

  第一步 下载源码包(建议在网页端下载源码)。

git clone <https://github.com/opencv/opencv/archive/4.4.0.tar.gz> /

git clone <https://github.com/opencv/opencv_extra/archive/4.4.0.tar.gz>

  第二步 解压。

tar zxf opencv-4.4.0.tar.gz

tar zxf opencv_extra-4.4.0.tar.gz

  第三步 编译选项配置(详细配置选项见第四章)。

cd opencv-4.4.0

mkdir build

cd build

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..

    三种cmake选项配置方式:

    A、命令行 cmake -Doption=value

    B、cache文件 cmake -C my_options.txt

    C、交互式:ccmake 或者 cmake-gui

    Note : 对于Tengine等选装项,opencv会在选择配置后自动下载安装。

  第四步 编译安装。

make -j4

make install \#默认安装到 /usr/local/目录下

#或者下列方式,去掉strip信息

cmake --build . --target install/strip

  第五步 配置

    1、配置安装库到全局变量

在/etc/ld.so.conf/目录下opencv.conf

添加  \<path to your OpenCV installed \>到 opencv.conf

Ldconfig

    2、配置测试文件路径(可直接添加到当前用户的环境变量之中方便后续测试工作。)

export OPENCV_TEST_DATA_PATH = \<path to opencv_extra/testdata\>

3.3 OpenCV运行验证

  可执行bin目录下opencv_test_** 任意一测试程序,以core模块为例:

cd \<path to build dir/bin\>

./opencv_test_core

image.png

image.png

  Note :对于dnn的测试只有卷积计算部分,对于模型的测试需要额外下载相关的模型文件。

4 编译选项说明

  本章只列出了OpenCV-4.4.0部分并行化和DNN相关的配置选项,其他选项请查阅参考文献【2】。

4.1 并行化选项

选项默认值平台描述
pthreadsWITH_PTHREADS_PFONUnix-likeDefault backend based on pthreads library is available on Linux, Android and other Unix-like platforms. Thread pool is implemented in OpenCV and can be controlled with environment variables OPENCV_THREAD_POOL_*. Please check sources in modules/core/src/parallel_impl.cpp file for details.
TBBWITH_TBBOFFMultipleThreading Building Blocks is a cross-platform library for parallel programming.
OpenMPWITH_OPENMPOFFMultipleOpenMP API relies on compiler support.
HPXWITH_HPXOFFMultipleHigh Performance ParallelX is an experimental backend which is more suitable for multiprocessor environments.

4.2 GUI选项

选项默认值平台描述
WITH_GTKONLinuxGTK is a common toolkit in Linux and Unix-like OS-es. By default version 3 will be used if found, version 2 can be forced with the WITH_GTK_2_X option.
WITH_WIN32UIONWindowsWinAPI is a standard GUI API in Windows.
N/AONmacOSCocoa is a framework used in macOS.
WITH_QTOFFCross-platformQt is a cross-platform GUI framework.

4.3 深度神经网络相关选项

选项默认值描述
WITH_PROTOBUFONEnables protobuf library search. OpenCV can either build own copy of the library or use external one. This dependency is required by the dnn module, if it can't be found module will be disabled.
BUILD_PROTOBUFONBuild own copy of protobuf. Must be disabled if you want to use external library.
PROTOBUF_UPDATE_FILESOFFRe-generate all .proto files. protoc compiler compatible with used version of protobuf must be installed.
OPENCV_DNN_OPENCLONEnable built-in OpenCL inference backend.
WITH_INF_ENGINEOFFEnables Intel Inference Engine (IE) backend. Allows to execute networks in IE format (.xml + .bin). Inference Engine must be installed either as part of OpenVINO toolkit, either as a standalone library built from sources.
INF_ENGINE_RELEASE2020040000Defines version of Inference Engine library which is tied to OpenVINO toolkit version. Must be a 10-digit string, e.g. 2020040000 for OpenVINO 2020.4.
WITH_NGRAPHOFFEnables Intel NGraph library support. This library is part of Inference Engine backend which allows executing arbitrary networks read from files in multiple formats supported by OpenCV: Caffe, TensorFlow, PyTorch, Darknet, etc.. NGraph library must be installed, it is included into Inference Engine.
OPENCV_DNN_CUDAOFFEnable CUDA backend. CUDA, CUBLAS and CUDNN must be installed.
WITH_HALIDEOFFUse experimental Halide backend which can generate optimized code for dnn-layers at runtime. Halide must be installed.
WITH_VULKANOFFEnable experimental Vulkan backend. Does not require additional dependencies, but can use external Vulkan headers (VULKAN_INCLUDE_DIRS).
WITH_TENGINEOFFEnable experimental Tengine backend for ARM CPUs. Tengine library must be installed.

4.3.1 Tengine配置方式

  -DWITH_TENGINE=ON

  方式一:编译过程中自动下载安装(需要机器联网)

  方式二:使用预编译的lib,并制定路径

  -DOPENCV_LIBTENGINE_ROOT_DIR=/UserFileDir/Tengine-library-dir

  配置安装成功后:

  可通过strings <path to your opencv installed>/lib/ libopencv_dnn.so.xx.xx.xx |grep TENGINE验证:

image.png

  没有配置成功则无显示.

4.4 CPU相关优化选项

  这部分选项一般不需要设置,编译安装过程会自动识别。如果需要添加特定feature,可以自己添加。只要CPU支持,就会按照相关的代码路径去执行程序。
  CPU_BASELINE: CPU支持的SIMD指令集
  如 CPU_BASELINE = NEON,FP16
  CPU_DISPATCH:自定义支持其他SIMD指令集。
  如 CPU_DISPATCH = AVX,AVX2
  Note: 运行时如不需要利用某个SIMD指令可以设置OPENCV_CPU_DISABLE来实现,如:
  OPENCV_CPU_DISABLE=FP16

5 参考资料

  [1]OpenCV官网及github:https://opencv.org/;https://github.com/opencv/opencv

  [2]OpenCV配置参考https://docs.opencv.org/master/db/d05/tutorial_config_referen...

推荐阅读

  • 基于飞腾平台的Sqoop的安装配置
  • 基于飞腾平台的Flume的安装配置

欢迎广大开发者来飞腾开发者平台获取更多前沿技术文档及资料

如开发者在使用飞腾产品有任何问题可通过在线工单联系我们


版权所有。飞腾信息技术有限公司 2023。保留所有权利。

未经本公司同意,任何单位、公司或个人不得擅自复制,翻译,摘抄本文档内容的部分或全部,不得以任何方式或途径进行传播和宣传。

商标声明

Phytium和其他飞腾商标均为飞腾信息技术有限公司的商标。

本文档提及的其他所有商标或注册商标,由各自的所有人拥有。

注意

本文档的内容视为飞腾的保密信息,您应当严格遵守保密任务;未经飞腾事先书面同意,您不得向任何第三方披露本文档内容或提供给任何第三方使用。

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,飞腾在现有技术的基础上尽最大努力提供相应的介绍及操作指引,但飞腾在此明确声明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保证。

本文档中所有内容,包括但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法拥有其知识产权,包括但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面同意,任何人不得擅自使用、修改,复制上述内容。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT 推出“Auto”自动模式:智能匹配你的需求

OpenAI 最近为 ChatGPT 带来了一项新功能——“Auto”自动模式&#xff0c;这一更新让所有用户无论使用哪种设备都能享受到更加个性化的体验。简单来说&#xff0c;当你选择 Auto 模式后&#xff0c;ChatGPT 会根据你输入的提示词复杂程度&#xff0c;自动为你挑选最适合的AI模…

解密 Python 的 staticmethod 函数:静态方法的全面解析!

更多Python学习内容&#xff1a;ipengtao.com 在 Python 中&#xff0c;staticmethod 函数是一种装饰器&#xff0c;用于将函数转换为静态方法。静态方法与实例方法和类方法不同&#xff0c;它们不需要类实例作为第一个参数&#xff0c;也不需要类作为第一个参数&#xff0c;因…

只用几行代码,不依赖任何框架?SMTFlow 轻松实现前端流程图

只用几行代码&#xff0c;不依赖任何框架&#xff1f;SMTFlow 轻松实现前端流程图&#xff01; 在前端开发中&#xff0c;如果你需要一个简单好用的流程图设计工具&#xff0c;SMTFlow 绝对是你的不二之选&#xff01;本文将介绍 SMTFlow 的核心功能、特点以及如何快速上手。 工…

C++中set和map的使用

1.关联式容器 序列式容器里存储的是元素本身&#xff0c;如vector、list、deque 关联式容器即&#xff0c;容器中存储<key&#xff0c;value>的键值对&#xff0c;树型结 构的关联式容器主要有四种&#xff1a;map、set、multimap、multiset。他们都使用平衡搜索树(即红…

项目实战:lngress搭建Nginx+WP论坛+MariaDB

1. 网站架构 本次部署形式完全舍弃 Docker&#xff0c;将所有应用都置于Kubernetes&#xff0c;采用 Deployment 而非单 Pod 部署&#xff0c;稳定性得到升级。 2. 部署 MariaDB [rootk8s-master ~]# mkdir tdr [rootk8s-master ~]# cd tdr/ &#xff08;1&#xff09;定义 …

Flowable7.0.1框架严重bug,流程跳转到指定节点导致流程中断

一、Bug描述 使用7.0.1版本的 moveActivityIdsToSingleActivityId 或 moveExecutionsToSingleActivityId实现节点跳转&#xff0c;程序不会报错&#xff0c;但是act_ru_task 没有生成新的任务&#xff0c;导致流程中断&#xff0c;这是相当严重的bug。 经过多次测试&#xff…

【LLM多模态】文生视频综述From Sora What We Can See: A Survey of Text-to-Video Generation

note 现在很多主流的文生视频应该还是Diffusion-based 基于扩散模型的方法这篇综述将现有研究按照三个维度进行分类&#xff1a;进化生成器&#xff08;Evolutionary Generators&#xff09;、卓越追求&#xff08;Excellent Pursuit&#xff09;、现实全景&#xff08;Realis…

LeetCode讲解篇之75. 颜色分类

文章目录 题目描述题解思路题解代码 题目描述 题解思路 我们可以将最终结果看成连续的三个区间&#xff0c;第一个区间内全是0&#xff0c;第二个区间内全是1&#xff0c;第三个区间内全是2 &#xff0c;其中这三个区间的长度都可以为0 我们可以将不断扩张 我们记录0区间的右…

滴滴开源项目分享来啦~

活动&#xff1a;参与开源项目&#xff0c;获得精美礼品 活动时间&#xff1a;2024年09月23-2024年10月23 活动详情请查看&#xff1a; ❤️&#x1f31f; Who is using XIAOJUSURVEY&#xff1f; Issue #64 didi/xiaoju-survey GitHub 活动奖品&#xff1a; ​ 不管你是…

基于单片机多点无线温度监控系统设计

本设计STC89C52RC单片机作为主控芯片&#xff0c;能够远程监控多个位置的温度变化。使用一个主机来接收和监控三个从机收集到的温度信息&#xff0c;利用DS18B20温度传感器采集温度信息&#xff0c;采用GL24S无线通讯模块将数据传输给主机进行接收&#xff0c;信息显示在主机连…

DesignMode__unity__抽象工厂模式在unity中的应用、用单例模式进行资源加载

目录 抽象工厂模式 思维导图 接口&#xff08;抽象类&#xff09; 工厂接口 抽象产品类 抽象武器接口 抽象人物接口 具体工厂和具体产品 具体工厂 &#xff08;1&#xff09;产品接口&#xff0c;生成具体人物 &#xff08;2&#xff09;武器接口&#xff0c;生成具体…

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(五)-聚合

聚合 聚合基于Query结果的统计&#xff0c;执行过程是搜索的一部分&#xff0c;Onesearch支持0代码构建聚合&#xff0c;聚合目前完全在引擎层 0代码聚合 上图是聚合的配置&#xff0c;包括2个pdm文档聚合统计 termsOfExt term桶聚合&#xff0c;统计ext&#xff0c;如&…

JavaWeb——前端工程化(3/3):Vue项目开发流程(index.html、main.js和根组件之间的联系)

Vue项目开发流程 上篇我们介绍了工程化的 Vue 项目&#xff0c;将 Vue 项目启动起来并访问到了首页面。接下来&#xff0c;我们来分析如何访问到 Vue 项目的首页面&#xff0c;也就是 Vue 项目的开发流程。 现在访问的页面是 Vue 项目默认的首页 index.html&#xff0c;它是在…

Linux系统安装Julia语言并在VS Code中进行配置

Julia是一种专为科学计算而生的高级编程语言&#xff0c;具有开源、多平台、高性能的特点。Julia结合了动态语言的易用性与编译语言的速度&#xff0c;部分归功于其基于LLVM的JIT编译器&#xff0c;能够生成高效的本地代码。这使得Julia在许多情况下能够拥有与编译型语言&#…

56 mysql 用户权限相关的实现

前言 这里讨论 mysql 的权限相关处理 使用如下语句创建 tz_test 用户, 并赋予他 test_02 数据库的查询权限 create user tz_test% identified by tz_test; grant select on test_02.* to tz_test%; 查询目标数据表, 数据如下, tz_test_02 UPDATE command denied to user …

Centos 8安装VNC及多用户配置详细教程

Centos 8安装VNC及多用户配置详细教程 参考一、安装前准备二、安装三、创建新用户和设置VNC密码四、创建VNC系统服务文件五、多用户映射和配置VNC六、客户端用VNC Viewer登录 参考 1、参考1&#xff1a; VNC安装英文说明&#xff08;英文说明有误且仅适合单用户&#xff09;&a…

乌克兰因安全风险首次禁用Telegram

据BleepingComputer消息&#xff0c;乌克兰国家网络安全协调中心 &#xff08;NCCC&#xff09; 以国家安全为由&#xff0c;已下令限制在政府机构、军事单位和关键基础设施内使用 Telegram 消息应用程序。 这一消息通过NCCC的官方 Facebook 账号对外发布&#xff0c;在公告中乌…

java并发之并发理论

并发理论 Java 内存模型 Java 内存模型&#xff08;即 Java Memory Model&#xff0c;简称 JMM&#xff09;试图屏蔽各种硬件和操作系统的内存访问差异&#xff0c;以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。 本身是一种抽象的概念&#xff0c;并不真实存在&…

【第十二章:Sentosa_DSML社区版-机器学习之回归】

目录 12.1 线性回归 12.2 决策树回归 12.3 梯度提升决策树回归 12.4 保序回归 12.5 XGBoost回归 12.6 随机森林回归 12.7 广义线性回归 12.8 LightGBM回归 12.9 因子分解机回归 12.10 AdaBoost回归 12.11 KNN回归 12.12 高斯过程回归 12.13 多层感知机回归 【第十…

vue Echart使用

一、在vue中使用Echarts 1.安装Echarts npm install echarts --save2.准备一个呈现图表的盒子 给盒子起名字是建议使用id选择器 这个盒子通常来说就是我们熟悉的 div &#xff0c;这个 div 决定了图表显示在哪里&#xff0c;盒子一定要指定宽和高 <div id"main&quo…