@yeomessagingcom/react-native-yeofr 0.2.4 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,10 @@
3
3
  // swift-module-flags: -target arm64-apple-ios18.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-experimental-feature DebugDescriptionMacro -enable-bare-slash-regex -module-name YEOFR
4
4
  // swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.2
5
5
  import AVFoundation
6
+ import Accelerate
7
+ import Combine
6
8
  import CoreImage
9
+ import CoreMedia
7
10
  import CoreVideo
8
11
  import Foundation
9
12
  import Swift
@@ -13,6 +16,59 @@ import Vision
13
16
  import _Concurrency
14
17
  import _StringProcessing
15
18
  import _SwiftConcurrencyShims
19
+ import simd
20
+ @_hasMissingDesignatedInitializers final public class YEOFaceLivenessDetector {
21
+ public static let shared: YEOFR.YEOFaceLivenessDetector
22
+ public enum DebugMode {
23
+ case off
24
+ case depth
25
+ public static func == (a: YEOFR.YEOFaceLivenessDetector.DebugMode, b: YEOFR.YEOFaceLivenessDetector.DebugMode) -> Swift.Bool
26
+ public func hash(into hasher: inout Swift.Hasher)
27
+ public var hashValue: Swift.Int {
28
+ get
29
+ }
30
+ }
31
+ public struct YEOFaceLivenessDetectorConfig {
32
+ public init(minNormalizedFlatness: Swift.Float, maxNormalizedFlatness: Swift.Float, minInterquartileRange: Swift.Float, minNoseProtrusionRatio: Swift.Float, minRequiredSamples: Swift.Int, requiredConfidenceFrames: Swift.Int, faceDetectionConfidence: Swift.Float, requiredLiveFrames: Swift.Int, requiredSpoofFrames: Swift.Int, requiredNoFaceFrames: Swift.Int, roiShrinkX: CoreFoundation.CGFloat, roiShrinkY: CoreFoundation.CGFloat, minValidFaceDepth: Swift.Float, maxValidFaceDepth: Swift.Float, minLiveConfidence: Swift.Float, debugLogging: Swift.Bool)
33
+ public var minNormalizedFlatness: Swift.Float
34
+ public var maxNormalizedFlatness: Swift.Float
35
+ public var minInterquartileRange: Swift.Float
36
+ public var minNoseProtrusionRatio: Swift.Float
37
+ public var minRequiredSamples: Swift.Int
38
+ public var requiredConfidenceFrames: Swift.Int
39
+ public var faceDetectionConfidence: Swift.Float
40
+ public var requiredLiveFrames: Swift.Int
41
+ public var requiredSpoofFrames: Swift.Int
42
+ public var requiredNoFaceFrames: Swift.Int
43
+ public var roiShrinkX: CoreFoundation.CGFloat
44
+ public var roiShrinkY: CoreFoundation.CGFloat
45
+ public var debugLogging: Swift.Bool
46
+ public static var defaultConfiguration: YEOFR.YEOFaceLivenessDetector.YEOFaceLivenessDetectorConfig {
47
+ get
48
+ }
49
+ }
50
+ public struct AnalysisMetrics : Swift.CustomStringConvertible {
51
+ public var description: Swift.String {
52
+ get
53
+ }
54
+ }
55
+ final public var debugMode: YEOFR.YEOFaceLivenessDetector.DebugMode
56
+ final public let debugImagePublisher: Combine.PassthroughSubject<UIKit.UIImage?, Swift.Never>
57
+ final public func analyzeFace(colorSampleBuffer: CoreMedia.CMSampleBuffer, depthData: AVFoundation.AVDepthData, orientation: ImageIO.CGImagePropertyOrientation, visionRect: CoreFoundation.CGRect) -> YEOFR.YEOFaceLivenessDetectorResult
58
+ final public func isConfidentlyLive() -> Swift.Bool
59
+ final public func isConfidentlySpoof() -> Swift.Bool
60
+ final public func reset()
61
+ #if compiler(>=5.3) && $NonescapableTypes
62
+ final public func getLastMetrics() -> YEOFR.YEOFaceLivenessDetector.AnalysisMetrics?
63
+ #endif
64
+ final public func updateConfig(_ value: YEOFR.YEOFaceLivenessDetector.YEOFaceLivenessDetectorConfig)
65
+ @objc deinit
66
+ }
67
+ extension YEOFR.YEOFaceLivenessDetector {
68
+ #if compiler(>=5.3) && $NonescapableTypes
69
+ final public func generateDebugImage(orientation: ImageIO.CGImagePropertyOrientation) -> UIKit.UIImage?
70
+ #endif
71
+ }
16
72
  final public class YEOFRValueDebounce {
17
73
  public init(threshold: Swift.Int)
18
74
  final public func reset()
@@ -45,6 +101,15 @@ public struct ImageFrameParameters : Swift.Equatable {
45
101
  public static func == (lhs: YEOFR.ImageFrameParameters, rhs: YEOFR.ImageFrameParameters) -> Swift.Bool
46
102
  public static func imageParameter(forImageBuffer imageBuffer: CoreVideo.CVImageBuffer) -> YEOFR.ImageFrameParameters
47
103
  }
104
+ public enum InconclusiveReason : Swift.CustomStringConvertible {
105
+ case initialising
106
+ case failedToCopyColorBuffer
107
+ case noFaceDetected
108
+ case lowConfidence(Swift.Float)
109
+ public var description: Swift.String {
110
+ get
111
+ }
112
+ }
48
113
  public struct SDKFaceRecognitionResult : Swift.Equatable {
49
114
  public var faceState: YEOFR.FaceRecognitionState
50
115
  public var detectedCount: Swift.Int
@@ -57,6 +122,18 @@ public struct SDKFaceRecognitionResult : Swift.Equatable {
57
122
  #endif
58
123
  public static func == (lhs: YEOFR.SDKFaceRecognitionResult, rhs: YEOFR.SDKFaceRecognitionResult) -> Swift.Bool
59
124
  }
125
+ public enum SpoofReason : Swift.CustomStringConvertible {
126
+ case flatSurface(flatnessScore: Swift.Float)
127
+ case insufficientDepthVariation
128
+ case insufficientDepthData(Swift.Int)
129
+ case noNoseProtrusion(protrusionRatio: Swift.Float)
130
+ case insufficientSamples(count: Swift.Int, required: Swift.Int)
131
+ case invalidDepthData(details: Swift.String)
132
+ case tooMuchVariation(details: Swift.String)
133
+ public var description: Swift.String {
134
+ get
135
+ }
136
+ }
60
137
  public struct TrueDepthConfiguration {
61
138
  public let lowerThreshold: Swift.Float
62
139
  public let upperThreshold: Swift.Float
@@ -65,6 +142,14 @@ public struct TrueDepthConfiguration {
65
142
  get
66
143
  }
67
144
  }
145
+ public enum YEOFaceLivenessDetectorResult {
146
+ case live(confidence: Swift.Float)
147
+ case spoof(confidence: Swift.Float, reason: YEOFR.SpoofReason)
148
+ case inconclusive(reason: YEOFR.InconclusiveReason)
149
+ public func isLive() -> Swift.Bool
150
+ public func isSpoof() -> Swift.Bool
151
+ public func isInconclusive() -> Swift.Bool
152
+ }
68
153
  public enum YEOFRDefaults {
69
154
  }
70
155
  public protocol YEOFRConfigurable {
@@ -95,16 +180,30 @@ public struct YEOFRConfig : YEOFR.YEOFRConfigurable, Swift.CustomDebugStringConv
95
180
  public enum YEOFRDepthVerdict : Swift.Equatable {
96
181
  case threeD(Swift.Float)
97
182
  case flat(Swift.Float)
98
- case notDetermined
183
+ case notDetermined(Swift.String)
99
184
  public var isThreeD: Swift.Bool {
100
185
  get
101
186
  }
102
187
  public static func == (lhs: YEOFR.YEOFRDepthVerdict, rhs: YEOFR.YEOFRDepthVerdict) -> Swift.Bool
103
188
  }
189
+ final public class YEOFRTrueDepthState {
190
+ final public var visionInFlight: Swift.Bool
191
+ final public var lastVisionTime: Swift.Double
192
+ final public var flatnessWindow: [Swift.Float]
193
+ final public var consecutiveNoFace: Swift.Int
194
+ final public var consecutiveFlatStrong: Swift.Int
195
+ public init()
196
+ final public func reset()
197
+ final public func resetSmoothingOnly()
198
+ @objc deinit
199
+ }
104
200
  public protocol YEOFRTrueDepthHandling : AVFoundation.AVCaptureVideoDataOutputSampleBufferDelegate {
105
201
  var depthEnabled: Swift.Bool { get }
106
202
  var videoOutput: AVFoundation.AVCaptureVideoDataOutput { get set }
107
203
  var depthDataOutput: AVFoundation.AVCaptureDepthDataOutput { get set }
204
+ var trueDepthState: YEOFR.YEOFRTrueDepthState { get }
205
+ var trueDepthConsoleLog: Swift.Bool { get set }
206
+ var faceLivenessDetector: YEOFR.YEOFaceLivenessDetector { get set }
108
207
  func onDepthVerdict(value: YEOFR.YEOFRDepthVerdict)
109
208
  }
110
209
  extension YEOFR.YEOFRTrueDepthHandling {
@@ -142,5 +241,7 @@ public typealias YEOFRTrackerHandle = Swift.Int64
142
241
  final public func getTrueDepthConfig() -> YEOFR.TrueDepthConfiguration
143
242
  @objc deinit
144
243
  }
244
+ extension YEOFR.YEOFaceLivenessDetector.DebugMode : Swift.Equatable {}
245
+ extension YEOFR.YEOFaceLivenessDetector.DebugMode : Swift.Hashable {}
145
246
  extension YEOFR.FaceRecognitionState : Swift.Equatable {}
146
247
  extension YEOFR.FaceRecognitionState : Swift.Hashable {}
@@ -3,7 +3,10 @@
3
3
  // swift-module-flags: -target arm64-apple-ios18.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-experimental-feature DebugDescriptionMacro -enable-bare-slash-regex -module-name YEOFR
4
4
  // swift-module-flags-ignorable: -formal-cxx-interoperability-mode=off -interface-compiler-version 6.2
5
5
  import AVFoundation
6
+ import Accelerate
7
+ import Combine
6
8
  import CoreImage
9
+ import CoreMedia
7
10
  import CoreVideo
8
11
  import Foundation
9
12
  import Swift
@@ -13,6 +16,59 @@ import Vision
13
16
  import _Concurrency
14
17
  import _StringProcessing
15
18
  import _SwiftConcurrencyShims
19
+ import simd
20
+ @_hasMissingDesignatedInitializers final public class YEOFaceLivenessDetector {
21
+ public static let shared: YEOFR.YEOFaceLivenessDetector
22
+ public enum DebugMode {
23
+ case off
24
+ case depth
25
+ public static func == (a: YEOFR.YEOFaceLivenessDetector.DebugMode, b: YEOFR.YEOFaceLivenessDetector.DebugMode) -> Swift.Bool
26
+ public func hash(into hasher: inout Swift.Hasher)
27
+ public var hashValue: Swift.Int {
28
+ get
29
+ }
30
+ }
31
+ public struct YEOFaceLivenessDetectorConfig {
32
+ public init(minNormalizedFlatness: Swift.Float, maxNormalizedFlatness: Swift.Float, minInterquartileRange: Swift.Float, minNoseProtrusionRatio: Swift.Float, minRequiredSamples: Swift.Int, requiredConfidenceFrames: Swift.Int, faceDetectionConfidence: Swift.Float, requiredLiveFrames: Swift.Int, requiredSpoofFrames: Swift.Int, requiredNoFaceFrames: Swift.Int, roiShrinkX: CoreFoundation.CGFloat, roiShrinkY: CoreFoundation.CGFloat, minValidFaceDepth: Swift.Float, maxValidFaceDepth: Swift.Float, minLiveConfidence: Swift.Float, debugLogging: Swift.Bool)
33
+ public var minNormalizedFlatness: Swift.Float
34
+ public var maxNormalizedFlatness: Swift.Float
35
+ public var minInterquartileRange: Swift.Float
36
+ public var minNoseProtrusionRatio: Swift.Float
37
+ public var minRequiredSamples: Swift.Int
38
+ public var requiredConfidenceFrames: Swift.Int
39
+ public var faceDetectionConfidence: Swift.Float
40
+ public var requiredLiveFrames: Swift.Int
41
+ public var requiredSpoofFrames: Swift.Int
42
+ public var requiredNoFaceFrames: Swift.Int
43
+ public var roiShrinkX: CoreFoundation.CGFloat
44
+ public var roiShrinkY: CoreFoundation.CGFloat
45
+ public var debugLogging: Swift.Bool
46
+ public static var defaultConfiguration: YEOFR.YEOFaceLivenessDetector.YEOFaceLivenessDetectorConfig {
47
+ get
48
+ }
49
+ }
50
+ public struct AnalysisMetrics : Swift.CustomStringConvertible {
51
+ public var description: Swift.String {
52
+ get
53
+ }
54
+ }
55
+ final public var debugMode: YEOFR.YEOFaceLivenessDetector.DebugMode
56
+ final public let debugImagePublisher: Combine.PassthroughSubject<UIKit.UIImage?, Swift.Never>
57
+ final public func analyzeFace(colorSampleBuffer: CoreMedia.CMSampleBuffer, depthData: AVFoundation.AVDepthData, orientation: ImageIO.CGImagePropertyOrientation, visionRect: CoreFoundation.CGRect) -> YEOFR.YEOFaceLivenessDetectorResult
58
+ final public func isConfidentlyLive() -> Swift.Bool
59
+ final public func isConfidentlySpoof() -> Swift.Bool
60
+ final public func reset()
61
+ #if compiler(>=5.3) && $NonescapableTypes
62
+ final public func getLastMetrics() -> YEOFR.YEOFaceLivenessDetector.AnalysisMetrics?
63
+ #endif
64
+ final public func updateConfig(_ value: YEOFR.YEOFaceLivenessDetector.YEOFaceLivenessDetectorConfig)
65
+ @objc deinit
66
+ }
67
+ extension YEOFR.YEOFaceLivenessDetector {
68
+ #if compiler(>=5.3) && $NonescapableTypes
69
+ final public func generateDebugImage(orientation: ImageIO.CGImagePropertyOrientation) -> UIKit.UIImage?
70
+ #endif
71
+ }
16
72
  final public class YEOFRValueDebounce {
17
73
  public init(threshold: Swift.Int)
18
74
  final public func reset()
@@ -45,6 +101,15 @@ public struct ImageFrameParameters : Swift.Equatable {
45
101
  public static func == (lhs: YEOFR.ImageFrameParameters, rhs: YEOFR.ImageFrameParameters) -> Swift.Bool
46
102
  public static func imageParameter(forImageBuffer imageBuffer: CoreVideo.CVImageBuffer) -> YEOFR.ImageFrameParameters
47
103
  }
104
+ public enum InconclusiveReason : Swift.CustomStringConvertible {
105
+ case initialising
106
+ case failedToCopyColorBuffer
107
+ case noFaceDetected
108
+ case lowConfidence(Swift.Float)
109
+ public var description: Swift.String {
110
+ get
111
+ }
112
+ }
48
113
  public struct SDKFaceRecognitionResult : Swift.Equatable {
49
114
  public var faceState: YEOFR.FaceRecognitionState
50
115
  public var detectedCount: Swift.Int
@@ -57,6 +122,18 @@ public struct SDKFaceRecognitionResult : Swift.Equatable {
57
122
  #endif
58
123
  public static func == (lhs: YEOFR.SDKFaceRecognitionResult, rhs: YEOFR.SDKFaceRecognitionResult) -> Swift.Bool
59
124
  }
125
+ public enum SpoofReason : Swift.CustomStringConvertible {
126
+ case flatSurface(flatnessScore: Swift.Float)
127
+ case insufficientDepthVariation
128
+ case insufficientDepthData(Swift.Int)
129
+ case noNoseProtrusion(protrusionRatio: Swift.Float)
130
+ case insufficientSamples(count: Swift.Int, required: Swift.Int)
131
+ case invalidDepthData(details: Swift.String)
132
+ case tooMuchVariation(details: Swift.String)
133
+ public var description: Swift.String {
134
+ get
135
+ }
136
+ }
60
137
  public struct TrueDepthConfiguration {
61
138
  public let lowerThreshold: Swift.Float
62
139
  public let upperThreshold: Swift.Float
@@ -65,6 +142,14 @@ public struct TrueDepthConfiguration {
65
142
  get
66
143
  }
67
144
  }
145
+ public enum YEOFaceLivenessDetectorResult {
146
+ case live(confidence: Swift.Float)
147
+ case spoof(confidence: Swift.Float, reason: YEOFR.SpoofReason)
148
+ case inconclusive(reason: YEOFR.InconclusiveReason)
149
+ public func isLive() -> Swift.Bool
150
+ public func isSpoof() -> Swift.Bool
151
+ public func isInconclusive() -> Swift.Bool
152
+ }
68
153
  public enum YEOFRDefaults {
69
154
  }
70
155
  public protocol YEOFRConfigurable {
@@ -95,16 +180,30 @@ public struct YEOFRConfig : YEOFR.YEOFRConfigurable, Swift.CustomDebugStringConv
95
180
  public enum YEOFRDepthVerdict : Swift.Equatable {
96
181
  case threeD(Swift.Float)
97
182
  case flat(Swift.Float)
98
- case notDetermined
183
+ case notDetermined(Swift.String)
99
184
  public var isThreeD: Swift.Bool {
100
185
  get
101
186
  }
102
187
  public static func == (lhs: YEOFR.YEOFRDepthVerdict, rhs: YEOFR.YEOFRDepthVerdict) -> Swift.Bool
103
188
  }
189
+ final public class YEOFRTrueDepthState {
190
+ final public var visionInFlight: Swift.Bool
191
+ final public var lastVisionTime: Swift.Double
192
+ final public var flatnessWindow: [Swift.Float]
193
+ final public var consecutiveNoFace: Swift.Int
194
+ final public var consecutiveFlatStrong: Swift.Int
195
+ public init()
196
+ final public func reset()
197
+ final public func resetSmoothingOnly()
198
+ @objc deinit
199
+ }
104
200
  public protocol YEOFRTrueDepthHandling : AVFoundation.AVCaptureVideoDataOutputSampleBufferDelegate {
105
201
  var depthEnabled: Swift.Bool { get }
106
202
  var videoOutput: AVFoundation.AVCaptureVideoDataOutput { get set }
107
203
  var depthDataOutput: AVFoundation.AVCaptureDepthDataOutput { get set }
204
+ var trueDepthState: YEOFR.YEOFRTrueDepthState { get }
205
+ var trueDepthConsoleLog: Swift.Bool { get set }
206
+ var faceLivenessDetector: YEOFR.YEOFaceLivenessDetector { get set }
108
207
  func onDepthVerdict(value: YEOFR.YEOFRDepthVerdict)
109
208
  }
110
209
  extension YEOFR.YEOFRTrueDepthHandling {
@@ -142,5 +241,7 @@ public typealias YEOFRTrackerHandle = Swift.Int64
142
241
  final public func getTrueDepthConfig() -> YEOFR.TrueDepthConfiguration
143
242
  @objc deinit
144
243
  }
244
+ extension YEOFR.YEOFaceLivenessDetector.DebugMode : Swift.Equatable {}
245
+ extension YEOFR.YEOFaceLivenessDetector.DebugMode : Swift.Hashable {}
145
246
  extension YEOFR.FaceRecognitionState : Swift.Equatable {}
146
247
  extension YEOFR.FaceRecognitionState : Swift.Hashable {}
@@ -18,11 +18,11 @@
18
18
  </data>
19
19
  <key>Modules/YEOFR.swiftmodule/arm64-apple-ios.abi.json</key>
20
20
  <data>
21
- QKBRIBk6KNPgoiR0SRfdlNsdTPM=
21
+ H+d9pl1fc1tZoyLWCShXBQ57BYc=
22
22
  </data>
23
23
  <key>Modules/YEOFR.swiftmodule/arm64-apple-ios.private.swiftinterface</key>
24
24
  <data>
25
- p1J2tq/QFye9mKm0LCPIjQqzsZI=
25
+ SinTrfToGMaVhp+lCVhNxeRlTRM=
26
26
  </data>
27
27
  <key>Modules/YEOFR.swiftmodule/arm64-apple-ios.swiftdoc</key>
28
28
  <data>
@@ -30,11 +30,11 @@
30
30
  </data>
31
31
  <key>Modules/YEOFR.swiftmodule/arm64-apple-ios.swiftinterface</key>
32
32
  <data>
33
- p1J2tq/QFye9mKm0LCPIjQqzsZI=
33
+ SinTrfToGMaVhp+lCVhNxeRlTRM=
34
34
  </data>
35
35
  <key>Modules/YEOFR.swiftmodule/arm64-apple-ios.swiftmodule</key>
36
36
  <data>
37
- /90FKEuW7h7kigmgngRx/A9g17Q=
37
+ /Ba/fPVHfPETaiy4mnuzSXZpev4=
38
38
  </data>
39
39
  <key>Modules/module.modulemap</key>
40
40
  <data>
@@ -61,14 +61,14 @@
61
61
  <dict>
62
62
  <key>hash2</key>
63
63
  <data>
64
- SYuBHxXY5TMnfVomIgr2og9r9NFMugj/bXhR1jqkQDE=
64
+ nx2FOnIxKhMfP5mcOO5OP6Jr1J3awI1ym0PmFq3CfK8=
65
65
  </data>
66
66
  </dict>
67
67
  <key>Modules/YEOFR.swiftmodule/arm64-apple-ios.private.swiftinterface</key>
68
68
  <dict>
69
69
  <key>hash2</key>
70
70
  <data>
71
- NfiFxKVVCK3zJ+9Ihpwy7QgFuMETNef7YfJ1wPBdXhk=
71
+ fb6JmMDnPe4EHF7WQWrcmvw95k+izm/ucyKOvUbjP8Y=
72
72
  </data>
73
73
  </dict>
74
74
  <key>Modules/YEOFR.swiftmodule/arm64-apple-ios.swiftdoc</key>
@@ -82,14 +82,14 @@
82
82
  <dict>
83
83
  <key>hash2</key>
84
84
  <data>
85
- NfiFxKVVCK3zJ+9Ihpwy7QgFuMETNef7YfJ1wPBdXhk=
85
+ fb6JmMDnPe4EHF7WQWrcmvw95k+izm/ucyKOvUbjP8Y=
86
86
  </data>
87
87
  </dict>
88
88
  <key>Modules/YEOFR.swiftmodule/arm64-apple-ios.swiftmodule</key>
89
89
  <dict>
90
90
  <key>hash2</key>
91
91
  <data>
92
- TYIhxSliZ5sE3YCOCR8ReueMTb28CO485dvc6GkZB7I=
92
+ UTPg+0O81SHaFFbqrvjWTZQT/er4PMZqyMa6Q0STHHg=
93
93
  </data>
94
94
  </dict>
95
95
  <key>Modules/module.modulemap</key>
@@ -1,6 +1,6 @@
1
1
  Pod::Spec.new do |s|
2
2
  s.name = "react-native-yeofr"
3
- s.version = "0.2.4"
3
+ s.version = "0.3.8"
4
4
  s.summary = "React Native iOS bridge for YEO Face Recognition."
5
5
  s.homepage = "https://github.com/yeomessaging/react-native-yeofr"
6
6
  s.license = { :type => "Commercial", :file => "LICENSE" }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yeomessagingcom/react-native-yeofr",
3
- "version": "0.2.4",
3
+ "version": "0.3.8",
4
4
  "description": "React Native iOS integration for YEO Face Recognition (device-only).",
5
5
  "main": "index.ts",
6
6
  "react-native": "index.ts",
@@ -46,7 +46,7 @@
46
46
  "@types/react-native": "^0.72.0"
47
47
  },
48
48
  "dependencies": {
49
- "@yeomessagingcom/react-native-yeofr": "^0.2.4"
49
+ "@yeomessagingcom/react-native-yeofr": "^0.3.8"
50
50
  },
51
51
  "workspaces": [
52
52
  "example"