Проблема с интерфейсом Python и Cpp с OpenCV и Cuda - PullRequest
1 голос
/ 04 апреля 2019

Я сталкиваюсь с проблемой при взаимодействии python и cpp.Мне нужно рассчитать оптический поток с помощью графического процессора.Для этого я использую алгоритм tvl1 с включенным opencv с cpp и cuda. ​​

Мой код cpp хорошо работает с графическим процессором, и теперь я хочу вызвать функцию в моем коде Python, потому что нетспособ вычисления оптического потока на GPU с помощью этого алгоритма на Python.

Я использую ctypes, чтобы связать beetwin cpp и python.Вот мои коды:

python

from ctypes import cdll
opencvfunc = cdll.LoadLibrary('opt_flow_lib/test.so')

cpp

//test.cpp

#define DLLEXPORT extern "C"

#include "opencv2/xfeatures2d.hpp"
#include "opencv2/cudaarithm.hpp"
#include "opencv2/cudaoptflow.hpp"
#include "opencv2/cudacodec.hpp"

#include "opencv2/video/tracking.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

#include "opencv2/core/mat.hpp"

using namespace cv::cuda;
using namespace cv;

DLLEXPORT int tvl(int a, int b) {

  int bound = 20;

  Size new_size(224, 224);

  Mat curr_gray, prev_gray, prev_image, curr_image;
  Mat flow_x, flow_y;

  GpuMat d_frame_0, d_frame_1;
  GpuMat d_flow;

  cv::Ptr<cuda::OpticalFlowDual_TVL1> alg_tvl1 =           
        cuda::OpticalFlowDual_TVL1::create();

  return 3;
}

Вот как я создаю свой файл cpp:

gcc -o test.so -shared -fPIC test.cpp `pkg-config opencv --cflags --libs`

Здесьэто то, что у меня есть, когда я запускаю свой код Python:

OSError: opt_flow_lib/test.so: undefined symbol:   _ZN2cv4cuda20OpticalFlowDual_TVL16createEdddiididdb

Когда я удаляю эту строку из cpp:

cv::Ptr<cuda::OpticalFlowDual_TVL1> alg_tvl1 =           
            cuda::OpticalFlowDual_TVL1::create();

Все идет хорошо, мне возвращают 3 int.Но кажется, что cuda не хочет выполнять свою работу

Может ли кто-нибудь, кто когда-либо включал opencv с cuda с ctypes и cpp / python, помочь мне?

Спасибо вам

РЕДАКТИРОВАТЬ:

Может быть, было бы интересно иметь мой $ pkg-config opencv --cflags --libs:

-I/usr/local/include/opencv4/opencv2 -I/usr/local/include/opencv4 -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_xfeatures2d -lopencv_calib3d -lopencv_objdetect
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...