Включить каталог OpenCV в установку YOLOv3 darknet (AlexeyAB) в cmake

Я пытаюсь связать OpenCV с каталогом darknet. Я работаю с Nvidia Jetson AGX Xavier (Ubuntu 18.04). До недавнего времени OpenCV устанавливался JetPack в каталог / usr. С этой конфигурацией обнаружение даркнета в реальном времени (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 не включен в компиляцию, а даркнет не находит библиотеки. Я тестировал такие варианты:

  • В Makefile даркнета включен OPENCV = 1 (дважды проверено, полностью уверен, что это не ошибка)
  • Я попытался экспортировать путь OpenCV к его предыдущему пути, например. с экспортом OpenCV_DIR = / usr / share / OpenCV

  • Я пытался связать путь, например. с LD_LIBRARY_PATH = $ LD_LIBRARY_PATH: / usr / local / lib или LD_LIBRARY_PATH = $ LD_LIBRARY_PATH: / usr / share

  • Я думаю, что может быть возможность включить путь OpenCV в какой-то файл, связанный с cmake. В файле 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?

Если вам понадобится дополнительная информация, я буду рад поделиться.

Любая помощь приветствуется. Спасибо!

Изменить: если я включу Find_Package (OpenCV) в CMakeLists.txt и перекомпилирую, я получу этот вывод:

  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.

person codetermination    schedule 11.04.2020    source источник
comment
Поэтому я предполагаю, что OpenCV не включен в компиляцию, а даркнет не находит библиотеки. - Вы можете легко проверить, обнаружен ли OpenCV, прочитав вывод cmake running. Если CMake не может найти OpenCV, то должно быть сообщение об этом с инструкциями по устранению проблемы. Кстати, включите это сообщение в свой вопрос. Я попытался экспортировать путь OpenCV на его предыдущий путь, например. с export OpenCV_DIR=/usr/share/OpenCV - вы хотите использовать новую установку OpenCV, но задайте для переменной старый путь. Почему??   -  person Tsyvarev    schedule 11.04.2020
comment
Спасибо за подсказку. Я также пробовал экспортировать 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), я получу результат, который добавлю в свой основной пост.   -  person codetermination    schedule 12.04.2020
comment
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 или другие файлы библиотеки.   -  person Tsyvarev    schedule 12.04.2020
comment
Кстати, исходный CMakeLists.txt уже имеет вызов find_package(OpenCV) на строка 96. Выглядит странно, что вы цитируете код без него. Я бы посоветовал вам повторно загрузить этот файл из репо и не изменять его после этого.   -  person Tsyvarev    schedule 12.04.2020
comment
Спасибо за ваше объяснение. Мне пришлось сделать резервную копию системы (по какой-то другой причине), поэтому сейчас я не могу сказать, работает ли она.   -  person codetermination    schedule 13.04.2020


Ответы (1)


Изменить: если я включу Find_Package (OpenCV) в CMakeLists.txt и перекомпилирую, я получу этот результат

Это хорошо. И в качестве следующего шага в каталоге сборки darknet:

 cmake . -DOpenCV_DIR=/usr/share/OpenCV
person Nuzhny    schedule 16.04.2020