From: Alexander Mordvintsev Date: Mon, 12 May 2014 10:58:54 +0000 (+0400) Subject: Work on python wrapped generation automation: X-Git-Tag: submit/tizen_ivi/20141117.190038~2^2~411^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=120b3a1e77ac4d528503751d976895f1c3a90cbf;p=profile%2Fivi%2Fopencv.git Work on python wrapped generation automation: - all parsed headers are included into "cv2.cpp" with "pyopencv_generated_include.h" - types starting with "Ptr_" converted to "Ptr<...>" form (avoids many typedefs in "cv2.cpp") --- diff --git a/modules/python/CMakeLists.txt b/modules/python/CMakeLists.txt index f9352d2..894c605 100644 --- a/modules/python/CMakeLists.txt +++ b/modules/python/CMakeLists.txt @@ -44,6 +44,7 @@ if(HAVE_opencv_nonfree) endif() set(cv2_generated_hdrs + "${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_include.h" "${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_funcs.h" "${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_func_tab.h" "${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_types.h" diff --git a/modules/python/src2/cv2.cpp b/modules/python/src2/cv2.cpp index e8b2999..1372ff9 100644 --- a/modules/python/src2/cv2.cpp +++ b/modules/python/src2/cv2.cpp @@ -9,30 +9,12 @@ #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION #include -#include "opencv2/core.hpp" -#include "opencv2/core/utility.hpp" -#include "opencv2/contrib.hpp" -#include "opencv2/flann/miniflann.hpp" -#include "opencv2/imgproc.hpp" -#include "opencv2/calib3d.hpp" -#include "opencv2/features2d.hpp" -#include "opencv2/objdetect.hpp" -#include "opencv2/softcascade.hpp" -#include "opencv2/video.hpp" -#include "opencv2/photo.hpp" -#include "opencv2/highgui.hpp" - -#include "opencv2/ml.hpp" +#include "pyopencv_generated_include.h" #include "opencv2/opencv_modules.hpp" -#ifdef HAVE_OPENCV_NONFREE -# include "opencv2/nonfree.hpp" -#endif #include "pycompat.hpp" -using cv::flann::IndexParams; -using cv::flann::SearchParams; static PyObject* opencv_error = 0; @@ -100,7 +82,9 @@ catch (const cv::Exception &e) \ } using namespace cv; -typedef cv::softcascade::ChannelFeatureBuilder softcascade_ChannelFeatureBuilder; +using cv::flann::IndexParams; +using cv::flann::SearchParams; +using cv::softcascade::ChannelFeatureBuilder; typedef std::vector vector_uchar; typedef std::vector vector_char; @@ -119,6 +103,7 @@ typedef std::vector vector_KeyPoint; typedef std::vector vector_Mat; typedef std::vector vector_DMatch; typedef std::vector vector_String; +typedef std::vector vector_Scalar; typedef std::vector > vector_vector_char; typedef std::vector > vector_vector_Point; @@ -126,47 +111,13 @@ typedef std::vector > vector_vector_Point2f; typedef std::vector > vector_vector_Point3f; typedef std::vector > vector_vector_DMatch; -typedef Ptr Ptr_Algorithm; -typedef Ptr Ptr_FeatureDetector; -typedef Ptr Ptr_DescriptorExtractor; -typedef Ptr Ptr_Feature2D; -typedef Ptr Ptr_DescriptorMatcher; -typedef Ptr Ptr_BackgroundSubtractor; -typedef Ptr Ptr_BackgroundSubtractorMOG; -typedef Ptr Ptr_BackgroundSubtractorMOG2; -typedef Ptr Ptr_BackgroundSubtractorKNN; -typedef Ptr Ptr_BackgroundSubtractorGMG; - -typedef Ptr Ptr_StereoMatcher; -typedef Ptr Ptr_StereoBM; -typedef Ptr Ptr_StereoSGBM; - -typedef Ptr Ptr_Tonemap; -typedef Ptr Ptr_TonemapDrago; -typedef Ptr Ptr_TonemapReinhard; -typedef Ptr Ptr_TonemapDurand; -typedef Ptr Ptr_TonemapMantiuk; -typedef Ptr Ptr_AlignMTB; -typedef Ptr Ptr_CalibrateDebevec; -typedef Ptr Ptr_CalibrateRobertson; -typedef Ptr Ptr_MergeDebevec; -typedef Ptr Ptr_MergeRobertson; -typedef Ptr Ptr_MergeMertens; -typedef Ptr Ptr_MergeRobertson; - -typedef Ptr Ptr_ChannelFeatureBuilder; -typedef Ptr Ptr_CLAHE; -typedef Ptr Ptr_LineSegmentDetector; +typedef cv::softcascade::ChannelFeatureBuilder softcascade_ChannelFeatureBuilder; typedef SimpleBlobDetector::Params SimpleBlobDetector_Params; typedef cvflann::flann_distance_t cvflann_flann_distance_t; typedef cvflann::flann_algorithm_t cvflann_flann_algorithm_t; -typedef Ptr Ptr_flann_IndexParams; -typedef Ptr Ptr_flann_SearchParams; -typedef Ptr Ptr_FaceRecognizer; -typedef std::vector vector_Scalar; static PyObject* failmsgp(const char *fmt, ...) { diff --git a/modules/python/src2/gen2.py b/modules/python/src2/gen2.py index c5df21a..df26091 100755 --- a/modules/python/src2/gen2.py +++ b/modules/python/src2/gen2.py @@ -351,9 +351,15 @@ class ConstInfo(object): self.name = self.name.upper() self.value = val +def handle_ptr(tp): + if tp.startswith('Ptr_'): + tp = 'Ptr<' + "::".join(tp.split('_')[1:]) + '>' + return tp + + class ArgInfo(object): def __init__(self, arg_tuple): - self.tp = arg_tuple[0] + self.tp = handle_ptr(arg_tuple[0]) self.name = arg_tuple[1] self.defval = arg_tuple[2] self.isarray = False @@ -398,7 +404,7 @@ class FuncVariant(object): else: self.wname = self.classname - self.rettype = decl[1] + self.rettype = handle_ptr(decl[1]) if self.rettype == "void": self.rettype = "" self.args = [] @@ -736,6 +742,7 @@ class PythonWrapperGenerator(object): self.classes = {} self.funcs = {} self.consts = {} + self.code_include = StringIO() self.code_types = StringIO() self.code_funcs = StringIO() self.code_func_tab = StringIO() @@ -823,6 +830,7 @@ class PythonWrapperGenerator(object): # step 1: scan the headers and build more descriptive maps of classes, consts, functions for hdr in srcfiles: + self.code_include.write( '#include "{}"\n'.format(hdr[hdr.find('opencv2/'):]) ) decls = parser.parse(hdr) for decl in decls: name = decl[0] @@ -879,6 +887,7 @@ class PythonWrapperGenerator(object): self.gen_const_reg(constinfo) # That's it. Now save all the files + self.save(output_path, "pyopencv_generated_include.h", self.code_include) self.save(output_path, "pyopencv_generated_funcs.h", self.code_funcs) self.save(output_path, "pyopencv_generated_func_tab.h", self.code_func_tab) self.save(output_path, "pyopencv_generated_const_reg.h", self.code_const_reg)