我试图使用Cython将一些C类和函数包装到
Python中.
到目前为止,我已经包装了2个类,现在我想要包装一个函数.
函数的签名是
std :: map< std :: string,std :: vector< PyObject *>> analyze(PyObject * img,LandmarkDetector :: CLNF& clnf_model,LandmarkDetector :: FaceModelParameters& params);
我已经成功包装了CLNF和FaceModelParameters类,并且我无法包装此分析函数.
该函数处理PyObject *,因为它处理opencv,我希望能够在语言之间轻松传递它们.我使用these functions来执行cv :: Point到python对象之间以及python Mat到cv :: Mat之间的转换.
这是我的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( 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))
但在尝试编译它时,我收到错误消息
landmarks.pyx:26:23: Python object type 'Python object' cannot be used as a template argument
(指的是线图[string,vector [object]] analyze […])