#python #c #opencv
#python #c #opencv
Вопрос:
Я столкнулся с проблемой при взаимодействии python и cpp. Мне нужно вычислить оптический поток с помощью графического процессора. Для этого я использую алгоритм tvl1 с включенным opencv с cpp и cuda.
Мой cpp-код хорошо работает с GPU, и теперь я хочу вызвать функцию в моем коде на 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 —библиотеки :
-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