惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
IT之家
IT之家
博客园_首页
量子位
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
博客园 - 聂微东
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
Hugging Face - Blog
Hugging Face - Blog
V
V2EX
爱范儿
爱范儿
大猫的无限游戏
大猫的无限游戏
宝玉的分享
宝玉的分享
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News
Microsoft Azure Blog
Microsoft Azure Blog
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
Engineering at Meta
Engineering at Meta
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

See you soon

哟,好久不见,无线打印 | See you soon 试试将文章版本化管理吧 | See you soon 使用 Quadlet 将 Podman 中的 Postgres 当作 systemd 服务运行 | See you soon 大他者,那个无时无刻都在盯着你的东西 | See you soon Laws of Software Engineering,软件工程定律 | See you soon 浅记多因素身份认证 | See you soon Linux 内核中的度量单位 | See you soon 重置 GPG 智能密钥 | See you soon 向 NAS 引入 samba | See you soon 无法重复键入的 Fcitx5 | See you soon ZFS 降级事故 | See you soon 记被 XanMod Kernel 和 AppArmor 联合坑的一次踩坑 | See you soon agent 的 skill 与 toolcall | See you soon 记一次服务器被挂恶意挖矿二进制 | See you soon 活着的 Arc | See you soon 令 acme.sh 使用 Cloudflare 的 DNS API 签发与续签证书 | See you soon 于 Tokio 中卸载 CPU Bound 任务 | See you soon 如我所见,梦破碎的时候 | See you soon 74LS 家族手册 | See you soon JDK Projects 备忘录 | See you soon 关于历史 | See you soon 用 curl 下载 OnePlus 的 ROM | See you soon 实用命令切片 | See you soon 再见,Oh My Zsh。 | See you soon 你不应该复用 strings.Builder | See you soon 博客的明日 | See you soon 被 AppArmor 击杀的 Dockge | See you soon AI 时代的自我 | See you soon 支持删除的布隆过滤器 | See you soon 基于栈的虚拟机与基于寄存器的虚拟机 | See you soon
在树莓派上编译 OpenCV | See you soon
Krysztal Huang · 2021-08-02 · via See you soon

最近由于比赛需要在树莓派上使用 OpenCV,需要编译 OpenCV。所以写了这篇文章方便记忆。

环境

  • RaspberryPi 4 Model B (8GB RAM)
  • Raspbian GNU/Linux 10 (buster) armv7l

考虑到树莓派 4B 性能与上一代相比较更加出色,并且我又懒得在笔记本上进行交叉编译,所以需要选用更加快速的编译方案

OpenCV 官方支持 clang 编译器与 ninja 编译系统。

clang 编译器有着不俗的编译速度,ninja 构建系统编译较为智能快速。

综合思考我决定使用 ninja 作为编译系统,使用 clang 作为编译器

步骤

安装编译依赖

在 OpenCV 的官方文档中写着使用如下命令安装依赖.

另外由于我们使用 clang 编译器与 ninja 构建系统所以我们需要安装 clang,llvm 以及 ninja

sudo aptitude update && sudo apt install -y cmake wget unzip clang llvm ninja-build

得益于 debian 系系统的强大包管理系统,我们可以直接使用 apt 进行编译依赖安装

sudo aptitude build-dep libcv-dev

克隆源码

我们需要克隆两个仓库的源码:core modules 仓库以及 opencv_contrib 仓库。

git clone https://github.com/opencv/opencv.git

git clone https://github.com/opencv/opencv_contrib.git

同时记得检出仓库。

git -C opencv checkout master

git -C opencv_contrib checkout master

另外如果想安装定向版本的话则可以选择检出 tags

git -C opencv checkout <tag>

git -C opencv_contrib checkout <tag>

当然我们这里检出 master 分支就行

新建 build 文件夹

mkdir -p build && cd build

初始化 ninja 构建系统

随后让 cmake 生成 ninja 所使用的文件,让他用 clang 进行编译。

我们这里不让他编译 example,这样编译速度会快不少。

cmake -GNinja \

-D CMAKE_C_COMPILER=clang-9 \

-D CMAKE_CXX_COMPILER=clang++-9 \

-D ENABLE_NEON=ON \

-D ENABLE_VFPV3=ON \

-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ../opencv

但是注意了,其实这里的 neon 指令集是启动失败的

也就是说性能不会太好,目前暂时没有解决方案。

构建与安装

使用如下命令

ninja && sudo ninja install

对,就是如此简单,ninja 自动设置线程数等。成功构建之后自动安装。

大功告成。

同步上游更改

得益于 ninja 的特性,我们可以很方便的同步更改并且增量更新

cd opencv/

git fetch && git pull && cd ../ # 同步上游更改

cd opencv_contrib/

git fetch && git pull && cd ../build # 同步上游更改并且回到 build 文件夹

ninja # 如果需要重新 cmake 的话 ninja 会自动执行,随后执行增量编译

sudo ninja install