Linux 35.6 + JetPack v5.1.4@python opencv安装

news/2024/11/17 5:50:55/

Linux 35.6 + JetPack v5.1.4@python opencv安装

  • 1. 源由
  • 2. 步骤
    • Step 1: 检查现有 OpenCV 安装路径
    • Step 2: 编译 OpenCV 并安装
    • Step 3: 替换现有的 OpenCV
    • Step 4: 设置环境变量
    • Step 5: 验证替换后的 OpenCV
    • Step 6: 可能的其他问题
  • 3. 验证

1. 源由

为了使得python下的opencv代码使用到GPU的性能,增加处理速率,减少延时,发挥Jetson Orin板子的性能。

  • 主要目的:为了使用python处理抖动视频,做一些实时防抖处理。

2. 步骤

以下是替换 OpenCV 的步骤:

Step 1: 检查现有 OpenCV 安装路径

在终端或 Python 环境中检查当前 OpenCV 的版本及安装路径:

$ python3 -c "import cv2; print('OpenCV 版本:', cv2.__version__); print('OpenCV 路径:', cv2.__file__)"

这将输出当前使用的 OpenCV 路径,例如:

OpenCV 版本: 4.5.3
OpenCV 路径: /usr/local/lib/python3.8/dist-packages/cv2/python-3.8/cv2.cpython-38-x86_64-linux-gnu.so

注:记下路径,稍后需要清理或替换它。

Step 2: 编译 OpenCV 并安装

  • (1) 下载 OpenCV 源码
    从 OpenCV GitHub 获取源码:
$ git clone https://github.com/opencv/opencv.git
$ git clone https://github.com/opencv/opencv_contrib.git  # 可选,包含扩展模块
  • (2) 使用 CMake 配置编译参数
    进入 OpenCV 源码目录并创建构建文件夹:
$ cd opencv
$ mkdir build && cd build

配置 CMake:

cmake -D CMAKE_BUILD_TYPE=Release \-D CMAKE_INSTALL_PREFIX=/usr/local \-D WITH_CUDA=ON \-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \-D PYTHON_EXECUTABLE=$(which python3) \..

注:其他编译选项,请保持原来配置情况。

  • (3) 编译和安装
make -j$(nproc)
sudo make install
sudo ldconfig  # 刷新动态链接库

编译完成后,OpenCV 会被安装到 /usr/local

Step 3: 替换现有的 OpenCV

  • (1) 删除旧版本 OpenCV
    根据前面检查到的路径,删除旧版本的 OpenCV:
sudo pip uninstall opencv-python opencv-contrib-python
sudo rm -rf /usr/local/lib/python3.x/dist-packages/cv2  # 根据版本修改路径
sudo rm -rf /usr/lib/python3.x/site-packages/cv2
  • (2) 链接新的 OpenCV
    编译好的 OpenCV 通常安装在 /usr/local/lib/python3.x/site-packages 或类似路径。将其链接到当前的 Python 环境:
cd /usr/local/lib/python3.x/site-packages  # 替换为实际路径
sudo ln -s /usr/local/python/cv2/python-3.8/cv2.cpython-38-x86_64-linux-gnu.so cv2.so

Step 4: 设置环境变量

确保动态链接库和 Python 环境能正确加载新编译的 OpenCV。

  • (1) 配置 LD_LIBRARY_PATH
    ~/.bashrc 中添加:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

然后刷新配置:

source ~/.bashrc
sudo ldconfig
  • (2) 检查 Python 模块路径
    确保 Python 能加载新的 OpenCV 模块:
python3 -c "import cv2; print(cv2.__file__)"

输出应该是新编译的路径,例如:

/usr/local/lib/python3.8/site-packages/cv2.cpython-38-x86_64-linux-gnu.so

Step 5: 验证替换后的 OpenCV

运行以下代码测试 OpenCV 是否正常工作:

python">import cv2
print("OpenCV 版本:", cv2.__version__)
print("CUDA 是否支持:", cv2.cuda.getCudaEnabledDeviceCount() > 0)

如果 OpenCV 版本正确且支持 CUDA,则替换成功。

Step 6: 可能的其他问题

  • 如果 Python 环境中无法识别 OpenCV
    确保 OpenCV 的 .so 文件在 Python 的 sys.path 中。可运行以下代码检查:

    python">import sys
    print(sys.path)
    
  • 动态库冲突
    如果多个 OpenCV 动态库存在,可能需要删除 /usr/lib 中的旧版本动态库或检查 LD_LIBRARY_PATH

3. 验证

上述步骤,非常适合开发人员,但是对于一般用户不是很友好。因为OpenCV编译本身就有不少配置选项,不同的设置可能都会有不同的应用场景。

而且将自己编译的 OpenCV 替换为系统默认的 OpenCV 或 Python 环境中现有的 OpenCV,需要正确配置环境路径和库加载顺序。

为了更好的上手 OpenCV 在Jetson Orin板子上的应用,我们提供了大量简单且使用的日志记录供大家参考:

【1】ubuntu22.04@Jetson Orin Nano之OpenCV安装
【2】ubuntu22.04@laptop OpenCV定制化安装
【3】ubuntu22.04@laptop OpenCV安装

根据以上 python 的 OpenCV 安装,对脚本进行了修正add python opencv build support for jetson,大家可以一键安装!

  • 步骤
$ git clone git@github.com:SnapDragonfly/SnapLearnOpenCV.git
$ cd SnapLearnOpenCV/scripts
$ sudo ./install_opencv_for_jetson.sh

注1:如果没有注册做github账号,请使用git clone https://github.com/SnapDragonfly/SnapLearnOpenCV.git
注2:整个过程比较耗时,估计在2小时以上,请耐心等待。

  • 安装前
$ python3 -c "import cv2; print('OpenCV 版本:', cv2.__version__); print('OpenCV 路径:', cv2.__file__)"
OpenCV 版本: 4.10.0
OpenCV 路径: /home/daniel/.local/lib/python3.8/site-packages/cv2/__init__.py$ python3 -c "import cv2; print('OpenCV 版本:', cv2.__version__); print('CUDA 是否支持:', cv2.cuda.getCudaEnabledDeviceCount() > 0)"
OpenCV 版本: 4.10.0
CUDA 是否支持: False
  • 安装后
$ python3 -c "import cv2; print('OpenCV 版本:', cv2.__version__); print('OpenCV 路径:', cv2.__file__)"
OpenCV 版本: 4.9.0
OpenCV 路径: /usr/local/lib/python3.8/dist-packages/cv2/__init__.py$ python3 -c "import cv2; print('OpenCV 版本:', cv2.__version__); print('CUDA 是否支持:', cv2.cuda.getCudaEnabledDeviceCount() > 0)"
OpenCV 版本: 4.9.0
CUDA 是否支持: True

http://www.ppmy.cn/news/1547650.html

相关文章

智能算法引领金融创新:正大科技的智能分析框架

金融行业的智能化浪潮,推动了算法在投资分析中的深度应用。正大科技依托智能算法,构建了一套涵盖数据采集、分析和优化的智能分析框架,帮助投资者在瞬息万变的市场中作出更明智的决策。本文将解析正大科技如何利用智能算法实现市场洞察&#…

【SQL】双层嵌套< exists not exists >

EXISTS 运算符 EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。 语法 SELECT column_name(s) FROM table_name WHERE EXISTS (SELECT column_name FROM table_name WHERE condition);实例1 查找总访问量…

利用云计算实现高效的数据备份与恢复策略

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 利用云计算实现高效的数据备份与恢复策略 利用云计算实现高效的数据备份与恢复策略 利用云计算实现高效的数据备份与恢复策略 引…

数字IC后端低功耗设计实现案例分享(3个power domain,2个voltage domain)

下图所示为咱们社区T12nm A55低功耗实现项目。其实这个项目还可以根据产品的需求做一些改进。改进后项目实现的难度会大大增加。也希望通过今天的这个项目案例分享,帮助到今年IC秋招的同学。 芯片低功耗设计实现upf编写指南(附低功耗项目案例&#xff0…

接上篇-使用 element-plus 优化UI界面

使用 element-plus 可以让我们更容易创建一个精美且功能丰富的UI界面。接下来,我们将优化 GroupManagement.vue 组件,使用 element-plus 的表格、按钮、对话框等组件来实现一个更专业的小组管理页面。 优化后的 GroupManagement.vue 代码 1. 安装 elem…

跳房子(弱化版)

题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一。 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一条直线上。每个格子内…

vector容器的学习

1.vector的介绍和使用 1.1vector的介绍 vector的介绍文档:cplusplus.com/reference/vector/vector/ 使用STL的三个境界:能用,明理,能扩展、那么我们接下来就学习vector,我们也将按照这个方法来学习。 1.2vector的使…

在连锁零售行业中远程控制软件的应用

在连锁零售行业,远程控制软件正逐渐成为提高效率和降低成本的重要工具。作为零售经理,您可能已经注意到这种技术带来的变化。试想一下,无论您身在何处,都可以实时监控商店的运营情况,甚至在远离的地方解决顾客的问题。…