node-native-win-utils 1.4.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -82
- package/binding.gyp +2 -0
- package/dist/dirnameLocal.cjs +4 -0
- package/dist/dirnameLocal.d.cts +1 -0
- package/dist/dirnameLocal.d.mts +1 -0
- package/dist/dirnameLocal.mjs +2 -0
- package/dist/{index.js → index.cjs} +83 -16
- package/dist/{index.d.ts → index.d.cts} +68 -17
- package/dist/index.d.mts +230 -0
- package/dist/index.mjs +212 -0
- package/dist/keyCodes.d.mts +101 -0
- package/dist/keyCodes.mjs +201 -0
- package/node22.json +16 -0
- package/package.json +19 -9
- package/prebuilds/win32-x64/node-native-win-utils.node +0 -0
- package/src/cpp/keyboard.cpp +141 -140
- package/src/cpp/main.cpp +9 -3
- package/src/cpp/{capturewindow.cpp → screenshot.cpp} +174 -2
- package/src/dirnameLocal.mts +3 -0
- package/src/index.mts +455 -0
- package/src/keyCodes.mts +203 -0
- package/dllCopy.js +0 -14
- package/include/opencv2/core/affine.hpp +0 -678
- package/include/opencv2/core/async.hpp +0 -105
- package/include/opencv2/core/base.hpp +0 -664
- package/include/opencv2/core/bindings_utils.hpp +0 -325
- package/include/opencv2/core/bufferpool.hpp +0 -40
- package/include/opencv2/core/check.hpp +0 -170
- package/include/opencv2/core/core.hpp +0 -48
- package/include/opencv2/core/core_c.h +0 -3128
- package/include/opencv2/core/cuda/block.hpp +0 -211
- package/include/opencv2/core/cuda/border_interpolate.hpp +0 -722
- package/include/opencv2/core/cuda/color.hpp +0 -309
- package/include/opencv2/core/cuda/common.hpp +0 -131
- package/include/opencv2/core/cuda/datamov_utils.hpp +0 -113
- package/include/opencv2/core/cuda/detail/color_detail.hpp +0 -2018
- package/include/opencv2/core/cuda/detail/reduce.hpp +0 -365
- package/include/opencv2/core/cuda/detail/reduce_key_val.hpp +0 -502
- package/include/opencv2/core/cuda/detail/transform_detail.hpp +0 -392
- package/include/opencv2/core/cuda/detail/type_traits_detail.hpp +0 -191
- package/include/opencv2/core/cuda/detail/vec_distance_detail.hpp +0 -121
- package/include/opencv2/core/cuda/dynamic_smem.hpp +0 -88
- package/include/opencv2/core/cuda/emulation.hpp +0 -269
- package/include/opencv2/core/cuda/filters.hpp +0 -293
- package/include/opencv2/core/cuda/funcattrib.hpp +0 -79
- package/include/opencv2/core/cuda/functional.hpp +0 -805
- package/include/opencv2/core/cuda/limits.hpp +0 -128
- package/include/opencv2/core/cuda/reduce.hpp +0 -209
- package/include/opencv2/core/cuda/saturate_cast.hpp +0 -292
- package/include/opencv2/core/cuda/scan.hpp +0 -258
- package/include/opencv2/core/cuda/simd_functions.hpp +0 -869
- package/include/opencv2/core/cuda/transform.hpp +0 -75
- package/include/opencv2/core/cuda/type_traits.hpp +0 -90
- package/include/opencv2/core/cuda/utility.hpp +0 -230
- package/include/opencv2/core/cuda/vec_distance.hpp +0 -232
- package/include/opencv2/core/cuda/vec_math.hpp +0 -923
- package/include/opencv2/core/cuda/vec_traits.hpp +0 -288
- package/include/opencv2/core/cuda/warp.hpp +0 -139
- package/include/opencv2/core/cuda/warp_reduce.hpp +0 -76
- package/include/opencv2/core/cuda/warp_shuffle.hpp +0 -162
- package/include/opencv2/core/cuda.hpp +0 -1279
- package/include/opencv2/core/cuda.inl.hpp +0 -763
- package/include/opencv2/core/cuda_stream_accessor.hpp +0 -86
- package/include/opencv2/core/cuda_types.hpp +0 -144
- package/include/opencv2/core/cv_cpu_dispatch.h +0 -381
- package/include/opencv2/core/cv_cpu_helper.h +0 -550
- package/include/opencv2/core/cvdef.h +0 -973
- package/include/opencv2/core/cvstd.hpp +0 -190
- package/include/opencv2/core/cvstd.inl.hpp +0 -197
- package/include/opencv2/core/cvstd_wrapper.hpp +0 -154
- package/include/opencv2/core/detail/async_promise.hpp +0 -71
- package/include/opencv2/core/detail/dispatch_helper.impl.hpp +0 -49
- package/include/opencv2/core/detail/exception_ptr.hpp +0 -27
- package/include/opencv2/core/directx.hpp +0 -184
- package/include/opencv2/core/dualquaternion.hpp +0 -979
- package/include/opencv2/core/dualquaternion.inl.hpp +0 -487
- package/include/opencv2/core/eigen.hpp +0 -402
- package/include/opencv2/core/fast_math.hpp +0 -433
- package/include/opencv2/core/hal/hal.hpp +0 -256
- package/include/opencv2/core/hal/interface.h +0 -190
- package/include/opencv2/core/hal/intrin.hpp +0 -939
- package/include/opencv2/core/hal/intrin_avx.hpp +0 -3177
- package/include/opencv2/core/hal/intrin_avx512.hpp +0 -3090
- package/include/opencv2/core/hal/intrin_cpp.hpp +0 -3321
- package/include/opencv2/core/hal/intrin_forward.hpp +0 -191
- package/include/opencv2/core/hal/intrin_lasx.hpp +0 -3236
- package/include/opencv2/core/hal/intrin_msa.hpp +0 -1887
- package/include/opencv2/core/hal/intrin_neon.hpp +0 -2610
- package/include/opencv2/core/hal/intrin_rvv.hpp +0 -3320
- package/include/opencv2/core/hal/intrin_rvv071.hpp +0 -2545
- package/include/opencv2/core/hal/intrin_rvv_scalable.hpp +0 -2080
- package/include/opencv2/core/hal/intrin_sse.hpp +0 -3467
- package/include/opencv2/core/hal/intrin_sse_em.hpp +0 -180
- package/include/opencv2/core/hal/intrin_vsx.hpp +0 -1608
- package/include/opencv2/core/hal/intrin_wasm.hpp +0 -2782
- package/include/opencv2/core/hal/msa_macros.h +0 -1558
- package/include/opencv2/core/hal/simd_utils.impl.hpp +0 -186
- package/include/opencv2/core/llapi/llapi.h +0 -102
- package/include/opencv2/core/mat.hpp +0 -3775
- package/include/opencv2/core/mat.inl.hpp +0 -3422
- package/include/opencv2/core/matx.hpp +0 -1536
- package/include/opencv2/core/neon_utils.hpp +0 -128
- package/include/opencv2/core/ocl.hpp +0 -917
- package/include/opencv2/core/ocl_genbase.hpp +0 -69
- package/include/opencv2/core/opencl/ocl_defs.hpp +0 -82
- package/include/opencv2/core/opencl/opencl_info.hpp +0 -212
- package/include/opencv2/core/opencl/opencl_svm.hpp +0 -81
- package/include/opencv2/core/opencl/runtime/autogenerated/opencl_clblas.hpp +0 -602
- package/include/opencv2/core/opencl/runtime/autogenerated/opencl_clfft.hpp +0 -146
- package/include/opencv2/core/opencl/runtime/autogenerated/opencl_core.hpp +0 -371
- package/include/opencv2/core/opencl/runtime/autogenerated/opencl_core_wrappers.hpp +0 -272
- package/include/opencv2/core/opencl/runtime/autogenerated/opencl_gl.hpp +0 -62
- package/include/opencv2/core/opencl/runtime/autogenerated/opencl_gl_wrappers.hpp +0 -42
- package/include/opencv2/core/opencl/runtime/opencl_clblas.hpp +0 -53
- package/include/opencv2/core/opencl/runtime/opencl_clfft.hpp +0 -53
- package/include/opencv2/core/opencl/runtime/opencl_core.hpp +0 -84
- package/include/opencv2/core/opencl/runtime/opencl_core_wrappers.hpp +0 -47
- package/include/opencv2/core/opencl/runtime/opencl_gl.hpp +0 -53
- package/include/opencv2/core/opencl/runtime/opencl_gl_wrappers.hpp +0 -47
- package/include/opencv2/core/opencl/runtime/opencl_svm_20.hpp +0 -48
- package/include/opencv2/core/opencl/runtime/opencl_svm_definitions.hpp +0 -42
- package/include/opencv2/core/opencl/runtime/opencl_svm_hsa_extension.hpp +0 -166
- package/include/opencv2/core/opengl.hpp +0 -733
- package/include/opencv2/core/openvx/ovx_defs.hpp +0 -48
- package/include/opencv2/core/operations.hpp +0 -610
- package/include/opencv2/core/optim.hpp +0 -302
- package/include/opencv2/core/ovx.hpp +0 -28
- package/include/opencv2/core/parallel/backend/parallel_for.openmp.hpp +0 -72
- package/include/opencv2/core/parallel/backend/parallel_for.tbb.hpp +0 -153
- package/include/opencv2/core/parallel/parallel_backend.hpp +0 -90
- package/include/opencv2/core/persistence.hpp +0 -1350
- package/include/opencv2/core/private/cv_cpu_include_simd_declarations.hpp +0 -30
- package/include/opencv2/core/private.cuda.hpp +0 -169
- package/include/opencv2/core/private.hpp +0 -896
- package/include/opencv2/core/quaternion.hpp +0 -1696
- package/include/opencv2/core/quaternion.inl.hpp +0 -1063
- package/include/opencv2/core/saturate.hpp +0 -180
- package/include/opencv2/core/simd_intrinsics.hpp +0 -87
- package/include/opencv2/core/softfloat.hpp +0 -514
- package/include/opencv2/core/sse_utils.hpp +0 -652
- package/include/opencv2/core/traits.hpp +0 -417
- package/include/opencv2/core/types.hpp +0 -2457
- package/include/opencv2/core/types_c.h +0 -2126
- package/include/opencv2/core/utility.hpp +0 -1229
- package/include/opencv2/core/utils/allocator_stats.hpp +0 -29
- package/include/opencv2/core/utils/allocator_stats.impl.hpp +0 -158
- package/include/opencv2/core/utils/buffer_area.private.hpp +0 -136
- package/include/opencv2/core/utils/configuration.private.hpp +0 -22
- package/include/opencv2/core/utils/filesystem.hpp +0 -82
- package/include/opencv2/core/utils/filesystem.private.hpp +0 -66
- package/include/opencv2/core/utils/fp_control.private.hpp +0 -29
- package/include/opencv2/core/utils/fp_control_utils.hpp +0 -69
- package/include/opencv2/core/utils/instrumentation.hpp +0 -125
- package/include/opencv2/core/utils/lock.private.hpp +0 -119
- package/include/opencv2/core/utils/logger.defines.hpp +0 -42
- package/include/opencv2/core/utils/logger.hpp +0 -218
- package/include/opencv2/core/utils/logtag.hpp +0 -28
- package/include/opencv2/core/utils/plugin_loader.private.hpp +0 -165
- package/include/opencv2/core/utils/tls.hpp +0 -235
- package/include/opencv2/core/utils/trace.hpp +0 -252
- package/include/opencv2/core/utils/trace.private.hpp +0 -421
- package/include/opencv2/core/va_intel.hpp +0 -75
- package/include/opencv2/core/version.hpp +0 -26
- package/include/opencv2/core/vsx_utils.hpp +0 -1047
- package/include/opencv2/core.hpp +0 -3365
- package/include/opencv2/imgcodecs/imgcodecs.hpp +0 -48
- package/include/opencv2/imgcodecs/imgcodecs_c.h +0 -1
- package/include/opencv2/imgcodecs/ios.h +0 -59
- package/include/opencv2/imgcodecs/legacy/constants_c.h +0 -54
- package/include/opencv2/imgcodecs/macosx.h +0 -20
- package/include/opencv2/imgcodecs.hpp +0 -407
- package/include/opencv2/imgproc/bindings.hpp +0 -34
- package/include/opencv2/imgproc/detail/gcgraph.hpp +0 -395
- package/include/opencv2/imgproc/hal/hal.hpp +0 -246
- package/include/opencv2/imgproc/hal/interface.h +0 -46
- package/include/opencv2/imgproc/imgproc.hpp +0 -48
- package/include/opencv2/imgproc/imgproc_c.h +0 -1177
- package/include/opencv2/imgproc/segmentation.hpp +0 -141
- package/include/opencv2/imgproc/types_c.h +0 -659
- package/include/opencv2/imgproc.hpp +0 -5035
- package/include/opencv2/opencv_modules.hpp +0 -17
- package/include/tesseract/baseapi.h +0 -820
- package/include/tesseract/capi.h +0 -485
- package/include/tesseract/export.h +0 -37
- package/include/tesseract/ltrresultiterator.h +0 -235
- package/include/tesseract/ocrclass.h +0 -158
- package/include/tesseract/osdetect.h +0 -139
- package/include/tesseract/pageiterator.h +0 -364
- package/include/tesseract/publictypes.h +0 -281
- package/include/tesseract/renderer.h +0 -334
- package/include/tesseract/resultiterator.h +0 -250
- package/include/tesseract/tesseract.h +0 -40
- package/include/tesseract/unichar.h +0 -174
- package/include/tesseract/version.h +0 -34
- package/include/tesseract/version.h.in +0 -34
- package/libs/libjpeg-turbo.lib +0 -0
- package/libs/libpng.lib +0 -0
- package/libs/opencv_core470.lib +0 -0
- package/libs/opencv_imgcodecs470.lib +0 -0
- package/libs/opencv_imgproc470.lib +0 -0
- package/libs/tesseract.lib +0 -0
- package/libs/zlib.lib +0 -0
- /package/dist/{keyCodes.js → keyCodes.cjs} +0 -0
- /package/dist/{keyCodes.d.ts → keyCodes.d.cts} +0 -0
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
/*M///////////////////////////////////////////////////////////////////////////////////////
|
|
2
|
-
//
|
|
3
|
-
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
|
4
|
-
//
|
|
5
|
-
// By downloading, copying, installing or using the software you agree to this license.
|
|
6
|
-
// If you do not agree to this license, do not download, install,
|
|
7
|
-
// copy or use the software.
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
// License Agreement
|
|
11
|
-
// For Open Source Computer Vision Library
|
|
12
|
-
//
|
|
13
|
-
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
|
14
|
-
// Third party copyrights are property of their respective owners.
|
|
15
|
-
//
|
|
16
|
-
// Redistribution and use in source and binary forms, with or without modification,
|
|
17
|
-
// are permitted provided that the following conditions are met:
|
|
18
|
-
//
|
|
19
|
-
// * Redistribution's of source code must retain the above copyright notice,
|
|
20
|
-
// this list of conditions and the following disclaimer.
|
|
21
|
-
//
|
|
22
|
-
// * Redistribution's in binary form must reproduce the above copyright notice,
|
|
23
|
-
// this list of conditions and the following disclaimer in the documentation
|
|
24
|
-
// and/or other materials provided with the distribution.
|
|
25
|
-
//
|
|
26
|
-
// * The name of the copyright holders may not be used to endorse or promote products
|
|
27
|
-
// derived from this software without specific prior written permission.
|
|
28
|
-
//
|
|
29
|
-
// This software is provided by the copyright holders and contributors "as is" and
|
|
30
|
-
// any express or implied warranties, including, but not limited to, the implied
|
|
31
|
-
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
|
32
|
-
// In no event shall the OpenCV Foundation or contributors be liable for any direct,
|
|
33
|
-
// indirect, incidental, special, exemplary, or consequential damages
|
|
34
|
-
// (including, but not limited to, procurement of substitute goods or services;
|
|
35
|
-
// loss of use, data, or profits; or business interruption) however caused
|
|
36
|
-
// and on any theory of liability, whether in contract, strict liability,
|
|
37
|
-
// or tort (including negligence or otherwise) arising in any way out of
|
|
38
|
-
// the use of this software, even if advised of the possibility of such damage.
|
|
39
|
-
//
|
|
40
|
-
//M*/
|
|
41
|
-
|
|
42
|
-
#ifndef OPENCV_OPTIM_HPP
|
|
43
|
-
#define OPENCV_OPTIM_HPP
|
|
44
|
-
|
|
45
|
-
#include "opencv2/core.hpp"
|
|
46
|
-
|
|
47
|
-
namespace cv
|
|
48
|
-
{
|
|
49
|
-
|
|
50
|
-
/** @addtogroup core_optim
|
|
51
|
-
The algorithms in this section minimize or maximize function value within specified constraints or
|
|
52
|
-
without any constraints.
|
|
53
|
-
@{
|
|
54
|
-
*/
|
|
55
|
-
|
|
56
|
-
/** @brief Basic interface for all solvers
|
|
57
|
-
*/
|
|
58
|
-
class CV_EXPORTS MinProblemSolver : public Algorithm
|
|
59
|
-
{
|
|
60
|
-
public:
|
|
61
|
-
/** @brief Represents function being optimized
|
|
62
|
-
*/
|
|
63
|
-
class CV_EXPORTS Function
|
|
64
|
-
{
|
|
65
|
-
public:
|
|
66
|
-
virtual ~Function() {}
|
|
67
|
-
virtual int getDims() const = 0;
|
|
68
|
-
virtual double getGradientEps() const;
|
|
69
|
-
virtual double calc(const double* x) const = 0;
|
|
70
|
-
virtual void getGradient(const double* x,double* grad);
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
/** @brief Getter for the optimized function.
|
|
74
|
-
|
|
75
|
-
The optimized function is represented by Function interface, which requires derivatives to
|
|
76
|
-
implement the calc(double*) and getDim() methods to evaluate the function.
|
|
77
|
-
|
|
78
|
-
@return Smart-pointer to an object that implements Function interface - it represents the
|
|
79
|
-
function that is being optimized. It can be empty, if no function was given so far.
|
|
80
|
-
*/
|
|
81
|
-
virtual Ptr<Function> getFunction() const = 0;
|
|
82
|
-
|
|
83
|
-
/** @brief Setter for the optimized function.
|
|
84
|
-
|
|
85
|
-
*It should be called at least once before the call to* minimize(), as default value is not usable.
|
|
86
|
-
|
|
87
|
-
@param f The new function to optimize.
|
|
88
|
-
*/
|
|
89
|
-
virtual void setFunction(const Ptr<Function>& f) = 0;
|
|
90
|
-
|
|
91
|
-
/** @brief Getter for the previously set terminal criteria for this algorithm.
|
|
92
|
-
|
|
93
|
-
@return Deep copy of the terminal criteria used at the moment.
|
|
94
|
-
*/
|
|
95
|
-
virtual TermCriteria getTermCriteria() const = 0;
|
|
96
|
-
|
|
97
|
-
/** @brief Set terminal criteria for solver.
|
|
98
|
-
|
|
99
|
-
This method *is not necessary* to be called before the first call to minimize(), as the default
|
|
100
|
-
value is sensible.
|
|
101
|
-
|
|
102
|
-
Algorithm stops when the number of function evaluations done exceeds termcrit.maxCount, when
|
|
103
|
-
the function values at the vertices of simplex are within termcrit.epsilon range or simplex
|
|
104
|
-
becomes so small that it can enclosed in a box with termcrit.epsilon sides, whatever comes
|
|
105
|
-
first.
|
|
106
|
-
@param termcrit Terminal criteria to be used, represented as cv::TermCriteria structure.
|
|
107
|
-
*/
|
|
108
|
-
virtual void setTermCriteria(const TermCriteria& termcrit) = 0;
|
|
109
|
-
|
|
110
|
-
/** @brief actually runs the algorithm and performs the minimization.
|
|
111
|
-
|
|
112
|
-
The sole input parameter determines the centroid of the starting simplex (roughly, it tells
|
|
113
|
-
where to start), all the others (terminal criteria, initial step, function to be minimized) are
|
|
114
|
-
supposed to be set via the setters before the call to this method or the default values (not
|
|
115
|
-
always sensible) will be used.
|
|
116
|
-
|
|
117
|
-
@param x The initial point, that will become a centroid of an initial simplex. After the algorithm
|
|
118
|
-
will terminate, it will be set to the point where the algorithm stops, the point of possible
|
|
119
|
-
minimum.
|
|
120
|
-
@return The value of a function at the point found.
|
|
121
|
-
*/
|
|
122
|
-
virtual double minimize(InputOutputArray x) = 0;
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
/** @brief This class is used to perform the non-linear non-constrained minimization of a function,
|
|
126
|
-
|
|
127
|
-
defined on an `n`-dimensional Euclidean space, using the **Nelder-Mead method**, also known as
|
|
128
|
-
**downhill simplex method**. The basic idea about the method can be obtained from
|
|
129
|
-
<http://en.wikipedia.org/wiki/Nelder-Mead_method>.
|
|
130
|
-
|
|
131
|
-
It should be noted, that this method, although deterministic, is rather a heuristic and therefore
|
|
132
|
-
may converge to a local minima, not necessary a global one. It is iterative optimization technique,
|
|
133
|
-
which at each step uses an information about the values of a function evaluated only at `n+1`
|
|
134
|
-
points, arranged as a *simplex* in `n`-dimensional space (hence the second name of the method). At
|
|
135
|
-
each step new point is chosen to evaluate function at, obtained value is compared with previous
|
|
136
|
-
ones and based on this information simplex changes it's shape , slowly moving to the local minimum.
|
|
137
|
-
Thus this method is using *only* function values to make decision, on contrary to, say, Nonlinear
|
|
138
|
-
Conjugate Gradient method (which is also implemented in optim).
|
|
139
|
-
|
|
140
|
-
Algorithm stops when the number of function evaluations done exceeds termcrit.maxCount, when the
|
|
141
|
-
function values at the vertices of simplex are within termcrit.epsilon range or simplex becomes so
|
|
142
|
-
small that it can enclosed in a box with termcrit.epsilon sides, whatever comes first, for some
|
|
143
|
-
defined by user positive integer termcrit.maxCount and positive non-integer termcrit.epsilon.
|
|
144
|
-
|
|
145
|
-
@note DownhillSolver is a derivative of the abstract interface
|
|
146
|
-
cv::MinProblemSolver, which in turn is derived from the Algorithm interface and is used to
|
|
147
|
-
encapsulate the functionality, common to all non-linear optimization algorithms in the optim
|
|
148
|
-
module.
|
|
149
|
-
|
|
150
|
-
@note term criteria should meet following condition:
|
|
151
|
-
@code
|
|
152
|
-
termcrit.type == (TermCriteria::MAX_ITER + TermCriteria::EPS) && termcrit.epsilon > 0 && termcrit.maxCount > 0
|
|
153
|
-
@endcode
|
|
154
|
-
*/
|
|
155
|
-
class CV_EXPORTS DownhillSolver : public MinProblemSolver
|
|
156
|
-
{
|
|
157
|
-
public:
|
|
158
|
-
/** @brief Returns the initial step that will be used in downhill simplex algorithm.
|
|
159
|
-
|
|
160
|
-
@param step Initial step that will be used in algorithm. Note, that although corresponding setter
|
|
161
|
-
accepts column-vectors as well as row-vectors, this method will return a row-vector.
|
|
162
|
-
@see DownhillSolver::setInitStep
|
|
163
|
-
*/
|
|
164
|
-
virtual void getInitStep(OutputArray step) const=0;
|
|
165
|
-
|
|
166
|
-
/** @brief Sets the initial step that will be used in downhill simplex algorithm.
|
|
167
|
-
|
|
168
|
-
Step, together with initial point (given in DownhillSolver::minimize) are two `n`-dimensional
|
|
169
|
-
vectors that are used to determine the shape of initial simplex. Roughly said, initial point
|
|
170
|
-
determines the position of a simplex (it will become simplex's centroid), while step determines the
|
|
171
|
-
spread (size in each dimension) of a simplex. To be more precise, if \f$s,x_0\in\mathbb{R}^n\f$ are
|
|
172
|
-
the initial step and initial point respectively, the vertices of a simplex will be:
|
|
173
|
-
\f$v_0:=x_0-\frac{1}{2} s\f$ and \f$v_i:=x_0+s_i\f$ for \f$i=1,2,\dots,n\f$ where \f$s_i\f$ denotes
|
|
174
|
-
projections of the initial step of *n*-th coordinate (the result of projection is treated to be
|
|
175
|
-
vector given by \f$s_i:=e_i\cdot\left<e_i\cdot s\right>\f$, where \f$e_i\f$ form canonical basis)
|
|
176
|
-
|
|
177
|
-
@param step Initial step that will be used in algorithm. Roughly said, it determines the spread
|
|
178
|
-
(size in each dimension) of an initial simplex.
|
|
179
|
-
*/
|
|
180
|
-
virtual void setInitStep(InputArray step)=0;
|
|
181
|
-
|
|
182
|
-
/** @brief This function returns the reference to the ready-to-use DownhillSolver object.
|
|
183
|
-
|
|
184
|
-
All the parameters are optional, so this procedure can be called even without parameters at
|
|
185
|
-
all. In this case, the default values will be used. As default value for terminal criteria are
|
|
186
|
-
the only sensible ones, MinProblemSolver::setFunction() and DownhillSolver::setInitStep()
|
|
187
|
-
should be called upon the obtained object, if the respective parameters were not given to
|
|
188
|
-
create(). Otherwise, the two ways (give parameters to createDownhillSolver() or miss them out
|
|
189
|
-
and call the MinProblemSolver::setFunction() and DownhillSolver::setInitStep()) are absolutely
|
|
190
|
-
equivalent (and will drop the same errors in the same way, should invalid input be detected).
|
|
191
|
-
@param f Pointer to the function that will be minimized, similarly to the one you submit via
|
|
192
|
-
MinProblemSolver::setFunction.
|
|
193
|
-
@param initStep Initial step, that will be used to construct the initial simplex, similarly to the one
|
|
194
|
-
you submit via MinProblemSolver::setInitStep.
|
|
195
|
-
@param termcrit Terminal criteria to the algorithm, similarly to the one you submit via
|
|
196
|
-
MinProblemSolver::setTermCriteria.
|
|
197
|
-
*/
|
|
198
|
-
static Ptr<DownhillSolver> create(const Ptr<MinProblemSolver::Function>& f=Ptr<MinProblemSolver::Function>(),
|
|
199
|
-
InputArray initStep=Mat_<double>(1,1,0.0),
|
|
200
|
-
TermCriteria termcrit=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS,5000,0.000001));
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
/** @brief This class is used to perform the non-linear non-constrained minimization of a function
|
|
204
|
-
with known gradient,
|
|
205
|
-
|
|
206
|
-
defined on an *n*-dimensional Euclidean space, using the **Nonlinear Conjugate Gradient method**.
|
|
207
|
-
The implementation was done based on the beautifully clear explanatory article [An Introduction to
|
|
208
|
-
the Conjugate Gradient Method Without the Agonizing
|
|
209
|
-
Pain](http://www.cs.cmu.edu/~quake-papers/painless-conjugate-gradient.pdf) by Jonathan Richard
|
|
210
|
-
Shewchuk. The method can be seen as an adaptation of a standard Conjugate Gradient method (see, for
|
|
211
|
-
example <http://en.wikipedia.org/wiki/Conjugate_gradient_method>) for numerically solving the
|
|
212
|
-
systems of linear equations.
|
|
213
|
-
|
|
214
|
-
It should be noted, that this method, although deterministic, is rather a heuristic method and
|
|
215
|
-
therefore may converge to a local minima, not necessary a global one. What is even more disastrous,
|
|
216
|
-
most of its behaviour is ruled by gradient, therefore it essentially cannot distinguish between
|
|
217
|
-
local minima and maxima. Therefore, if it starts sufficiently near to the local maximum, it may
|
|
218
|
-
converge to it. Another obvious restriction is that it should be possible to compute the gradient of
|
|
219
|
-
a function at any point, thus it is preferable to have analytic expression for gradient and
|
|
220
|
-
computational burden should be born by the user.
|
|
221
|
-
|
|
222
|
-
The latter responsibility is accomplished via the getGradient method of a
|
|
223
|
-
MinProblemSolver::Function interface (which represents function being optimized). This method takes
|
|
224
|
-
point a point in *n*-dimensional space (first argument represents the array of coordinates of that
|
|
225
|
-
point) and compute its gradient (it should be stored in the second argument as an array).
|
|
226
|
-
|
|
227
|
-
@note class ConjGradSolver thus does not add any new methods to the basic MinProblemSolver interface.
|
|
228
|
-
|
|
229
|
-
@note term criteria should meet following condition:
|
|
230
|
-
@code
|
|
231
|
-
termcrit.type == (TermCriteria::MAX_ITER + TermCriteria::EPS) && termcrit.epsilon > 0 && termcrit.maxCount > 0
|
|
232
|
-
// or
|
|
233
|
-
termcrit.type == TermCriteria::MAX_ITER) && termcrit.maxCount > 0
|
|
234
|
-
@endcode
|
|
235
|
-
*/
|
|
236
|
-
class CV_EXPORTS ConjGradSolver : public MinProblemSolver
|
|
237
|
-
{
|
|
238
|
-
public:
|
|
239
|
-
/** @brief This function returns the reference to the ready-to-use ConjGradSolver object.
|
|
240
|
-
|
|
241
|
-
All the parameters are optional, so this procedure can be called even without parameters at
|
|
242
|
-
all. In this case, the default values will be used. As default value for terminal criteria are
|
|
243
|
-
the only sensible ones, MinProblemSolver::setFunction() should be called upon the obtained
|
|
244
|
-
object, if the function was not given to create(). Otherwise, the two ways (submit it to
|
|
245
|
-
create() or miss it out and call the MinProblemSolver::setFunction()) are absolutely equivalent
|
|
246
|
-
(and will drop the same errors in the same way, should invalid input be detected).
|
|
247
|
-
@param f Pointer to the function that will be minimized, similarly to the one you submit via
|
|
248
|
-
MinProblemSolver::setFunction.
|
|
249
|
-
@param termcrit Terminal criteria to the algorithm, similarly to the one you submit via
|
|
250
|
-
MinProblemSolver::setTermCriteria.
|
|
251
|
-
*/
|
|
252
|
-
static Ptr<ConjGradSolver> create(const Ptr<MinProblemSolver::Function>& f=Ptr<ConjGradSolver::Function>(),
|
|
253
|
-
TermCriteria termcrit=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS,5000,0.000001));
|
|
254
|
-
};
|
|
255
|
-
|
|
256
|
-
//! return codes for cv::solveLP() function
|
|
257
|
-
enum SolveLPResult
|
|
258
|
-
{
|
|
259
|
-
SOLVELP_UNBOUNDED = -2, //!< problem is unbounded (target function can achieve arbitrary high values)
|
|
260
|
-
SOLVELP_UNFEASIBLE = -1, //!< problem is unfeasible (there are no points that satisfy all the constraints imposed)
|
|
261
|
-
SOLVELP_SINGLE = 0, //!< there is only one maximum for target function
|
|
262
|
-
SOLVELP_MULTI = 1 //!< there are multiple maxima for target function - the arbitrary one is returned
|
|
263
|
-
};
|
|
264
|
-
|
|
265
|
-
/** @brief Solve given (non-integer) linear programming problem using the Simplex Algorithm (Simplex Method).
|
|
266
|
-
|
|
267
|
-
What we mean here by "linear programming problem" (or LP problem, for short) can be formulated as:
|
|
268
|
-
|
|
269
|
-
\f[\mbox{Maximize } c\cdot x\\
|
|
270
|
-
\mbox{Subject to:}\\
|
|
271
|
-
Ax\leq b\\
|
|
272
|
-
x\geq 0\f]
|
|
273
|
-
|
|
274
|
-
Where \f$c\f$ is fixed `1`-by-`n` row-vector, \f$A\f$ is fixed `m`-by-`n` matrix, \f$b\f$ is fixed `m`-by-`1`
|
|
275
|
-
column vector and \f$x\f$ is an arbitrary `n`-by-`1` column vector, which satisfies the constraints.
|
|
276
|
-
|
|
277
|
-
Simplex algorithm is one of many algorithms that are designed to handle this sort of problems
|
|
278
|
-
efficiently. Although it is not optimal in theoretical sense (there exist algorithms that can solve
|
|
279
|
-
any problem written as above in polynomial time, while simplex method degenerates to exponential
|
|
280
|
-
time for some special cases), it is well-studied, easy to implement and is shown to work well for
|
|
281
|
-
real-life purposes.
|
|
282
|
-
|
|
283
|
-
The particular implementation is taken almost verbatim from **Introduction to Algorithms, third
|
|
284
|
-
edition** by T. H. Cormen, C. E. Leiserson, R. L. Rivest and Clifford Stein. In particular, the
|
|
285
|
-
Bland's rule <http://en.wikipedia.org/wiki/Bland%27s_rule> is used to prevent cycling.
|
|
286
|
-
|
|
287
|
-
@param Func This row-vector corresponds to \f$c\f$ in the LP problem formulation (see above). It should
|
|
288
|
-
contain 32- or 64-bit floating point numbers. As a convenience, column-vector may be also submitted,
|
|
289
|
-
in the latter case it is understood to correspond to \f$c^T\f$.
|
|
290
|
-
@param Constr `m`-by-`n+1` matrix, whose rightmost column corresponds to \f$b\f$ in formulation above
|
|
291
|
-
and the remaining to \f$A\f$. It should contain 32- or 64-bit floating point numbers.
|
|
292
|
-
@param z The solution will be returned here as a column-vector - it corresponds to \f$c\f$ in the
|
|
293
|
-
formulation above. It will contain 64-bit floating point numbers.
|
|
294
|
-
@return One of cv::SolveLPResult
|
|
295
|
-
*/
|
|
296
|
-
CV_EXPORTS_W int solveLP(InputArray Func, InputArray Constr, OutputArray z);
|
|
297
|
-
|
|
298
|
-
//! @}
|
|
299
|
-
|
|
300
|
-
}// cv
|
|
301
|
-
|
|
302
|
-
#endif
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
// This file is part of OpenCV project.
|
|
2
|
-
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
3
|
-
// of this distribution and at http://opencv.org/license.html.
|
|
4
|
-
|
|
5
|
-
// Copyright (C) 2016, Intel Corporation, all rights reserved.
|
|
6
|
-
// Third party copyrights are property of their respective owners.
|
|
7
|
-
|
|
8
|
-
// OpenVX related definitions and declarations
|
|
9
|
-
|
|
10
|
-
#pragma once
|
|
11
|
-
#ifndef OPENCV_OVX_HPP
|
|
12
|
-
#define OPENCV_OVX_HPP
|
|
13
|
-
|
|
14
|
-
#include "cvdef.h"
|
|
15
|
-
|
|
16
|
-
namespace cv
|
|
17
|
-
{
|
|
18
|
-
/// Check if use of OpenVX is possible
|
|
19
|
-
CV_EXPORTS_W bool haveOpenVX();
|
|
20
|
-
|
|
21
|
-
/// Check if use of OpenVX is enabled
|
|
22
|
-
CV_EXPORTS_W bool useOpenVX();
|
|
23
|
-
|
|
24
|
-
/// Enable/disable use of OpenVX
|
|
25
|
-
CV_EXPORTS_W void setUseOpenVX(bool flag);
|
|
26
|
-
} // namespace cv
|
|
27
|
-
|
|
28
|
-
#endif // OPENCV_OVX_HPP
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
// This file is part of OpenCV project.
|
|
2
|
-
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
3
|
-
// of this distribution and at http://opencv.org/license.html.
|
|
4
|
-
|
|
5
|
-
#ifndef OPENCV_CORE_PARALLEL_FOR_OPENMP_HPP
|
|
6
|
-
#define OPENCV_CORE_PARALLEL_FOR_OPENMP_HPP
|
|
7
|
-
|
|
8
|
-
#include "opencv2/core/parallel/parallel_backend.hpp"
|
|
9
|
-
|
|
10
|
-
#if !defined(_OPENMP) && !defined(OPENCV_SKIP_OPENMP_PRESENSE_CHECK)
|
|
11
|
-
#error "This file must be compiled with enabled OpenMP"
|
|
12
|
-
#endif
|
|
13
|
-
|
|
14
|
-
#include <omp.h>
|
|
15
|
-
|
|
16
|
-
namespace cv { namespace parallel { namespace openmp {
|
|
17
|
-
|
|
18
|
-
/** OpenMP parallel_for API implementation
|
|
19
|
-
*
|
|
20
|
-
* @sa setParallelForBackend
|
|
21
|
-
* @ingroup core_parallel_backend
|
|
22
|
-
*/
|
|
23
|
-
class ParallelForBackend : public ParallelForAPI
|
|
24
|
-
{
|
|
25
|
-
protected:
|
|
26
|
-
int numThreads;
|
|
27
|
-
int numThreadsMax;
|
|
28
|
-
public:
|
|
29
|
-
ParallelForBackend()
|
|
30
|
-
{
|
|
31
|
-
numThreads = 0;
|
|
32
|
-
numThreadsMax = omp_get_max_threads();
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
virtual ~ParallelForBackend() {}
|
|
36
|
-
|
|
37
|
-
virtual void parallel_for(int tasks, FN_parallel_for_body_cb_t body_callback, void* callback_data) CV_OVERRIDE
|
|
38
|
-
{
|
|
39
|
-
#pragma omp parallel for schedule(dynamic) num_threads(numThreads > 0 ? numThreads : numThreadsMax)
|
|
40
|
-
for (int i = 0; i < tasks; ++i)
|
|
41
|
-
body_callback(i, i + 1, callback_data);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
virtual int getThreadNum() const CV_OVERRIDE
|
|
45
|
-
{
|
|
46
|
-
return omp_get_thread_num();
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
virtual int getNumThreads() const CV_OVERRIDE
|
|
50
|
-
{
|
|
51
|
-
return numThreads > 0
|
|
52
|
-
? numThreads
|
|
53
|
-
: numThreadsMax;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
virtual int setNumThreads(int nThreads) CV_OVERRIDE
|
|
57
|
-
{
|
|
58
|
-
int oldNumThreads = numThreads;
|
|
59
|
-
numThreads = nThreads;
|
|
60
|
-
// nothing needed as numThreads is used in #pragma omp parallel for directly
|
|
61
|
-
return oldNumThreads;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const char* getName() const CV_OVERRIDE
|
|
65
|
-
{
|
|
66
|
-
return "openmp";
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
}}} // namespace
|
|
71
|
-
|
|
72
|
-
#endif // OPENCV_CORE_PARALLEL_FOR_OPENMP_HPP
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
// This file is part of OpenCV project.
|
|
2
|
-
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
3
|
-
// of this distribution and at http://opencv.org/license.html.
|
|
4
|
-
|
|
5
|
-
#ifndef OPENCV_CORE_PARALLEL_FOR_TBB_HPP
|
|
6
|
-
#define OPENCV_CORE_PARALLEL_FOR_TBB_HPP
|
|
7
|
-
|
|
8
|
-
#include "opencv2/core/parallel/parallel_backend.hpp"
|
|
9
|
-
#include <opencv2/core/utils/logger.hpp>
|
|
10
|
-
|
|
11
|
-
#ifndef TBB_SUPPRESS_DEPRECATED_MESSAGES // supress warning
|
|
12
|
-
#define TBB_SUPPRESS_DEPRECATED_MESSAGES 1
|
|
13
|
-
#endif
|
|
14
|
-
#include "tbb/tbb.h"
|
|
15
|
-
#if !defined(TBB_INTERFACE_VERSION)
|
|
16
|
-
#error "Unknows/unsupported TBB version"
|
|
17
|
-
#endif
|
|
18
|
-
|
|
19
|
-
#if TBB_INTERFACE_VERSION >= 8000
|
|
20
|
-
#include "tbb/task_arena.h"
|
|
21
|
-
#endif
|
|
22
|
-
|
|
23
|
-
namespace cv { namespace parallel { namespace tbb {
|
|
24
|
-
|
|
25
|
-
using namespace ::tbb;
|
|
26
|
-
|
|
27
|
-
#if TBB_INTERFACE_VERSION >= 8000
|
|
28
|
-
static tbb::task_arena& getArena()
|
|
29
|
-
{
|
|
30
|
-
static tbb::task_arena tbbArena(tbb::task_arena::automatic);
|
|
31
|
-
return tbbArena;
|
|
32
|
-
}
|
|
33
|
-
#else
|
|
34
|
-
static tbb::task_scheduler_init& getScheduler()
|
|
35
|
-
{
|
|
36
|
-
static tbb::task_scheduler_init tbbScheduler(tbb::task_scheduler_init::deferred);
|
|
37
|
-
return tbbScheduler;
|
|
38
|
-
}
|
|
39
|
-
#endif
|
|
40
|
-
|
|
41
|
-
/** TBB parallel_for API implementation
|
|
42
|
-
*
|
|
43
|
-
* @sa setParallelForBackend
|
|
44
|
-
* @ingroup core_parallel_backend
|
|
45
|
-
*/
|
|
46
|
-
class ParallelForBackend : public ParallelForAPI
|
|
47
|
-
{
|
|
48
|
-
protected:
|
|
49
|
-
int numThreads;
|
|
50
|
-
int numThreadsMax;
|
|
51
|
-
public:
|
|
52
|
-
ParallelForBackend()
|
|
53
|
-
{
|
|
54
|
-
CV_LOG_INFO(NULL, "Initializing TBB parallel backend: TBB_INTERFACE_VERSION=" << TBB_INTERFACE_VERSION);
|
|
55
|
-
numThreads = 0;
|
|
56
|
-
#if TBB_INTERFACE_VERSION >= 8000
|
|
57
|
-
(void)getArena();
|
|
58
|
-
#else
|
|
59
|
-
(void)getScheduler();
|
|
60
|
-
#endif
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
virtual ~ParallelForBackend() {}
|
|
64
|
-
|
|
65
|
-
class CallbackProxy
|
|
66
|
-
{
|
|
67
|
-
const FN_parallel_for_body_cb_t& callback;
|
|
68
|
-
void* const callback_data;
|
|
69
|
-
const int tasks;
|
|
70
|
-
public:
|
|
71
|
-
inline CallbackProxy(int tasks_, FN_parallel_for_body_cb_t& callback_, void* callback_data_)
|
|
72
|
-
: callback(callback_), callback_data(callback_data_), tasks(tasks_)
|
|
73
|
-
{
|
|
74
|
-
// nothing
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
void operator()(const tbb::blocked_range<int>& range) const
|
|
78
|
-
{
|
|
79
|
-
this->callback(range.begin(), range.end(), callback_data);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
void operator()() const
|
|
83
|
-
{
|
|
84
|
-
tbb::parallel_for(tbb::blocked_range<int>(0, tasks), *this);
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
virtual void parallel_for(int tasks, FN_parallel_for_body_cb_t body_callback, void* callback_data) CV_OVERRIDE
|
|
89
|
-
{
|
|
90
|
-
CallbackProxy task(tasks, body_callback, callback_data);
|
|
91
|
-
#if TBB_INTERFACE_VERSION >= 8000
|
|
92
|
-
getArena().execute(task);
|
|
93
|
-
#else
|
|
94
|
-
task();
|
|
95
|
-
#endif
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
virtual int getThreadNum() const CV_OVERRIDE
|
|
99
|
-
{
|
|
100
|
-
#if TBB_INTERFACE_VERSION >= 9100
|
|
101
|
-
return tbb::this_task_arena::current_thread_index();
|
|
102
|
-
#elif TBB_INTERFACE_VERSION >= 8000
|
|
103
|
-
return tbb::task_arena::current_thread_index();
|
|
104
|
-
#else
|
|
105
|
-
return 0;
|
|
106
|
-
#endif
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
virtual int getNumThreads() const CV_OVERRIDE
|
|
110
|
-
{
|
|
111
|
-
#if TBB_INTERFACE_VERSION >= 9100
|
|
112
|
-
return getArena().max_concurrency();
|
|
113
|
-
#elif TBB_INTERFACE_VERSION >= 8000
|
|
114
|
-
return numThreads > 0
|
|
115
|
-
? numThreads
|
|
116
|
-
: tbb::task_scheduler_init::default_num_threads();
|
|
117
|
-
#else
|
|
118
|
-
return getScheduler().is_active()
|
|
119
|
-
? numThreads
|
|
120
|
-
: tbb::task_scheduler_init::default_num_threads();
|
|
121
|
-
#endif
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
virtual int setNumThreads(int nThreads) CV_OVERRIDE
|
|
125
|
-
{
|
|
126
|
-
int oldNumThreads = numThreads;
|
|
127
|
-
numThreads = nThreads;
|
|
128
|
-
|
|
129
|
-
#if TBB_INTERFACE_VERSION >= 8000
|
|
130
|
-
auto& tbbArena = getArena();
|
|
131
|
-
if (tbbArena.is_active())
|
|
132
|
-
tbbArena.terminate();
|
|
133
|
-
if (numThreads > 0)
|
|
134
|
-
tbbArena.initialize(numThreads);
|
|
135
|
-
#else
|
|
136
|
-
auto& tbbScheduler = getScheduler();
|
|
137
|
-
if (tbbScheduler.is_active())
|
|
138
|
-
tbbScheduler.terminate();
|
|
139
|
-
if (numThreads > 0)
|
|
140
|
-
tbbScheduler.initialize(numThreads);
|
|
141
|
-
#endif
|
|
142
|
-
return oldNumThreads;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
const char* getName() const CV_OVERRIDE
|
|
146
|
-
{
|
|
147
|
-
return "tbb";
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
}}} // namespace
|
|
152
|
-
|
|
153
|
-
#endif // OPENCV_CORE_PARALLEL_FOR_TBB_HPP
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
// This file is part of OpenCV project.
|
|
2
|
-
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
3
|
-
// of this distribution and at http://opencv.org/license.html.
|
|
4
|
-
|
|
5
|
-
#ifndef OPENCV_CORE_PARALLEL_BACKEND_HPP
|
|
6
|
-
#define OPENCV_CORE_PARALLEL_BACKEND_HPP
|
|
7
|
-
|
|
8
|
-
#include "opencv2/core/cvdef.h"
|
|
9
|
-
#include <memory>
|
|
10
|
-
|
|
11
|
-
namespace cv { namespace parallel {
|
|
12
|
-
#ifndef CV_API_CALL
|
|
13
|
-
#define CV_API_CALL
|
|
14
|
-
#endif
|
|
15
|
-
|
|
16
|
-
/** @addtogroup core_parallel_backend
|
|
17
|
-
* @{
|
|
18
|
-
* API below is provided to resolve problem of CPU resource over-subscription by multiple thread pools from different multi-threading frameworks.
|
|
19
|
-
* This is common problem for cases when OpenCV compiled threading framework is different from the Users Applications framework.
|
|
20
|
-
*
|
|
21
|
-
* Applications can replace OpenCV `parallel_for()` backend with own implementation (to reuse Application's thread pool).
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* ### Backend API usage examples
|
|
25
|
-
*
|
|
26
|
-
* #### Intel TBB
|
|
27
|
-
*
|
|
28
|
-
* - include header with simple implementation of TBB backend:
|
|
29
|
-
* @snippet parallel_backend/example-tbb.cpp tbb_include
|
|
30
|
-
* - execute backend replacement code:
|
|
31
|
-
* @snippet parallel_backend/example-tbb.cpp tbb_backend
|
|
32
|
-
* - configuration of compiler/linker options is responsibility of Application's scripts
|
|
33
|
-
*
|
|
34
|
-
* #### OpenMP
|
|
35
|
-
*
|
|
36
|
-
* - include header with simple implementation of OpenMP backend:
|
|
37
|
-
* @snippet parallel_backend/example-openmp.cpp openmp_include
|
|
38
|
-
* - execute backend replacement code:
|
|
39
|
-
* @snippet parallel_backend/example-openmp.cpp openmp_backend
|
|
40
|
-
* - Configuration of compiler/linker options is responsibility of Application's scripts
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* ### Plugins support
|
|
44
|
-
*
|
|
45
|
-
* Runtime configuration options:
|
|
46
|
-
* - change backend priority: `OPENCV_PARALLEL_PRIORITY_<backend>=9999`
|
|
47
|
-
* - disable backend: `OPENCV_PARALLEL_PRIORITY_<backend>=0`
|
|
48
|
-
* - specify list of backends with high priority (>100000): `OPENCV_PARALLEL_PRIORITY_LIST=TBB,OPENMP`. Unknown backends are registered as new plugins.
|
|
49
|
-
*
|
|
50
|
-
*/
|
|
51
|
-
|
|
52
|
-
/** Interface for parallel_for backends implementations
|
|
53
|
-
*
|
|
54
|
-
* @sa setParallelForBackend
|
|
55
|
-
*/
|
|
56
|
-
class CV_EXPORTS ParallelForAPI
|
|
57
|
-
{
|
|
58
|
-
public:
|
|
59
|
-
virtual ~ParallelForAPI();
|
|
60
|
-
|
|
61
|
-
typedef void (CV_API_CALL *FN_parallel_for_body_cb_t)(int start, int end, void* data);
|
|
62
|
-
|
|
63
|
-
virtual void parallel_for(int tasks, FN_parallel_for_body_cb_t body_callback, void* callback_data) = 0;
|
|
64
|
-
|
|
65
|
-
virtual int getThreadNum() const = 0;
|
|
66
|
-
|
|
67
|
-
virtual int getNumThreads() const = 0;
|
|
68
|
-
|
|
69
|
-
virtual int setNumThreads(int nThreads) = 0;
|
|
70
|
-
|
|
71
|
-
virtual const char* getName() const = 0;
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
/** @brief Replace OpenCV parallel_for backend
|
|
75
|
-
*
|
|
76
|
-
* Application can replace OpenCV `parallel_for()` backend with own implementation.
|
|
77
|
-
*
|
|
78
|
-
* @note This call is not thread-safe. Consider calling this function from the `main()` before any other OpenCV processing functions (and without any other created threads).
|
|
79
|
-
*/
|
|
80
|
-
CV_EXPORTS void setParallelForBackend(const std::shared_ptr<ParallelForAPI>& api, bool propagateNumThreads = true);
|
|
81
|
-
|
|
82
|
-
/** @brief Change OpenCV parallel_for backend
|
|
83
|
-
*
|
|
84
|
-
* @note This call is not thread-safe. Consider calling this function from the `main()` before any other OpenCV processing functions (and without any other created threads).
|
|
85
|
-
*/
|
|
86
|
-
CV_EXPORTS_W bool setParallelForBackend(const std::string& backendName, bool propagateNumThreads = true);
|
|
87
|
-
|
|
88
|
-
//! @}
|
|
89
|
-
}} // namespace
|
|
90
|
-
#endif // OPENCV_CORE_PARALLEL_BACKEND_HPP
|