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 是否正常工作:
import cv2
print("OpenCV 版本:", cv2.__version__)
print("CUDA 是否支持:", cv2.cuda.getCudaEnabledDeviceCount() > 0)
如果 OpenCV 版本正确且支持 CUDA,则替换成功。
Step 6: 可能的其他问题
-
如果 Python 环境中无法识别 OpenCV
确保 OpenCV 的.so
文件在 Python 的sys.path
中。可运行以下代码检查: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