![]() |
Face Engine SDK
5.17.0
A face detection, recognition and tracking engine.
|
00001 #pragma once 00002 00003 #pragma once 00004 00005 #include <fsdk/IObject.h> 00006 #include <fsdk/FSDKError.h> 00007 #include <fsdk/Optional.h> 00008 #include <fsdk/Types.h> 00009 00010 namespace fsdk { 00011 00012 #ifndef DOXYGEN_SHOULD_SKIP_THIS 00013 DECLARE_SMARTPTR(IMedicalMaskEstimator); 00014 #endif 00015 00025 enum class MedicalMask { 00026 Mask = 0, 00027 NoMask, 00028 OccludedFace 00029 }; 00030 00035 enum class MedicalMaskExtended { 00036 Mask = 0, 00037 NoMask, 00038 MaskNotInPlace, 00039 OccludedFace 00040 }; 00041 00046 enum class DetailedMaskType { 00047 CorrectMask = 0, 00048 MouthCoveredWithMask, 00049 ClearFace, 00050 ClearFaceWithMaskUnderChin, 00051 PartlyCoveredFace, 00052 FullMask, 00053 Count 00054 }; 00055 00062 struct MedicalMaskEstimation { 00063 MedicalMask result; 00064 DetailedMaskType maskType; 00065 00066 // scores 00067 float maskScore; 00068 float noMaskScore; 00069 float occludedFaceScore; 00070 00071 float scores[static_cast<int>(DetailedMaskType::Count)]; 00072 00078 inline float getScore(DetailedMaskType type) const; 00079 }; 00086 struct MedicalMaskEstimationExtended { 00087 MedicalMaskExtended result; 00088 // scores 00089 float maskScore; 00090 float noMaskScore; 00091 float maskNotInPlace; 00092 float occludedFaceScore; 00093 }; 00094 00099 struct IMedicalMaskEstimator : IRefCounted { 00108 virtual Result<FSDKError> 00109 estimate( 00110 const Image& warp, 00111 MedicalMaskEstimation& estimation) const noexcept = 0; 00112 00121 virtual Result<FSDKError> 00122 estimate( 00123 const Image& warp, 00124 MedicalMaskEstimationExtended& estimation) const noexcept = 0; 00125 00135 virtual Result<FSDKError> 00136 estimate( 00137 const Image& image, 00138 const Detection& detection, 00139 MedicalMaskEstimation& estimation) const noexcept = 0; 00140 00150 virtual Result<FSDKError> 00151 estimate( 00152 const Image& image, 00153 const Detection& detection, 00154 MedicalMaskEstimationExtended& estimation) const noexcept = 0; 00155 00166 virtual Result<FSDKError> estimate( 00167 Span<const Image> warps, 00168 Span<MedicalMaskEstimation> estimations) const noexcept = 0; 00169 00180 virtual Result<FSDKError> estimate( 00181 Span<const Image> warps, 00182 Span<MedicalMaskEstimationExtended> estimations) const noexcept = 0; 00183 00195 virtual Result<FSDKError> estimate( 00196 Span<const Image> images, 00197 Span<const Detection> detections, 00198 Span<MedicalMaskEstimation> estimations) const noexcept = 0; 00199 00211 virtual Result<FSDKError> estimate( 00212 Span<const Image> images, 00213 Span<const Detection> detections, 00214 Span<MedicalMaskEstimationExtended> estimations) const noexcept = 0; 00225 virtual Result<FSDKError> 00226 validate( 00227 Span<const Image> warps, 00228 Span<Result<FSDKError>> errors) const noexcept = 0; 00229 00241 virtual Result<FSDKError> 00242 validate( 00243 Span<const Image> images, 00244 Span<const Detection> detections, 00245 Span<Result<FSDKError>> errors) const noexcept = 0; 00246 }; 00247 00248 /* 00249 Implementation details. 00250 */ 00251 float MedicalMaskEstimation::getScore(DetailedMaskType type) const { 00252 switch (type) { 00253 case DetailedMaskType::CorrectMask: 00254 case DetailedMaskType::MouthCoveredWithMask: 00255 case DetailedMaskType::ClearFace: 00256 case DetailedMaskType::ClearFaceWithMaskUnderChin: 00257 case DetailedMaskType::PartlyCoveredFace: 00258 case DetailedMaskType::FullMask: 00259 return scores[static_cast<int>(type)]; 00260 default: 00261 return 0.f; 00262 } 00263 } 00265 } // namespace fsdk