Почему в OpenCV 4.5.2 нет встроенных приложений

#windows #visual-studio #opencv #cmake

Вопрос:

Я установил OpenCV 4.5.2 с помощью установщика Windows, и когда я заглянул в папку «Приложения», я не смог найти некоторые приложения (create_samples, train_cascade). Итак, я загрузил код и сгенерировал проекты Visual studio с помощью CMake. После того, как я построил все эти проекты, опять же, в папке приложения не было файлов проекта для создания этих приложений. Я также запускаю cmake . в каталоге приложений, но вышла эта ошибка:

 CMake Warning (dev) in CMakeLists.txt:
  No project() command is present.  The top-level CMakeLists.txt file must
  contain a literal, direct call to the project() command.  Add a line of
  code such as

    project(ProjectName)

  near the top of the file, but after cmake_minimum_required().

  CMake is pretending there is a "project(Project)" command on the first
  line.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Error at CMakeLists.txt:4 (ocv_add_application):
  Unknown CMake command "ocv_add_application".


-- Configuring incomplete, errors occurred!
See also "C:/opencv/opencv-master/apps/createsamples/CMakeFiles/CMakeOutput.log".
 

это тот самый CMakeLists.txt файл, который я запускаю:

 file(GLOB SRCS *.cpp)


ocv_add_application(opencv_createsamples
    MODULES opencv_core opencv_imgproc opencv_objdetect opencv_imgcodecs opencv_highgui opencv_calib3d opencv_features2d opencv_videoio
    SRCS ${SRCS})

 

Честно говоря, в последний раз я использовал CMake 10 лет назад, и мне бы очень хотелось, чтобы кто-нибудь помог мне в этом разобраться.
Спасибо

стек:

 CMake  3.20.3
OpenCV 4.5.2
Python 3.9.5
Visual Studio 16.10.0
Wndows 10
 

Ответ №1:

Я выяснил, почему это происходит. В opencv 4.5 (я не проверял другие версии) строки в файле cmake, которые генерируют решение для traincascade и создают примеры, явно закомментированы. Это потому, что создание этих приложений приведет к возникновению более 600 ошибок! Будем надеяться, что эта проблема скоро будет устранена.

Ответ №2:

от https://github.com/opencv/opencv/issues/13231

Эти приложения были отключены во время удаления устаревшего C API. Переписать их с помощью C API было невозможно, потому что их слишком легко сломать и трудно протестировать.

Также современные подходы через DNN обеспечивают гораздо лучшие результаты — просто сравните детектор лиц OpenCV с каскадным классификатором и DNN.