3#include "../_cexports/c_polimago.h"
5#include "../global.hpp"
6#include "../value_range.hpp"
8#include "predictor_base.hpp"
9#include "search_result.hpp"
37 class SearchPredictorFactory;
43 class SearchPredictor :
public PredictorBase
47 explicit SearchPredictor(ReleaseObjectGuard &&guard)
49 , maxNumResults_(maxNumResultsDefault_)
51 CVB_CALL_CAPI(PMGetSearchClfTrainParams(
Handle(), TrainingParameters(), searchTrainingParameters_));
55 void InitResultBuffer()
61 static CExports::TSCLF LoadInternal(
const String &fileName)
63 CExports::TSCLF predictor =
nullptr;
65 CVB_CALL_CAPI_CHECKED(PMOpenSearchClfTyped(fileName.c_str(), predictor));
69 void SaveFunction(
const String &fileName)
const override
71 CVB_CALL_CAPI_CHECKED(PMSaveSearchClfTyped(fileName.c_str(),
Handle()));
76 return thisObjectName_;
86 : SearchPredictor(ReleaseObjectGuard(LoadInternal(fileName)))
116 return std::make_unique<SearchPredictor>(fileName);
126 return maxNumResults_;
137 if (maxNumResults == maxNumResults_)
141 if (maxNumResults < 1)
145 maxNumResults_ = maxNumResults;
156 return searchTrainingParameters_.SampleSize;
173 return searchTrainingParameters_.InvarianceParams.XYRadius;
195 searchTrainingParameters_.InvarianceParams.MaxScaleMaxL);
205 return static_cast<InvarianceType>(searchTrainingParameters_.InvarianceParams.InvarianceType);
215 return searchTrainingParameters_.NumClfs;
225 return searchTrainingParameters_.Resolution12;
235 return searchTrainingParameters_.ResolutionRest;
256 double locality,
int &numCalls)
258 VerifyCompatibility(img);
260 CExports::cvbval_t numCallsOut = 0;
262 CVB_CALL_CAPI(PMGridSearch(
Handle(), img.Handle(), aoi.Left(), aoi.Top(), aoi.Right(), aoi.Bottom(),
263 gridStep, threshold, locality, maxNumResults_, &pbuffer_[0], numCallsOut));
264 numCalls =
static_cast<int>(numCallsOut);
267 for (
decltype(resultCount) i = 0; i < resultCount; ++i)
293 return GridSearch(img, aoi, gridStep, threshold, locality, numCalls);
314 VerifyCompatibility(img);
315 CExports::TSearchResult tmpRes = res.resInternal_;
316 CExports::cvbval_t tmpDepth = searchDepth;
318 auto retval = CVB_CALL_CAPI(PMInspect(
Handle(), img.Handle(), tmpRes, tmpDepth));
322 searchDepth =
static_cast<int>(tmpDepth);
346 VerifyCompatibility(img);
347 CExports::TSearchResult tmpRes = res.resInternal_;
348 CExports::cvbval_t tmpDepth = searchDepth;
349 CExports::TDiagnostics diag = {};
351 auto retval = CVB_CALL_CAPI(PMInspectD(
Handle(), img.Handle(), tmpRes, tmpDepth, diag));
355 searchDepth =
static_cast<int>(tmpDepth);
359 for (
int i = 0; i < searchDepth; ++i)
378 return Internal::DoBoolCallObjectOut<Image>([&](
void *&resimg) {
379 return CVB_CALL_CAPI(PMSearchResultToImage(
Handle(), sourceImage.
Handle(), res.resInternal_.G, resimg));
388 static const int maxNumResultsDefault_ = 4096;
389 const std::string thisObjectName_ =
"Polimago Search Predictor";
390 CExports::TTrainSearchParams searchTrainingParameters_;
391 CExports::cvbval_t maxNumResults_;
43 class SearchPredictor :
public PredictorBase {
…};
static Angle FromRadians(double rad, bool trim=false) noexcept
Create an angle in radians.
Definition angle.hpp:39
The Common Vision Blox image.
Definition decl_image.hpp:50
void * Handle() const noexcept
Classic API image handle.
Definition decl_image.hpp:237
void * Handle() const noexcept
Classic API Polimago handle.
Definition predictor_base.hpp:68
int NumClassificationSteps() const noexcept
Get the number of classification steps defined during training.
Definition search_predictor.hpp:213
SearchPredictor(const String &fileName)
Load a saved Polimago search predictor from a file.
Definition search_predictor.hpp:85
std::unique_ptr< Image > SearchResultToImage(const Image &sourceImage, SearchResult res)
Create a visual representation of a search result.
Definition search_predictor.hpp:376
ValueRange< double > ScaleRange() const noexcept
Get the range of scale factors that was covered during classifier training.
Definition search_predictor.hpp:192
int MaxNumResults() const noexcept
Get the maximum number of results that can be extracted in a GridSearch operation.
Definition search_predictor.hpp:124
bool Inspect(const Image &img, SearchResult &res, int &searchDepth)
Carries out the operation that GridSearch executes for a grid point, starting at the perspective and ...
Definition search_predictor.hpp:312
double ExtractionRadius() const noexcept
Get the radius for extracting positive search instances.
Definition search_predictor.hpp:171
std::vector< SearchResult > GridSearch(const Image &img, Rect< int > aoi, double gridStep, double threshold, double locality)
Perform a grid search.
Definition search_predictor.hpp:289
int FeatureResolutionStep1And2() const noexcept
Get the feature resolution to be used for the first two classification steps.
Definition search_predictor.hpp:223
std::vector< SearchResult > GridSearch(const Image &img, Rect< int > aoi, double gridStep, double threshold, double locality, int &numCalls)
Perform a grid search.
Definition search_predictor.hpp:255
static std::unique_ptr< SearchPredictor > Load(const String &fileName)
Load a saved predictor from a file.
Definition search_predictor.hpp:114
static std::unique_ptr< SearchPredictor > FromHandle(ReleaseObjectGuard &&guard)
Creates predictor from a classic API handle.
Definition search_predictor.hpp:99
bool Inspect(const Image &img, SearchResult &res, int &searchDepth, std::vector< SearchResult > &trace)
Carries out the operation that GridSearch executes for a grid point, starting at the perspective and ...
Definition search_predictor.hpp:344
ValueRange< Angle > RotationRange() const noexcept
Get the range of angles that was covered during classifier training.
Definition search_predictor.hpp:181
void SetMaxNumResults(int maxNumResults)
Set the maximum number of results that can be extracted in a GridSearch operation....
Definition search_predictor.hpp:135
int FeatureResolutionRest() const noexcept
Get the feature resolution to be used for the third and later classification steps.
Definition search_predictor.hpp:233
int SampleSize() const noexcept
Get the sample size that has been used in each training set.
Definition search_predictor.hpp:154
InvarianceType Invariances() const noexcept
Get the invariances that have been trained on this classifier.
Definition search_predictor.hpp:203
Search results as provided by a Search Classifier.
Definition search_result.hpp:21
Factory class for the generation of search predictors.
Definition search_predictor_factory.hpp:30
Rectangle object.
Definition rect.hpp:24
Container for range definitions.
Definition value_range.hpp:17
Namespace for the Polimago package.
Definition classification_predictor.hpp:38
std::shared_ptr< SearchPredictor > SearchPredictorPtr
Convenience shared pointer for SearchPredictor.
Definition search_predictor.hpp:396
@ None
The enum element indicating undefined state.
Definition classification_predictor.hpp:44
InvarianceType
Invariance types that can be defined for training.
Definition search_predictor.hpp:23
@ AffineGroup
Affine group (i.e. 2x2 matrix plus translation).
Definition search_predictor.hpp:31
@ Translation
Translation.
Definition search_predictor.hpp:27
@ RotationScaleTranslation
Rotation + Scale + Translation.
Definition search_predictor.hpp:29
Root namespace for the Image Manager interface.
Definition c_bayer_to_rgb.h:17
std::string String
String for wide characters or unicode characters.
Definition string.hpp:49