ubuntu22.04@Jetson OpenCV安装
ubuntu22.04@Jetson OpenCV安装
- 1. 源由
- 2. 分析
- 3. 证实
- 3.1 jtop安装
- 3.2 jtop指令
- 3.3 GPU支持情况
- 4. 安装OpenCV
- 4.1 修改内容
- 4.2 Python2环境【不需要】
- 4.3 ubuntu22.04环境
- 4.4 国内/本地环境问题
- 4.5 cudnn版本问题
- 5. 总结
- 6. 参考资料
1. 源由
昨天用Jetson跑demo程序发现帧率很慢(只有10FPS左右),按照视频文件怎么说应该有30FPS。但是为什么jetson orin nano跑不起来呢???
dnn_object_detection_embedded_device
想着,估计是GPU没有跑起来,正好凑着调试了下板子,记录、整理下资料。
2. 分析
从现象上看,OpenCV运行的时候没有跑GPU,从而导致高价买的Jetson Orin Nano连这么简单的Demo都跑不起来。
接下来,就先看下板子运行的环境:
- ubuntu22.04/jammy/aarch64
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.4 LTS
Release: 22.04
Codename: jammy$ uname -a
Linux daniel-nvidia 5.15.122-tegra #1 SMP PREEMPT Mon Dec 18 21:24:25 PST 2023 aarch64 aarch64 aarch64 GNU/Linux
- OpenCV版本:4.8.0
$ opencv_version
4.8.0$ python3
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> print(cv2.__version__)
4.8.0
>>>
- 安装最新OpenCV4.9.0版本
- 与之前《ubuntu22.04@laptop OpenCV安装》版本一致
- 安装或者升级Jetson Orin Nano上OpenCV4.8.0版本
- 官方论坛讨论:NVIDIA: install OpenCV for python3 in Jetson Nano
- Google的网上资料:Install OpenCV on Jetson Nano
- Google的教学视频
OpenCV with CUDA in Python on Jetson
3. 证实
要正式是否真的是OpenCV库对GPU的支持问题导致前面验证FPS帧率低,那么就需要通过jtop指令来查看。
有朋友问:你怎么知道的这些?
Ans: 其实我并不知道,是我搜出来的。其实就这么简单,并不是我知道的多,是网上这些问题很多人都已经早就解决了。即使真的有没有人解决的,那么也是有办法的,只不过思路和这个不太一样。
- NVIDIA: Jtop install fail
- NVIDIA: Where can I find these numbers in CUDA_ARCH_BIN?
- NVIDIA: Your GPU Compute Capability
- NVIDIA: OpenCV build script
3.1 jtop安装
$ pip3 --version
$ sudo -H pip3 install --no-cache-dir jetson-stats
$ sudo systemctl restart jtop.service
$ sudo reboot
注:一定要重启板子,否则无效。
3.2 jtop指令
$ jtop -h
usage: jtop [-h] [--health] [--error-log] [--no-warnings] [--restore] [--loop] [--color-filter] [-r REFRESH] [-p PAGE] [-v]jtop is system monitoring utility and runs on terminaloptions:-h, --help show this help message and exit--health Status jtop and fix (default: False)--error-log Generate a log for GitHub (default: False)--no-warnings Do not show warnings (default: False)--restore Reset Jetson configuration (default: False)--loop Automatically switch page every 5s (default: False)--color-filter Change jtop base colors, you can use also JTOP_COLOR_FILTER=True (default: False)-r REFRESH, --refresh REFRESHrefresh interval (default: 1000)-p PAGE, --page PAGE Open fix page (default: 1)-v, --version show program's version number and exit
3.3 GPU支持情况
OpenCV: 4.8.0 with CUDA: NO,所以该版本不支持GPU。

4. 安装OpenCV
两个链接脚本供参考安装:
- JetsonHacksNano/buildOpenCV
- mdegans/nano_build_opencv
为了更好的配合我们的例子,就整合到SnapLearnOpenCV/scripts中供大家参考,上述脚本支持:
- 笔记本电脑(64位普通CPU)安装:
install_opencv_for_laptop.sh– ubuntu22.04@laptop OpenCV安装 - AI最火的(Jetson Orin Nano)安装:
install_opencv_for_jetson.sh
4.1 修改内容
$ git diff
diff --git a/build_opencv.sh b/build_opencv.sh
index c12bb40..891eea3 100755
--- a/build_opencv.sh
+++ b/build_opencv.sh
@@ -45,8 +45,8 @@ setup () {git_source () {echo "Getting version '$1' of OpenCV"
- git clone --depth 1 --branch "$1" https://github.com/opencv/opencv.git
- git clone --depth 1 --branch "$1" https://github.com/opencv/opencv_contrib.git
+ git clone --depth 1 --branch "$1" git@github.com:opencv/opencv.git
+ git clone --depth 1 --branch "$1" git@github.com:opencv/opencv_contrib.git}install_dependencies () {
@@ -63,9 +63,8 @@ install_dependencies () {libatlas-base-dev \libavcodec-dev \libavformat-dev \
- libavresample-dev \libcanberra-gtk3-module \
- libdc1394-22-dev \
+ libdc1394-dev \libeigen3-dev \libglew-dev \libgstreamer-plugins-base1.0-dev \
@@ -90,8 +89,6 @@ install_dependencies () {libxvidcore-dev \libx264-dev \pkg-config \
- python-dev \
- python-numpy \python3-dev \python3-numpy \python3-matplotlib \
@@ -103,14 +100,13 @@ install_dependencies () {configure () {local CMAKEFLAGS="-D BUILD_EXAMPLES=OFF
- -D BUILD_opencv_python2=ON-D BUILD_opencv_python3=ON-D CMAKE_BUILD_TYPE=RELEASE-D CMAKE_INSTALL_PREFIX=${PREFIX}-D CUDA_ARCH_BIN=5.3,6.2,7.2,8.7-D CUDA_ARCH_PTX=-D CUDA_FAST_MATH=ON
- -D CUDNN_VERSION='8.0'
+ -D CUDNN_VERSION='8.9'-D EIGEN_INCLUDE_PATH=/usr/include/eigen3-D ENABLE_NEON=ON-D OPENCV_DNN_CUDA=ON
4.2 Python2环境【不需要】
- python2环境:
python-devpython-numpy - OpenCV编译选项:
-D BUILD_opencv_python2=ON
4.3 ubuntu22.04环境
- 无
libavresample-dev库 libdc1394-22-dev变更为libdc1394-dev
4.4 国内/本地环境问题
- 将https链接调整为git库链接
- git clone --depth 1 --branch "$1" https://github.com/opencv/opencv.git
- git clone --depth 1 --branch "$1" https://github.com/opencv/opencv_contrib.git
+ git clone --depth 1 --branch "$1" git@github.com:opencv/opencv.git
+ git clone --depth 1 --branch "$1" git@github.com:opencv/opencv_contrib.git
- git库采用git协议才能下载
$ git config --global "url.ssh://git@ssh.github.com:443/.insteadOf" git@github.com:
4.5 cudnn版本问题
《Linux 36.2@Jetson Orin Nano基础环境构建》安装的是8.9.4.25.
- -D CUDNN_VERSION='8.0'
+ -D CUDNN_VERSION='8.9'
5. 总结
修改完上述脚本后,可以直接执行脚本指令:
$ git clone git@github.com:mdegans/nano_build_opencv.git
$ cd nano_build_opencv
$ nano build_opencv.sh
$ ./build_opencv.sh或者
$ git clone git@github.com:SnapDragonfly/SnapLearnOpenCV.git
$ cd SnapLearnOpenCV/scripts
$ ./install_opencv_for_jetson.sh
大致耗时约1个小时???没有计时,反正也挺快的。执行opencv_version python jtop指令:
$ echo $PATH
/home/daniel/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin$ opencv_version
4.9.0$ python
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> print(cv2.__version__)
4.9.0
>>> $ jtop

最后,关于使用GPU和使用CPU对Demo的影响:
dnn_object_detection_jetson_orin_nano
注:本次环境安装为遇到默认路径导致的优先级问题。
6. 参考资料
【1】ubuntu22.04@laptop OpenCV安装
【2】Linux 36.2@Jetson Orin Nano基础环境构建
【3】ubuntu22.04@laptop OpenCV定制化安装
【4】Github操作网络异常笔记
相关文章:
ubuntu22.04@Jetson OpenCV安装
ubuntu22.04Jetson OpenCV安装 1. 源由2. 分析3. 证实3.1 jtop安装3.2 jtop指令3.3 GPU支持情况 4. 安装OpenCV4.1 修改内容4.2 Python2环境【不需要】4.3 ubuntu22.04环境4.4 国内/本地环境问题4.5 cudnn版本问题 5. 总结6. 参考资料 1. 源由 昨天用Jetson跑demo程序发现帧率…...
OpenGL学习——17.模型
前情提要:本文代码源自Github上的学习文档“LearnOpenGL”,我仅在源码的基础上加上中文注释。本文章不以该学习文档做任何商业盈利活动,一切著作权归原作者所有,本文仅供学习交流,如有侵权,请联系我删除。L…...
6.2 数据库
本节介绍Android的数据库存储方式--SQLite的使用方法,包括:SQLite用到了哪些SQL语法,如何使用数据库管理操纵SQLitem,如何使用数据库帮助器简化数据库操作,以及如何利用SQLite改进登录页面的记住密码功能。 6.2.1 SQ…...
计算机设计大赛 深度学习人体跌倒检测 -yolo 机器视觉 opencv python
0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满…...
本地模拟发送、接收RabbitMQ数据
文章目录 前言一、相关文章二、相关代码1.模拟的 Channel 类2.接收消息3.模拟推送MQ数据前言 日常开发中,当线上RabbitMQ坏境还没准备好时,可在本地模拟发送、接收消息 一、相关文章 Docker安装RabbitMQ 【SpringCloud】整合RabbitMQ六大模式应用(入门到精通) Spring R…...
前端 webSocket 的使用
webSocket使用 注意要去监听websocket 对象事件,处理我们需要的数据 我是放在了最外层的index 内,监听编辑状态,去触发定义的方法。因为我这个项目是组件化开发,全部只有一个总编辑按钮,我只需监听是否触发了编辑即可…...
opencv图像处理(一)
一. OpenCV 简介 OpenCV 是一个跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 应用领域 1、人机互动 2、物体识别 3、图像分割 4、人脸识别 5、动作识别 6、运动跟踪 7、机器人 8、运动分析 9、机器视觉 10、…...
消息队列-RabbitMQ:workQueues—工作队列、消息应答机制、RabbitMQ 持久化、不公平分发(能者多劳)
4、Work Queues Work Queues— 工作队列 (又称任务队列) 的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。我们把任务封装为消息并将其发送到队列,在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作…...
前端秘法基础式(HTML)(第二卷)
目录 一.表单标签 1.表单域 2.表单控件 2.1input标签 2.2label/select/textarea标签 2.3无语义标签 三.特殊字符 一.表单标签 用来完成与用户的交互,例如登录系统 1.表单域 <form>通过action属性,将用户填写的数据转交给服务器 2.表单控件 2.1input标签 type…...
PTA-统计英文字母和数字字符[2]
本题要求编写程序,输入N个字符,统计其中英文字母、数字字符和其他字符的个数。 输入格式: 输入在第一行中给出正整数N,第二行输入N个字符,最后一个回车表示输入结束,不算在内。 输出格式: 在一行内按照 letter 英…...
Elasticsearch:将 IT 智能和业务 KPI 与 AI 连接起来 - 房间里的大象
作者:Fermi Fang 大象寓言的智慧 在信息技术和商业领导力的交叉点,蒙眼人和大象的古老寓言提供了一个富有洞察力的类比。 这个故事起源于印度次大陆,讲述了六个蒙住眼睛的人第一次遇到大象的故事。 每个人触摸大象的不同部位 —— 侧面、象牙…...
基于芯驰 X9HP PTG4.1 在 yocto 中添加 Linux 应用
1.参考例程并添加应用 1.1 参考例程 (1)查看自带的串口测试例程 uart_test ,查看 bb 文件怎么写的。 1.2 添加 printf-test 应用 (1)在 yocto/meta-semidrive/recipes-bsp/ 目录中 copy 自带例程 uart-test 改名为 …...
【微服务安全】OpenID Connect 简介:现代应用程序的身份验证
OpenID Connect (OIDC) 是一个建立在 OAuth 2.0 之上的开放身份验证协议。它简化了应用程序以一种标准化和可互操作的方式验证用户身份并获取其基本个人资料信息的方式。可以将其视为应用程序“知道你是谁”的一种安全方式,而无需你创建单独的帐户或透露你的密码。 …...
Linux系统中HTTP隧道的搭建与配置步骤:穿越网络的“魔法隧道”
在Linux系统中搭建HTTP隧道,就像是开启了一条穿越网络的“魔法隧道”。这条隧道能让你的数据在网络中自由穿梭,无论是远程办公还是数据同步,都能变得轻松自在。下面,就让我们一起探索如何搭建这条神奇的“魔法隧道”吧!…...
fastApi笔记04-查询参数和字符串校验
额外校验 使用Query可以对查询参数添加校验 from typing import Unionfrom fastapi import FastAPI, Queryapp FastAPI()app.get("/items/") async def read_items(q: Union[str, None] Query(defaultNone, max_length50)):results {"items": [{"…...
笔记 记录
前言 个人记录 官网模版 基于 vue2 示例图...
相机图像质量研究(38)常见问题总结:编解码对成像的影响--呼吸效应
系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…...
MQTT协议-ISO标准下基于发布/订阅范式的消息协议
MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件 。 MQTT是一个…...
手动实现new操作符
<script>//前置知识// 每一个函数在创建之初就会有一个prototype属性,这个属性指向函数的原型对象// function abc(){// }// abc.prototype--> {constructor: f}// 在JS中任意的对象都有内置的属性叫做[[prototype]]这是一个私有属性,这个私有属…...
【flutter】环境安装
安装flutter sdk 下载sdk flutter sdk就包含dart,所以我们只用安装flutter sdk就可以了。 我们去清华大学开源软件镜像站下载,flutter开发中,版本对不上基本项目就跑步起来,如果是团队协同开发的话,建议统一下载指定版…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
