Face Engine SDK  5.17.0
A face detection, recognition and tracking engine.
include/fsdk/Estimators/IQualityEstimator.h
00001 #pragma once
00002 
00003 #include <fsdk/IObject.h>
00004 #include <fsdk/FSDKError.h>
00005 #include <fsdk/Optional.h>
00006 #include <fsdk/Types.h>
00007 
00008 namespace fsdk {
00009 
00010 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00011     DECLARE_SMARTPTR(IQualityEstimator);
00012 #endif
00013 
00027     struct Quality {
00028         float light;
00029         float dark;
00030         float gray;
00031         float blur;
00035         inline float getQuality() const noexcept;
00036     };
00037     
00052     struct SubjectiveQuality {
00053         float blur;
00054         float light;
00055         float darkness;
00056         float illumination;
00057         float specularity;
00058         bool isBlurred;
00059         bool isHighlighted;
00060         bool isDark;
00061         bool isIlluminated;
00062         bool isNotSpecular;
00066         inline bool isGood() const noexcept;
00067     };
00068     
00082     struct IQualityEstimator : IRefCounted {
00091         virtual Result<FSDKError>
00092         estimate(const Image& warp, Quality& quality) const noexcept = 0;
00093 
00104         virtual Result<FSDKError>
00105         estimate(
00106             Span<const Image> warps,
00107             Span<Quality> quality) const noexcept = 0;
00108 
00117         virtual Result<FSDKError> estimate(
00118             const Image& warp,
00119             SubjectiveQuality& quality) const noexcept = 0;
00120 
00131         virtual Result<FSDKError>
00132         estimate(
00133             Span<const Image> warps,
00134             Span<SubjectiveQuality> quality) const noexcept = 0;
00135 
00146         virtual Result<FSDKError>
00147         validate(
00148             Span<const Image> warps,
00149             Span<Result<FSDKError>> errors) const noexcept = 0;
00150     };
00151 
00152     /*
00153         Implementation details.
00154     */
00155     float Quality::getQuality() const noexcept {
00156         float min1 = std::min(dark, light);
00157         float min2 = std::min(gray, blur);
00158         return std::min(min1, min2);
00159     }
00160 
00161     /*
00162         Implementation details.
00163     */
00164     bool SubjectiveQuality::isGood() const noexcept {
00165         if (!isBlurred && !isHighlighted && !isDark && !isIlluminated && !isNotSpecular)
00166             return true;
00167         return false;
00168     }
00170 } // namespace fsdk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines