VoiceSDK  5.0.2
liveness.h
Go to the documentation of this file.
1 /* Copyright 2023 ID R&D Inc. All Rights Reserved. */
2 
3 #pragma once
4 #include <string>
5 #include <iostream>
6 #include <utility>
7 #include <memory>
8 #include <voicesdk/core/config.h>
9 
10 namespace voicesdk {
11 
19  enum class ValidationStatusCode {
20  kOk,
22  };
23 
27  struct Value {
28  Value() = default;
29  Value(float score, float probability) : score(score), probability(probability) {}
30 
31  friend std::ostream& operator<<(std::ostream& os, const Value& obj) {
32  os << "LivenessResult::Value["
33  << "score: " << obj.score << ", "
34  << "probability: " << obj.probability << "]";
35  return os;
36  }
37 
38  float score = 0.0f;
39  float probability = 0.0f;
40  };
41 
42  LivenessResult() = default;
43  explicit LivenessResult(const Value& value) : value(value) {}
44  explicit LivenessResult(ValidationStatusCode status_code) : status_code(status_code) {}
45 
50  bool Ok() const noexcept {
51  return status_code == ValidationStatusCode::kOk;
52  }
53 
60  const Value& GetValue() const {
61  if (!Ok()) {
62  throw std::runtime_error("LivenessResult: value is not available, status code is not kOk");
63  }
64 
65  return value;
66  }
67 
72  const ValidationStatusCode& GetStatusCode() const noexcept {
73  return status_code;
74  }
75 
76  friend std::ostream& operator<<(std::ostream& os, const LivenessResult& result) {
77  os << "LivenessResult[ status: " << static_cast<int>(result.status_code) << ", value: ";
78  if (result.Ok()) {
79  os << result.value;
80  } else {
81  os << "unavailable";
82  }
83  os << " ]";
84  return os;
85  }
86 
87 private:
88  Value value;
90 };
91 
96 public:
100  using Ptr = std::shared_ptr<LivenessEngine>;
101 
110  static LivenessEngine::Ptr Create(const std::string& init_path);
111 
121  virtual LivenessResult CheckLiveness(const uint8_t* pcm16_bytes, size_t num_bytes, size_t sample_rate) const = 0;
122 
132  virtual LivenessResult CheckLiveness(const int16_t* pcm16_samples, size_t num_samples,
133  size_t sample_rate) const = 0;
134 
144  virtual LivenessResult CheckLiveness(const float* float_samples, size_t num_samples,
145  size_t sample_rate) const = 0;
146 
154  virtual LivenessResult CheckLiveness(const std::string& audio_path) const = 0;
155 
156  virtual ~LivenessEngine() = default;
157 };
158 
159 } // namespace voicesdk
LivenessResult(ValidationStatusCode status_code)
Definition: liveness.h:44
friend std::ostream & operator<<(std::ostream &os, const Value &obj)
Definition: liveness.h:31
float score
Definition: liveness.h:38
const ValidationStatusCode & GetStatusCode() const noexcept
Definition: liveness.h:72
Definition: intervals.h:8
Voice liveness check class. LivenessEngine is thread-safe.
Definition: liveness.h:95
LivenessResult(const Value &value)
Definition: liveness.h:43
const Value & GetValue() const
Gets liveness check result value. Available only if validation preceding liveness check was successfu...
Definition: liveness.h:60
Result value of successful liveness check.
Definition: liveness.h:27
Voice liveness check result.
Definition: liveness.h:15
friend std::ostream & operator<<(std::ostream &os, const LivenessResult &result)
Definition: liveness.h:76
#define VOICE_SDK_API
Definition: config.h:21
std::shared_ptr< LivenessEngine > Ptr
Smart pointer to LivenessEngine instance.
Definition: liveness.h:100
bool Ok() const noexcept
Returns flag indicating whether validation was successful and liveness result value is available...
Definition: liveness.h:50
ValidationStatusCode
Status code of validation preceding liveness check.
Definition: liveness.h:19
Value(float score, float probability)
Definition: liveness.h:29
float probability
Definition: liveness.h:39