Cython을 사용하여 Python에 일부 C++ 클래스 및 함수를 래핑하려고합니다. 지금까지 2 개의 클래스를 래핑했습니다. 이제는 함수를 감싸고 싶습니다.C++ 함수에서 PyObject를 포함하는 복잡한 객체 반환 Cython
기능의 서명이
std::map<std::string, std::vector<PyObject*>> analyze(PyObject* img, LandmarkDetector::CLNF& clnf_model, LandmarkDetector::FaceModelParameters& params);
이다 나는 성공적으로 CLNF
및 FaceModelParameters
클래스를 포장했다, 나는 문제가이 analyze
기능을 포장하는 데 문제.
이 함수는 opencv를 다루기 때문에 PyObject*
을 다룹니다. 언어간에 쉽게 전달할 수 있기를 바랍니다. 에서 python 개체 사이, 그리고 python Mat에서 cv::Mat
사이의 캐스팅을 수행하기 위해 these functions을 사용하고 있습니다.
이
내 PYX 파일입니다from libcpp.vector cimport vector
from libcpp.map cimport map
from libcpp.string cimport string
from cpython.ref cimport PyObject
from cython.operator cimport dereference as deref
cdef extern from "LandmarkDetectorModel.h" namespace "LandmarkDetector":
cdef cppclass CLNF:
CLNF(string) except +
cdef extern from "LandmarkDetectorParameters.h" namespace "LandmarkDetector":
cdef cppclass FaceModelParameters:
FaceModelParameters(vector[string] &) except +
cdef class PyCLNF:
cdef CLNF *thisptr
def __cinit__(self, arg):
self.thisptr = new CLNF(<string> arg)
cdef class PyLandmarkDetectorParameters:
cdef FaceModelParameters *thisptr
def __cinit__(self, args):
self.thisptr = new FaceModelParameters(args)
cdef extern from "FaceLandmarkVid.h":
map[string, vector[object]] analyze(object, CLNF&, FaceModelParameters&)
cdef PyAnalyze(object img, PyCLNF clnf, PyLandmarkDetectorParameters facemodel):
return analyze(img, deref(clnf.thisptr), deref(facemodel.thisptr))
그러나 컴파일하려고에 나는 오류 메시지가 얻을 불행하게도