Face Engine SDK  5.17.0
A face detection, recognition and tracking engine.
include/fsdk/Estimators/IMedicalMaskEstimator.h
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines