Opencv Jetson运行失败

目录

1. 问题:

2. 环境

3. 代码

3. 怀疑方向

4. 方向错误(新现象)


1. 问题:

    在一个大型的项目里面,使用了opencv,且自己编译的时候添加了opencv cuda的支持,且编译的是libopencv_world,在一个比较充足资源的机器是能正常运行的:

2. 环境

    内存:32G

    显存:16G或者8G

    但是在Jetson平台只要调用opencv的接口,算法程序就卡住,其他线程运行OK,怀疑是opencv库太大导致的,但是opencv不是使用到哪个函数,才把相应的库加载到物理内存吗?

description: Computer
    product: NVIDIA Jetson Xavier NX Developer Kit
    serial: 1424621088797
    width: 64 bits
    capabilities: smp cp15_barrier setend swp tagged_addr_disabled

Jetson:

    内存:7G(内存显存共用)

3. 代码

仍然是上面的Jetson环境,自己写一个小的Demo,使用opencv库,仍然是上面的libopencv_world库:

cmake_minimum_required(VERSION 3.16)
project(demo)

set(DEPEND_HEADER_DIR /media/workspace/liuyb/opencv4.5.5/include)

set(DEPEND_LIB_DIR /media/workspace/liuyb/opencv4.5.5/arm)
#set(DEPEND_LIB opencv_core opencv_imgproc opencv_highgui opencv_imgcodecs)
set(DEPEND_LIB opencv_world)

LINK_DIRECTORIES(/media/workspace/liuyb/opencv4.5.5/arm)

add_executable (demo main.cpp)

target_include_directories(demo  PUBLIC ${DEPEND_HEADER_DIR})
target_link_libraries(demo PUBLIC ${DEPEND_LIB})
#include 
#include "opencv2/opencv.hpp"
#include 

using namespace std;

int main()
{
    vector data(5000 * 5000, 128);

    cv::Mat cv_src = cv::Mat(5000, 5000, CV_8UC1, data.data());
    cv::Mat cv_dst;
    cv::resize(cv_src, cv_dst, {5000 * 2, 5000});

    cv::imwrite("dst.tif", cv_dst);
    return 0;
}

3. 怀疑方向

编译后,查看应用程序的依赖库:

Opencv Jetson运行失败_第1张图片

 Opencv Jetson运行失败_第2张图片

 Opencv Jetson运行失败_第3张图片

 感觉所有的库都显示依赖了

strace demo查看,好像也将一些没有用的给映射进来了,下面是映射的所有库吗

Opencv Jetson运行失败_第4张图片

这个简单的Demo是能正常运行的,但是那个大型的程序,运行失败,那个程序运行气起来非常消耗内存,是不是因为剩余的可用内存太小,所以导致前面的问题。

Opencv Jetson运行失败_第5张图片

 上面是没有使用opencv时的内存情况

将项目中使用libopencv_world的位置,修改为具体的三个库:

set(DEPEND_LIB opencv_core opencv_imgproc opencv_highgui opencv_imgcodecs)

运行,发现还是不行,可是这三个库的大小加起来也才6M左右,为什么不行呢?

4. 方向错误(新现象)

    前面开始以为是内存不足,但是在另外一台内存很充足(32G)的机器上,运行同样出问题,之前内存很小的平台是无法进行gdb的,这个32G平台可以GDB,且死在了cv::resize的一个cv::Mat初始化的位置

        后来发现,jeston平台是自带opencv的,版本是4.2.0,使用系统自带的opencv库,运行时OK的,但是自己编译的版本(自己本来就是在jetson平台上编译的)就不行,奇怪。

        发现另外一个扩展库IMT.so,也用到的opencv,不过在好的平台(自己编译opencv能正常运行的平台)发现这个扩展库IMT.so和自己的库使用的opencv是同一个版本的,但是在jetson平台,IMT.so使用的是4.2.0版本的库文件,自己使用的仍然是4.5.5的

5. 原因

        根据4中查看到的异常现象,两个库使用的opencv版本不一致,会不会导致这个问题,尝试将库版本统一成4.2.0的(自己编译),为了排除干扰,将系统中的opencv库去掉,编译运行,OK

你可能感兴趣的:(Opencv,opencv,python,人工智能)