Проблема при запуске cv :: trackerKCF :: init () после включения заголовка "torch / torch.h" - PullRequest
0 голосов
/ 29 января 2020

Cra sh происходит, когда я запускаю cv::trackerKCF::init(), включая "torch / torch.h" . Если я запускаю cv :: trackerTLD :: init () или cv :: trackerMIL :: init () или cv :: trackerBoosting :: init () этот кра sh не встречается. Кроме того, этот cra sh происходит даже при использовании opencv3.4.2 или opencv3.4.8 .

cuda=10.1
libtorch=1.3.1
opencv=3.4.6 (even 3.4.2 or 3.4.8, similar problem occurs here)

Исходный код, который работает правильно

#include <opencv2/opencv.hpp>
#include <opencv2/tracking.hpp>
#include <opencv2/core/utility.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>

int main()
{
  cv::Rect2d roi;
  cv::Mat frame;

  cv::TrackerKCF::Params param;

  // create a tracker object
  cv::Ptr<cv::TrackerKCF> tracker = cv::TrackerKCF::create(param);

  // set input video
  std::string video = "/path/to/video.mp4";
  cv::VideoCapture cap(video);

  // get bounding box
  cap >> frame;
  roi = cv::selectROI("tracker", frame);

  // quit if ROI was not selected
  if (roi.width == 0 || roi.height == 0) return 0;

  // initialize the tracker
  tracker->init(frame, roi);
  ...

  return 0;
}

Исходный код, вызывающий проблему

#include <opencv2/opencv.hpp>
#include <opencv2/tracking.hpp>
#include <opencv2/core/utility.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <torch/torch.h>  // <--- added this!

int main()
{
  cv::Rect2d roi;
  cv::Mat frame;

  cv::TrackerKCF::Params param;

  // create a tracker object
  cv::Ptr<cv::TrackerKCF> tracker = cv::TrackerKCF::create(param);

  // set input video
  std::string video = "/path/to/video.mp4";
  cv::VideoCapture cap(video);

  // get bounding box
  cap >> frame;
  roi = cv::selectROI("tracker", frame);

  // quit if ROI was not selected
  if (roi.width == 0 || roi.height == 0) return 0;

  // initialize the tracker
  tracker->init(frame, roi);  //  <--- crash here!
  ...

  return 0;
}

CMakeLists.txt is

cmake_minimum_required(VERSION 2.8)
project(MyOpenCVProject)

# Copy resouce
file(COPY ${CMAKE_SOURCE_DIR}/resource/ DESTINATION ${PROJECT_BINARY_DIR}/resource/)
add_definitions(-DRESOURCE_DIR="${PROJECT_BINARY_DIR}/resource/")

# Create Main project
set(SOURCES
    main.cpp
)

add_executable(Main
    ${SOURCES}
    ${HEADERS}
)

set (OpenCV_DIR /path/to/opencv/dir/)

# For OpenCV
find_package(OpenCV REQUIRED)
if(OpenCV_FOUND)
    target_include_directories(Main PUBLIC ${OpenCV_INCLUDE_DIRS})
    target_link_libraries(Main ${OpenCV_LIBS})
endif()

message(STATUS "*** dump start cmake variables ***")
get_cmake_property(_variableNames VARIABLES)
foreach(_variableName ${_variableNames})
        message(STATUS "${_variableName}=${${_variableName}}")
endforeach()
message(STATUS "*** dump end ***")

...