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

推荐订阅源

Google Online Security Blog
Google Online Security Blog
博客园_首页
Martin Fowler
Martin Fowler
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
WordPress大学
WordPress大学
人人都是产品经理
人人都是产品经理
宝玉的分享
宝玉的分享
博客园 - 叶小钗
Jina AI
Jina AI
罗磊的独立博客
Simon Willison's Weblog
Simon Willison's Weblog
Scott Helme
Scott Helme
D
DataBreaches.Net
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Project Zero
Project Zero
Know Your Adversary
Know Your Adversary
博客园 - Franky
AWS News Blog
AWS News Blog
S
Schneier on Security
K
Kaspersky official blog
I
Intezer
P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
L
LINUX DO - 热门话题
GbyAI
GbyAI
月光博客
月光博客
C
Cisco Blogs
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
GRAHAM CLULEY
P
Privacy International News Feed
P
Privacy & Cybersecurity Law Blog
Hugging Face - Blog
Hugging Face - Blog
P
Proofpoint News Feed
T
Tor Project blog
F
Fortinet All Blogs
博客园 - 三生石上(FineUI控件)
T
Threat Research - Cisco Blogs
IT之家
IT之家
H
Hackread – Cybersecurity News, Data Breaches, AI and More
H
Help Net Security
S
Security Affairs
V
Visual Studio Blog
C
CERT Recently Published Vulnerability Notes
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News
S
SegmentFault 最新的问题
MongoDB | Blog
MongoDB | Blog
T
Troy Hunt's Blog

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 RVA23 包含了什么 | See you soon Rust 的边界检查是否已经有很大的进步 | See you soon 使用 Rust 编写操作系统:Barebones | See you soon 使用 Rust 编写操作系统:引言 | See you soon 编译器笔记:rope | See you soon 编译器笔记:CST | See you soon Paradoxical 札记 | See you soon 简单的相似去重算法(基于向量) | See you soon 更加现代的 PaperMC Minecraft 插件设计指南 | See you soon 简单的 CFG 语法分析方法 | See you soon 简单地使用 Caddy 实现 CORS 配置 | See you soon 让 OpenCV 可以被静态链接 | See you soon 图片搜索笔笺 | See you soon 电路板设计笔记-保护 | See you soon 使用 Rust 实现 SnowflakeId | See you soon 农夫乐事 FaQ 启示 | See you soon 使用 Rust 实现拓展系统札记 | See you soon 遗传学定律的代码实现 | See you soon EN:The Journey of Rust and Procps | See you soon ZH:Rust 与 Procps 之旅 | See you soon 使用 debootstrap 与 schroot 构建一个纯净环境 | See you soon GPG添加新的用户信息 | See you soon GSoC2024 笔记:使用 Rust 重新实现 procps | See you soon JWT 小册 | See you soon 使用密钥登录 SSH | See you soon Guava:Cache | See you soon 编译器笔记:增量编译 | See you soon Gradle秘境:添加一个类似modCompileOnly的依赖块 | See you soon Minecraft:原始经济系统设计简述 | See you soon TinyRemapper笔记 | See you soon MicroOS:进阶 | See you soon MicroOS:起步 | See you soon Swapfile 指北 | See you soon GPG 物理密钥的安装与密钥的迁移 | See you soon 用GPG签名告诉大家这就是我的提交 | See you soon DFS:深度优先搜索 | See you soon 文章翻译:从init.vim到init.lua | See you soon 目录遍历攻击 | See you soon 如何挂载.img文件,以及如何使用QEMU模拟arm64环境 | See you soon 关于卸载BlueStacks后遇到的问题 | 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