Merge remote-tracking branch 'upstream/3.4' into merge-3.4
This commit is contained in:
commit
1537a5f253
@ -1,17 +1,22 @@
|
|||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# Uninstall target, for "make uninstall"
|
# Uninstall target, for "make uninstall"
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
CONFIGURE_FILE(
|
if(NOT TARGET uninstall) # avoid conflicts with parent projects
|
||||||
"${OpenCV_SOURCE_DIR}/cmake/templates/cmake_uninstall.cmake.in"
|
configure_file(
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
"${OpenCV_SOURCE_DIR}/cmake/templates/cmake_uninstall.cmake.in"
|
||||||
@ONLY)
|
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
||||||
|
@ONLY
|
||||||
|
)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
|
add_custom_target(uninstall
|
||||||
if(ENABLE_SOLUTION_FOLDERS)
|
COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
||||||
set_target_properties(uninstall PROPERTIES FOLDER "CMakeTargets")
|
)
|
||||||
|
|
||||||
|
if(ENABLE_SOLUTION_FOLDERS)
|
||||||
|
set_target_properties(uninstall PROPERTIES FOLDER "CMakeTargets")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# target building all OpenCV modules
|
# target building all OpenCV modules
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
|
|||||||
@ -1,25 +1,28 @@
|
|||||||
# -----------------------------------------------
|
# -----------------------------------------------
|
||||||
# File that provides "make uninstall" target
|
# File that provides "make uninstall" target
|
||||||
# We use the file 'install_manifest.txt'
|
# We use the file 'install_manifest.txt'
|
||||||
|
#
|
||||||
|
# Details: https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake
|
||||||
# -----------------------------------------------
|
# -----------------------------------------------
|
||||||
IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
|
||||||
MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
|
|
||||||
ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
|
||||||
|
|
||||||
FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
|
if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt")
|
||||||
STRING(REGEX REPLACE "\n" ";" files "${files}")
|
message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_BINARY_DIR@/install_manifest.txt\"")
|
||||||
FOREACH(file ${files})
|
endif()
|
||||||
MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
|
|
||||||
IF(EXISTS "$ENV{DESTDIR}${file}")
|
file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files)
|
||||||
EXEC_PROGRAM(
|
string(REGEX REPLACE "\n" ";" files "${files}")
|
||||||
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
|
foreach(file ${files})
|
||||||
OUTPUT_VARIABLE rm_out
|
message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
|
||||||
RETURN_VALUE rm_retval
|
if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
|
||||||
)
|
exec_program(
|
||||||
IF(NOT "${rm_retval}" STREQUAL 0)
|
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
|
||||||
MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
|
OUTPUT_VARIABLE rm_out
|
||||||
ENDIF(NOT "${rm_retval}" STREQUAL 0)
|
RETURN_VALUE rm_retval
|
||||||
ELSE(EXISTS "$ENV{DESTDIR}${file}")
|
)
|
||||||
MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
|
if(NOT "${rm_retval}" STREQUAL 0)
|
||||||
ENDIF(EXISTS "$ENV{DESTDIR}${file}")
|
message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
|
||||||
ENDFOREACH(file)
|
endif()
|
||||||
|
else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|||||||
@ -1,23 +1,4 @@
|
|||||||
Frequently Asked Questions {#faq}
|
Frequently Asked Questions {#faq}
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
- **What is InputArray?**
|
Compatibility page. FAQ migrated to the project [wiki](https://github.com/opencv/opencv/wiki/FAQ).
|
||||||
|
|
||||||
It can be seen that almost all OpenCV functions receive InputArray type.
|
|
||||||
What is it, and how can I understand the actual input types of parameters?
|
|
||||||
|
|
||||||
|
|
||||||
This is the proxy class for passing read-only input arrays into OpenCV functions.
|
|
||||||
|
|
||||||
Inside a function you should use cv::_InputArray::getMat() method to construct
|
|
||||||
a matrix header for the array (without copying data). cv::_InputArray::kind() can be used to distinguish Mat from vector<> etc.
|
|
||||||
but normally it is not needed.
|
|
||||||
|
|
||||||
for more information see cv::_InputArray
|
|
||||||
|
|
||||||
- **Which is more efficient, use contourArea() or count number of ROI non-zero pixels?**
|
|
||||||
|
|
||||||
In a case where you only want relative areas, which one is faster to compute:
|
|
||||||
calculate a contour area or count the number of ROI non-zero pixels?
|
|
||||||
|
|
||||||
cv::contourArea() uses Green formula (http://en.wikipedia.org/wiki/Green's_theorem) to compute the area, therefore its complexity is O(contour_number_of_vertices). Counting non-zero pixels in the ROI is O(roi_width*roi_height) algorithm, i.e. much slower. Note, however, that because of finite, and quite low, resolution of the raster grid, the two algorithms will give noticeably different results. For large and square-like contours the error will be minimal. For small and/or oblong contours the error can be quite large.
|
|
||||||
|
|||||||
@ -1402,9 +1402,17 @@ void TFImporter::populateNet(Net dstNet)
|
|||||||
netInputsNames.push_back(name);
|
netInputsNames.push_back(name);
|
||||||
layer_id[name] = 0;
|
layer_id[name] = 0;
|
||||||
}
|
}
|
||||||
|
tensorflow::TensorShapeProto shape;
|
||||||
if (hasLayerAttr(layer, "shape"))
|
if (hasLayerAttr(layer, "shape"))
|
||||||
|
shape = getLayerAttr(layer, "shape").shape();
|
||||||
|
else if (hasLayerAttr(layer, "_output_shapes"))
|
||||||
|
{
|
||||||
|
tensorflow::AttrValue_ListValue list = getLayerAttr(layer, "_output_shapes").list();
|
||||||
|
if (list.shape_size())
|
||||||
|
shape = list.shape()[0];
|
||||||
|
}
|
||||||
|
if (shape.dim_size())
|
||||||
{
|
{
|
||||||
const tensorflow::TensorShapeProto& shape = getLayerAttr(layer, "shape").shape();
|
|
||||||
MatShape dims(shape.dim_size());
|
MatShape dims(shape.dim_size());
|
||||||
for (int i = 0; i < dims.size(); ++i)
|
for (int i = 0; i < dims.size(); ++i)
|
||||||
dims[i] = shape.dim(i).size();
|
dims[i] = shape.dim(i).size();
|
||||||
@ -1868,8 +1876,31 @@ void TFImporter::populateNet(Net dstNet)
|
|||||||
connect(layer_id, dstNet, parsePin(layer.input(1)), id, 0);
|
connect(layer_id, dstNet, parsePin(layer.input(1)), id, 0);
|
||||||
data_layouts[name] = DATA_LAYOUT_UNKNOWN;
|
data_layouts[name] = DATA_LAYOUT_UNKNOWN;
|
||||||
}
|
}
|
||||||
else if (type == "ResizeNearestNeighbor" || type == "ResizeBilinear")
|
else if (type == "ResizeNearestNeighbor" || type == "ResizeBilinear" || type == "FusedResizeAndPadConv2D")
|
||||||
{
|
{
|
||||||
|
std::string convWeights = "";
|
||||||
|
if (type == "FusedResizeAndPadConv2D")
|
||||||
|
{
|
||||||
|
// input: "mul_1"
|
||||||
|
// input: "decoder/ResizeBilinear/size"
|
||||||
|
// input: "decoder/decoder_conv0/Conv2D_dummy_paddings"
|
||||||
|
// input: "decoder/decoder_conv0/weights"
|
||||||
|
CV_CheckEQ(layer.input_size(), 4, "Number of input for FusedResizeAndPadConv2D");
|
||||||
|
|
||||||
|
Mat paddings = getTensorContent(getConstBlob(layer, value_id, 2));
|
||||||
|
CV_CheckEQ(countNonZero(paddings), 0, "Unsupported mode");
|
||||||
|
|
||||||
|
convWeights = layer.input(3);
|
||||||
|
layer.mutable_input()->DeleteSubrange(2, 2);
|
||||||
|
name = name + "/resize";
|
||||||
|
|
||||||
|
if (hasLayerAttr(layer, "resize_align_corners"))
|
||||||
|
{
|
||||||
|
layer.mutable_attr()->insert(
|
||||||
|
::google::protobuf::MapPair<std::string, tensorflow::AttrValue>("align_corners",
|
||||||
|
getLayerAttr(layer, "resize_align_corners")));
|
||||||
|
}
|
||||||
|
}
|
||||||
if (layer.input_size() == 2)
|
if (layer.input_size() == 2)
|
||||||
{
|
{
|
||||||
Mat outSize = getTensorContent(getConstBlob(layer, value_id, 1));
|
Mat outSize = getTensorContent(getConstBlob(layer, value_id, 1));
|
||||||
@ -1901,6 +1932,17 @@ void TFImporter::populateNet(Net dstNet)
|
|||||||
layer_id[name] = id;
|
layer_id[name] = id;
|
||||||
|
|
||||||
connect(layer_id, dstNet, parsePin(layer.input(0)), id, 0);
|
connect(layer_id, dstNet, parsePin(layer.input(0)), id, 0);
|
||||||
|
|
||||||
|
// Step back to add convolution
|
||||||
|
if (type == "FusedResizeAndPadConv2D")
|
||||||
|
{
|
||||||
|
tensorflow::NodeDef* conv = net.mutable_node(li);
|
||||||
|
conv->clear_input();
|
||||||
|
conv->add_input(name);
|
||||||
|
conv->add_input(convWeights);
|
||||||
|
conv->set_op("Conv2D");
|
||||||
|
li -= 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (type == "L2Normalize")
|
else if (type == "L2Normalize")
|
||||||
{
|
{
|
||||||
|
|||||||
@ -891,6 +891,11 @@ TEST_P(Test_TensorFlow_layers, resize_nearest_neighbor)
|
|||||||
runTensorFlowNet("keras_upsampling2d");
|
runTensorFlowNet("keras_upsampling2d");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_P(Test_TensorFlow_layers, fused_resize_conv)
|
||||||
|
{
|
||||||
|
runTensorFlowNet("fused_resize_conv");
|
||||||
|
}
|
||||||
|
|
||||||
TEST_P(Test_TensorFlow_layers, slice)
|
TEST_P(Test_TensorFlow_layers, slice)
|
||||||
{
|
{
|
||||||
if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 &&
|
if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 &&
|
||||||
|
|||||||
@ -33,7 +33,7 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <opencv2\highgui.hpp>
|
#include <opencv2\highgui.hpp>
|
||||||
#include <opencv2\highgui\highgui_winrt.hpp>
|
#include <opencv2\highgui\highgui_winrt.hpp>
|
||||||
#include <window_winrt_bridge.hpp>
|
#include "window_winrt_bridge.hpp"
|
||||||
|
|
||||||
#define CV_WINRT_NO_GUI_ERROR( funcname ) \
|
#define CV_WINRT_NO_GUI_ERROR( funcname ) \
|
||||||
{ \
|
{ \
|
||||||
@ -281,4 +281,4 @@ double cvGetModeWindow_WinRT(const char* name) {
|
|||||||
CV_IMPL int cvStartWindowThread() {
|
CV_IMPL int cvStartWindowThread() {
|
||||||
CV_WINRT_NO_GUI_ERROR("cvStartWindowThread");
|
CV_WINRT_NO_GUI_ERROR("cvStartWindowThread");
|
||||||
return CV_StsNotImplemented;
|
return CV_StsNotImplemented;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user