【问题标题】:Include OpenCV directory in YOLOv3 darknet (AlexeyAB) installation in cmake在 cmake 的 YOLOv3 暗网 (AlexeyAB) 安装中包含 OpenCV 目录
【发布时间】: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 不包含在编译中,并且暗网找不到库。” - 您可以通过读取cmake running 的输出轻松检查是否找到 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.cmakeopencv-config.cmake 文件的目录。目录是否包含libopencv_highgui.so.3.3或其他库文件完全不相关。
  • 顺便说一句,原来的CMakeLists.txt 已经line 96 拨打find_package(OpenCV)。你引用没有它的代码看起来很奇怪。我建议你从 repo 重新加载这个文件,之后不要修改它。
  • 感谢您的解释。我不得不备份系统(因为其他原因),所以我现在不知道它是否有效。

标签: cmake path darknet nvidia-jetson


【解决方案1】:

编辑:如果我在 CMakeLists.txt 中包含 Find_Package(OpenCV) 并重新编译,我会收到此输出

很好。作为暗网构建目录的下一步:

 cmake . -DOpenCV_DIR=/usr/share/OpenCV

【讨论】:

    猜你喜欢
    • 2020-01-14
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多