【发布时间】:2020-07-24 00:27:05
【问题描述】:
我正在尝试将 OpenCV 链接到暗网目录。 我正在使用 Nvidia Jetson AGX Xavier (Ubuntu 18.04)。直到最近,JetPack 还在 /usr 目录中安装了 OpenCV。使用此配置,可以使用网络摄像头实时检测暗网 (https://github.com/AlexeyAB/darknet)。
我不得不更新 OpenCV 的安装,现在它的目录是 home/user/OpenCV。由于缺少权限,我无法将其包含在上一个目录中。 现在,每次我用命令开始实时检测暗网
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights -c 0
我收到此错误日志:
./darknet: error while loading shared libraries: libopencv_highgui.so.3.3: cannot open shared object file: No such file or directory
当我重新编译暗网(cmake、make、install)时,我收到另一条错误消息:
Demo needs OpenCV for webcam images.
所以我假设 OpenCV 不包含在编译中,并且暗网没有找到库。 我测试了这个选项:
- darknet OPENCV=1 的 Makefile 中包含(仔细检查,完全确定,这不是问题)
我尝试将 OpenCV 的路径导出到其先前的路径,例如使用导出 OpenCV_DIR=/usr/share/OpenCV
我尝试链接路径,例如与 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib 或 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/share
我认为有可能在某些与 cmake 相关的文件中包含 OpenCV 路径。在 CmakeLists.txt 文件中有一行
set(PThreads_windows_DIR ${CMAKE_CURRENT_LIST_DIR}/3rdparty/pthreads CACHE PATH "Path where pthreads for windows can be located")
endif()
set(Stb_DIR ${CMAKE_CURRENT_LIST_DIR}/3rdparty/stb CACHE PATH "Path where Stb image library can be located")
set(CMAKE_DEBUG_POSTFIX d)
set(CMAKE_THREAD_PREFER_PTHREAD ON)
find_package(Threads REQUIRED)
if(MSVC)
find_package(PThreads_windows REQUIRED)
endif()
if(ENABLE_OPENCV)
if(OpenCV_FOUND)
if(SELECT_OPENCV_MODULES)
我认为在这里或其他地方我应该包含 OpenCV 的新目录路径。我尝试使用 find_package 或 set_path,但我不确定这是否是输入此选项的正确点。我也没有名为 finOpencv.cmake 的文件。
有人知道,我如何“告诉”暗网,OpenCV 位于何处?
如果您需要更多信息,我很乐意与您分享。
感谢任何帮助。谢谢!
编辑:如果我在 CMakeLists.txt 中包含 Find_Package(OpenCV) 并重新编译,我会收到以下输出:
CMake Warning at CMakeLists.txt:96 (find_package):
By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "OpenCV", but
CMake did not find one.
Could not find a package configuration file provided by "OpenCV" with any
of the following names:
OpenCVConfig.cmake
opencv-config.cmake
Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set
"OpenCV_DIR" to a directory containing one of the above files. If "OpenCV"
provides a separate development package or SDK, be sure it has been
installed.
【问题讨论】:
-
“所以我假设 OpenCV 不包含在编译中,并且暗网找不到库。” - 您可以通过读取
cmakerunning 的输出轻松检查是否找到 OpenCV。如果 CMake 找不到 OpenCV,那么它应该是一条关于该问题的消息,并附有如何解决问题的说明。顺便说一句,将此消息包含在您的问题帖子中。 “我尝试将 OpenCV 的路径导出到其 previous 路径,例如使用export OpenCV_DIR=/usr/share/OpenCV” - 您想使用 new OpenCV 安装,但将变量设置为 old 路径。为什么?? -
感谢您的提示。我还尝试了 export OPENCV_DIR=/home/username/OpenCV 和 OPENCV_DIR=/home/username/OpenCV/lib (libopencv_highgui.so.3.3 所在的位置),但没有区别。通常我没有看到 OpenCV not found 的注释(可能是因为代码中写了“if(OpenCV_Found)”?)。如果我将其包含在 CMakelists.txt if(ENABLE_OPENCV) find_package(OpenCV) 中,我将收到我将在主帖中添加的输出。
-
"OPENCV_DIR=/home/username/OpenCV/lib(libopencv_highgui.so.3.3 所在的位置)" - 你读过错误信息吗?它说:“......或将“OpenCV_DIR”设置为包含上述文件之一的目录。”。您需要将
OpenCV_DIR变量设置为包含OpenCVConfig.cmake或opencv-config.cmake文件的目录。目录是否包含libopencv_highgui.so.3.3或其他库文件完全不相关。 -
顺便说一句,原来的
CMakeLists.txt已经在line 96 拨打find_package(OpenCV)。你引用没有它的代码看起来很奇怪。我建议你从 repo 重新加载这个文件,之后不要修改它。 -
感谢您的解释。我不得不备份系统(因为其他原因),所以我现在不知道它是否有效。
标签: cmake path darknet nvidia-jetson