提交 ea1081cc 编写于 作者: A Alexander Alekhin

Merge remote-tracking branch 'upstream/3.4' into merge-3.4

......@@ -5,17 +5,34 @@ if(HAVE_CUDA)
endif()
ocv_define_module(xfeatures2d opencv_core opencv_imgproc opencv_features2d opencv_calib3d OPTIONAL opencv_shape opencv_ml opencv_cudaarithm WRAP python java objc)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/download_vgg.cmake)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/download_boostdesc.cmake)
set(DOWNLOAD_DIR "${OpenCV_BINARY_DIR}/downloads/xfeatures2d")
download_boost_descriptors("${DOWNLOAD_DIR}" boost_status)
download_vgg_descriptors("${DOWNLOAD_DIR}" vgg_status)
if(NOT boost_status OR NOT vgg_status)
ocv_module_disable(xfeatures2d)
endif()
if(NOT OPENCV_SKIP_FEATURES2D_DOWNLOADING)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/download_vgg.cmake)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/download_boostdesc.cmake)
set(DOWNLOAD_DIR "${OpenCV_BINARY_DIR}/downloads/xfeatures2d")
download_boost_descriptors("${DOWNLOAD_DIR}" boost_status)
download_vgg_descriptors("${DOWNLOAD_DIR}" vgg_status)
if(boost_status)
ocv_append_source_file_compile_definitions(${CMAKE_CURRENT_SOURCE_DIR}/src/boostdesc.cpp "OPENCV_XFEATURES2D_HAS_BOOST_DATA=1")
else()
message(WARNING "features2d: Boost descriptor implementation is not available due to missing data (download failed: https://github.com/opencv/opencv_contrib/issues/1301)")
endif()
if(vgg_status)
ocv_append_source_file_compile_definitions(${CMAKE_CURRENT_SOURCE_DIR}/src/vgg.cpp "OPENCV_XFEATURES2D_HAS_VGG_DATA=1")
else()
message(WARNING "features2d: VGG descriptor implementation is not available due to missing data (download failed: https://github.com/opencv/opencv_contrib/issues/1301)")
endif()
ocv_module_include_directories("${DOWNLOAD_DIR}")
if(boost_status OR vgg_status)
ocv_module_include_directories("${DOWNLOAD_DIR}")
endif()
endif()
if(TARGET opencv_test_${name})
ocv_target_include_directories(opencv_test_${name} "${OpenCV_SOURCE_DIR}/modules") # use common files from features2d tests
if(boost_status)
ocv_target_compile_definitions(opencv_test_${name} PRIVATE "OPENCV_XFEATURES2D_HAS_BOOST_DATA=1")
endif()
if(vgg_status)
ocv_target_compile_definitions(opencv_test_${name} PRIVATE "OPENCV_XFEATURES2D_HAS_VGG_DATA=1")
endif()
endif()
......@@ -5,6 +5,8 @@
namespace opencv_test { namespace {
#ifdef OPENCV_XFEATURES2D_HAS_VGG_DATA
typedef perf::TestBaseWithParam<std::string> vgg;
#define VGG_IMAGES \
......@@ -32,4 +34,6 @@ PERF_TEST_P(vgg, extract, testing::Values(VGG_IMAGES))
SANITY_CHECK_NOTHING();
}
#endif // OPENCV_XFEATURES2D_HAS_VGG_DATA
}} // namespace
......@@ -65,6 +65,8 @@ namespace cv
namespace xfeatures2d
{
#ifdef OPENCV_XFEATURES2D_HAS_BOOST_DATA
/*
!BoostDesc implementation
*/
......@@ -729,9 +731,16 @@ BoostDesc_Impl::~BoostDesc_Impl()
{
}
#endif // OPENCV_XFEATURES2D_HAS_BOOST_DATA
Ptr<BoostDesc> BoostDesc::create( int desc, bool use_scale_orientation, float scale_factor )
{
#ifdef OPENCV_XFEATURES2D_HAS_BOOST_DATA
return makePtr<BoostDesc_Impl>( desc, use_scale_orientation, scale_factor );
#else
CV_UNUSED(desc); CV_UNUSED(use_scale_orientation); CV_UNUSED(scale_factor);
CV_Error(Error::StsNotImplemented, "The OpenCV xfeatures2d binaries is built without downloaded Boost decriptor features: https://github.com/opencv/opencv_contrib/issues/1301");
#endif
}
......
......@@ -66,6 +66,8 @@ namespace cv
namespace xfeatures2d
{
#ifdef OPENCV_XFEATURES2D_HAS_VGG_DATA
/*
!VGG implementation
*/
......@@ -527,10 +529,18 @@ VGG_Impl::~VGG_Impl()
{
}
#endif
Ptr<VGG> VGG::create( int desc, float isigma, bool img_normalize, bool use_scale_orientation,
float scale_factor, bool dsc_normalize )
{
#ifdef OPENCV_XFEATURES2D_HAS_VGG_DATA
return makePtr<VGG_Impl>( desc, isigma, img_normalize, use_scale_orientation, scale_factor, dsc_normalize );
#else
CV_UNUSED(desc); CV_UNUSED(isigma); CV_UNUSED(img_normalize);
CV_UNUSED(use_scale_orientation); CV_UNUSED(scale_factor); CV_UNUSED(dsc_normalize);
CV_Error(Error::StsNotImplemented, "The OpenCV xfeatures2d binaries is built without downloaded VGG decriptor features: https://github.com/opencv/opencv_contrib/issues/1301");
#endif
}
......
......@@ -192,13 +192,16 @@ TEST(Features2d_DescriptorExtractor_BEBLID, regression )
test.safe_run();
}
#ifdef OPENCV_XFEATURES2D_HAS_VGG_DATA
TEST( Features2d_DescriptorExtractor_VGG, regression )
{
CV_DescriptorExtractorTest<L2<float> > test( "descriptor-vgg", 0.03f,
VGG::create() );
test.safe_run();
}
#endif // OPENCV_XFEATURES2D_HAS_VGG_DATA
#ifdef OPENCV_XFEATURES2D_HAS_BOOST_DATA
TEST( Features2d_DescriptorExtractor_BGM, regression )
{
CV_DescriptorExtractorTest<Hamming> test( "descriptor-boostdesc-bgm",
......@@ -254,7 +257,7 @@ TEST( Features2d_DescriptorExtractor_BINBOOST_256, regression )
BoostDesc::create(BoostDesc::BINBOOST_256) );
test.safe_run();
}
#endif // OPENCV_XFEATURES2D_HAS_BOOST_DATA
#ifdef OPENCV_ENABLE_NONFREE
TEST(Features2d_BruteForceDescriptorMatcher_knnMatch, regression)
......
......@@ -40,6 +40,7 @@ INSTANTIATE_TEST_CASE_P(DAISY, DescriptorRotationInvariance, Values(
DAISY::create(15, 3, 8, 8, DAISY::NRM_NONE, noArray(), true, true),
0.79f)
));
#ifdef OPENCV_XFEATURES2D_HAS_VGG_DATA
INSTANTIATE_TEST_CASE_P(VGG120, DescriptorRotationInvariance, Values(
make_tuple(IMAGE_TSUKUBA,
KAZE::create(),
......@@ -64,7 +65,7 @@ INSTANTIATE_TEST_CASE_P(VGG48, DescriptorRotationInvariance, Values(
VGG::create(VGG::VGG_48, 1.4f, true, true, 48.0f, false),
0.97f)
));
#endif // OPENCV_XFEATURES2D_HAS_VGG_DATA
#ifdef OPENCV_ENABLE_NONFREE
......@@ -96,6 +97,7 @@ INSTANTIATE_TEST_CASE_P(FREAK, DescriptorRotationInvariance, Values(
0.90f)
));
#ifdef OPENCV_XFEATURES2D_HAS_BOOST_DATA
INSTANTIATE_TEST_CASE_P(BoostDesc_BGM, DescriptorRotationInvariance, Values(
make_tuple(IMAGE_TSUKUBA,
SURF::create(),
......@@ -144,6 +146,7 @@ INSTANTIATE_TEST_CASE_P(BoostDesc_BINBOOST_256, DescriptorRotationInvariance, Va
BoostDesc::create(BoostDesc::BINBOOST_256, true, 6.25f),
0.999f)
));
#endif // OPENCV_XFEATURES2D_HAS_BOOST_DATA
#endif
......@@ -170,6 +173,7 @@ INSTANTIATE_TEST_CASE_P(DISABLED_DAISY, DescriptorScaleInvariance, Values(
));
#endif
#ifdef OPENCV_XFEATURES2D_HAS_VGG_DATA
INSTANTIATE_TEST_CASE_P(VGG120, DescriptorScaleInvariance, Values(
make_tuple(IMAGE_BIKES,
KAZE::create(),
......@@ -194,8 +198,10 @@ INSTANTIATE_TEST_CASE_P(VGG48, DescriptorScaleInvariance, Values(
VGG::create(VGG::VGG_48, 1.4f, true, true, 48.0f, false),
0.93f)
));
#endif // OPENCV_XFEATURES2D_HAS_VGG_DATA
#ifdef OPENCV_ENABLE_NONFREE // SURF detector is used in tests
#ifdef OPENCV_XFEATURES2D_HAS_BOOST_DATA
INSTANTIATE_TEST_CASE_P(BoostDesc_BGM, DescriptorScaleInvariance, Values(
make_tuple(IMAGE_BIKES,
SURF::create(),
......@@ -238,6 +244,7 @@ INSTANTIATE_TEST_CASE_P(BoostDesc_BINBOOST_256, DescriptorScaleInvariance, Value
BoostDesc::create(BoostDesc::BINBOOST_256, true, 6.25f),
0.98f)
));
#endif // OPENCV_XFEATURES2D_HAS_BOOST_DATA
#endif // NONFREE
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册