DocSDK  2.4.1
liveness_pipeline.h
Go to the documentation of this file.
1 /* Copyright 2021 ID R&D Inc. All Rights Reserved. */
2 
8 #pragma once
9 
10 #include <string>
11 #include <memory>
12 #include <ostream>
13 #include <utility>
14 #include <vector>
15 #include <unordered_map>
16 
17 #include "config.h"
18 #include "image.h"
19 
20 namespace docsdk {
21 
29  enum class ValidationStatusCode {
30  kOk,
41  };
42 
46  enum class ImageQualityWarning {
47  kRelativeDocumentSizeLowerThan10Percent,
48  kDocumentBordersOutsideOfFrame,
50  kMultipleDocumentsInFrame,
53  kImageTooBlurry,
54  kImageTooCompressed,
55  kPoorImageExposure,
56  kGlareOnImage,
57  };
58 
62  struct Value {
70  float quality_score = 0;
71 
72  std::vector<ImageQualityWarning> image_quality_warnings;
74  Value() = default;
75  Value(float liveness_probability, float liveness_score, float quality_score,
76  std::vector<ImageQualityWarning> image_quality_warnings = {})
77  : liveness_probability(liveness_probability),
78  liveness_score(liveness_score),
79  quality_score(quality_score),
80  image_quality_warnings(std::move(image_quality_warnings)) {}
81 
82  friend std::ostream& operator<<(std::ostream& os, const Value& result) {
83  os << "LivenessPipelineResult::Value["
84  << " liveness_probability: " << result.liveness_probability
85  << ", liveness_score: " << result.liveness_score << ", quality_score: " << result.quality_score
86  << ", image_quality_warnings: [ ";
87  for (size_t idx = 0; idx < result.image_quality_warnings.size(); ++idx) {
88  if (idx != 0) {
89  os << ", ";
90  }
91  os << static_cast<int>(result.image_quality_warnings[idx]);
92  }
93  os << " ]";
94  return os;
95  }
96  };
97 
98  LivenessPipelineResult() = default;
99  explicit LivenessPipelineResult(ValidationStatusCode status_code) : status_code(status_code) {}
100  explicit LivenessPipelineResult(Value value) : value(std::move(value)), status_code(ValidationStatusCode::kOk) {}
101 
108  const Value& GetValue() const {
109  if (Ok()) {
110  return value;
111  } else {
112  throw std::runtime_error("LivenessPipelineResult: value is not available, because status code is not kOk");
113  }
114  }
115 
120  const ValidationStatusCode& GetStatusCode() const noexcept {
121  return status_code;
122  }
123 
128  bool Ok() const noexcept {
129  return status_code == ValidationStatusCode::kOk;
130  }
131 
132  friend std::ostream& operator<<(std::ostream& os, const LivenessPipelineResult& result) {
133  os << "LivenessPipelineResult[ status: " << static_cast<int>(result.status_code) << ", value: ";
134  if (result.Ok()) {
135  os << result.value;
136  } else {
137  os << "unavailable";
138  }
139  os << " ]";
140  return os;
141  }
142 
143  private:
144  Value value{};
146 };
147 
155  enum class Calibration {
156  kRegular,
157  kSoft,
158  kHard
159  };
160 
164  std::vector<LivenessPipelineResult::ValidationStatusCode> errors_to_ignore;
165 
169  Calibration calibration = Calibration::kRegular;
170 
171  friend std::ostream& operator<<(std::ostream& os, const LivenessCheckOptions& options) {
172  os << "LivenessCheckOptions[ calibration: " << static_cast<int>(options.calibration) << " ]";
173  return os;
174  }
175 };
176 
181  public:
182  using Ptr = std::shared_ptr<LivenessPipeline>;
183 
191  static Ptr Create(const std::string& path_to_config);
192 
201  virtual LivenessPipelineResult CheckLiveness(Image::Ptr image, const LivenessCheckOptions& options = {}) const = 0;
202 
212  virtual LivenessPipelineResult CheckLivenessSequence(const std::vector<Image::Ptr>& images,
213  const LivenessCheckOptions& options = {}) const = 0;
214 
215  virtual ~LivenessPipeline() noexcept = default;
216 };
217 
222  public:
223  using Ptr = std::shared_ptr<LivenessPipelineComposition>;
224 
232  static Ptr Create(const std::vector<std::string>& paths_to_configs);
233 
243  virtual std::unordered_map<std::string, LivenessPipelineResult> CheckLiveness(
244  Image::Ptr image, const std::unordered_map<std::string, LivenessCheckOptions>& options = {}) const = 0;
245 
246  virtual ~LivenessPipelineComposition() noexcept = default;
247 };
248 
249 } // namespace docsdk
bool Ok() const noexcept
Definition: liveness_pipeline.h:128
friend std::ostream & operator<<(std::ostream &os, const Value &result)
Definition: liveness_pipeline.h:82
std::vector< ImageQualityWarning > image_quality_warnings
Definition: liveness_pipeline.h:72
#define DOCSDK_API
Definition: config.h:24
Calibration
Score/threshold calibration to be used.
Definition: liveness_pipeline.h:155
std::shared_ptr< Image > Ptr
Definition: image.h:22
Document liveness checking pipeline composition.
Definition: liveness_pipeline.h:221
std::shared_ptr< LivenessPipeline > Ptr
Definition: liveness_pipeline.h:182
friend std::ostream & operator<<(std::ostream &os, const LivenessCheckOptions &options)
Definition: liveness_pipeline.h:171
LivenessPipelineResult(Value value)
Definition: liveness_pipeline.h:100
std::shared_ptr< LivenessPipelineComposition > Ptr
Definition: liveness_pipeline.h:223
Document liveness checking pipeline.
Definition: liveness_pipeline.h:180
Liveness pipeline result.
Definition: liveness_pipeline.h:25
Document liveness check result.
Definition: liveness_pipeline.h:62
ImageQualityWarning
Image quality warning (image quality check is performed along with liveness check) ...
Definition: liveness_pipeline.h:46
Value(float liveness_probability, float liveness_score, float quality_score, std::vector< ImageQualityWarning > image_quality_warnings={})
Definition: liveness_pipeline.h:75
float liveness_probability
Definition: liveness_pipeline.h:63
float quality_score
Image quality checking score.
Definition: liveness_pipeline.h:70
std::vector< LivenessPipelineResult::ValidationStatusCode > errors_to_ignore
Defines which validation errors should be ignored during the liveness check.
Definition: liveness_pipeline.h:164
const ValidationStatusCode & GetStatusCode() const noexcept
Definition: liveness_pipeline.h:120
LivenessPipelineResult(ValidationStatusCode status_code)
Definition: liveness_pipeline.h:99
const Value & GetValue() const
Definition: liveness_pipeline.h:108
friend std::ostream & operator<<(std::ostream &os, const LivenessPipelineResult &result)
Definition: liveness_pipeline.h:132
Definition: image.h:16
Configurable options used for document liveness check.
Definition: liveness_pipeline.h:151
ValidationStatusCode
Image validation status code (image validation is performed beforehand each liveness check) ...
Definition: liveness_pipeline.h:29
Calibration calibration
Score/threshold calibration to be used for document liveness check.
Definition: liveness_pipeline.h:169
float liveness_score
Definition: liveness_pipeline.h:64