Bazı C++ sınıflarını ve işlevleri Cython'u kullanarak Python'a sarmayı deniyorum. Şimdiye kadar 2 sınıf sardım ve şimdi bir işlevi sarmak istiyorum.C++ işlevinden PyObject içeren karmaşık bir nesnenin döndürülmesi Cython
işlevin imza
std::map<std::string, std::vector<PyObject*>> analyze(PyObject* img, LandmarkDetector::CLNF& clnf_model, LandmarkDetector::FaceModelParameters& params);
olduğunu başarıyla CLNF
ve FaceModelParameters
sınıfları sarılmış ettim ve sorun bu analyze
işlevi sarma yaşıyorum.
İşlev, PyObject*
s ile ilgilenir çünkü opencv ile ilgilenir ve dilleri arasında kolayca geçiş yapmak isterim. cv::Point
arasındaki python nesnelerine ve python Mat ile cv::Mat
arasındaki döküm işlemini gerçekleştirmek için these functions kullanıyorum.
Bu
benim pyx dosyasıdır: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))
Ama bunu derlemek çalışırken üzerine hata mesaj almak Maalesef