6

Cython を使用して、いくつかの C++ クラスと関数を Python にラップしようとしています。これまでに 2 つのクラスをラップしましたが、今度は関数をラップしたいと思います。

関数のシグネチャは

std::map<std::string, std::vector<PyObject*>> analyze(PyObject* img, LandmarkDetector::CLNF& clnf_model, LandmarkDetector::FaceModelParameters& params);

CLNFクラスとクラスを正常にラップしましたがFaceModelParameters、このanalyze関数をラップするのに問題があります。

この関数はPyObject*opencvを扱っているのでsを扱っているのですが、言語間で簡単に受け渡しできるようにしたいです。これらの関数を使用して、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(<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))

しかし、コンパイルしようとすると、エラーメッセージが表示されます

landmarks.pyx:26:23: Python object type 'Python object' cannot be used as a template argument

(これは行を指しますmap[string, vector[object]] analyze [...]

4

1 に答える 1