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

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

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.gztar zxf opencv_extra-4.4.0.tar.gz

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

cd opencv-4.4.0mkdir buildcd buildcmake -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 -j4make install \#默认安装到 /usr/local/目录下#或者下列方式,去掉strip信息cmake --build . --target install/strip

  第五步 配置

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

在/etc/ld.so.conf/目录下opencv.conf添加  \<path to your OpenCV installed \>到 opencv.confLdconfig

    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.rhkb.cn/news/433451.html

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

相关文章

量化交易backtrader实践(三)_指标与策略篇(1)_指标简介与手工双均线策略

01_指标 指标是一个汉语词语&#xff0c;读音是zhǐ biāo&#xff0c;意思是衡量目标的参数&#xff1b;预期中打算达到的指数、规格、标准&#xff0c;一般用数据表示。 统计学术语 指标是说明总体数量特征的概念及其数值的综合&#xff0c;故又称为综合指标。在实际的统计…

YOLOv7改进之MAE主干: 超强ConvNeXtV2 升级版结构,当MAE+YOLO卷积高效涨点

目录 1,原理概述 2,代码改进 新增一个convnextv2.py文件,增加以下代码 修改部分 第二步:在yolo.py中加入以下代码 然后在 在yolo.py中配置找到./models/yolo.py文件下里的parse_model函数,将类名加入进去 参考代码 YOLOv7网络配置文件 1,原理概述 原文:https://…

openinstall鸿蒙SDK再升级,功能全面支持HarmonyOS NEXT

万众期待的鸿蒙操作系统HarmonyOS NEXT即将发布&#xff0c;国产自主的全场景智能操作系统诞生&#xff0c;将为生态伙伴共创共享创造新蓝海&#xff0c;鸿蒙生态的加速构建&#xff0c;也有望催生出互联网生态的第三极。 作为首批鸿蒙生态伙伴&#xff0c;openinstall在App渠…

这些主流的财务管理软件,你用过哪款?

在当今的商业环境中&#xff0c;财务管理面临着诸多棘手的痛点问题&#xff1a; 数据的准确性与及时性难以保证&#xff0c;手工录入易出错且数据更新常不及时&#xff1b; 预算管理困难重重&#xff0c;编制不合理且执行监控难&#xff1b; 财务风险管控不足&#xff0c;应…

Cannot read properties of undefined (reading ‘upgrade‘)

前端开发工具&#xff1a;VSCODE 报错信息&#xff1a; INFO Starting development server...10% building 2/2 modules 0 active ERROR TypeError: Cannot read properties of undefined (reading upgrade)TypeError: Cannot read properties of undefined (reading upgrade…

k8s中,pod生命周期,初始化容器,容器探针,事件处理函数,理解其设计思路及作用

k8s中&#xff0c;为什么要设计pod 平台直接管理容器不是挺好的吗 为什么要以pod为单位进行管理&#xff0c; 然后把容器放在pod里面 那么有pod和没pod的区别是什么 也就是pod提供了什么作用 这个可以考虑从pod生命周期管理的角度去思考 如图&#xff0c;pod主容器在运行…

无限大薄板的电场

单块无限大薄板两端的电场 单块无限大的薄板&#xff0c;如果上面带有均匀分布的电荷&#xff0c;就会在薄板的两侧产生电场&#xff0c;电场大小与距离平板的位置无关&#xff0c;方向与平板垂直&#xff0c;如果平板带正电荷&#xff0c;则电场方向向外指向两侧&#xff0c;…

【性能优化】低配starRocks常驻内存优化

背景说明 由于服务器的实际资源小于starRocks官方的配置&#xff0c;导致starRocks在无任务的情况下&#xff0c;常驻内存偏高&#xff0c;可用于查询的资源变小。 官方文档 实际部署的集群一般是4C8G和8C16G&#xff0c;be的配置不达标 为了解决单次查询内存不足的问题&…

史上最详细论文word排版格式指导保姆级教学!

一、前言 首先&#xff0c;每个学校的论文排版格式都是不太相同的&#xff0c;但大体上都是相似的。 正常来说&#xff0c;论文的排版操作是十分枯燥并且重复的&#xff0c;但是word中的样式工具使得论文排版会变得容易。 接下来我将以某个学校论文格式要求为例&#xff0c;…

python socket编程

socket socket&#xff08;套接字&#xff09;是进程间通信的工具&#xff0c;好比现实生活中的插座&#xff0c;所有家电想要工作都是基于插座进行&#xff0c;进程之间想要进行网络通信需要socket socket负责进程之间的网络数据传输&#xff0c;好比数据的搬运工 2个进程之…

动态规划入门题目->使用最小费用爬楼梯

1.题目&#xff1a; 2.解析&#xff1a; 做题模式&#xff1a; 步骤一&#xff1a;找状态转移方程 步骤二&#xff1a;初始化 步三&#xff1a;填表 步骤四&#xff1a;返回-> dp[n] dp[i]表示到达 i 位置最小花费 逻辑&#xff1a;要爬到楼顶先找到 i 位置 &#xff0c; 要…

高通Android 12 push framework.jar和service.jar

1、Android framework.jar和service.jar替换注意事项 2、单编 adb push service.jar脚本 如下 adb root adb disable-verity adb remountadb push services.jar system/framework adb push services.jar.prof system/framework adb push oat/arm64/services.art /system/fram…

SpringBoot日志集成-LogBack

Log4J&#xff1a;最早的Java日志框架之一&#xff0c;由Apache基金会发起&#xff0c;提供灵活而强大的日志记录机制JDK自带的日志框架&#xff1a;java.util.logging.Logg&#xff0c;是JDK1.4之后提供的日志API&#xff0c;已淘汰logback&#xff1a; logback一个开源的日志…

delphi制作漂亮的农历窗体(IntraWeb+Layui的完美结合)

delphi制作漂亮的农历窗体&#xff08;IntraWebLayui的完美结合&#xff09; 不需要安装服务器&#xff0c;Apache和IIS都不需要&#xff0c;自带企业级服务器。 运行exe服务器就架好了&#xff0c;直接打开手机浏览器或者电脑浏览器&#xff0c;网页就出来了&#xff0c;如果…

sqli-lab靶场学习(四)——Less11-14(post方法)

前言 第1-10关都是get方法&#xff0c;本关开始进入post方法。其实post也好get也好&#xff0c;本质都差不多&#xff0c;使用的技巧也基本相同。 Less11 第11关打开是一个输入用户名密码的界面 显然登陆对话框会使用post方式提交&#xff0c;这里我们尝试在Username一栏通过…

时序预测 | Python实现KAN+LSTM时间序列预测

时序预测 | Python实现KAN+LSTM时间序列预测 目录 时序预测 | Python实现KAN+LSTM时间序列预测预测效果基本介绍程序设计预测效果 基本介绍 时序预测 | KAN+LSTM时间序列预测(Python) KAN作为这两年最新提出的机制,目前很少人用,很适合作为时间序列预测的创新点,可以结合…

CSS01-语法规范、基础选择器

一、CSS语法规范 示例&#xff1a; 二、CSS的基础选择器 选择器(选择符)就是根据不同需求把不同的标签选出来这就是选择器的作用。 简单来说&#xff0c;就是选择标签用的。 选择器的分类&#xff1a; 1、标签选择器 2、类选择器&#xff08;开发最常用&#xff09; 长字符命名…

误差不到1毫米的WGS84与CGCS2000坐标转换工具

我们在《WGS84与CGCS2000坐标的精密转换方法》一文中为你分享了一个WGS84与CGCS2000坐标的精密转换纯理论性的方法。 现在&#xff0c;再为你分享一个据说是误差不到1毫米的WGS84与CGCS2000坐标的转换工具&#xff0c;请从文末查看该工具的领取方法。 WGS84与CGCS2000坐标转换…

信息学奥赛的最佳启蒙阶段是小学还是初中?

信息学奥赛&#xff08;NOI&#xff09;近年来越来越受家长和学生的关注&#xff0c;尤其是在编程教育不断升温的背景下&#xff0c;信息学竞赛成为了许多家庭的教育选择之一。家长们往往关心的是&#xff1a;孩子应该在什么年龄段开始接触信息学竞赛&#xff0c;才能打下坚实的…

如何让 Android 的前端页面像 iOS 一样“优雅”?

作者:方英杰&#xff08;崇之&#xff09; 最近在调研前端页面适配 Android 端异形屏的方案&#xff0c;调研过程中发现了一些比较有意思的点&#xff0c;本文主要是做一个总结。 一、提出问题 首先&#xff0c;我们需要知道 Android 上的前端适配面临着什么问题。 问题其实很…