diff --git a/3rdparty/libtengine/tengine.cmake b/3rdparty/libtengine/tengine.cmake index 4085afcf31..10da845a86 100644 --- a/3rdparty/libtengine/tengine.cmake +++ b/3rdparty/libtengine/tengine.cmake @@ -22,7 +22,7 @@ # sqfu@openailab.com # -SET(TENGINE_COMMIT_VERSION "2f3cd86217f3530c8e4a82f3ed5af14c7a4e3943") +SET(TENGINE_COMMIT_VERSION "8a4c58e0e05cd850f4bb0936a330edc86dc0e28c") SET(OCV_TENGINE_DIR "${OpenCV_BINARY_DIR}/3rdparty/libtengine") SET(OCV_TENGINE_SOURCE_PATH "${OCV_TENGINE_DIR}/Tengine-${TENGINE_COMMIT_VERSION}") @@ -34,7 +34,7 @@ IF(EXISTS "${OCV_TENGINE_SOURCE_PATH}") ELSE() SET(OCV_TENGINE_FILENAME "${TENGINE_COMMIT_VERSION}.zip")#name2 SET(OCV_TENGINE_URL "https://github.com/OAID/Tengine/archive/") #url2 - SET(tengine_md5sum 9124324b6e2b350012e46ae1db4bad7d) #md5sum2 + SET(tengine_md5sum f51ca8f3963faeeff3f019a6f6edc206) #md5sum2 #MESSAGE(STATUS "**** TENGINE DOWNLOAD BEGIN ****") ocv_download(FILENAME ${OCV_TENGINE_FILENAME} @@ -69,7 +69,6 @@ if(BUILD_TENGINE) elseif(${ANDROID_ABI} STREQUAL "arm64-v8a") SET(CONFIG_ARCH_ARM64 ON) endif() - SET(Tengine_LIB "tengine" CACHE INTERNAL "") else() # linux system if(CMAKE_SYSTEM_PROCESSOR STREQUAL arm) @@ -77,7 +76,6 @@ if(BUILD_TENGINE) elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64) ## AARCH64 SET(CONFIG_ARCH_ARM64 ON) endif() - SET(Tengine_LIB "tengine" CACHE INTERNAL "") endif() SET(BUILT_IN_OPENCV ON) ## set for tengine compile discern . @@ -86,6 +84,6 @@ if(BUILD_TENGINE) add_subdirectory("${OCV_TENGINE_SOURCE_PATH}" "${OCV_TENGINE_DIR}/build") else() message(WARNING "TENGINE: Missing 'CMakeLists.txt' in source code package: ${OCV_TENGINE_SOURCE_PATH}") - SET(HAVE_TENGINE 1) endif() + SET(Tengine_LIB "tengine" CACHE INTERNAL "") endif() diff --git a/cmake/OpenCVDetectCUDA.cmake b/cmake/OpenCVDetectCUDA.cmake index 20d0750540..74f81c2838 100644 --- a/cmake/OpenCVDetectCUDA.cmake +++ b/cmake/OpenCVDetectCUDA.cmake @@ -48,11 +48,31 @@ if(CUDA_FOUND) endif() if(WITH_NVCUVID) + macro(SEARCH_NVCUVID_HEADER _filename _result) + # place header file under CUDA_TOOLKIT_TARGET_DIR or CUDA_TOOLKIT_ROOT_DIR + find_path(_header_result + ${_filename} + PATHS "${CUDA_TOOLKIT_TARGET_DIR}" "${CUDA_TOOLKIT_ROOT_DIR}" + ENV CUDA_PATH + ENV CUDA_INC_PATH + PATH_SUFFIXES include + NO_DEFAULT_PATH + ) + if("x${_header_result}" STREQUAL "x_header_result-NOTFOUND") + set(${_result} 0) + else() + set(${_result} 1) + endif() + unset(_header_result CACHE) + endmacro() + SEARCH_NVCUVID_HEADER("nvcuvid.h" HAVE_NVCUVID_HEADER) + SEARCH_NVCUVID_HEADER("dynlink_nvcuvid.h" HAVE_DYNLINK_NVCUVID_HEADER) find_cuda_helper_libs(nvcuvid) if(WIN32) find_cuda_helper_libs(nvcuvenc) endif() - if(CUDA_nvcuvid_LIBRARY) + if(CUDA_nvcuvid_LIBRARY AND (${HAVE_NVCUVID_HEADER} OR ${HAVE_DYNLINK_NVCUVID_HEADER})) + # make sure to have both header and library before enabling set(HAVE_NVCUVID 1) endif() if(CUDA_nvcuvenc_LIBRARY) @@ -98,7 +118,7 @@ if(CUDA_FOUND) else() set(CC_LIST ${ARGN}) foreach(target_arch ${CC_LIST}) - string(REPLACE "." "" target_arch_short ${target_arch}) + string(REPLACE "." "" target_arch_short "${target_arch}") set(NVCC_OPTION "-gencode;arch=compute_${target_arch_short},code=sm_${target_arch_short}") execute_process( COMMAND "${CUDA_NVCC_EXECUTABLE}" ${NVCC_OPTION} "${OpenCV_SOURCE_DIR}/cmake/checks/OpenCVDetectCudaArch.cu" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/" @@ -108,7 +128,7 @@ if(CUDA_FOUND) set(${result_list} "${${result_list}} ${target_arch}") endif() endforeach() - string(STRIP ${${result_list}} ${result_list}) + string(STRIP "${${result_list}}" ${result_list}) set(CUDA_SUPPORTED_CC ${${result_list}} CACHE INTERNAL "List of supported compute capability") endif() endmacro() @@ -122,7 +142,7 @@ if(CUDA_FOUND) endmacro() macro(ocv_wipeout_deprecated _arch_bin_list) - string(REPLACE "2.1" "2.1(2.0)" ${_arch_bin_list} ${${_arch_bin_list}}) + string(REPLACE "2.1" "2.1(2.0)" ${_arch_bin_list} "${${_arch_bin_list}}") endmacro() set(__cuda_arch_ptx "") diff --git a/cmake/OpenCVFindOpenEXR.cmake b/cmake/OpenCVFindOpenEXR.cmake index 9103f1f5a7..ef633e853a 100644 --- a/cmake/OpenCVFindOpenEXR.cmake +++ b/cmake/OpenCVFindOpenEXR.cmake @@ -88,7 +88,7 @@ FOREACH(SEARCH_PATH ${SEARCH_PATHS}) ocv_find_openexr("-${OPENEXR_VERSION}") ocv_find_openexr("-${OPENEXR_VERSION}_s") ocv_find_openexr("-${OPENEXR_VERSION}_d") - ocv_find_openexr("-${OPEXEXR_VERSION}_s_d") + ocv_find_openexr("-${OPENEXR_VERSION}_s_d") ocv_find_openexr("") ocv_find_openexr("_s") ocv_find_openexr("_d") diff --git a/cmake/templates/cvconfig.h.in b/cmake/templates/cvconfig.h.in index f2b171a096..5d43b69be8 100644 --- a/cmake/templates/cvconfig.h.in +++ b/cmake/templates/cvconfig.h.in @@ -95,6 +95,8 @@ /* NVIDIA Video Decoding API*/ #cmakedefine HAVE_NVCUVID +#cmakedefine HAVE_NVCUVID_HEADER +#cmakedefine HAVE_DYNLINK_NVCUVID_HEADER /* NVIDIA Video Encoding API*/ #cmakedefine HAVE_NVCUVENC diff --git a/modules/core/include/opencv2/core/cuda/common.hpp b/modules/core/include/opencv2/core/cuda/common.hpp index 14b1f3f5ae..80b2ff08b1 100644 --- a/modules/core/include/opencv2/core/cuda/common.hpp +++ b/modules/core/include/opencv2/core/cuda/common.hpp @@ -101,6 +101,20 @@ namespace cv { namespace cuda cudaChannelFormatDesc desc = cudaCreateChannelDesc(); cudaSafeCall( cudaBindTexture2D(0, tex, img.ptr(), &desc, img.cols, img.rows, img.step) ); } + + template inline void createTextureObjectPitch2D(cudaTextureObject_t* tex, PtrStepSz& img, const cudaTextureDesc& texDesc) + { + cudaResourceDesc resDesc; + memset(&resDesc, 0, sizeof(resDesc)); + resDesc.resType = cudaResourceTypePitch2D; + resDesc.res.pitch2D.devPtr = static_cast(img.ptr()); + resDesc.res.pitch2D.height = img.rows; + resDesc.res.pitch2D.width = img.cols; + resDesc.res.pitch2D.pitchInBytes = img.step; + resDesc.res.pitch2D.desc = cudaCreateChannelDesc(); + + cudaSafeCall( cudaCreateTextureObject(tex, &resDesc, &texDesc, NULL) ); + } } }} diff --git a/modules/core/include/opencv2/core/eigen.hpp b/modules/core/include/opencv2/core/eigen.hpp index 3d7ba8fa14..3f4be931e6 100644 --- a/modules/core/include/opencv2/core/eigen.hpp +++ b/modules/core/include/opencv2/core/eigen.hpp @@ -51,18 +51,19 @@ #include "opencv2/core.hpp" +#if defined _MSC_VER && _MSC_VER >= 1200 +#define NOMINMAX // fix https://github.com/opencv/opencv/issues/17548 +#pragma warning( disable: 4714 ) //__forceinline is not inlined +#pragma warning( disable: 4127 ) //conditional expression is constant +#pragma warning( disable: 4244 ) //conversion from '__int64' to 'int', possible loss of data +#endif + #if EIGEN_WORLD_VERSION == 3 && EIGEN_MAJOR_VERSION >= 3 \ && defined(CV_CXX11) && defined(CV_CXX_STD_ARRAY) #include #define OPENCV_EIGEN_TENSOR_SUPPORT #endif // EIGEN_WORLD_VERSION == 3 && EIGEN_MAJOR_VERSION >= 3 -#if defined _MSC_VER && _MSC_VER >= 1200 -#pragma warning( disable: 4714 ) //__forceinline is not inlined -#pragma warning( disable: 4127 ) //conditional expression is constant -#pragma warning( disable: 4244 ) //conversion from '__int64' to 'int', possible loss of data -#endif - namespace cv { diff --git a/modules/core/src/bindings_utils.cpp b/modules/core/src/bindings_utils.cpp index 432f280e52..050b7247f8 100644 --- a/modules/core/src/bindings_utils.cpp +++ b/modules/core/src/bindings_utils.cpp @@ -25,9 +25,26 @@ String dumpInputArray(InputArray argument) break; // done } ss << cv::format(" total(-1)=%lld", (long long int)argument.total(-1)); - ss << cv::format(" dims(-1)=%d", argument.dims(-1)); - Size size = argument.size(-1); - ss << cv::format(" size(-1)=%dx%d", size.width, size.height); + int dims = argument.dims(-1); + ss << cv::format(" dims(-1)=%d", dims); + if (dims <= 2) + { + Size size = argument.size(-1); + ss << cv::format(" size(-1)=%dx%d", size.width, size.height); + } + else + { + int sz[CV_MAX_DIM] = {0}; + argument.sizend(sz, -1); + ss << " size(-1)=["; + for (int i = 0; i < dims; i++) + { + if (i > 0) + ss << ' '; + ss << sz[i]; + } + ss << "]"; + } ss << " type(-1)=" << cv::typeToString(argument.type(-1)); } while (0); } @@ -61,10 +78,26 @@ CV_EXPORTS_W String dumpInputArrayOfArrays(InputArrayOfArrays argument) if (argument.total(-1) > 0) { ss << " type(0)=" << cv::typeToString(argument.type(0)); - ss << cv::format(" dims(0)=%d", argument.dims(0)); - size = argument.size(0); - ss << cv::format(" size(0)=%dx%d", size.width, size.height); - ss << " type(0)=" << cv::typeToString(argument.type(0)); + int dims = argument.dims(0); + ss << cv::format(" dims(0)=%d", dims); + if (dims <= 2) + { + Size size0 = argument.size(0); + ss << cv::format(" size(0)=%dx%d", size0.width, size0.height); + } + else + { + int sz[CV_MAX_DIM] = {0}; + argument.sizend(sz, 0); + ss << " size(0)=["; + for (int i = 0; i < dims; i++) + { + if (i > 0) + ss << ' '; + ss << sz[i]; + } + ss << "]"; + } } } while (0); } @@ -92,9 +125,26 @@ CV_EXPORTS_W String dumpInputOutputArray(InputOutputArray argument) break; // done } ss << cv::format(" total(-1)=%lld", (long long int)argument.total(-1)); - ss << cv::format(" dims(-1)=%d", argument.dims(-1)); - Size size = argument.size(-1); - ss << cv::format(" size(-1)=%dx%d", size.width, size.height); + int dims = argument.dims(-1); + ss << cv::format(" dims(-1)=%d", dims); + if (dims <= 2) + { + Size size = argument.size(-1); + ss << cv::format(" size(-1)=%dx%d", size.width, size.height); + } + else + { + int sz[CV_MAX_DIM] = {0}; + argument.sizend(sz, -1); + ss << " size(-1)=["; + for (int i = 0; i < dims; i++) + { + if (i > 0) + ss << ' '; + ss << sz[i]; + } + ss << "]"; + } ss << " type(-1)=" << cv::typeToString(argument.type(-1)); } while (0); } @@ -128,10 +178,26 @@ CV_EXPORTS_W String dumpInputOutputArrayOfArrays(InputOutputArrayOfArrays argume if (argument.total(-1) > 0) { ss << " type(0)=" << cv::typeToString(argument.type(0)); - ss << cv::format(" dims(0)=%d", argument.dims(0)); - size = argument.size(0); - ss << cv::format(" size(0)=%dx%d", size.width, size.height); - ss << " type(0)=" << cv::typeToString(argument.type(0)); + int dims = argument.dims(0); + ss << cv::format(" dims(0)=%d", dims); + if (dims <= 2) + { + Size size0 = argument.size(0); + ss << cv::format(" size(0)=%dx%d", size0.width, size0.height); + } + else + { + int sz[CV_MAX_DIM] = {0}; + argument.sizend(sz, 0); + ss << " size(0)=["; + for (int i = 0; i < dims; i++) + { + if (i > 0) + ss << ' '; + ss << sz[i]; + } + ss << "]"; + } } } while (0); } diff --git a/modules/dnn/src/layers/region_layer.cpp b/modules/dnn/src/layers/region_layer.cpp index 40c32fa0f9..5ddb5342d0 100644 --- a/modules/dnn/src/layers/region_layer.cpp +++ b/modules/dnn/src/layers/region_layer.cpp @@ -479,12 +479,12 @@ public: auto scale_x_y_node = std::make_shared(ngraph::element::f32, ngraph::Shape{1}, &scale_x_y); auto shift_node = std::make_shared(ngraph::element::f32, ngraph::Shape{1}, std::vector{0.5}); + auto axis = ngraph::op::Constant::create(ngraph::element::i64, ngraph::Shape{}, {0}); + auto splits = ngraph::op::Constant::create(ngraph::element::i64, ngraph::Shape{5}, {1, 1, 1, 1, rows - 4}); + auto split = std::make_shared(input2d, axis, splits); std::shared_ptr box_x; { - auto lower_bounds = std::make_shared(ngraph::element::i64, ngraph::Shape{2}, std::vector{0, 0}); - auto upper_bounds = std::make_shared(ngraph::element::i64, ngraph::Shape{2}, std::vector{1, cols}); - box_x = std::make_shared(input2d, lower_bounds, upper_bounds, strides, std::vector{}, std::vector{}); - box_x = std::make_shared(box_x); + box_x = std::make_shared(split->output(0)); box_x = std::make_shared(box_x, shift_node, ngraph::op::AutoBroadcastType::NUMPY); box_x = std::make_shared(box_x, scale_x_y_node, ngraph::op::AutoBroadcastType::NUMPY); box_x = std::make_shared(box_x, shift_node, ngraph::op::AutoBroadcastType::NUMPY); @@ -510,10 +510,7 @@ public: std::shared_ptr box_y; { - auto lower_bounds = std::make_shared(ngraph::element::i64, ngraph::Shape{2}, std::vector{1, 0}); - auto upper_bounds = std::make_shared(ngraph::element::i64, ngraph::Shape{2}, std::vector{2, cols}); - box_y = std::make_shared(input2d, lower_bounds, upper_bounds, strides, std::vector{}, std::vector{}); - box_y = std::make_shared(box_y); + box_y = std::make_shared(split->output(1)); box_y = std::make_shared(box_y, shift_node, ngraph::op::AutoBroadcastType::NUMPY); box_y = std::make_shared(box_y, scale_x_y_node, ngraph::op::AutoBroadcastType::NUMPY); box_y = std::make_shared(box_y, shift_node, ngraph::op::AutoBroadcastType::NUMPY); @@ -566,45 +563,32 @@ public: std::copy(bias_h.begin(), bias_h.begin() + h * anchors, bias_h.begin() + i * h * anchors); } - auto lower_bounds = std::make_shared(ngraph::element::i64, ngraph::Shape{2}, std::vector{2, 0}); - auto upper_bounds = std::make_shared(ngraph::element::i64, ngraph::Shape{2}, std::vector{3, cols}); - box_w = std::make_shared(input2d, lower_bounds, upper_bounds, strides, std::vector{}, std::vector{}); - box_w = std::make_shared(box_w); + box_w = std::make_shared(split->output(2)); box_w = std::make_shared(box_w, shape_3d, true); auto anchor_w_node = std::make_shared(ngraph::element::f32, box_broad_shape, bias_w.data()); box_w = std::make_shared(box_w, anchor_w_node, ngraph::op::AutoBroadcastType::NUMPY); - lower_bounds = std::make_shared(ngraph::element::i64, ngraph::Shape{2}, std::vector{3, 0}); - upper_bounds = std::make_shared(ngraph::element::i64, ngraph::Shape{2}, std::vector{4, cols}); - box_h = std::make_shared(input2d, lower_bounds, upper_bounds, strides, std::vector{}, std::vector{}); - box_h = std::make_shared(box_h); + box_h = std::make_shared(split->output(3)); box_h = std::make_shared(box_h, shape_3d, true); auto anchor_h_node = std::make_shared(ngraph::element::f32, box_broad_shape, bias_h.data()); box_h = std::make_shared(box_h, anchor_h_node, ngraph::op::AutoBroadcastType::NUMPY); } + auto region_splits = ngraph::op::Constant::create(ngraph::element::i64, ngraph::Shape{3}, {4, 1, rows - 5}); + auto region_split = std::make_shared(region, axis, region_splits); + std::shared_ptr scale; { - auto lower_bounds = std::make_shared(ngraph::element::i64, ngraph::Shape{2}, std::vector{4, 0}); - auto upper_bounds = std::make_shared(ngraph::element::i64, ngraph::Shape{2}, std::vector{5, cols}); - scale = std::make_shared(region, lower_bounds, upper_bounds, strides, std::vector{}, std::vector{}); - - if (classfix == -1) - { - auto thresh_node = std::make_shared(ngraph::element::f32, ngraph::Shape{1}, std::vector{0.5}); - auto mask = std::make_shared(scale, thresh_node); - auto zero_node = std::make_shared(ngraph::element::f32, mask->get_shape(), std::vector(b * cols, 0)); - scale = std::make_shared(mask, scale, zero_node); - } + float thr = classfix == -1 ? 0.5 : 0; + auto thresh_node = std::make_shared(ngraph::element::f32, ngraph::Shape{1}, std::vector{thr}); + auto mask = std::make_shared(region_split->output(1), thresh_node); + auto zero_node = std::make_shared(ngraph::element::f32, mask->get_shape(), std::vector(cols, 0)); + scale = std::make_shared(mask, zero_node, region_split->output(1)); } std::shared_ptr probs; { - auto lower_bounds = std::make_shared(ngraph::element::i64, ngraph::Shape{2}, std::vector{5, 0}); - auto upper_bounds = std::make_shared(ngraph::element::i64, ngraph::Shape{2}, std::vector{rows, cols}); - auto classes = std::make_shared(region, lower_bounds, upper_bounds, strides, std::vector{}, std::vector{}); - probs = std::make_shared(classes, scale, ngraph::op::AutoBroadcastType::NUMPY); - + probs = std::make_shared(region_split->output(2), scale, ngraph::op::AutoBroadcastType::NUMPY); auto thresh_node = std::make_shared(ngraph::element::f32, ngraph::Shape{1}, &thresh); auto mask = std::make_shared(probs, thresh_node); auto zero_node = std::make_shared(ngraph::element::f32, mask->get_shape(), std::vector((rows - 5) * cols, 0)); diff --git a/modules/imgproc/src/color_yuv.simd.hpp b/modules/imgproc/src/color_yuv.simd.hpp index 8bbd78b244..076d1a4bd5 100644 --- a/modules/imgproc/src/color_yuv.simd.hpp +++ b/modules/imgproc/src/color_yuv.simd.hpp @@ -347,16 +347,16 @@ struct RGB2YCrCb_i sr0 = sr0 - sy0; sr1 = sr1 - sy1; sb0 = sb0 - sy0; sb1 = sb1 - sy1; - v_int32 scr0, scr1, scb0, scb1; + v_int32 v_scr0, v_scr1, v_scb0, v_scb1; - scr0 = (sr0*vc3 + vdd) >> shift; - scr1 = (sr1*vc3 + vdd) >> shift; - scb0 = (sb0*vc4 + vdd) >> shift; - scb1 = (sb1*vc4 + vdd) >> shift; + v_scr0 = (sr0*vc3 + vdd) >> shift; + v_scr1 = (sr1*vc3 + vdd) >> shift; + v_scb0 = (sb0*vc4 + vdd) >> shift; + v_scb1 = (sb1*vc4 + vdd) >> shift; // saturate and pack - cr = v_pack_u(scr0, scr1); - cb = v_pack_u(scb0, scb1); + cr = v_pack_u(v_scr0, v_scr1); + cb = v_pack_u(v_scb0, v_scb1); if(yuvOrder) { @@ -781,36 +781,36 @@ struct YCrCb2RGB_i v_int8 scr = v_reinterpret_as_s8(cr); v_int8 scb = v_reinterpret_as_s8(cb); - v_int16 scr0, scr1, scb0, scb1; - v_expand(scr, scr0, scr1); - v_expand(scb, scb0, scb1); + v_int16 v_scr0, v_scr1, v_scb0, v_scb1; + v_expand(scr, v_scr0, v_scr1); + v_expand(scb, v_scb0, v_scb1); v_int32 b00, b01, b10, b11; v_int32 g00, g01, g10, g11; v_int32 r00, r01, r10, r11; - v_mul_expand(scb0, vc3, b00, b01); - v_mul_expand(scb1, vc3, b10, b11); + v_mul_expand(v_scb0, vc3, b00, b01); + v_mul_expand(v_scb1, vc3, b10, b11); if(yuvOrder) { // if YUV then C3 > 2^15 // so we fix the multiplication v_int32 cb00, cb01, cb10, cb11; - v_expand(scb0, cb00, cb01); - v_expand(scb1, cb10, cb11); + v_expand(v_scb0, cb00, cb01); + v_expand(v_scb1, cb10, cb11); b00 += cb00 << 15; b01 += cb01 << 15; b10 += cb10 << 15; b11 += cb11 << 15; } v_int32 t00, t01, t10, t11; - v_mul_expand(scb0, vc2, t00, t01); - v_mul_expand(scb1, vc2, t10, t11); - v_mul_expand(scr0, vc1, g00, g01); - v_mul_expand(scr1, vc1, g10, g11); + v_mul_expand(v_scb0, vc2, t00, t01); + v_mul_expand(v_scb1, vc2, t10, t11); + v_mul_expand(v_scr0, vc1, g00, g01); + v_mul_expand(v_scr1, vc1, g10, g11); g00 += t00; g01 += t01; g10 += t10; g11 += t11; - v_mul_expand(scr0, vc0, r00, r01); - v_mul_expand(scr1, vc0, r10, r11); + v_mul_expand(v_scr0, vc0, r00, r01); + v_mul_expand(v_scr1, vc0, r10, r11); b00 = (b00 + vdescale) >> shift; b01 = (b01 + vdescale) >> shift; b10 = (b10 + vdescale) >> shift; b11 = (b11 + vdescale) >> shift; diff --git a/modules/python/test/test_misc.py b/modules/python/test/test_misc.py index b25ef7efbb..f9a350d160 100644 --- a/modules/python/test/test_misc.py +++ b/modules/python/test/test_misc.py @@ -105,22 +105,35 @@ class Arguments(NewOpenCVTests): a = np.array([[[1, 2]], [[3, 4]], [[5, 6]]], dtype=float) res5 = cv.utils.dumpInputArray(a) # 64FC2 self.assertEqual(res5, "InputArray: empty()=false kind=0x00010000 flags=0x01010000 total(-1)=3 dims(-1)=2 size(-1)=1x3 type(-1)=CV_64FC2") + a = np.zeros((2,3,4), dtype='f') + res6 = cv.utils.dumpInputArray(a) + self.assertEqual(res6, "InputArray: empty()=false kind=0x00010000 flags=0x01010000 total(-1)=6 dims(-1)=2 size(-1)=3x2 type(-1)=CV_32FC4") + a = np.zeros((2,3,4,5), dtype='f') + res7 = cv.utils.dumpInputArray(a) + self.assertEqual(res7, "InputArray: empty()=false kind=0x00010000 flags=0x01010000 total(-1)=120 dims(-1)=4 size(-1)=[2 3 4 5] type(-1)=CV_32FC1") def test_InputArrayOfArrays(self): res1 = cv.utils.dumpInputArrayOfArrays(None) # self.assertEqual(res1, "InputArray: noArray()") # not supported self.assertEqual(res1, "InputArrayOfArrays: empty()=true kind=0x00050000 flags=0x01050000 total(-1)=0 dims(-1)=1 size(-1)=0x0") res2_1 = cv.utils.dumpInputArrayOfArrays((1, 2)) # { Scalar:all(1), Scalar::all(2) } - self.assertEqual(res2_1, "InputArrayOfArrays: empty()=false kind=0x00050000 flags=0x01050000 total(-1)=2 dims(-1)=1 size(-1)=2x1 type(0)=CV_64FC1 dims(0)=2 size(0)=1x4 type(0)=CV_64FC1") + self.assertEqual(res2_1, "InputArrayOfArrays: empty()=false kind=0x00050000 flags=0x01050000 total(-1)=2 dims(-1)=1 size(-1)=2x1 type(0)=CV_64FC1 dims(0)=2 size(0)=1x4") res2_2 = cv.utils.dumpInputArrayOfArrays([1.5]) - self.assertEqual(res2_2, "InputArrayOfArrays: empty()=false kind=0x00050000 flags=0x01050000 total(-1)=1 dims(-1)=1 size(-1)=1x1 type(0)=CV_64FC1 dims(0)=2 size(0)=1x4 type(0)=CV_64FC1") + self.assertEqual(res2_2, "InputArrayOfArrays: empty()=false kind=0x00050000 flags=0x01050000 total(-1)=1 dims(-1)=1 size(-1)=1x1 type(0)=CV_64FC1 dims(0)=2 size(0)=1x4") a = np.array([[1, 2], [3, 4], [5, 6]]) b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) res3 = cv.utils.dumpInputArrayOfArrays([a, b]) - self.assertEqual(res3, "InputArrayOfArrays: empty()=false kind=0x00050000 flags=0x01050000 total(-1)=2 dims(-1)=1 size(-1)=2x1 type(0)=CV_32SC1 dims(0)=2 size(0)=2x3 type(0)=CV_32SC1") + self.assertEqual(res3, "InputArrayOfArrays: empty()=false kind=0x00050000 flags=0x01050000 total(-1)=2 dims(-1)=1 size(-1)=2x1 type(0)=CV_32SC1 dims(0)=2 size(0)=2x3") c = np.array([[[1, 2], [3, 4], [5, 6]]], dtype='f') res4 = cv.utils.dumpInputArrayOfArrays([c, a, b]) - self.assertEqual(res4, "InputArrayOfArrays: empty()=false kind=0x00050000 flags=0x01050000 total(-1)=3 dims(-1)=1 size(-1)=3x1 type(0)=CV_32FC2 dims(0)=2 size(0)=3x1 type(0)=CV_32FC2") + self.assertEqual(res4, "InputArrayOfArrays: empty()=false kind=0x00050000 flags=0x01050000 total(-1)=3 dims(-1)=1 size(-1)=3x1 type(0)=CV_32FC2 dims(0)=2 size(0)=3x1") + a = np.zeros((2,3,4), dtype='f') + res5 = cv.utils.dumpInputArrayOfArrays([a, b]) + self.assertEqual(res5, "InputArrayOfArrays: empty()=false kind=0x00050000 flags=0x01050000 total(-1)=2 dims(-1)=1 size(-1)=2x1 type(0)=CV_32FC4 dims(0)=2 size(0)=3x2") + # TODO: fix conversion error + #a = np.zeros((2,3,4,5), dtype='f') + #res6 = cv.utils.dumpInputArray([a, b]) + #self.assertEqual(res6, "InputArrayOfArrays: empty()=false kind=0x00050000 flags=0x01050000 total(-1)=2 dims(-1)=1 size(-1)=2x1 type(0)=CV_32FC1 dims(0)=4 size(0)=[2 3 4 5]") def test_parse_to_bool_convertible(self): try_to_convert = partial(self._try_to_convert, cv.utils.dumpBool) diff --git a/platforms/android/build_sdk.py b/platforms/android/build_sdk.py index be759b8879..51383f8537 100755 --- a/platforms/android/build_sdk.py +++ b/platforms/android/build_sdk.py @@ -59,6 +59,8 @@ def check_executable(cmd): try: log.debug("Executing: %s" % cmd) result = subprocess.check_output(cmd, stderr=subprocess.STDOUT) + if not isinstance(result, str): + result = result.decode("utf-8") log.debug("Result: %s" % (result+'\n').split('\n')[0]) return True except Exception as e: