基于飞腾平台的OpenCV的编译与安装
【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。 点击这里开始你的技术升级之旅吧
本文分享至飞腾开发者平台《飞腾平台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 硬件环境
硬件环境如下表所示。
项目 | 说明 |
---|---|
CPU | FT-2000/4 |
网络 | 可访问外网 |
存储 | 无要求 |
内存 | 无要求 |
2.2 软件环境
2.2.1 操作系统
操作系统环境如下表所示。
项目 | 说明 |
---|---|
Kylin | V10 |
Kernel | 4.4.131 |
2.2.2 软件环境
软件环境如下表所示。
项目 | 版本 | 下载地址 |
---|---|---|
GCC | 5.4.0 | |
cmake | 3.18.0 | https://github.com/Kitware/CMake/releases/download/v3.18.6/cmake-3.18.0.tar.gz |
OpenCV | 4.4.0 | https://github.com/opencv/opencv/archive/4.4.0.tar.gz |
OpenCV_extra | 4.4.0 | https://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
Note :对于dnn的测试只有卷积计算部分,对于模型的测试需要额外下载相关的模型文件。
4 编译选项说明
本章只列出了OpenCV-4.4.0部分并行化和DNN相关的配置选项,其他选项请查阅参考文献【2】。
4.1 并行化选项
选项 | 默认值 | 平台 | 描述 | |
---|---|---|---|---|
pthreads | WITH_PTHREADS_PF | ON | Unix-like | Default 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. |
TBB | WITH_TBB | OFF | Multiple | Threading Building Blocks is a cross-platform library for parallel programming. |
OpenMP | WITH_OPENMP | OFF | Multiple | OpenMP API relies on compiler support. |
HPX | WITH_HPX | OFF | Multiple | High Performance ParallelX is an experimental backend which is more suitable for multiprocessor environments. |
4.2 GUI选项
选项 | 默认值 | 平台 | 描述 |
---|---|---|---|
WITH_GTK | ON | Linux | GTK 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_WIN32UI | ON | Windows | WinAPI is a standard GUI API in Windows. |
N/A | ON | macOS | Cocoa is a framework used in macOS. |
WITH_QT | OFF | Cross-platform | Qt is a cross-platform GUI framework. |
4.3 深度神经网络相关选项
选项 | 默认值 | 描述 |
---|---|---|
WITH_PROTOBUF | ON | Enables 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_PROTOBUF | ON | Build own copy of protobuf. Must be disabled if you want to use external library. |
PROTOBUF_UPDATE_FILES | OFF | Re-generate all .proto files. protoc compiler compatible with used version of protobuf must be installed. |
OPENCV_DNN_OPENCL | ON | Enable built-in OpenCL inference backend. |
WITH_INF_ENGINE | OFF | Enables 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_RELEASE | 2020040000 | Defines 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_NGRAPH | OFF | Enables 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_CUDA | OFF | Enable CUDA backend. CUDA, CUBLAS and CUDNN must be installed. |
WITH_HALIDE | OFF | Use experimental Halide backend which can generate optimized code for dnn-layers at runtime. Halide must be installed. |
WITH_VULKAN | OFF | Enable experimental Vulkan backend. Does not require additional dependencies, but can use external Vulkan headers (VULKAN_INCLUDE_DIRS). |
WITH_TENGINE | OFF | Enable 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验证:
没有配置成功则无显示.
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和其他飞腾商标均为飞腾信息技术有限公司的商标。
本文档提及的其他所有商标或注册商标,由各自的所有人拥有。
注意
本文档的内容视为飞腾的保密信息,您应当严格遵守保密任务;未经飞腾事先书面同意,您不得向任何第三方披露本文档内容或提供给任何第三方使用。
由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,飞腾在现有技术的基础上尽最大努力提供相应的介绍及操作指引,但飞腾在此明确声明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保证。
本文档中所有内容,包括但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法拥有其知识产权,包括但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面同意,任何人不得擅自使用、修改,复制上述内容。
相关文章:

基于飞腾平台的OpenCV的编译与安装
【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…...

pyside6与协程
目录 一、常见错误 错误一、使用协程函数作为槽函数。 错误二、在Qt循环中创建新的loop 二、解决方法: ①安装库qasync ②修改Qt入口 ③异步槽函数 ④异步函数 ⑤整体示例 一、常见错误 错误一、使用协程函数作为槽函数。 这样是肯定是不行ÿ…...

手机如何五开玩梦幻西游端游?用GameViewer远程手机免费畅玩梦幻西游
用手机就能免费玩梦幻西游端游,还可以随时查看挂机进度! 想要实现这一点,就用网易GameViewer远程,而且不光手机可以玩梦幻西游端游,平板也能免费玩,并为你实现五开玩梦幻西游端游。 那么,通过Ga…...

【笔记】X射线物理基础
一、X射线衍射分析简史 1895年X射线发现 1896 年 2 月对骨折的观察:G.和 E. Frost是第一个使用 X 射线进行医疗用途 1897 年法国海关官员的行李扫描。 X射线衍射理论1 X射线衍射理论2 元素的特征X射线 X射线光电子的应用 电磁波的粒子属性 X射线层析成像法 X-ray…...

Vue3与Flask后端Demo
文章目录 准备工作Flask 后端设置Vue3 前端设置跨域问题测试 准备工作 安装开发环境 安装 Python(推荐 Python 3.8 或更高版本)。安装 Node.js(推荐 LTS 版本)。安装 PyCharm(用于 Flask 开发)和 VSCode&am…...

第一本RAG书籍《大模型RAG实战》出版!
随着ChatGPT的爆火,推动了新一轮的AI技术进步。但大模型自身存在幻觉、知识更新难等问题,阻碍了其直接进行落地应用。RAG(Retrieval-Augmented Generation)技术将LLM与文本信息检索相结合,解决了在一些场景下模型知识不…...

Pandas -----------------------基础知识(四)
自定义函数 Series 加载数据 import pandas as pd df pd.DataFrame({Age: [20, 25, 30, 35, 40]}) df # 目标: 让 Age 列 的每个元素 num1 num2 def add_nums(x,num1,num2):return x num1 num2 df[Age].apply(add_nums,num1 2,num2 3) 法二 df[Age].apply(lambda x ,num1…...

鼎阳加油-IOC关键技术问题的解决记
鼎阳SDS6204示波器EPICS IOC的搭建-CSDN博客 这款示波器在labview下工作的很好,以前搭建逐束团3D系统时连续几个月不间断的工作连接从没断过线,并做过速率测试,单通道时10Hz的波形更新速率都可以达到: 鼎阳SDS6204示波器波形读取…...

【HarmonyOS】TaskPool非阻塞UI
TaskPool方法不会阻塞UI,如果做上传图片的功能加载Loading记得使用TaskPool,Promise、Async/Await都会阻塞UI 【引言】 发现Promise可能会阻塞UI,尝试使用async或await,但发现它们仍然会导致阻塞。后来看到chaoxiaoshu回复的Tas…...

关于使用/bin/sh -c 用于Dockerfile的Entrypoint的问题
问题描述 相同的dockerfile,使用不同的基础镜像制作镜像1号进程不相同 ENTRYPOINT都是: /bin/sh -c pre-start.sh && myblockserver 的形式 就是执行多个命令命令,最后的一个命令是阻塞的 镜像1: 1号进程是 /bin/sh -c pre-start…...

JS---获取浏览器可视窗口的尺寸
innerHeight 和 innerWidth 这两个方法分别是用来获取浏览器窗口的宽度和高度(包含滚动条的) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible&q…...

对抗攻击方法详解:梯度攻击、转移攻击与模型集成攻击
对抗攻击方法详解:梯度攻击、转移攻击与模型集成攻击 近年来,随着深度学习模型在各个领域取得惊人突破,对抗攻击(Adversarial Attack) 逐渐成为研究热点。对抗攻击旨在通过在输入数据上施加精心设计的微小扰动&#x…...

GPU并行效率问题——通过MPS提升GPU计算收益
GPU并行效率问题——通过MPS提升GPU计算收益_gpu mps-CSDN博客...

patch 命令:补丁的应用
一、命令简介 diff 和 patch 是传统的文件比较和应用差异的工具,而 git 是一个更现代、功能更全面的版本控制系统,它内置了 diff 和 patch 的功能,并且提供了更多用于代码管理和协作的高级特性。 diff, patch 和 git 之间的关系…...

仓颉编程语言4,遇到BUG求助
本来准备整仓颉链接Mysql数据库。参考:GitCode - 全球开发者的开源社区,开源代码托管平台 这种方式是拿mysql官方的dll,编译一下,然后再封装成仓颉数据库驱动。这种方式不够逼格,所以准备解析mysql网络协议,从0开始写…...

SpringIOCDI
1.IOC 1.1.IOC概述 IOC: Inversion Of Control,简称IOC,也被称为控制反转。对象的创建权由程序员主动创建转移到容器,由容器创建、管理对象,这种思想称为控制反转。这个容器称为IOC容器或Spring容器被IOC容器创建、管…...

单细胞Seruat和h5ad数据格式互换(R与python)方法学习和整理
SeruatV4数据转化为h5ad格式数据 1、导入(R) rm(list ls()) library(Seurat) library(qs) library(reticulate) library(hdf5r) library(sceasy) library(BiocParallel) register(MulticoreParam(workers 4, progressbar TRUE)) scRNA <- qread("sc_dataset.qs&q…...

分布式难题-三座大山NPC
文章目录 1. 三座大山 NPC 的概念2. NPC 细分理解2.1. Network Delay 网络延迟2.2. Process Pause 进程暂停2.3. Clock Drift 时钟漂移Is the Algorithm Asynchronous? 本文参考: RedLock红锁安全性争论(上) https://martin.kleppmann.com/…...

两个方法教你设置Excel密码,防止修改和复制Excel表格内容
EXCEL是一款功能强大的电子表格软件,广泛用于各个地方。然而,对于一些重要的表格文件需要通过设置密码来限制大就的修改和复制权限。因而,对于一个EXCEL表格,通过密码设置大家有访问表格的权限,但无法修改数据的权限。…...

Java解析Excel文件
目录 背景 技术选型 开源Java框架选型 1. Apache POI 2. EasyExcel 收费Java框架选型 1. Spire.XLS for java 2. Aspose 总结 背景 在低代码产品的研发过程中,为用户提供数据导入导出的能力时,无法避免的就是对EXCEL解析的能力,所以本篇通过介…...

Require:基于雪花算法完成一个局部随机,全局离散没有热点切唯一的数值Id生成器。
【雪花算法】雪花算法(Snowflake Algorithm)是Twitter开源的用于生成唯一ID的算法,它可以在分布式系统中生成唯一的64位长整数ID。这种ID生成方式既保证了趋势递增,又保证了在不同数据中心、不同机器上生成的ID的唯一性。 符号位&…...

libevent - Macro function
TAILQ_INIT /** Tail queue functions.* 尾队列的头结点初始化为空队列。*/ #define TAILQ_INIT(head) do { \(head)->tqh_first NULL; \(head)->tqh_last &(head)->tqh_first; \ } while (/*CONSTCOND*/0)TAILQ_INIT 宏是一个用于初始化尾队列头部…...

408算法题leetcode--第17天
101. 对称二叉树 101. 对称二叉树思路:递归,对称即两个子树的左边和右边分别一样;一个子树是左中右遍历,另一个是右中左遍历;写的时候可以分三步,确定函数参数以及返回类型,确定终止条件&#…...

机器人顶刊IEEE T-RO发布无人机动态环境高效表征成果:基于粒子的动态环境连续占有地图
摘要:本研究有效提高了动态环境中障碍物建模的精度和效率。NOKOV度量动作捕捉系统助力评估动态占用地图在速度估计方面的性能。 近日,上海交通大学、荷兰代尔夫特理工研究团队在机器人顶刊IEEE T-RO上发表题为Continuous Occupancy Mapping in Dynamic …...

spring-boot web + vue
依赖的软件 maven 1. 官网下载zip 文件,比如apache-maven-3.9.9-bin.zip 2. 解压到某个盘符,必须保证父亲目录的名字包含英文,数字,破折号(-) 3. 设置环境变量M2_HOME, 并将%M2_HOME%\bin添加到windown…...

HDFS分布式文件系统01-HDFS架构与SHELL操作
HDFS分布式文件系统 学习目标第一课时知识点1-文件系统的分类单机文件系统网络文件系统分布式文件系统 知识点2-HDFS架构知识点3-HDFS的特点知识点4-HDFS的文件读写流程知识点5-HDFS的健壮性 第二课时知识点1-HDFS的Shell介绍HDFS Shell的语法格式如下。HDFS Shell客户端命令中…...

Go语言流程控制
Go语言流程控制 1.IF-ELSE2.Switch-Caseswitch 语句Type Switch 3.select 语句4.循环语句 1.IF-ELSE Go 编程语言中 if 语句的语法如下: if 布尔表达式 {/* 在布尔表达式为 true 时执行 */ }例如: package mainimport "fmt"func main() {va…...

无人机在救灾方面的应用!
一、灾害监测与评估 实时监测与评估:无人机可以快速到达灾害现场,通过搭载的高清摄像头、红外热成像仪等设备,对灾区进行实时监测和灾情评估。根据捕捉到的受灾范围、火势大小、建筑物损坏情况等关键信息,为救援行动提供决策依据…...

面试知识点总结篇一
一、C语言和C有什么区别 C语言是面向过程,强调用函数将问题分解为多个子任务,按顺序逐步进行。数据和操作分开C则是面向对象,面向对象是一种基于对象和类的编程范式,关注如何利用对象来抽象和模拟现实世界的实体。因此引入了类&a…...

【计算机网络 - 基础问题】每日 3 题(二十五)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…...