ARM-Linux 开发板下安装编译 OpenCV 和 Dlib

安装 OpenCV 和 Dlib 不像在 x86 平台下那样简单,用一句命令就可以自动安装完。而在 ARM 平台中许多软件都需要自行下载编译,且还有许多问题,本篇文章就是记录在 ARM 平台下载 OpenCV 踩过的坑。

硬件环境:

RK3568 + Ubuntu20.04。

安装 OpenCV

1、安装 OpenCV 需要的依赖库。

先添加源,以防安装 libjasper-dev 依赖包会有出现问题。

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo add-apt-repository "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe"sudo apt update

安装需要的依赖库。

sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config \libavcodec-dev libavformat-dev libswscale-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev \libeigen3-dev libtheora-dev libvorbis-dev libxvidcore-dev \libx264-dev libgtk-3-dev libtesseract-dev libopenblas-dev \liblapack-dev libatlas-base-dev gfortran libprotobuf-dev \protobuf-compiler libgoogle-glog-dev libgflags-dev libhdf5-dev \liblmdb-dev libsnappy-dev python3-dev python3-numpy python3-pip

修复软件包依赖问题。

sudo apt install -f

 如果在添加源后安装 libjasper-dev 包还是出现了问题,就在输入 apt install -f 后再重新安装。

2、下载源码

除了下载 OpenCV 源码,还需要下载 opencv_contrib 源码,里面提供了许多额外的功能和工具,用于扩展 OpenCV 库的功能。这个模块中包含了一些实验性质的特征、算法、工具和模块,这些功能通常不包含在核心的 OpenCV 库中。

OpenCV

opencv_contrib

OpenCV 和 opencv_contrib 源码的版本需要一致,不然可能会出现问题。如果需要在 Python 环境中使用 OpenCV,还需要看一下 Python 版本和 OpenCV 版本的对应关系。作者使用的 Python 版本是 3.8.9,下载的 OpenCV 和 opencv_contrib 的版本是 4.2.0,选择合适的版本下载。

3、编译安装

将 OpenCV 和 opencv_contrib 的源码拷贝到开发板中,任意位置都行,然后使用命令解压压缩包。

进入opencv-4.2.0 目录下,并且创建一个 build 目录,然后进去 build 目录下。

#配置编译选项
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/topeet/OpenCV/opencv_contrib-4.2.0/modules -D BUILD_opencv_python3=ON -D PYTHON3_EXECUTABLE=$(which python3) -D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") -D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") -D WITH_GTK_2_X=ON -D WITH_OPENGL=ON ..#编译
​​​​​​​make -j$(nproc)#安装
make install

配置编译选项记得改一下 opencv_contrib  的路径。因为是在开发板上编译,所以过程有点久,然后就是编译过程中会出现编译失败,主要就是下面这两个问题,解决后重新编译即可。

安装 OpenCV 时提示缺少 boostdesc_bgm.i 文件的问题解决方案:

这个报错就是 opencv_contrib 中缺少一些文件,按照下面这位博主的方法解决。

安装OpenCV时提示缺少boostdesc_bgm.i文件的问题解决方案

安装 OpenCV 时提示缺少 test_detectors_regression.imp.hpp 文件的问题解决方案:

这个报错同样也是  opencv_contrib 中缺少一些文件,解决方法是:

opencv-4.2.0/modules/features2d/test/ 目录下面的 5 个文件

拷贝到 opencv_contrib-4.2.0/modules/xfeatures2d/test/ 目录下

test_descriptors_invariance.impl.hpp
test_descriptors_regression.impl.hpp
test_detectors_invariance.impl.hpp
test_detectors_regression.impl.hpp
test_invariance_utils.hpp

 同时,修改 opencv_contrib-4.2.0/modules/xfeatures2d/test/test_features2d.cpp 文件里头文件的路径。

#include "features2d/test/test_detectors_regression.impl.hpp"
#include "features2d/test/test_descriptors_regression.impl.hpp"

修改成下面这样。 

修改 opencv_contrib-4.2.0/modules/xfeatures2d/test/test_rotation_and_scale_invariance.cpp 文件里头文件的路径。 

#include "features2d/test/test_detectors_invariance.impl.hpp"
#include "features2d/test/test_descriptors_invariance.impl.hpp"

修改成下面这样。 

 4、环境配置

输入以下命令进行环境配置。

#进入配置文件
sudo vim /etc/ld.so.conf#在配置文件末尾另起一行加上
/usr/local/lib#更新环境配置
sudo /sbin/ldconfig

安装 Dlib

1、安装 bootst 

sudo apt-get install libboost-all-dev

2、下载源码

从 GitHub 上下载 Dlib 源码,拷贝到开发板上进行解压。

3、编译安装

进入Dlib 目录下,并且创建一个 build 目录,然后进去 build 目录下。

#编译
sudo cmake .. -DDLIB_USE_CUDA=0 -DUSE_AVX_INSTRUCTIONS=1
cmake --build .#安装
cd ..  //返回上一级目录
sudo python setup.py install --no DLIB_USE_CUDA

4、测试

在 Python 环境下输入

import cv2
cv2.__version__

 输入 pip3 list 查看 Dlib 的版本。

好了,以上就是在 ARM 平台安装 OpenCV 和 Dlib 的过程,有任何建议和疑问欢迎在评论区中提出来嗷。 

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

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

相关文章

全国大学生数学建模大赛备赛——相关系数的求解(皮尔逊(pearson)、斯皮尔曼(spearman)、肯德尔(kendall)相关系数)

相关系数是用来衡量两个变量之间线性相关程度的指标。它的取值范围在-1到1之间,当相关系数为1时表示两个变量完全正相关(即一个变大另一个也变大),当相关系数为-1时表示两个变量完全负相关(即一个变大另一个变小&#…

定制 Elasticsearch 镜像

安装ik分词器 下载ik分词器 下载地址:https://github.com/infinilabs/analysis-ik/releases Dockerfile FROM docker.elastic.co/elasticsearch/elasticsearch:8.12.2 COPY ./elasticsearch-analysis-ik-8.12.2.zip /opt/ RUN bin/elasticsearch-plugin instal…

国产DSP FT-M6678开发-网络开发

简介 今天准备调试FT-M6678的网络部分,参考例程是《3. FT-M6678 Project\1. FT-M6678 接口驱动函数\13. GMAC\NDK 协议栈工程-V7.1\03应用例程\UDP\DSP端应用程序\DSP_UDP_Test_V7》,首先参照文档将NDK使用官方提供的NDK进行替换: 将D:\ti\pdk_C667…

FMEA助力新能源汽车行业腾飞:安全、效率双提升

随着新能源汽车市场的迅猛发展,各大车企纷纷加大研发力度,力求在激烈的市场竞争中脱颖而出。其中,FMEA(故障模式与影响分析)作为一种先进的质量管理工具,正被越来越多地应用于新能源汽车的研发和生产过程中…

深度学习pytorch——链式法则(Chain rule)(持续更新)

这篇文章将会以深度学习的角度解析链式法则。 基本的求导法则 高中的时候就学过,大学高数也巩固了一遍,这里不再赘述。 深度学习中的链式法则 为什么要讲述深度学习中的链式法则? 通过链式法则,我们可以得到中间层信息&#x…

unbantu Apache的基本配置与配置静态资源访问

目录 前言: 1.Apache介绍 2.安装Apache 3. 测试Apache服务是否启动成功 3.1配置Servername 3.2重启服务 4.配置Apache主页面 5. 配置静态的资源 6.为静态资源设置访问权限(基于源地址) 致谢: 前言: 此博客是基于unbantu的Apache服务的详细解析,在这片博…

Elasticsearch面试系列-03

1. Elasticsearch 中 refresh 和 flush 有什么区别? 整体流程: 1、数据写入buffer缓冲和translog日志文件中。当写一条数据document的时候,一方面写入到mem buffer缓冲中,一方面同时写入到translog日志文件中。 2、buffer满了或者每隔1秒(可配),refresh将mem buffer中的…

34 | 到底可不可以使用join?

在实际生产中,关于 join 语句使用的问题,一般会集中在以下两类: 1. 我们 DBA 不让使用 join,使用 join 有什么问题呢? 2. 如果有两个大小不同的表做 join,应该用哪个表做驱动表呢? 今天这篇文…

【算法刷题 | 二叉树 02】3.21 二叉树的层序遍历01(5题:二叉树的层序遍历、层序遍历||、右视图、层平均值,以及N叉树的层序遍历)

文章目录 5.二叉树的层序遍历5.1 102_二叉树的层序遍历5.1.1问题5.1.2解法:队列 5.2 107_二叉树的层序遍历||5.2.1问题5.2.2解法:队列 5.3 199_二叉树的右视图5.3.1问题5.3.2解决:队列 5.4 637_二叉树的层平均值5.4.1问题5.4.2解决&#xff1…

.NET Core 服务实现监控可观测性最佳实践

前言 本次实践主要是介绍 .Net Core 服务通过无侵入的方式接入观测云进行全面的可观测。 环境信息 系统环境:Kubernetes编程语言:.NET Core ≥ 2.1日志框架:Serilog探针类型:ddtrace 接入方案 准备工作 DataKit 部署 DataK…

4核16G服务器租用优惠价格,26.52元1个月,半年149元

阿里云4核16G服务器优惠价格26.52元1个月、79.56元3个月、149.00元半年,配置为阿里云服务器ECS经济型e实例ecs.e-c1m4.xlarge,4核16G、按固定带宽 10Mbs、100GB ESSD Entry系统盘,活动链接 aliyunfuwuqi.com/go/aliyun 活动链接打开如下图&a…

ZHUTI主提2024夏季系列 —「逐·行」

ZHUTI主提全新发布2024夏季「逐行」系列,聚焦当下人与自然的关系,以衣为载体,秉承东方哲学的艺术理念,将美学艺术与主流时尚设计融合,赋予当代时装表达新方向,共创现代女性之美。 取自然之意境&#xff0c…

list.sort()Collections.sort()深入理解

list.sort()&&Collections.sort() 文章目录 list.sort()&&Collections.sort()背景相关代码代码一代码二 原理举一反三 业务场景考虑 背景 业务中经常用到List的sort()方法,但是对于其中return的-1,0,1理解不到位&#xff0c…

蓝桥杯 2022 省B 李白打酒加强版

这题用递归暴力的方法如下&#xff1a; #include<iostream> #include<bits/stdc.h> using namespace std; int num; int N,M; void dfs(int now,int n,int m) {if(now<0 || n>N ||m>M)return ;if(nN && mM){if(now1)num1;return;}dfs(now-1,n,m1…

微服务day05(下) -- ES文档操作 + RestApi + RestClient操作文档

3.1.新增文档 语法&#xff1a; POST /索引库名/_doc/文档id {"字段1": "值1","字段2": "值2","字段3": {"子属性1": "值3","子属性2": "值4"},// ... } 示例&#xff1a; # 插…

内网使用rustdesk进行远程协助

文章目录 前言一、搭建rustdesk中继服务器二、搭建文件下载服务器三、创建引导脚本四、使用 前言 内网没有互联网环境&#xff0c;没法使用互联网上有中继服务器的远程协助工具&#xff0c;如teamviewer、todesk、向日癸等&#xff1b;在内网进行远程维护可以自己搭建中继服务…

网络基础「HTTP」

&#x1f52d;个人主页&#xff1a; 北 海 &#x1f6dc;所属专栏&#xff1a; Linux学习之旅、神奇的网络世界 &#x1f4bb;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 1.再谈协议1.1.认识URL1.2.Encode 和 Decode 2.HTTP 协议2.1.协议格式2.2.见一见请求2.…

OpenAI GPT商店面临质量与合规问题;黄仁勋预测:十年内AI将实时生成游戏画面

&#x1f989; AI新闻 &#x1f680; OpenAI GPT商店面临质量与合规问题 摘要&#xff1a;OpenAI旗下的GPT商店因存在大量涉嫌侵权内容、助长学术不诚实行为及违规内容等问题而引起关注。其中包括未经授权使用迪士尼、漫威角色生成内容的GPT模型&#xff0c;以及声称能绕过剽…

HCIP的学习(3)

网络类型及数据链路层协议 网络类型分类 P2P网络----点到点网络类型MA网络-----多点接入网络 BMA----广播型多点接入网络NBMA—非广播型多点接入网络&#xff08;快淘汰了&#xff09; 数据链路层协议 MA网络 以太网协议 特点&#xff1a;需要使用MAC地址对设备进行区分…

Java安全 反序列化(5) CC6链原理分析

Java安全 反序列化(5) CC6链原理分析 CC6学习的目的在于其可以无视jdk版本&#xff0c;这条链子更像CC1-LazyMap和URLDNS链子的缝合版 文章目录 Java安全 反序列化(5) CC6链原理分析前言一.CC6的原理和实现以及易错点我们如何实现调用LazyMap.get()方法一个易错点 二.完整CC6P…