From 2a54e95f086945e5f721c46928f72f3057a40a11 Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Tue, 30 Jul 2024 12:02:27 +0100 Subject: [PATCH 01/23] New Smart Selfie Capture UI (#202) * implement design for selfie capture camera frame. * add lottie animation, product cells for selfie enrollment and selfie authentication with strict mode. * control visibility of smile emblem with showAttribution flag * make selfie frame border themable. --- Example/SmileID/Home/HomeView.swift | 37 +++++++ Resources/si_anim_face.lottie | Bin 0 -> 2086 bytes .../SelfieCapture/SelfieViewModelV2.swift | 15 +++ .../OrchestratedSelfieCaptureScreenV2.swift | 45 ++++++++ .../View/SelfieCaptureScreenV2.swift | 99 ++++++++++++++++++ Sources/SmileID/Classes/SmileID.swift | 86 ++++++++++----- 6 files changed, 256 insertions(+), 26 deletions(-) create mode 100644 Resources/si_anim_face.lottie create mode 100644 Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift create mode 100644 Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift create mode 100644 Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift diff --git a/Example/SmileID/Home/HomeView.swift b/Example/SmileID/Home/HomeView.swift index 972e1b4a9..ba8f09130 100644 --- a/Example/SmileID/Home/HomeView.swift +++ b/Example/SmileID/Home/HomeView.swift @@ -53,6 +53,40 @@ struct HomeView: View { ) } ), + ProductCell( + image: "smart_selfie_enroll", + name: "SmartSelfie™ Enrollment (Strict Mode)", + onClick: { + viewModel.onProductClicked() + }, + content: { + SmileID.smartSelfieEnrollmentScreen( + userId: viewModel.smartSelfieEnrollmentUserId, + jobId: viewModel.newJobId, + allowAgentMode: true, + useStrictMode: true, + delegate: SmartSelfieEnrollmentDelegate( + userId: viewModel.smartSelfieEnrollmentUserId, + onEnrollmentSuccess: viewModel.onSmartSelfieEnrollment, + onError: viewModel.didError + ) + ) + } + ), + ProductCell( + image: "smart_selfie_authentication", + name: "SmartSelfie™ Authentication (Strict Mode)", + onClick: { + viewModel.onProductClicked() + }, + content: { + SmartSelfieAuthWithUserIdEntry( + initialUserId: viewModel.smartSelfieEnrollmentUserId, + useStrictMode: true, + delegate: viewModel + ) + } + ), ProductCell( image: "enhanced_kyc", name: "Enhanced KYC", @@ -165,7 +199,9 @@ struct SmartSelfieEnrollmentDelegate: SmartSelfieResultDelegate { private struct SmartSelfieAuthWithUserIdEntry: View { let initialUserId: String + var useStrictMode: Bool = false let delegate: SmartSelfieResultDelegate + @State private var userId: String? var body: some View { @@ -173,6 +209,7 @@ private struct SmartSelfieAuthWithUserIdEntry: View { SmileID.smartSelfieAuthenticationScreen( userId: userId, allowAgentMode: true, + useStrictMode: useStrictMode, delegate: delegate ) } else { diff --git a/Resources/si_anim_face.lottie b/Resources/si_anim_face.lottie new file mode 100644 index 0000000000000000000000000000000000000000..a0e834704050fa811a39ebfd5a251868424e0167 GIT binary patch literal 2086 zcmbVNX;4#H7LI@{3Q^W5B4A``K_Ce+2}uAq+`(xwr0izVn@X&iV6EDe4+V zu%#hMs|j8PgH38c+tSj5Y;1tTj0E`t#~41BlZZSF^7u?H2T4St9Z|^5NFI2Y`OSdd zjEn`39^vvBd@Ge+_0}VrSalis}7YD)?4BCN#rJ*C8UFaAz1_x0YOdd#Iq9Tb< zBK$ZIgvih>js+a`;xa%e5{JuU11!jw#pT8!iID({4}Q&(yX5qjA({)-_}7cc5r8~4 zlmD$oRC0JS^0zjpO)5t}=RTYaZFL)?$K zW1HjmOc>mcUx$lmeYVD<+1=tMTt(?WFM zQ8a1<{aFfY5XV`#Uq|pr!n0z8by+o{$Ge>j;@2ik+}Kt_2JqYKd%AoEvhEYnx2C&} zNxcR{4y}(%G%}1z4Fbb|sRsrJ4z;YTT{$l+nEzO|OY!uqzOJ}TmeI2(`Qhi&ZQIRt z4SZ${C+(VlxNkukDe|T0M}Afwjlvu*Z@6@<+##CxYehyEm zCAY1`fSB~W2*rlumVv7av^J)k#m~f76}`f*ac>dXtP9UC=v3oun9o6!k7zt9(dhMX zR@AS|w{{LGoPE!-+j6yid6M)W$9;^W{AQ}rn>%z3=G!a1l3RTnP$w*|Jz?4TU2ry} zD7vv}RMQI{YFBd)^>0e5t{cLXl%!Ynl*crv}(1P zCVe;%WSUe;_s8b$j4Ig}VW~>befn58+89s?TV+F!J(Hqo!f@PAzI1$znZn^?;{(bkx`lI&cQqy%O*(X$Bs z5Suxla6@nPqa6lQyipi!J)n&ezm8AU(D}*KXq~Dr#C}!MfJ}R_6ecvI>MV}`0-GkB zNKMj~c18_(0P2o8d3XM_IxFg!wL0gY8QbtPYQMsuMqcMHAvH+E7>xUiiT77~LiEZ0 zc8NQ43o}ke7Ft{CqpMozoi%FXlrztb=4{v=R7>gn3aaPcM}Z|$ehIOtRjj=|)~9za z^3C6}xvt~nv8F#T#e{dtsqKFlO1pqI6SE!X1PbS&Z6?0^KBBkOuN~O%0JbjlBP({M zJSrHD^HI9M%`fUpZQqd%;^k$*4>Ktj6 zs}l>9z3visCpXtl!z*Y{Nv7(p`jWC-dqVttL*#`YnPa8COmfVn_wXzk<2%SEXIQ~IZop7<|B2|?Z-dFiIx9LG;t zcuG_*H}5w7BmwD?Ayp)-n6x_X;$#}WEaZJt}&r#7p~=ljW}(a z-2nTL)D89O+B#K4C!$Pfn9(1Fq-=>4CB_=%hfq|fJFNQR@}e6N3&5H_J!McwP1Mkd zVOMrOaQoG8V_4XOvB}%$Gq1KV^t_c}Q^YdmzTA9@4ky$~vha_cNTY2c_rZ!+U4gE*9tiuLR()*f^EM;3)pB5EgqgQy>bFjr zg_;CC*P#&vixa4a1;godThUFjh^_u-TkUV7YhGSzTu^>FIlZ{} yg-ThbW(521qPrx<-^ag6@OSEe7NGAmCrH8nA335@mTN9WQG;eFbn>;9UjGCk(Sid2 literal 0 HcmV?d00001 diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift new file mode 100644 index 000000000..d0d74d046 --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift @@ -0,0 +1,15 @@ +import Foundation + +public class SelfieViewModelV2: ObservableObject { + @Published var processingState: ProcessingState? + + let useStrictMode: Bool + + var cameraManager = CameraManager(orientation: .portrait) + + init( + useStrictMode: Bool = false + ) { + self.useStrictMode = useStrictMode + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift b/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift new file mode 100644 index 000000000..14017ee65 --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift @@ -0,0 +1,45 @@ +import Foundation +import SwiftUI + +/// Orchestrates the selfie capture flow - navigates between instructions, requesting permissions, +/// showing camera view, and displaying processing screen +public struct OrchestratedSelfieCaptureScreenV2: View { + public let allowAgentMode: Bool + public let showAttribution: Bool + public let showInstructions: Bool + public let onResult: SmartSelfieResultDelegate + @ObservedObject var viewModel: SelfieViewModelV2 + + @State private var acknowledgedInstructions = false + private var originalBrightness = UIScreen.main.brightness + + public init( + userId: String, + jobId: String, + isEnroll: Bool, + allowNewEnroll: Bool, + allowAgentMode: Bool, + showAttribution: Bool, + showInstructions: Bool, + useStrictMode: Bool, + extraPartnerParams: [String: String], + skipApiSubmission: Bool, + onResult: SmartSelfieResultDelegate + ) { + self.allowAgentMode = allowAgentMode + self.showAttribution = showAttribution + self.showInstructions = showInstructions + self.onResult = onResult + viewModel = SelfieViewModelV2() + } + + public var body: some View { + if showInstructions, !acknowledgedInstructions { + SmartSelfieInstructionsScreen(showAttribution: showAttribution) { + acknowledgedInstructions = true + } + } else { + SelfieCaptureScreenV2(showAttribution: showAttribution) + } + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift b/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift new file mode 100644 index 000000000..851ed4577 --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift @@ -0,0 +1,99 @@ +import SwiftUI +import Lottie + +public struct SelfieCaptureScreenV2: View { + @ObservedObject var viewModel = SelfieViewModelV2() + let showAttribution: Bool + + @State private var playbackMode: LottiePlaybackMode = LottiePlaybackMode.paused + + public var body: some View { + VStack(spacing: 40) { + LottieView { + try await DotLottieFile.named("si_anim_face", bundle: SmileIDResourcesHelper.bundle) + } + .playing(loopMode: .autoReverse) + .frame(width: 80, height: 80) + + Text("Look up") + .font(SmileID.theme.header2) + .foregroundColor(.primary) + ZStack { + RoundedRectangle(cornerRadius: 25) + .stroke(SmileID.theme.onLight, lineWidth: 20.0) + CameraView(cameraManager: viewModel.cameraManager) + .clipShape(.rect(cornerRadius: 25)) + .onAppear { + viewModel.cameraManager.switchCamera(to: .front) + } + CornerShapes() + RoundedRectangle(cornerRadius: 25) + .foregroundColor(.white.opacity(0.8)) + .cutout(Ellipse().scale(x: 0.8, y: 0.8)) + } + .frame(width: 300, height: 400) + + if showAttribution { + Image(uiImage: SmileIDResourcesHelper.SmileEmblem) + } + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + + // swiftlint:disable identifier_name + @ViewBuilder func CornerShapes() -> some View { + VStack { + HStack { + // Top Left Corner + CornerShape() + .stroke(SmileID.theme.success, style: StrokeStyle(lineWidth: 5)) + .frame(width: 40, height: 40) + .rotationEffect(.degrees(90)) + .offset(x: -2.0, y: -2.0) + Spacer() + // Top Right Corner + CornerShape() + .stroke(SmileID.theme.success, style: StrokeStyle(lineWidth: 5)) + .frame(width: 40, height: 40) + .rotationEffect(.degrees(180)) + .offset(x: 2.0, y: -2.0) + } + Spacer() + HStack { + // Bottom Left Corner + CornerShape() + .stroke(SmileID.theme.success, style: StrokeStyle(lineWidth: 5)) + .frame(width: 40, height: 40) + .offset(x: -2.0, y: 2.0) + Spacer() + // Bottom Right Corner + CornerShape() + .stroke(SmileID.theme.success, style: StrokeStyle(lineWidth: 5)) + .frame(width: 40, height: 40) + .rotationEffect(.degrees(270)) + .offset(x: 2.0, y: 2.0) + } + } + } +} + +struct CornerShape: Shape { + let width: CGFloat = 40 + let height: CGFloat = 40 + let cornerRadius: CGFloat = 25 + + func path(in rect: CGRect) -> Path { + var path = Path() + path.move(to: CGPoint(x: 0, y: 0)) + path.addLine(to: CGPoint(x: 0, y: height - cornerRadius)) + path.addArc( + center: CGPoint(x: cornerRadius, y: height - cornerRadius), + radius: cornerRadius, + startAngle: .degrees(180), + endAngle: .degrees(90), + clockwise: true + ) + path.addLine(to: CGPoint(x: width, y: height)) + return path + } +} diff --git a/Sources/SmileID/Classes/SmileID.swift b/Sources/SmileID/Classes/SmileID.swift index 55d8ffbf6..553b60cf6 100644 --- a/Sources/SmileID/Classes/SmileID.swift +++ b/Sources/SmileID/Classes/SmileID.swift @@ -254,28 +254,45 @@ public class SmileID { /// - showInstructions: Whether to deactivate capture screen's instructions for SmartSelfie. /// - extraPartnerParams: Custom values specific to partners /// - delegate: Callback to be invoked when the SmartSelfie™ Enrollment is complete. - public class func smartSelfieEnrollmentScreen( + @ViewBuilder public class func smartSelfieEnrollmentScreen( userId: String = generateUserId(), jobId: String = generateJobId(), allowNewEnroll: Bool = false, allowAgentMode: Bool = false, showAttribution: Bool = true, showInstructions: Bool = true, + useStrictMode: Bool = false, extraPartnerParams: [String: String] = [:], delegate: SmartSelfieResultDelegate ) -> some View { - OrchestratedSelfieCaptureScreen( - userId: userId, - jobId: jobId, - isEnroll: true, - allowNewEnroll: allowNewEnroll, - allowAgentMode: allowAgentMode, - showAttribution: showAttribution, - showInstructions: showInstructions, - extraPartnerParams: extraPartnerParams, - skipApiSubmission: false, - onResult: delegate - ) + if useStrictMode { + OrchestratedSelfieCaptureScreenV2( + userId: userId, + jobId: jobId, + isEnroll: true, + allowNewEnroll: allowNewEnroll, + allowAgentMode: allowAgentMode, + showAttribution: showAttribution, + showInstructions: showInstructions, + useStrictMode: useStrictMode, + extraPartnerParams: extraPartnerParams, + skipApiSubmission: false, + onResult: delegate + ) + } else { + OrchestratedSelfieCaptureScreen( + userId: userId, + jobId: jobId, + isEnroll: true, + allowNewEnroll: allowNewEnroll, + allowAgentMode: allowAgentMode, + showAttribution: showAttribution, + showInstructions: showInstructions, + extraPartnerParams: extraPartnerParams, + skipApiSubmission: false, + onResult: delegate + ) + } } /// Perform a SmartSelfie™ Authentication @@ -298,28 +315,45 @@ public class SmileID { /// - showInstructions: Whether to deactivate capture screen's instructions for SmartSelfie. /// - extraPartnerParams: Custom values specific to partners /// - delegate: Callback to be invoked when the SmartSelfie™ Authentication is complete. - public class func smartSelfieAuthenticationScreen( + @ViewBuilder public class func smartSelfieAuthenticationScreen( userId: String, jobId: String = generateJobId(), allowNewEnroll: Bool = false, allowAgentMode: Bool = false, showAttribution: Bool = true, showInstructions: Bool = true, + useStrictMode: Bool = false, extraPartnerParams: [String: String] = [:], delegate: SmartSelfieResultDelegate ) -> some View { - OrchestratedSelfieCaptureScreen( - userId: userId, - jobId: jobId, - isEnroll: false, - allowNewEnroll: allowNewEnroll, - allowAgentMode: allowAgentMode, - showAttribution: showAttribution, - showInstructions: showInstructions, - extraPartnerParams: extraPartnerParams, - skipApiSubmission: false, - onResult: delegate - ) + if useStrictMode { + OrchestratedSelfieCaptureScreenV2( + userId: userId, + jobId: jobId, + isEnroll: true, + allowNewEnroll: allowNewEnroll, + allowAgentMode: allowAgentMode, + showAttribution: showAttribution, + showInstructions: showInstructions, + useStrictMode: useStrictMode, + extraPartnerParams: extraPartnerParams, + skipApiSubmission: false, + onResult: delegate + ) + } else { + OrchestratedSelfieCaptureScreen( + userId: userId, + jobId: jobId, + isEnroll: false, + allowNewEnroll: allowNewEnroll, + allowAgentMode: allowAgentMode, + showAttribution: showAttribution, + showInstructions: showInstructions, + extraPartnerParams: extraPartnerParams, + skipApiSubmission: false, + onResult: delegate + ) + } } /// Perform a Document Verification From f6b9b8300d94a612c7202d5a02d7d655a3787b5a Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Mon, 26 Aug 2024 11:27:41 +0100 Subject: [PATCH 02/23] Selfie Quality Check With CoreML Model (#206) * implement design for selfie capture camera frame. * add lottie animation, product cells for selfie enrollment and selfie authentication with strict mode. * update new selfie view model with existing implementation * add some image utility functions, import selfie quality model and add selfie quality check to the image buffer from camera feed. * some code formatting * more code formatting * compile coreml model to generate .mlmodelc file. * automatically generate the model class file. * remove uncompiled model file. * disable lint from generated file. * make a separate class that will handle all the image processing and classification tasks for selfie quality check. * add some documentation and code formatting * fix issue with crop to face function. * Replace the selfie quality model with a new version that takes an image as input. * remove call to check selfie quality in the v2 view model. * disable linting for model generated file. * code formattting. * remove resources folder and the lottie file. * code formatting. * move model image cropping size info to a constant. --- Example/Podfile.lock | 2 +- ML/CGImage+CVPixelBuffer.swift | 17 + ML/ImageClassifier.swift | 117 +++++++ .../analytics/coremldata.bin | Bin 0 -> 488 bytes .../coremldata.bin | Bin 0 -> 274 bytes .../metadata.json | 64 ++++ .../model.espresso.net | 327 ++++++++++++++++++ .../model.espresso.shape | 102 ++++++ .../model.espresso.weights | Bin 0 -> 1099840 bytes .../model/coremldata.bin | Bin 0 -> 288 bytes .../neural_network_optionals/coremldata.bin | Bin 0 -> 40 bytes ML/SelfieQualityDetector.swift | 307 ++++++++++++++++ ML/UIImage+CVPixelBuffer.swift | 79 +++++ Resources/si_anim_face.lottie | Bin 2086 -> 0 bytes SmileID.podspec | 2 +- .../SelfieCapture/SelfieViewModelV2.swift | 56 ++- .../OrchestratedSelfieCaptureScreenV2.swift | 12 +- .../View/SelfieCaptureScreenV2.swift | 24 +- 18 files changed, 1093 insertions(+), 16 deletions(-) create mode 100644 ML/CGImage+CVPixelBuffer.swift create mode 100644 ML/ImageClassifier.swift create mode 100644 ML/SelfieQualityDetector.mlmodelc/analytics/coremldata.bin create mode 100644 ML/SelfieQualityDetector.mlmodelc/coremldata.bin create mode 100644 ML/SelfieQualityDetector.mlmodelc/metadata.json create mode 100644 ML/SelfieQualityDetector.mlmodelc/model.espresso.net create mode 100644 ML/SelfieQualityDetector.mlmodelc/model.espresso.shape create mode 100644 ML/SelfieQualityDetector.mlmodelc/model.espresso.weights create mode 100644 ML/SelfieQualityDetector.mlmodelc/model/coremldata.bin create mode 100644 ML/SelfieQualityDetector.mlmodelc/neural_network_optionals/coremldata.bin create mode 100644 ML/SelfieQualityDetector.swift create mode 100644 ML/UIImage+CVPixelBuffer.swift delete mode 100644 Resources/si_anim_face.lottie diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 54362ca5d..e786cdfe7 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -32,7 +32,7 @@ SPEC CHECKSUMS: lottie-ios: fcb5e73e17ba4c983140b7d21095c834b3087418 netfox: 9d5cc727fe7576c4c7688a2504618a156b7d44b7 Sentry: 96ae1dcdf01a644bc3a3b1dc279cecaf48a833fb - SmileID: 500429946fbb916221450c9f792fa94ee1060955 + SmileID: a76ed6f7b5a5a157e8c8d14e779f1b7c6322f112 SwiftLint: 3fe909719babe5537c552ee8181c0031392be933 ZIPFoundation: b8c29ea7ae353b309bc810586181fd073cb3312c diff --git a/ML/CGImage+CVPixelBuffer.swift b/ML/CGImage+CVPixelBuffer.swift new file mode 100644 index 000000000..a0a729c0a --- /dev/null +++ b/ML/CGImage+CVPixelBuffer.swift @@ -0,0 +1,17 @@ +import CoreGraphics +import CoreImage +import VideoToolbox + +extension CGImage { + /** + Creates a new CGImage from a CVPixelBuffer. + + - Note: Not all CVPixelBuffer pixel formats support conversion into a + CGImage-compatible pixel format. + */ + public static func create(pixelBuffer: CVPixelBuffer) -> CGImage? { + var cgImage: CGImage? + VTCreateCGImageFromCVPixelBuffer(pixelBuffer, options: nil, imageOut: &cgImage) + return cgImage + } +} diff --git a/ML/ImageClassifier.swift b/ML/ImageClassifier.swift new file mode 100644 index 000000000..4117ab05e --- /dev/null +++ b/ML/ImageClassifier.swift @@ -0,0 +1,117 @@ +import CoreML +import Vision + +/// An enum representing possible errors during image classification +enum ImageClassifierError: Error { + case preprocessingFailed + case classificationFailed + case invalidOutputFormat + case imageConversionFailed + case faceCroppingFailed +} + +/// A structure representing the image quality check result +struct ImageQualityResult { + let passed: Bool + let confidence: Float + + var description: String { + return passed ? "Passed" : "Failed" + } +} + +/// A class that performs image classification to determine selfie quality using a Core ML Model +class ModelImageClassifier { + let cropSize = (width: 120, height: 120) + + init() {} + + /// Classifies an image using the Core ML Model + /// - Parameter image: The input image as a UIImage + /// - Returns: A result containing classifiction confidence. + func classify(imageBuffer: CVPixelBuffer) async throws -> ImageQualityResult { + do { + guard let image = UIImage(pixelBuffer: imageBuffer) else { + throw ImageClassifierError.preprocessingFailed + } + let croppedImage = try await cropToFace(image: image) + guard let convertedImage = croppedImage.pixelBuffer(width: cropSize.width, height: cropSize.height) else { + throw ImageClassifierError.preprocessingFailed + } + return try performClassification(imageBuffer: convertedImage) + } catch { + throw error + } + } + + /// Crops the input image to the region of the first face in the image. + /// - Parameter image: The original input image that should have a face. + /// - Returns: A cropped image of the detected face in the input image. + private func cropToFace(image: UIImage) async throws -> UIImage { + guard let cgImage = image.cgImage else { + throw ImageClassifierError.faceCroppingFailed + } + + let request = VNDetectFaceRectanglesRequest() + let handler = VNImageRequestHandler(cgImage: cgImage, options: [:]) + + try handler.perform([request]) + + guard let results = request.results, + let face = results.first else { + throw ImageClassifierError.faceCroppingFailed + } + + let boundingBox = face.boundingBox + + let size = CGSize( + width: boundingBox.width * image.size.width, + height: boundingBox.height * image.size.height + ) + let origin = CGPoint( + x: boundingBox.minX * image.size.width, + y: (1 - boundingBox.minY) * image.size.height - size.height + ) + + let faceRect = CGRect(origin: origin, size: size) + + guard let croppedImage = cgImage.cropping(to: faceRect) else { + throw ImageClassifierError.faceCroppingFailed + } + + return UIImage(cgImage: croppedImage) + } + + /// Performs the actual classification using the `ImageQualityCP20` model + /// - Parameter mlMultiArray: The processed input image as a MultiArray + /// - Returns: The ImageQualityResult + private func performClassification(imageBuffer: CVPixelBuffer) throws -> ImageQualityResult { + let modelConfiguration = MLModelConfiguration() + let model = try SelfieQualityDetector(configuration: modelConfiguration) + + let input = SelfieQualityDetectorInput(conv2d_193_input: imageBuffer) + + let prediction = try model.prediction(input: input) + let output = prediction.Identity + return try processModelOuput(output) + } + + /// Processes the model's output to determine the final classification + /// - Parameter output: The MLMultiArray output from the model + /// - Returns: The ImageQualityResult + private func processModelOuput(_ output: MLMultiArray) throws -> ImageQualityResult { + guard output.shape.count == 2, + output.shape[0] == 1, + output.shape[1] == 2 else { + throw ImageClassifierError.invalidOutputFormat + } + + let failScore = output[0].floatValue + let passScore = output[1].floatValue + + let passed = passScore > failScore + let confidence = passed ? passScore : failScore + + return ImageQualityResult(passed: passed, confidence: confidence) + } +} diff --git a/ML/SelfieQualityDetector.mlmodelc/analytics/coremldata.bin b/ML/SelfieQualityDetector.mlmodelc/analytics/coremldata.bin new file mode 100644 index 0000000000000000000000000000000000000000..577fd6917b053315c592732222727c04cd2bd7b6 GIT binary patch literal 488 zcmY+APjiAW5XIZh^w3ME(?5rP20H`Rs(9eQAjQTiMS|92h(RKdAVevC`cfNaG?&fn z?)$yj_k8jHrev3+WJ*NI^LWBnBpDKcXi{9ug$G$NXLX+y=B^Mt{X`YXFXc$Rm7nye zrzv3t;mEOI70u zTpIeF)JT#Sp^Tieu%W6wSJkpW={XT`4C??ZWcsanZjFM`p{#~$psYmYFZKI#)`HM= zB#KiSG@Z<^c(9EGpM?twzz+b-hn&K-)!I9x2uQyz_*ldGqojEm!8D{8i8=zAWs}5B zbMaqJr$+pJue7$l9h;HA(G-oE?bQ9Q`tx~gi?7++YdqM(&IVxkp`SsfC?!vgGf6^9 P+#O1&sA^||1Qj0Q^S+J{ui_V9#xMa8llJoP*j8ftaEsf(d^9o8!q&Sq= zI4T4xBt(LQxHvphQu9hOODd(`R! XA!c(uqc1=og8-Cb;DB%$V2%O+v%fo* literal 0 HcmV?d00001 diff --git a/ML/SelfieQualityDetector.mlmodelc/metadata.json b/ML/SelfieQualityDetector.mlmodelc/metadata.json new file mode 100644 index 000000000..a3266749a --- /dev/null +++ b/ML/SelfieQualityDetector.mlmodelc/metadata.json @@ -0,0 +1,64 @@ +[ + { + "metadataOutputVersion" : "3.0", + "storagePrecision" : "Float32", + "outputSchema" : [ + { + "hasShapeFlexibility" : "0", + "isOptional" : "0", + "dataType" : "Float32", + "formattedType" : "MultiArray (Float32)", + "shortDescription" : "", + "shape" : "[]", + "name" : "Identity", + "type" : "MultiArray" + } + ], + "modelParameters" : [ + + ], + "specificationVersion" : 4, + "computePrecision" : "Float16", + "isUpdatable" : "0", + "availability" : { + "macOS" : "10.15", + "tvOS" : "13.0", + "visionOS" : "1.0", + "watchOS" : "6.0", + "iOS" : "13.0", + "macCatalyst" : "13.0" + }, + "neuralNetworkLayerTypeHistogram" : { + "ActivationReLU" : 5, + "ReshapeStatic" : 1, + "Transpose" : 1, + "SoftmaxND" : 1, + "Convolution" : 5, + "InnerProduct" : 2, + "PoolingMax" : 3 + }, + "modelType" : { + "name" : "MLModelType_neuralNetwork" + }, + "userDefinedMetadata" : { + "com.github.apple.coremltools.version" : "7.2", + "com.github.apple.coremltools.source" : "tensorflow==2.15.0" + }, + "generatedClassName" : "SelfieQualityDetector", + "inputSchema" : [ + { + "height" : "120", + "colorspace" : "RGB", + "isOptional" : "0", + "width" : "120", + "isColor" : "1", + "formattedType" : "Image (Color 120 × 120)", + "hasSizeFlexibility" : "0", + "type" : "Image", + "shortDescription" : "", + "name" : "conv2d_193_input" + } + ], + "method" : "predict" + } +] \ No newline at end of file diff --git a/ML/SelfieQualityDetector.mlmodelc/model.espresso.net b/ML/SelfieQualityDetector.mlmodelc/model.espresso.net new file mode 100644 index 000000000..736b9233a --- /dev/null +++ b/ML/SelfieQualityDetector.mlmodelc/model.espresso.net @@ -0,0 +1,327 @@ +{ + "layers" : [ + { + "pad_r" : 0, + "fused_relu" : 1, + "fused_tanh" : 0, + "debug_info" : "sequential_35\/conv2d_193\/BiasAdd", + "pad_fill_mode" : 0, + "pad_b" : 0, + "pad_l" : 0, + "top" : "sequential_35\/conv2d_193\/Relu", + "blob_weights" : 3, + "K" : 3, + "blob_biases" : 1, + "name" : "sequential_35\/conv2d_193\/BiasAdd", + "has_batch_norm" : 0, + "type" : "convolution", + "n_groups" : 1, + "pad_t" : 0, + "has_biases" : 1, + "C" : 16, + "bottom" : "conv2d_193_input", + "weights" : { + + }, + "Nx" : 3, + "pad_mode" : 0, + "pad_value" : 0, + "Ny" : 3, + "n_parallel" : 1 + }, + { + "pad_r" : 0, + "fused_relu" : 1, + "fused_tanh" : 0, + "debug_info" : "sequential_35\/conv2d_194\/BiasAdd", + "pad_fill_mode" : 0, + "pad_b" : 0, + "pad_l" : 0, + "top" : "sequential_35\/conv2d_194\/Relu", + "blob_weights" : 7, + "K" : 16, + "blob_biases" : 5, + "name" : "sequential_35\/conv2d_194\/BiasAdd", + "has_batch_norm" : 0, + "type" : "convolution", + "n_groups" : 1, + "pad_t" : 0, + "has_biases" : 1, + "C" : 32, + "bottom" : "sequential_35\/conv2d_193\/Relu", + "weights" : { + + }, + "Nx" : 3, + "pad_mode" : 0, + "pad_value" : 0, + "Ny" : 3, + "n_parallel" : 1 + }, + { + "pad_r" : 0, + "debug_info" : "max_pool_0", + "pad_fill_mode" : 0, + "pad_b" : 0, + "pad_l" : 0, + "size_x" : 2, + "top" : "max_pool_0", + "top_shape_style" : 0, + "stride_x" : 2, + "avg_or_max" : 1, + "average_count_exclude_padding" : 1, + "type" : "pool", + "name" : "max_pool_0", + "pad_t" : 0, + "stride_y" : 2, + "bottom" : "sequential_35\/conv2d_194\/Relu", + "weights" : { + + }, + "pad_mode" : 2, + "size_y" : 2, + "pad_value" : 0 + }, + { + "pad_r" : 0, + "fused_relu" : 1, + "fused_tanh" : 0, + "debug_info" : "sequential_35\/batch_normalization_66\/FusedBatchNormV3_nchw", + "pad_fill_mode" : 0, + "pad_b" : 0, + "pad_l" : 0, + "top" : "sequential_35\/activation_66\/Relu", + "blob_weights" : 11, + "K" : 32, + "blob_biases" : 9, + "name" : "sequential_35\/batch_normalization_66\/FusedBatchNormV3_nchw", + "has_batch_norm" : 0, + "type" : "convolution", + "n_groups" : 1, + "pad_t" : 0, + "has_biases" : 1, + "C" : 64, + "bottom" : "max_pool_0", + "weights" : { + + }, + "Nx" : 3, + "pad_mode" : 0, + "pad_value" : 0, + "Ny" : 3, + "n_parallel" : 1 + }, + { + "pad_r" : 0, + "debug_info" : "max_pool_1", + "pad_fill_mode" : 0, + "pad_b" : 0, + "pad_l" : 0, + "size_x" : 2, + "top" : "max_pool_1", + "top_shape_style" : 0, + "stride_x" : 2, + "avg_or_max" : 1, + "average_count_exclude_padding" : 1, + "type" : "pool", + "name" : "max_pool_1", + "pad_t" : 0, + "stride_y" : 2, + "bottom" : "sequential_35\/activation_66\/Relu", + "weights" : { + + }, + "pad_mode" : 2, + "size_y" : 2, + "pad_value" : 0 + }, + { + "pad_r" : 0, + "fused_relu" : 0, + "fused_tanh" : 0, + "debug_info" : "sequential_35\/conv2d_196\/BiasAdd", + "pad_fill_mode" : 0, + "pad_b" : 0, + "pad_l" : 0, + "top" : "sequential_35\/conv2d_196\/BiasAdd", + "blob_weights" : 15, + "K" : 64, + "blob_biases" : 13, + "name" : "sequential_35\/conv2d_196\/BiasAdd", + "has_batch_norm" : 0, + "type" : "convolution", + "n_groups" : 1, + "pad_t" : 0, + "has_biases" : 1, + "C" : 128, + "bottom" : "max_pool_1", + "weights" : { + + }, + "Nx" : 3, + "pad_mode" : 0, + "pad_value" : 0, + "Ny" : 3, + "n_parallel" : 1 + }, + { + "pad_r" : 0, + "fused_relu" : 1, + "fused_tanh" : 0, + "debug_info" : "sequential_35\/batch_normalization_67\/FusedBatchNormV3_nchw", + "pad_fill_mode" : 0, + "pad_b" : 0, + "pad_l" : 0, + "top" : "sequential_35\/activation_67\/Relu", + "blob_weights" : 19, + "K" : 128, + "blob_biases" : 17, + "name" : "sequential_35\/batch_normalization_67\/FusedBatchNormV3_nchw", + "has_batch_norm" : 0, + "type" : "convolution", + "n_groups" : 1, + "pad_t" : 0, + "has_biases" : 1, + "C" : 32, + "bottom" : "sequential_35\/conv2d_196\/BiasAdd", + "weights" : { + + }, + "Nx" : 1, + "pad_mode" : 1, + "pad_value" : 0, + "Ny" : 1, + "n_parallel" : 1 + }, + { + "pad_r" : 0, + "debug_info" : "max_pool_2", + "pad_fill_mode" : 0, + "pad_b" : 0, + "pad_l" : 0, + "size_x" : 2, + "top" : "max_pool_2", + "top_shape_style" : 0, + "stride_x" : 2, + "avg_or_max" : 1, + "average_count_exclude_padding" : 1, + "type" : "pool", + "name" : "max_pool_2", + "pad_t" : 0, + "stride_y" : 2, + "bottom" : "sequential_35\/activation_67\/Relu", + "weights" : { + + }, + "pad_mode" : 2, + "size_y" : 2, + "pad_value" : 0 + }, + { + "axis_h" : 0, + "axis_w" : 2, + "bottom" : "max_pool_2", + "axis_k" : 1, + "axis_n" : 3, + "axis_seq" : 4, + "weights" : { + + }, + "debug_info" : "transpose_17", + "top" : "transpose_17", + "type" : "transpose", + "name" : "transpose_17" + }, + { + "name" : "sequential_35\/flatten_35\/Reshape", + "weights" : { + + }, + "dst_w" : 5408, + "version" : 1, + "dst_n" : 1, + "dst_nd_rank" : 2, + "type" : "reshape", + "dst_h" : -1, + "mode" : 0, + "dynamic_shape" : false, + "bottom" : "transpose_17", + "debug_info" : "sequential_35\/flatten_35\/Reshape", + "dst_seq" : 1, + "dst_k" : 1, + "top" : "sequential_35\/flatten_35\/Reshape" + }, + { + "nB" : 5408, + "top" : "sequential_35\/dense_70\/Relu", + "has_biases" : 1, + "weights" : { + + }, + "nC" : 32, + "blob_weights" : 23, + "type" : "inner_product", + "has_relu" : 1, + "bottom" : "sequential_35\/flatten_35\/Reshape", + "blob_biases" : 21, + "has_tanh" : 0, + "debug_info" : "sequential_35\/dense_70\/BiasAdd", + "name" : "sequential_35\/dense_70\/BiasAdd", + "has_prelu" : 0 + }, + { + "nB" : 32, + "top" : "sequential_35\/dense_71\/BiasAdd", + "has_biases" : 1, + "weights" : { + + }, + "nC" : 2, + "blob_weights" : 27, + "type" : "inner_product", + "has_relu" : 0, + "bottom" : "sequential_35\/dense_70\/Relu", + "blob_biases" : 25, + "has_tanh" : 0, + "debug_info" : "sequential_35\/dense_71\/BiasAdd", + "name" : "sequential_35\/dense_71\/BiasAdd", + "has_prelu" : 0 + }, + { + "bottom" : "sequential_35\/dense_71\/BiasAdd", + "weights" : { + + }, + "nd_axis" : -1, + "debug_info" : "sequential_35\/dense_71\/Softmax", + "top" : "Identity", + "type" : "softmax_nd", + "name" : "sequential_35\/dense_71\/Softmax", + "attributes" : { + "is_output" : 1 + } + } + ], + "transform_params" : { + "conv2d_193_input" : { + "bias_a" : 0, + "bias_g" : 0, + "bias_r" : 0, + "bias_b" : 0, + "center_mean" : 0, + "is_network_bgr" : 0, + "scale" : 1 + } + }, + "storage" : "model.espresso.weights", + "metadata_in_weights" : [ + + ], + "properties" : { + + }, + "analyses" : { + + }, + "format_version" : 200 +} \ No newline at end of file diff --git a/ML/SelfieQualityDetector.mlmodelc/model.espresso.shape b/ML/SelfieQualityDetector.mlmodelc/model.espresso.shape new file mode 100644 index 000000000..b091a65cd --- /dev/null +++ b/ML/SelfieQualityDetector.mlmodelc/model.espresso.shape @@ -0,0 +1,102 @@ +{ + "layer_shapes" : { + "sequential_35\/dense_70\/Relu" : { + "k" : 1, + "w" : 32, + "n" : 1, + "_rank" : 2, + "h" : 1 + }, + "max_pool_1" : { + "k" : 64, + "w" : 28, + "n" : 1, + "_rank" : 4, + "h" : 28 + }, + "transpose_17" : { + "k" : 13, + "w" : 32, + "n" : 1, + "_rank" : 4, + "h" : 13 + }, + "conv2d_193_input" : { + "k" : 3, + "w" : 120, + "n" : 1, + "_rank" : 4, + "h" : 120 + }, + "sequential_35\/conv2d_194\/Relu" : { + "k" : 32, + "w" : 116, + "n" : 1, + "_rank" : 4, + "h" : 116 + }, + "sequential_35\/activation_67\/Relu" : { + "k" : 32, + "w" : 26, + "n" : 1, + "_rank" : 4, + "h" : 26 + }, + "max_pool_0" : { + "k" : 32, + "w" : 58, + "n" : 1, + "_rank" : 4, + "h" : 58 + }, + "sequential_35\/activation_66\/Relu" : { + "k" : 64, + "w" : 56, + "n" : 1, + "_rank" : 4, + "h" : 56 + }, + "sequential_35\/conv2d_193\/Relu" : { + "k" : 16, + "w" : 118, + "n" : 1, + "_rank" : 4, + "h" : 118 + }, + "max_pool_2" : { + "k" : 32, + "w" : 13, + "n" : 1, + "_rank" : 4, + "h" : 13 + }, + "sequential_35\/conv2d_196\/BiasAdd" : { + "k" : 128, + "w" : 26, + "n" : 1, + "_rank" : 4, + "h" : 26 + }, + "sequential_35\/dense_71\/BiasAdd" : { + "k" : 1, + "w" : 2, + "n" : 1, + "_rank" : 2, + "h" : 1 + }, + "sequential_35\/flatten_35\/Reshape" : { + "k" : 1, + "w" : 5408, + "n" : 1, + "_rank" : 2, + "h" : 1 + }, + "Identity" : { + "k" : 1, + "w" : 2, + "n" : 1, + "_rank" : 2, + "h" : 1 + } + } +} \ No newline at end of file diff --git a/ML/SelfieQualityDetector.mlmodelc/model.espresso.weights b/ML/SelfieQualityDetector.mlmodelc/model.espresso.weights new file mode 100644 index 0000000000000000000000000000000000000000..b2e449c7b0c39cf82100a0d857b35aa49359fa9a GIT binary patch literal 1099840 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 ~84 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%0A9clX-t|Fx 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 z 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

JtD@7;c4VCF=@TY_b3c%eAH`_D<26#Pm_qG( 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%0DHp<+yeafHV}WO4#PGoF^%%ghx2k(y zk_S;!QGNOfY9MukMvH~f_3wSrCrKM5p6fx!ElFTy4ZV_lt zU&c;(+6u&69oh~$(?#1lS*y++P_NKSKZS3_J&$%{&Yp#&?yo2r{h|wz1BpcI&$~HefOS)d)bdUs4$N!44%? zpQpRIT=ancDJ*$9gII^=8q`w&nDyEQw zx3pnp%L?>w+ep+*tbi~5HTkCE2kj}jR9r=w-8_8*xwxAbCmXm-ZQf?ES>+6a#tUKa z+)2`-`kkGdoIna>)(d4(tHC8`D)NcFec6^wo=%`63EX@{h5_A;>&Ub8H4s;~4YyflP@|}I zP*~i_WKGSX*1Q~#C~-0Fxv#-&&DezRpX*XLODk|$^dGa%e;>}bx{B}TFT~{&C-M2m z^Q0no9w>j2!O>JVI8Yf(o2t*^9=l$Wt0D&d-IjQ6*+pFGSE##YXqc@MDW?4CPq{f! zF2m<>1MPg)utI0VP|+m@Pi+gOtY;S^B_Bmsdd!EY!EBD_Cwj z65I=tKwdQ++$pcDS9hzA_>pUnR-*uE6YW%Up%kQ@e??3eZ^F|jX5wldO8fpWG*s>j zsnK+0#)L!AYfTd7Ic&%D$+xuS!Fy-~H*^y}Oe46C!?v9~PIoCJIWId9Z3;2ea?vC-Uo@0V-QRB-gr%@%GwKIP&^4bIg4{4CeV=#YyH;uFJUAbR zb)Qg`Y85EAc7(NlPiWkU)wE73g*|i7o^J6lf!^h(;fnobdP#6UbkhWQo+^P7eVw#; zT@g|Jw4aJxG@{AsTaoX}Gzd|xKnvW2Bdr1`oUx4^tz6%v)o_;P2As!Xo>&~sRUj%i zzf$v|4yx4=Nn1ANQgyQn%!~W-C>pq?({f>`F!(w}Ch9~f?nm8OU)Q9c=&jA=q zV3uP#O}-YxX1X~;&nicHX-hu2IPWkxrC%i1+qpBF#X}m_v>t>xH^A*BE8tYvLEzfB zuuY~KKgNtT`Ea>jW#ep`xBgcpr`r)}6w=7ZpIwH*65-y@A_#Wb>;4|M(|L8pQe%-Q#x z^L?0tcu*2t;yz0z@|B?9r%3}1kI-elj#TcyI@q}J7ChCI0;7tfAZFqZ7Z>fo-_k!x zQR6gNe*9(B;Ja5^z1wCFs`xD&>td+*DYkB za%3KCi6~`Qt;?)#o-nQYYz_7YzmTEsT*wTUg7Lsdq|hM&o)&M$!IekQkPH#8AeQhg z7NrUjm+8~uIH(Ycht?e_(9(DkR6Dsj9hpsY51OHD$0;-uG{w+Y_edr3G_N=}oqQYV zC8%SJMGCvg!W|KimURT`PbbqJGgJCzt`J_FUc`Rfum%#1pEb2aT_W0jaiDJTo9h&$ zg7;%Tm?=tWmG2wk(0+y-=d#83{ezf~`%JkkU^Il?Pr&b;kLj551lu)r87`XQK)vQ% zK}Sw8V>xXhsnjjhlkR*)8>40t$4QPUlH*6qZa70@$$lJ}QH)~uBC+T10DUM@N`(3C zVDIq-xb>tt=54aTMw_p6vSK4{DyUvv@{tE_GHG;JkL!aSjc0c4UdM#wT|w2Y7Xe1p z*kyO~z-TfRRwrt4{`wX4iisaIC}x3|ssuD`@u$j9RztYUZ2Yp%6dtY-qod!=AT#eE z#E4FXZ=a%Qfk+g%ohRs9$ocY?h+?y^3^dOY<`}RG*nseJoOd<~{=#yi)aZ&^M8&ad z^f@~ua+J!nrEvV*5?Yk$1tPcG*yR1Y;c$#27z=G8O*1Fxi0~fBKg?yl!YruSN)vE< zBu&JpCJx<_n`w<`LcT}SE%qTq^jFO64m$6sQZ=pwKX z>xn9j`zx!LJasA_i{jX!1JYQXzX@kuT*c;it*2vCQgI+d1Z26~;Xs%ReEgG7#4hcm zD-#l!`P!*C*D)B^$JWrOCyPkY)^CigQ4gt^6@pV51v%Hb4CeQJC;b=ZL4ctHn0M8Z zqd%82e$#m2ky{&?Y(2+xJct1vHVOKbt?{5XcMs2Aj9d1JqDbaR6tuS|THUfR<{tyk z2l8oUK_C6_vxCIN#z4k}G)BFmv`J}T93J0Dg{MY2pe&imbf)=|_q zw>+emZy&>0i$PjHI6^kcufunzpE3#jOX2USKGykI8h!Orh@AUsLsboLqQhZ6oIfmr z&z9W6mz#L7?${CZePf2d%u4XBdNh9gZb9_}XE$9r;7ja6!eB)I0&88AhW#_6u-E${ zonZptENp{kY)f!oeFN@z5`{VoJaBsZLRj`gh~r;6q3()uGCOl6V_tNDdhIv@7u);E zy6?Z)4?!z&lfxOJmTCh^FD`*>KPB%w-8cqhJykqaPye_zU~l(-_|UfwPcP=&c%j=- zo_9J{`Mw9a@pH^zF#(M?w_vSeGSqGPNj$24L3zCmlwPdj<{Mc=%iR)-bSo)eV4Z2{t--F5TQ+mfXNWfnYDZ#9gc52O`CxqfR1zMjici@loHlAl{`;_1l-wwy4*ved!KjF8Yufwdm6@XL*n}{L4Iv`A7fG z%BDlVbaB;|AiUnQhcb5?8UDxrp_u3klrDKmo(TD2{N>G9@$?Lj^$QXel2F2gAw^*~eI83NZvgH6IPsk7#0E6>7l)-Ua&iVP?(^q9R=>A<6kD(E?LAxoNosGHT<|u z=p_5fJOa&jJCm(i>ddjWR5X?n2Rr+JdY6N9QDeFo?$|a&BR2Q~`TmU>sCUwzw`P;Q- z_k_)nK}_1A6OG5*8|ZFnG0rtmNG9Utap2!K+ND!M>|QIwoVWv!WRpc&8_S?x`y8!v z=fU$OXW*k*3M(@aK{X1l(6;}~NYRId>{7{7Y^mf0#;qum?b@G&KeYp~f$Q$iTR*C2 zdtDF19fqm*A;D&~?K()kb)3{DcuL$x~$OZdl`9 z#);lhrfBrd55uo`ac>c2q*?w9InrDN38Bs)l`BB`qYdey=lYh} zsU0mNB~Oh}Z)PzOwv#~D1&gpbqXqNrUN%ITnPDX}jq$%?jl64eP}k4~U2p$KoNrtu zMO-c|!X%vV)aJwQY>vO!eH7f>}{cB9WOZg)fXkNYdFgc)p;9hs)so>Jy*-*H!40{z6z_m*pg)=W=jp$OGK9NVlUd7`6&$i5k zJEw`H zHmzxYCij^NS`54Un%U|XbI&{ z48Ve*d{pInzljA+^b(YygCa{0{g0ya4#)Cs<9Lxhiin7mvNBrMbDt*-2`QVBibzF! zX=h}Fr0iWJsgSfh_jM{Q+R{!*sWeogq3G9pzyJBe;c)QW$9-Mr`Tc%ABP8mEG|SVq zH<{G^*9eck`Of-9M${P}jZF*YVaEm&57j5*TKy#ZTu4vC7rTj|@TW|F(dsO!&tDw!7o zlk^+AyzmEo7cv@ZTHUoexjHyzR5BWcX`}N0cNSgWu&&`Z`Yx5U`!YgX$n|wY|3zC^ zrR+s(t0OSz@NNtcTxGZ7E}^T|O(<4h#VKu#fpx8hWMS0BKbcqy%`Nh9_*DnKcsB|A zYZu{`{Y&vg!8x?ZS0eS0cq~tnVu=}JP{KDCPygJ6lU`iM|MVWybVm)EDD0Z&Mwh^` z&Qx4_e+!y)RY0h89Sb%;0mFs)tNFbWHd$#P4L$XR$tZPj^G1rP=JH@RD{~}#+1)@f zwTWOCk&3EIuYvC53Y2@7js7cbVaz*uEH2MrM}?j4nOq|_>R=s7zv1bh;DzvKt1+Sf z0=N`yA?J01^TKi@*EZY_yca9elot`?vuXlP7k0AIQB&CQr2<1UL7laGT@(DVv5|w?fQ`oqR11V|9J9bWPKhtx{ zAlsu`$b0)BGU)dOSM4xTPhC&lzNXZavl3e$55et0dCVpui``dAqKtV$2B1RNmtCt8 zuYRBifs+$~jX5K5#ijAZ`^U`EnP*zd#_*cOYWQKzS-4QT7@t-|(8+yo!KrpCz4@@8 zJ!(D0e$UXrvja+4{nx83`fDUQ$SL7|@dWzsfDNh4Tnx2|E17n1HU4#T6R-cQL7KcO zZ{-$CS9gnue>g(C+jIo3@!rGYb2joB(PsGYKt7~c4&>);orz&fd?-9(2)0Z=NY?}U zU_{Cqto?Wp|CQVVN!wXC@Q5r-cC_NdhdyR4uCcsKYxyUUDCCGhK;y%cvm4*K5D zV>d+CVb5$$+&Fp_S?jCQ@aQ(Ou_r<0&-9JmORXpNfB$ zkEcr;qS&66t>k#UfXpv>;x*e=xEG(#WtsTU&4^e?Sl__jW=YZT871IetIozBjG~6; z8Z>mv7;>Fi!HTy1nAxcmay3hQ=Y&1mJvst62t6~6FCE;3{~F=G zVJbe+eu?Xkwd2KeH89ZZA!qz66T{jb(EPq${w8lpC7~}^;udpE-xEV+LVj#%-*JeL z5wYG?R&cWJYHeirCDffGc=W=p(PVfxKUnmL-=1U+Q59a$Tepmc`5z$XkoV+~)Wfc< zK13@V6-B|P_k+is1k$^DiqnV~Lm?$w6OVlqu2pFK0zJw}wLb zv{MisEpUIAgktgill(QuV$n0lTzt1|xbS;kWg0^Vql0t0z_m#Meboc(ocJa;zrTD9qvb%X`wxZ{7gr!etY~m?>N1>v<5BRv+(f@ z9>UG02;S7iWK<_)+4O}S*8F1v$8{vV>q!+w*C$}+>+>R$giP^Lx1TJgVIl1;Ph?;G zIc%*DWL4p(!OJv;y%J{A+OI9pPG%s*<|)$!XMK9KIHuNkvXBK`FdcurU~EuRJPwoG zjAqW!6s)+L%eR%}BSx-(xj$mbR(TUt9QH@2S>5c;-Cyj>>36I$ZaH`yxW<0Us=@ft z18BJ2XE?TKu1)j4cv_ftjQ??62l9_ChC`eE>5tDOJ|oha#Z%g!DL zZnEcP3Iv~M-WqnqL>gbM6(DP7`ly)@2d58gBE?@E`Iksjx!hOwyHg8F59HDzkt?s8 z@&KCe3A}igO$)C~;dfqP{3zw=Oft!lNplM^^xrJZz8;I)g`btzC(Lt&|Dny3;b^;2 z1@!;j$H_lz_|&6bcLYOX>flj`35#==!Z-O* ztY}21IH%K>EgkWY3mNkjjPez5$KP47+1!a*TZ`C47oOdd*#YbOU$Q610x|kqFogR2 zgQU05C|C0lcdBNMz#HC=%Y_|e`kax%jc^im>QBMn(}T>|@9R3Wf0{3bbT?zYe=FPG*N$5yr<2Xy41T2ZBeE!D zxba{j8`ZDIYD{av#y^XHa;Xc{n}gW(W4g3>3s0Tpqak!yFH7371m#>DAR=Hrq-#r1 zQtcS3uKmP%^}9uXVxMykH_Et33*p^(Ps|iWMz|nw3-qM?ftR!%l_IL(r2EmFxmKo<@sV&Lmota)8Qx9ZhU0QOKp&3f{iQA>GRW7y?(1$u6(jT?6yg;P;G z>D}jaI6BJ>mOT9`auBaz^OQ4j{eLq-`I;xV^Js3DY<|3m?i4!!!P#sFF!I>O~Z`^h|)lj1}N-`v`vOCo$u{M`29(V2WQn zmSlbGc`2)@s9^aN$2;D~8-=>KCo+Xiy;BbIT3^|r#rE`$t)YoK6`A%io^={`u%0JE zCvD(Naf-=nQDI;moeb2cg-t0mpz{S2O*#aUasHUABJ5PQIWvifBmAfICVKVZE?dtH z<%a~#hSpgJ;QcEF`ul7NPO4spnu^uT^>h=FLkCN)7zekHoMHpL6>#-q3A{5Qh;#0V zMbC*&Os(k*n|bpcC;RIgFJpX)Zq1p(L0TTD%iEJ>u`MmI@S(*8!>Gr02Vr0(J-u`f z67{E|>qR?QoaoLgPWZ~Z)i}|p8G$%J(Tv)^c~DMc7~MBJ1Wn3!K)-$yPDqUKf84EpRf;+^~wGLl$An&$FmFa1eH8=;8T6w?zf_8eoL=BOKu`k8z>#IA+)nE+MXr z&%CRG8&B>d?N(3vJnt#9OFvACTGcGe?+Cwb$5k-*%0U0vbllf_8K>;YMvJKu6ukB= z>h;&7=^{@w*d2_y|Afr3z@sP|+0QEcFNx{bRQB$TCMC$(({?KvdiCc#SaYiE*vet_ z!r2OEEPBl1=1mZsSPST1^$9Zgc9M)kM$^z)Cz$n37rN&+8kPwi>J4wIp~Xd>ew@~! zd6!kFZ}UkuqT7^00)KO#73RSYp?8_XZh*+?^SQntdD<~>InA@yqFXampkcQJRHlZ( z`X72UQ#AyNY%?*=>KA{$N?eQ>@z!pUQ0K5D-=XY24a5Dzga}_TlX`;Oa zbszo&-orF0yWu0a{&~W-1s#XiZf)>wQvr;UVrazd3IhwjC%S)peTGATLEZ^uqb$y}i_RTBNrsb`Qm9EbMRl4}ibpJ+c$iPW za=mHgTt_%G+Lj!)T!29tJFtBCDm-Q`g&XGN;Rg|MW}26nOG^@L^lo5lr(9r1!p76u z%k|){e4TVUmLtgx#-PsAoQ?2xy!B_)>H3089j^0c;efth+u`DiF>p}WlPSEuh%ax( zvkUv}Nav*q|DB|$@7*|DFv|d=gm-<6voUTsQ_7yn4@dv&lEQl}S@4Qq<$N4e==|#) zEXh*13(J+$Jp(hQGP9bD*UE6;tP)v>(A8PxzJ**B%rNuaY)C#Kk7;ruX!#aG@1n|R z=e9wlXZVA8J@v#uw=ulpIxPyD{Y{kFRK~tp3i(N^97;d@46=HSg?FO~8C_InCjJk> z+aF@FAVwplU+4r||m zq!?wGV4RL5uSM?P7l3C&AD=v59lm(yqPJ`f_VxT`jn|6UubJIkoNEVMn$iH-wRSi$ zXd}*_bX*iCdl>Xyyk@4O;vj=Jfu{PCT;lN-7WMrylL^ZP-+8%$@Ao`sG;}C@X?(*r zVyv)Na-bEz`aAo`k@?9~O zG)v^^rgaQ`yXZ?}1t!*!ZHcg@S%$9P6mw5Lji)K+_D#JS=hY;^2Ww#059rL6?| z6uTNU^2hT=>tZpox}6^>a|fOn`7qb8J@oQ^0%#6S!2c#jf=SJAD%C588CI7mcY6cB zcE(>w{4t3voM%zOt#TStdk3PoM9>$v;Y{l73wHV26_D9&MqphAqE}&HT%&@^rdeQt zn;m{0e1cPw+D@{soXG6|eBvr1d>=`tLTX9LsGY{`KgHfJN@Stkfh>2CE!_;cL$$y5 z(gxjEY`V=Rkg}2>i}CreXLlm$=<}lHHC}M#)M2{eCqqrka#(+)z`ap^Myp%aQC!?J zzIkaVToAmNvFh4v!aHu7%uVXP30IKk0M0n5*X4-g_2@e2zu86u}#2d=IR5 z&ZLHyk!*}-6ppHj6ue9^a6B*v27jvNm&ShrRUJoMCS*XqD0@?W@ie+1f0i36H;opn zNTZM88r(eA9YTsS(P5t+g?1H+rJ4qkpzFj!dpGj(w-WA?5o}ztE_%%j;1+$VV`q|8 z$!~c(Z+B7-yq%Y@9ioveRyH0pCuicL1CiKmyB(L`io<~`)8S>dF1K#b0$d;9LhZLy z$okp>QI*i)`WNa6BP>tB_@99BAOG^fs%JoQhbNv|t-+qz?x!UfLDFrOc>d*CCVg%Q z9=0sz?)%TfGu^kjr)H&Cy*~zR>JZibRN@mKM{p{uf(eG#nU>IxKChpSW4k5j=gTfG zVci~qanj4~TfJi1Gw0*YefgwYn8~95?4>_)=3GjZ1Kp5bfUm_qX!3_(>YH44RNfSe zv)|*3&2w>5i!nXjTm@cZkAmrb15ELpN?#ud_k%+LIJ5hm;8Zf_3~Yz9t$6}N$zH@R zKZ~MO{d>Wqw-<{4oMB()J!I$3xS)oR$-DfckUP_Ine|HhV`B7J;&=b$H_6K5?-R>7 z>rr#4xG@VKuFMjg7z4oM*fiFsv7Qe&egpJ6!(c_ODn9;pg3WHIhsid|?4?C4j+$sm z{9T zG=p;9JAFK9?lwl3H%Z)~FNXMfv=q*MCr|6&O@)NQAp(OhA6u#xAa7m>6>Hyv)`(AR zbj3inbhyARoPPwayWC*!AE={Y_#yNSb;R;hr7UW|IoK}T9dEu-rJx=cb|NJaLpLa4 zqw8(am`D9A{Qhj3SeDD?qzc>-ktq)G9*q`v_i+9v9PwG4&`UG)<_QEY#`Cds%jLY=xQwrS!MF11nt|Fx{gBW9`8 zE&mpdELe(#cTYmhK^xpRI0)C5>eIoY_t>3Jh@qi%q9vwdg(Y_wotX7JHF8Sci#CZ^@ znTFLzFGACXyP#Zu17E32k*a?X^3SElfE?`;~$iB9a0t)sxpR(-gLs6V|Q8KE)_JNk-|JZT-ek)a}w8|ry}{+ zEa2rF%7327vZ}2p@K1{POY?A6x$OtDNqYp7hgXS9c76fxJ&siDo(<9uwMk;rF;`fXiyLtl>6peJp;ke>O8bA+of zu1Ok~tU3dJsc+atpE?LVSHuQ?Gost=`FO<0jHWzoVud$cvE}^*jCWL{)~PA5#i^b} zzs`fwV=B11d@_t*v5eNm=fKqwa>%9NQQ9h@Up+08DwXn+BZa*!A66bjRo+ z3l#cL@kIjDeELpiI6scX?t0IL31@c~Uo*^5Q-Q{j)ro}-G`x$Pa)t^ z1y$-tQ|cd0m{Xtxx9^owzpe_#^)y57sT#pS_J?%~=k41ClPGhQF}E+Ll0DX5g6mA` zNy1$4Pj0ux3%%NC&5U4iaR5KSR+{V;?!l0dm)yUuSbUHx++lAj(&0u~8W>#%e!BJI z#IRCGjM@#0vvSzcfPMIAn9w)a6(U-AbpTV>d5LY09ZKcXjpRExe-E)9R zd(_bLjU3yl^n-e1gk0=``J{R04%0TgkFOKP@t2Ym(b%I2YFlRUCg!(D_uzMCb!HoF z2{xvHISc7(Tmf6`?a3TgMAP0WsWf@#ZAPXGIBo74cOkuvjZ{db7n^gb;FrJ^zHZD} zebB@3ZEiH)-G=|M?+q+S$Vc7wKK8HfH8^<63Y-Q>)<5YC9-Jn0cP=2SA1dTu=gXmN zy9fDeTZ=EcWw48jRk74o8FkIe_-_kyu=U?U{_lchN($W03OCr3_h4bBQ+XTy6h3F7 zMi*M>r-G86Z7lsI*X_aLchK9p2KMA!XF4CpwxRF{WQ=^wGL%XvJNXnHbV(-L_mfb+P!@|jW618l3;S=^43fXFk`(*P z`6>1*IklX6{%4+uUah?hEw4vX+nkB8^U!+I?#zdE*^|J`R)Y@TzsCj#uSF-$i|O9p z2>ScRW48KTbo<=K0{bJ_nw>>7Rd6$}TfNL`kmo7-cLdKYIlaU(9v_7t4;HvHj|CtRCc7>hNog3{0t@Gn|$ zw6rGThC#D%srn)aF#p0`RBy%+64Ju#ZZq%Pk;MhSQ=^L&8(8n7&D3eU7K`uQ_j{j zJF=jUGq^4L!)Z~qu%8+4hHKYY<6U24_;+UqoEmry<22)0hx9pk5mt-W1h-t@_8a2j z(TTj+cs^y1t%qNkx=eQEVW`qe!L!-RApPND?r!7^vMbmI$MP~b|GtCpxS)f(xc4ZW znD~@^eY^|*OI(h<4HdZ2{{fWfI#X|xGdp~64jr}r%e054vy{ETepj_Z z*K+~4R6^V3tg&*&Bgozh>|dxX^{qF-&GLq@=g(F6x3!cGX!r^l zi&Qo-{jn(CQikOFJGg>0_*k&URRfSB5#`Sf`B8d~6BgWjx+*FR;?0t~Y#dVvwjD5}uA04r|) z+ccVIn+3|_(&6nP;rSL^rUv%IDQ$5K=YFz-y_cCq684L!yE&0fHywt>p_@_Tssv_k zK8GjuDj;uHC3|y7lB)=qgeMjDVS{TguXsBID_lmC_3UVnDAd8}9fR?$?O4{gv<*Ui z7m|<7c2@b@oqb^L%TV^P*I|**OnSe-#1O5(@)5yF@i1 zx4~@SUit5g*5P4J_h7}b11jH@|Sqm(8DZl zcs!LkOlOr(^)N%2hi#V&V6uU4xmT?c5Pu~B^?hXUepfN&OHN={q6VY;T6@;vRm9z? zvd0XizbyOO7`mVAgIi@d^wUpfV;hd4n+&ps+)X$-b06w=Y)6N6GW;L!{Vdw$JDhbj zU?w*v!7D#SxHPE>m5cYW)}7Ma*CGSXw`MIa+-ZSEd4gN|j&Nr9u#83;3>|EQ^z?#_>@?{w3+`9+LR8 zf^r=hKGB_rUiVe;}C5Y7r=Tp!Vj;4mq#=*BGaogll(tp#!x#l*2pVkqYa!`2Q zBSSD|pAR)J3&T#EkK*m~p0kmxm$&!(k8|>S1{!Y+>6FGidZRxa$KR@lC>%z%>PF-< zejxG>n?ZKRC${GCD135ikX?+KK8u>T6!IQ?z?8Zx(5`!u)h?{X`=2^k*z0&^+LF)C zg>=LDIC~oH{GNNi7}4hIcNiI!!)viO4ksMpaigqYDEGNqmh6TbVW8r2#5;OAEzpfV|eom|t)&I$fFIqhuvQmKeR z(<1Qa#7?&OuLsR_d(SqS=t9r?L@EkdhXRp4SrbulZgu z_8Wj>XKAq_2Ll@KavBsX1kawmB&MAohq+dIbmnb5Egoyg>VslQ(JF*DeRhGhE;VMw zuQu{!yWJsB{vygMF2?FGY4rM7Au>3WgmI0pNoz_ZDfS9GJU5~5(*6;$ZXd$(#zbfy zmq^D9CeZD&z0|)z3`e>)(`3g4xGu0>3O#>x*nUiDVQQv zBXNAyd{QboL4SiiNv^^JzsSzU1=(9Rc?qFCvbqfk9rpXkd}R-Rl(Y zrbO@AA^z0j9KY9e1`-j+VVvrYo7% zWF=&^!wqAZad0Xo>;7Y1cP3Kuk0KE7bb{pz`&g5oE`Id!V|jiaRBbvBjtmoKTxDyy z@{BCJySfQ>8UNw_J^jeUVTpMD@nRus zFR4Ve3)*;ZnGM@D?+CN=Ev5|XT@>=#o5r8niEw2ou>u7e_hT}Pd*_OrMHU?_%4LK4 ztJ(CSE&S6u6{6Frw0Dswmi49MdwD~Waa@SuY1X(ZCkggCr^3$yTe5iNip#fGV6uWR z)5v=k7VzvSeZ$rWeF+H?U9=$_-Exh=k4Dd@K_lkF^CWW&J#&JNZoSUlm{wC85arq@(Lz{2mj%|W#jxXa!7ZJV#}u(J zBWIHO&yj9vl+#254PNi>V0^Y;fd*R0V`c0=)+y{~Y-P?dRd=j?d~5;fNPdLQ7eTnQ zT8=7A)$5**mO+mTqw(6hUv%rT9Q5ICUUTACc1N;`^wU;STEKCpe8mqA>8zmJ=StbT zxx$%cvnMqb$g`3)MP{E^+@3PsfXZ~%){)g2|z@4 zW9^97rl?u?9m4fX*+Jzs5N2=8=5?u&`0gegwM(D>HSMe5(z{G&{5DdEHNekri(te_ z4UBHv0ONPpVYa6iyyHX|IZOvNf}3&n83z`iVlMdpqJ`do3rN_7V?@Pfc#c!a%&YvvJ6zE8xBK+NYky+bG;2wcFwDVguP98Rloe=Id<1S8TYyQ1~ z=mGzM(q7^79A=MEo!V&JY=!y5BQR!M9HhJL!I{TD!@Yn=@Yzy}+FH(ZY`oCPuR4Y! zUz|h(flc6;7mNLIYjE(ohoCMv9uKUTN!8H`w36kspw3A2@{(YS|GA)NZU`NDv5~t| zSB|=8tx?BAnbLC(qWc;P+P>b4SvK$Gllq>r!u_(?FfRckx5n`&Unqm)q_-G8Es{xI zIxEf_P>QA#i};WY@-St{S0*Li19`(I;mlNTcEyyV6p1GG!Tb~ZAdUm8=43vwaTPs1 zE5XOlsN?_b$%0V_gwAn@Kj{QTQhme<6kBTXa*a12R`-zL(9|QB4`O$Ke6_tO;lXUQH;!U z_Cd&VULKq$&MFnL1#@-bnqx5jwW`9+FIHmJ+ybmm4{;qg^vIJN^E2Lri(j+=2?6Iw1Vu6Vcp_&0~nWI3? z2WQhgJWUa^Pr(nv09H8g95(Mw!qA97TyZsmtN$vAKUb_^_T8!&x#A&r62_sK=}6}&ESWxn++}j{b?Ip|NOl63+C6N--wt-K-{3gUWh-|!gL-8o!X^sw0)C3^hl4R z;1Xw=nN|+gE=Ex6vjan42`=OvIe4IIK1%Jd#``|^#Y_ECsrkT8NWK0Qa#oB)&$7X6 zZqEhKjgY`j9SMBZU`LluZl)<(xA>v)c34%slLgNnD3Vqfg&|v`*uJjEmQ_7!^$|+;mEG&=aScEt_*{&O3>8aMEI(GpI7}j1HZc-1A`w|U`VDbCmlVk_HBhN?$iMmFj|+S zJ_>BOb4~<*c2niAD#5|@l2soCxU^<6x*skRU-u{y5A7&M{i-7L7kC!qmak)TuhqlL z?VG5&ES~Ld8bz*G6tE}$0XTp90$SM@+2+j!?9bVI5K_4dN9@Wbx2OGZYf(D7dFH^2 zLxRgOWE0+g{f)2h87lB{cG;rBA-uOyl{Tg~v7djFsJLtdMde77&vYp)ckzX3&sFh6 zuLs1P_oYSoi%4ty$Nn^@aHH;QqnY9xT->&5UM+V9i?or&1s8|G3K=^zWf4sXG=a$uLI%3h(b zSj&PP0>NSIYW!+@5iKpBv8LlvbUpMC4Kp|eE&F@epf+a=SpSuE4T@x=tB;Ygvkl69 z--=E%KQM@auGzd1OK#es;f!3c{b@mM)4#JD(OI~9U?KabosYw`2GYXg z1kYBV2SJ&jQ+{d0Z^zEI4keb8(%+I+(U~55CO#fc@7t zu+6i+^Pfv}AzgkER!WuQ;IE2kAG!?d6581vle2uEyDO`Xv4A8+Tl(a$%2la&v(w4~ zQ(9n@B&=PDIvpHT`&!YuCQI6Ph1h7XekRvfOgVKoMCG{-bS5zjz0#gSv1zv`_NoDn z`#qChPx`_oh#lyJ=M(lsaKd+2G=f`C3MpBwg!W|xEO*Of%5geG_W6S6A^j+|JCs0K zb|R$?+Dn@8%V=N8Dm-no91EUGkd^67JpE8ZeDC`v78;U{7Y3Wb?BRL5a>yUHWY;~A zJ${_o3oO?(zbLNv#7Z=n8OKcw9gbxZpIF_0`-sjA!oU>~SidTn9dRgRAKhf&mtiD- zt3eGt4RmRxM+^`@uJB>3vZP}RU6HGPsG>zQZ1L4auVbq~>U_8l{-I}byUjEVG zGsfi8C!w=C)vg35k2%FU+6G{`(9_xk>a6JXU>dEa2jR1daKWHM^s8nRMR{nm#X)mW zHZlvnS9zl2FNCNJj7Q+hEhO=Hr-p)2)dUa;rWey%*oi6E=6AFCwGat7f)jOvU^2T z)$dCO7bk=Gb_!EGKaK2aLqNsP6O&B^-lz{aZ2hH=Ag!>l!>u=GCLx#d{C(1KDADO20i&(JVE3e#6l$F2#1yx*{iZ1%rHY}(y; z94p+*!jDF>Mh7{&LBVJ7)>liMIxHN5?_WTLb3VB1#44QjS;)EEEXLo}8Q6YP6J(|gfktb@` ztVh>RC)vxSpS))HIh5Wo73c4+McHi#J{hTK_j?8|f8WjT(D@BzJ;TKV?hWGfrYljb zSOd2Y^??6QFU9U9v6vCJ7<*su6*^c4q3Y=<9HbnDi@qSUlPf~`KSij0EDOszmf@1a zyU^VKK4+4(n@*fq$6Zso!8HVh(5knZ%qDsYS+X{gZ1sWHkn_5m3#$JE!TY_j?)oJNUmHlCRd)1Ty@hlCa)aya9EUGDH}Zcc`eXD3 z2_X-tMkBZ7vHuc9tm}(8ZT$F!D_bgjkAD%n^71)mmmb;U)8kw5QC5SH%{a*| zny^jqBPOsmi(Aa>9u8(t!12?n@L_%eT83w! zOhGH!I1OV*%x=KOt#`yhuY=f`cRu9hC-B%(!Z1Ci1^%G~@|&aK2-}Hy)9$jZ%g)1) z!2MW|Q38YXEJXGRTiJy$3V z5e;ESPENyUwJY$nI*9Il2@~ZGE@L0kLdk7*HHGne$e{BUTPMuzR~8C+n7&_PkD;#U zKHw7f-){{#qBetWM=Ibx!NbCNL@wTKR>0GBK3F#*6=y2H4HqiA2`pqMSnDl#Y-V`kb*UN1|2hLD zLQZ4WG+|b^-I2ZqOVQH{RVa;0SSYf^00oBelhk0u_y5+?Yn`sR`Z&dJ8pu1S*VLm%_@hrd2b^`i1&H=|~jxbU+lzw*Bll*oo z5^c{S*BOV|(dTX$8Zv_dT3v)QybjtvUW~>K!5BL90KfFgb~tgl3Tqmy1jfNI6*hT@TM5jK_CX>!_<}C|TbA!1DU9u%=WA^j@4A?OM*B|(RD~BB6Y~y(pPxvdE=O2gr z&KscrNa5~&b3A%G)pC_Z5@_B~fO7^nuzikJ7`-?hu6<1ghuA0ZSgsL0y)yB@_rsX> zDiH_&ogwrQ-mv-@BRqBN0ABGb#mcxC-tOKF^nY=Xt2p)ucN{;6o(pQ&<-wt3wbBFB z)r{G_n0!*v><7ixlQ4VhD9Sq6!6KF)Mui)ds5d?qJH!=OSQ>`|)(gIMIaSgCGq%rv zC#)J5OgkoD0psveK6v{~F8k{eZqRMyVP z`Gz9@7;25p!|1vG8*bCmCAfQw4;mfnhU;}FK_gTH)poZ*!{CQ3vu-%9(2pmlwzrV5NE+Eo zE3wTMFTAA?$KUNRqw5c?u>0LB_H*W3bTo^_{rH(RE;GOj=QzB)Vy+O3J_1!*h{4P4 z(b@HbZG&_sY;-ybtv?>H2Up5a{nB)P#nOwcaYi@}d^#IlZ_2TRyf18^k>Kq-Z%DtM zmr>z0Ih@4c*qIs)oU5UYQ=S|E+eeqcOA44?$qBqaqXir{RO70VpJAxWL3%Eo z!>+zAr@(=QB=IDZ_Q?11{{-HT^YYQ8HTnQqXicQ(ckTSbs_Aq%Efx0^CU6U4E<@)a z3)Y;rnYKMK!MKoBY{S#@BK@8&uG7^Wz|CHqX68se3u0>RVI zYcEd1O&^X!w83Gr-xdm2*iww#5zB(&PBQ(4q1cpePswMCpiXTEU6^i62bFe`a>`wP zNM;qiZMJ||zeZ5K*$KY`_pp+GRZM5;9qy^X_I~rbfsenumD^Y^ydw+@@yRSRRBBHo zm7n@z7ol%eEO2{YB+X%)3;W=OmJeNw*-0PeLMUi+Je%zHkQ@Ed2CJ7%K*vcj=&|dg zxNA!S+0$rwCk#_(!~LY8*Lc#L}u0|D)(U z{DFGEIIfVAREm@$k)6@zo)c0@(Ns}spb(X`kc{k=6-stiQ4tCEIVz*CL_?&Vq8%lr z&F}vH175CspXZ#<=l#xv!q=`aH$I1g3X|aMkKtGuA4(M)L|9VhbvPMygvO12QL*xL zI&9TnL6~)jdQSd<_1oGYbIfC=Z$8QBXByC;DRQ>F86KSU!%4UG?O;>?+((#Tp zpVY(2LZ4G@$P`k|pG|u=PUmAL1khj{@E%e7aaVUTuXk`6c{{gNepU@4Lm0xF%+ABt z+V#-3A)Dz{ZKlk^(G+ex2<^)9^i4tp7khBz@M8x|b(=>fJJeXY%Q#juWDQP|@u!M! z)~Nr?Z^%u)9WyV{^aL%Rd2-oLHI51vt=?C^^}9vVjbgm*>G zzi({)t#~FGxsC!#{|O$%6eB-VK=SE2yw4~+Sx zU+We=Tjg@QR&aD@m-s^hcS5W}I%v=q+w>~hnvM#oD zo`WJk zVNQC)7(GuqQ-jY5W^C~iR4Kwpzqy|oZ`wiD*?|~3J_yfAwei-$9o)e=AK+0&B26!w z#tJ_4Grlu~>z=4e4#k`3^t>UsbH6aV7LB6koh{79Y!5w)S3=|Q3Q(mTM_g|R9XoK3 zxo(+DUVbi6R-8-c4^LoarU6DLO2xt1U>`cID}+1ive}B;o7ppANBJ#z9-1thgEH31 zn58-elb)}_F%3KuJ$nOA$5wNx%?_yM@qnehj-c<&Ui`+-LN`ia8;UPpMGu3nL*vBR zczC}&cwfH@IzM8o6gRpf@9u)?Z&zW#)h=#M`vv|@#s+#aQ7D7^sUwqdLWaH-YPB`}DFmI4#jb?6V*u9(T ze5ziukyY^=W|5{scAL~FN4c5>MxDi!k)h~aRt{ph88p&<8y6XS52m+Fq>E!-^6qx? zXk(5At#bMUchlFi!=u*XPaA8{>P5_Zo5Cb6+hA$+ZMf**j{O^Uq1w7)`1@)!XJ76> z@eao*O!%3NGc_sv_5^soA(7XAqs=y63Z}97IqcxQIq>`8Bq}R+#=w)6ypQZ7Ha=Di zTZXET?d}393PT*MnMTu0r=Z>t;oLcOH}+I};nq$&vX>wdXkMJI+cRE7IvIu2|B@ z)K{zW0rl6}a{D`cil0CGXg-`yUJs$Bx?0*1uoGUlYS6%lw@mEyDO6diz=VM;?C<$N zlWuF!-tSka^?^7PdkTD+kNfd-Vm0UfAco53{{Jxf4Q^4zu%$M&1kqDfciR@Va3 znEjZ0tS(NfS7%b;;v8`KCEQa)Ps4Y`^YGd91IyT@MQJ?&wDO%18lJGFW0r~hmVjSu zOSBEmdtA&9UmJp$F@v45X{lV?Q~+IeC-Ljq8!XaLiiM7O02h?Sv2pG?Ztsp%=nc1n z8Gg^%-@FCrb7%)yxCFov zNfjcm5*mAYKmGSsaQIZoqIi)$tL#mIfzo`K_^pi;zvffZF+~zPU`Cd!hvJ21BXSm1 z6`YPe?AT!$foJ-FJEW(?cb2+hlXy3r*#3r<*ehd2>q-8OXd4@S(TiUbJd>HUf8;M3 zOVBxIO}6vs6R_pPslQiAVAAN|*)SiYO`nFcImZLZE#@#tWam^#oIFNv)ef+CH))43R1^80p5ifcyoli|C@LhSIPncH3vgi-LW62-G!h_y4{JfiyXZ=uiPEL$& z=tNYS3ujX0NxaZgI7zLCG|27k1U~rlL29^=2xDU-$hMQQeSiIMsJ1a`_8rH@5tlG= zdJd{T4}<&m?s$Aqlr7pgL12(H@r4~1gy)?@_n(Gjqi;Z+7Rr#m?F1>vhfvXNTasL| zhDt)eV3&;;=03l`Ju6?#kM)oxy_-Q~((J*O#C?M&p*HY!-wGP>={4*RJ_ZAm8`(n* z2~h4*MssTqROyf7JF=y4%$nu6JxQ}lGyfGxUel!+N)PzVzU}OyUoNthqe#26*Dx@@ zhB@83MoYZI;g#|fYI0nOegpex#fR^_i)cgD7xw{{ICDJ(m#N}j|4^FeHl7wtb^;^o z{V;emQ8EUGmUxoj#Vu)(x?8bJzT+= zt+;&OPR#nP!`4|Qa26XhNlfN4t+{)W1%;2rr4<)h;sH4I6lw4_^wZ)HM~+snP%+4@wBG z#o??dMw*^E7NhmE0@Qyw8y1Glq_G*l=3-5EMG2$ z?c2toPH`L;a?1u#_bs3BnSNl%LBrij8u=Z|#fg#%d6xy1Gdel)5(Jc))VDbcVO@hnmLH@x)M#^1^# zae2HuDVyezLB$dn?Y14as|Dfx=oWBrkU|&yb4cvn6bgJR$Bh>}k>Y}9Axz;68Ox^NlSn^o^%MHk6Sb-A zzh7YfTAbQO{o%YiH<4#V10>WILiQ&)lISpFZ6|_2d1n(qP9REX`7q}mI~po}6GV(_ zjTD;alB9C_{5BCo7`Px!#f}lwVtWX8x+`F9-D*r$e1xe6%@{pLm)34J!LIxF`1|s6 z**jHHK77SA3=_>~f100gzgDdQ9YaMj-1wJqB!EsiOES29oc#)1qn) zmRDUy>sjS&nc_)E7(NQK9pB(mtpTAgrA38py&$J?fo^z&vLTjsY~I=JFz$j9%Xb`P z5k5bmdQUrhJpT`dTCRn;7w6KQR0T?B*FZI+8U5w!javN#=h3KU;jFZUYuoJ(hBIP7 zwCp5lX@6v;g@3piy+QQ8J(l}?*^ETZOX1~#$y~p#8_QHU0nV?M3XahNqm%2RC|=c@ zPCfhp&pibnu5Og!>g0H%)gGakJZu3L#cn{G2lFWPPBx7VilloZb*RjmRaey5WqCW5T&I?HpVaIhNfD4?x?KPFV2p5(Wr-sJrQ@aQ?6XT9@co zjUVNX&rdnBP=Pyi${>uJtviX@ou%>Uf2~SYB6>bUI4*Q-Ppj*rXc+@nT zotkT2<(PSqe!TXjUEL=1RbbARF4w`!r4cacWgt5t{uob*Y~>msHld1v7$trmfSwi7 z_)q&BMhV%=Q0_JyH;aaZn4LH(b}7!SRH!!il1z$F{bAcn=sB#Stm7jt^ z!DkUTJgA`l(UP* zuNUj-sp)Xkx+{vF8$wBDML2~jc~Xqi7-pl!!GG$SbSe8W^foL97HCV#KTqFuoq8vV)yGbUMJ)L{)$9=@3|A&Wo4CJH*u zE9m6UvC#h$G27)K{!o1lmRth2C-g2e;|5@oN0nFX9^=?TCg?%aVCzVTL>=n1Bv7D5n97*{_3gpc8xyn=OV{V~g=!bs zxB3_GebN_5Ic3aV1r@>NtLh{(AsGMrRE>S^d3ZHy1YBJ|fcHFuQDy27KKElNt{FQU zKMj4$?|0sV|8;0ki_JNxDXBvHr_uQI_#w!Dw+ff{>*Kj#6RI*wX8LP%(L=iy?jEUw z62adcB_b{4a6@qK#xvM9Y7QGzdBrIWsKc_v-+WU-7(DtSE$mI=*>8)r?0WHUFuS~n z3w}9kqThNoCA8*ri+P#> zIIczDJ!~CMb8I81YV>XH33NeJ#wI4ZY8kn$n2mlVcld~;AZ$)57nmNNcz?)2j2xDY zq5tG?_^Yw((!o|ZbX|DxVPXSSh*MqU7BI& zvP+CA2liuw*eJSfJ&BAQe!};+S9pt>rD!^81?-9N$Bxluc#!wOriqvE$ntXhUL?jk zM(Oa^F0G|I>m^92n1NIOW#C>)&>=~Amgc*Mdq3hOYQ73Z`H)5oIl|EH_&!Wc&qV(p z)`G)$3C(bgrL?`Txtrfo;7iDKK6UjfHcVqCg@h+Er)(c=E}F&NcTlHJ&5blI;0!6m zj3Y65$NHRNc;3UQPPNk~+2v*{TC9BE=HY{_1CT<-RcW!uZMjinD^^0hZm=@Cw_!U$Zw0y`~cQ*|QaEE`+#f{k^13ycVmc!}0UFIN3jD_|Zc6kJ zw7K$^?O14xVJ+j)P1cyTo;0t@j0@)*3s#Zb<)_SZ)Obw$yo6nl_GBT&tI#UwKYqiB zW0dE02>hdh@%QCj&~|qa!;XCvzg!{Ba$b**U;FYcG7D7d_HhxWb3Rh%9@O+;?)=nM8ZoQ7jqEF_aD5Z(( zs*ga>>S%m0GaVlfNx&ZsGqAjKEf@AI3cnw+MX`q}^ux-OGfWzXcUzKKY?i>oHi)C^ z3y+fhFyx0FHX_$qLj)J}F68fuVfe#wF#PxjSX~f`2?o;CXDvyahFq;GF297`r$RwL zd^a?_R-nd~Ab9z?nJ<}J$F?V}B8&YxIM6qfDxw#$1)GJeR>d$P_+bGu_$hk@doVqfuc+&0^OkHU!!gO!q%{%4 z=BTqv-&DE8{^PjwZY0J`i^0Q5mM~c&g6`}yr?cB*Io~w`OT3T4^v?VH|$TIAS#A-kz#$k|!{YIg?OK$1OgJRD-Hi?^4M|7cIa6=VRcTI9VA|SW(xkLG_mOdpVg-gogzcn879og8(S)eHRthR?m^)D zE*G>`oS==;4KyX^8ErnF&VD#};3&C3XgR3Q$?oo^jmF-vxAz0xJUz7f;2$>%xc-2# z|K31tVmyCn|0#=Hob1*PkkE%239z*bHRx0I@|uzxpr!QZzmv>EDTg~gxr)ys!LL`L2qh+8q5shZxFfTK6jD_vcEdlm(&iiY z?^PUrTfZD@V&jC5jPQ;UT#;hC^3ZqEOSWjtE4XX3j>ObX(UEW|sx3NQ_4AJ-JzTJv z9*7&!RPz(~{lhix>n4A#0u@!Q16f^kZ5?vIX+xU9-rPbC9Kk0?I^> z;rK@{7;RFf<1;?d;z@sLX-ymj>==rdWmgz=wr_x>z`JC8bOZ}MkimaaaHY?NyXd)R zE7zXg#PC@o^h$hUb(i|sxy9-Nhvqel89xS|9}>l_1xJ{|o_RFp=?WZ?dmR5fn?;Vp zU$Ec?}!X(i-E4$(qIae)O}%Fb!` z!Y;LS?DOmtff@OYJLYK3E)2QGVh;bL)$K8~__-^s?rUU87e=w_7y7iC%2<+~92F$k z;g_17Y`}gKym-72rR!3#(sB*nwNPj7@s6mW_QvSHhAawA%4dH=>|mGwSN3H2Wz0{T zfbSigp+s~Vu2c%eOb=HyOn0I%g~MbstdypjzTuqzB^jQ-5J!&>6hc$zbGUIvhl;V? zXrlENc5q52tgN)d`i%_h&ewrPixm5?uAYgluf|R0|KQs&Z?0L!2c#lRxs4Ot*^xze zS?6DGHfrBQd@bUQ2OpJ_hqVp;xp#&Auzd?_wnt#f-+I=q^Iv7fUEm+A3jzC^0dPNI zCjQrC&h|>afhMH_{NdTo%~~3RdKD*(q^sTdH^t}J&gk=`&?-?~@IHXXR4CxA$01nu zr-rtzA!>JMpkw>oaOsk6=5s~|TWs&J(6jN(5*9MukAY~JBh2L&DS>}Xuh6F*LyZ$! zS*~U<47oC!doJw>p*!Q4Z`MS#oDhIt;@g>h?H*cxKn*h%MT1BEV$|u0z_MBuO#C(j z?mT)7Yd#0FBUW)VkSRq$-<9d7$4>N+dsnsnZx4GuW-m%=CZK7suFyZ($o5!EaZ~R| z;&fjtzMkWv%|?kvpm?zBiABBne)cl~J(Kx(V_;64t(-?@$?yF*@uveLJYBAmM{Z&!d|CMPteP-d_ zDi~#8#s4a6VSg|L>#qX1=542gVQ+Zx3%~dW8A_m$KX?m_nb%550*aZ zM&-t1t8qwF5qHDKJR!kq=jBYDkDYeI5;50{K`@>}Fj1%Td1H<8m?;%>`S|;Rg z^VqQ(E&RftW(~`DZk_QWEZ#qo>a+#l!U%gxQCiHMU3m*eX$efgyOUt}q;d2}d?Xx6 zPU3wQ1cBHSOICko6v_RtL{%v>I&#w!50BY~&i~wL@zQm)sn?WQbt>TA|CVv0!z`ig z_c$R3aFVXdeq++ftraz2w&8c_EBJ5sR+KH?fu=`CLs!-(Q2E@)|190amn;%8Fdyci zUE4KypBq9YqbKrSeM89kaTvY}*eirUG-+Ctkk|j@iyf;~>FvTTB(qM87T7zn!)gML z{hlV%v|Yyz?6|`fEz+TLHI}q~zZhIweGI+D#9+(RaLO(}%v2U0qu-r}xoO^BXqeRw ziGE#tXzUdHt#Ay_Tq{M9i+P-t>M)!pGY%aEwb}kJ&3t;62-RAJ^Qi{Ud4Bh7xUN=; z*P;XPLjE?Izf})r{F_Lg;v8zGG5EDc@THiu%6qZnuxRK!-1x`|-VQ#?KJgK)N$k)+9ZI`-j-DCtB(1ib!ZY7jS+*YI4p>Y_sbPPO<}MDx zZjnr2_5aU{*0W(lEvk+T?}6!Jvr#2>39^BVjvVQ@Y+zY{R7w?qMP8NM&Jp=J@ z?2jetZI)-jcA*%$`V%wW4zzT|Uizad3L>BPVMnhIg&me96e(e!X$wjgC(%p$JTlKJ zC8w9`p-|!rQ_T=Tw|iGGbx9iAt=L2nhf9Pz@m|vOe8!$6w8QV44q#;EfFidmnf2l` z{M#Ets+QJYHa&dujX53Cq(4eyh5Kp_J83EKpI824rcGzCn1<7)<}CPr ztq|Tu&0y90G+60~X70t4)3~d61y*$mKHlYZ9KRW9#p)5*v(1Hmdpa39TpEJ`ho{n8 zi6C%I_h)TVb}VjbB^?U7&SVz-67%^{t*|sFuX^DuF)jl1oPE*z*hazaU_r$~ zx4|_{9&P+)v9CIb{0$+4`+j5%a>nzqpfH3jb2-n3R{LR_c{~Q_B*M_YA6b8(1~*{6qH^n}T-dqbIXflM z!0e7sqdoI3)Ac8(>A?N{{Gr6_Sn^mDDPL?}YDJ!Kq4qYQiKIYA}@ES+%m1 z`#E&6KZe5PR@2{v7XHUyeXtr^OfllhWNovU)}>0*4bdcWOuq-O4w_PQ%znB$;~Hh! zn$t0dSEL~y4Le_3f}^!CSFfDHu}%ZBdEU%4g{=3?*|)G{P7zajF@+f@i7hy^^cnUj zwsQ)iMPRq=Iyd-aF}Yzb`%`uW7FJDRpK1tZNh%QQx&rL-B+~5#+?p#mNIDMTliAxb zC_GXS`BRPTwr0`w$}{wR=s%XEZVOwll@PVK0vKUrx}J(kS7(ro-iq zcB4eeEU1;wXKL|Tlqe_9_5F^)Ef;sQpw4A9x9_`=_Mv159jt)o2e#sjZHG}sF&ac0 z1TK8%NxZPUAACn#XQdf=C>tO{4_)ozvT|+5{z_y0H=IjvD;EM7<2NJF#kBljvrcx z9v`x>&B=`qw^gDTKfcQBi77L=WDX5aEvcl%07CkYP^5?qeUR3qKs#~v{e=vn?Mtxr}z=vee+nx(mOQ#!4|quSiq7K=dyA4cT&~LUY2lqCKufElWnN5 zCYLKa@Zl4EIC(vVT(!?Lg@80{5Iw}URJnlCquSD-1M#)^hT z!On5&Mw(iJA51@nSzTC(G2@q_?eK&6;^#fMH2wz4gyu1WspZ^g^@*hY@HqE^f5l`b z`BGniqtWYv9aZOrbJfEMyZI-aWVLLR3Mm@s({zRB^hTnHOaqot%=KW(c=dv_I(L#h zXZ?VQCUz`Y-JR}LtCM5ABpdG(3L>xmv872hT-lUg>;P8>POdZX!lnh(@asH2uWn!t zG6kTqC4s5G3d5mC1?P5q9*w9mqUD`}$4{aX3)8Z=9R3o9N$VhpnBl3SNfOgAG2a(yJ}&5wE(ePRs1>zX;K$QhGo@o>spI)So|bkoF?B$#&86uium zn4QWr{1{g!_^}HhQ7-`(4ZDafXQpA2mFj|;KmDLQz8sp@wNl%wCG6D-U09@k9?FF| zbC#qsWJ?)(Eiby z&k$y&&pd$66`!D=RrZv(Pnpgi$sn!S_u;YWbT&OLo=#Y)p!LNB(wzGoPAirQeW?4a zc>X|@lcgVgY7%_4+-Z35KBvujDPW+_M;! zk33?c!|RyqMjaad-*6iGB$fVn7t**UTR5WW04FwIqRI(Dkp8cnMt*n*+ve)<2Uc}J zsEg3${t_Ut8Rbb|?i@wFl7)@Wo2jvUB0W9pkKrH9v3zSYr}r)g&n;HKb(CF{L+QD7vqi3t9Vz$#|NeuD{?$l3PbZE~rymx;pOaHN*iE4VwNp7i`u{!>YE! zB>a*%IkBGqIJA%A2gB&+)OU2bYdeLVi(~T@$6$3&F@$x`pw)6Gu~R#lU*tQP-IE_) zeSgXqw!7sUTpAV1-O|;=`y)@#^Nc>Qvy*~FpDTIMU%zqs=16?mph*Y+3xE@S8T6vI z3Zws~qJMV)tjpaFY>D7Hj(W#3(-&dojx{uX;|=&x&7niOH!>M9996agU6XHAnOclw zF8UYvbJ>CuH9drap9-A8;(Xjz<4tA#>M+6dj_~de!IAGfc=c^#@O_>qZki!R&e;k0 z>%1k#OxVrJyWjC&Lq}rv{8d~_;y+GVLJC{z0@=8zWV8^OQFV1qD_be-HRDdoQg`lf zvh1v7{VoP%7IK1K8zj)hwNlL9YXdOJMz*+p1MT+=g3hphE^nI|s4wjUxd##0x4e+i zRX3(|_My?f@a^=q$eBq$%@JIzH|D23{#SK7PZLhLmSM-_>G&(i59Q=vK;+72;6E_P zt4s@}XDh3*RDA{86EwgN+}*?;|4nCxTcof*EdgHz4CnN{A481X49v6J#KM{+=|g5U z-mg!@Zb?;6U(p#i0`BHbP7 zo6CyyQH|GYtx{~-4MDBXX0(a384SjA8&m6%GA}I=wN9hUs4w-cy_PC z$#g-X7WeF4Z@;d#-__slruUcQg z^>zU)ECR?xPuR)rP(qgp3M{7G1t;CJXUzg%c$J=P)x9D)QXaRAe0HUu6O|AG#F`(a~zIf$%&$pbLD z-@~5~*pnI~H1J+w0lDT(M46MK5VoQgPLz)&efe~_n$Lu}$u1n?Yed(~leub(#dzob zQ}EGE=2L5%!F-)4FY_c6&sQ$Ohi_#l)n*nmj2VETK0B#oa4PKi`2eoMS;#LGTnVXO zENA^xiV0hXX$n^CUhH;yV7#0vxjZ~IJP5@V0_paZtz2)VJe*RDqBwWzV!VkCiJb-Q0RM%##_4TI5EDQi}-O! z*aP~&k6Xf>cJ?e>oOc|5x3s~k{AG9}O@+LVPGmn-yTM@jEt=G)Mtf4k+1Qbj&{1^< z2JVPNy}iNwrO6xMYVU03u_F`oggH`x+-MrCJ@^Z?v~Br;4XLoO>#${G3mb1ShVsgi68W*!3|yfe1qv&ZBhVFjmJale0!?v)#LVbyMpi5`)oj> ziz&4Zz>m+Z+?1LS_SnJ-)hFM^g31)s1{t*U2@(>R(=CdC)|A;lrEaH})!KBf**i%xU@owbAGyGpA5h=#Kdr>*eTD1Y4dCW}iO zE{lRC6V)~|9Qk59M$D^V=B;TsHn|GV$2g&PO%?cWzJ*h*BM|;&VcpA2oGqGflw0wL z$%^Qq*aQQNGSa5PSJrqwLhxNQoCKBObC}jSAJF=n#EOo-uA09%4Rso&+55;npepRw zFGqB<`a^;@w`DACdZ|cbw~1oz%Q)6HJeKnGX3`#0P4;exFN=Sf%p6jK*x!Bg>EmfD z8d)bW(C16wmX#q??IQ(s!gp?(@m6|?TC_jiY)X@gCw~cL_HBQvtnOA3?Ld)NpdzT+CUvkQ4hd1DBgE!mAcr@cYU{ZjaAWR(VGX zMMZAGxPgAK_gO)67D?05nJ4JZI5V1#yiwW~XRz5CN^7TI6tV@`R1()riiZ7^Gj2Y9 z$x|Rd4++>gVvoQ#NP>td(X4hG&%Gb1f!(q>^k2gn++3~#3Y&Lh&f2q8f8$59pHX9| zUvT(sT4)NZ#%%&e$%icW{bgo$R}a!P7I7>1#}MKtIGYocu%=d&j2`Z#VtzT92|N6N zq7H6m{5dvrzbxL|RZY)&>mfQ1sNN)wWo$TzyLyBi?a5#K(VPriy!H_coAM0jZ#XPu z%@r|Y#}!&V+fnG z>jI+Sq0`8-;(D~MP-$PFunT_7S|#Hs~CrZWR#Q{5%uPtKJoXshyz7Jw=t)U91G)kwD-|YO1{dIRm?uQ(VxgLy<)Mnx1JGa@<59`R{-F|ZSH73*KjntD` zS7E+c241;LrO>9S=oK7KF`G)U{O(fhH&UWPwK81wo`*c|^EAOxjXsB6rpzX3(p6B! z0A*_yvb2Q?*7Y!{@8==ww>9Zb5q2%stH3^UAFWjW!PfE0v`NS@7kPJsX2~YF*%^pN zb|+9v*vxN~A5HD)pZUM6IB^BuOrw-cWrr}8Q|jC?+g-4^X%k)9 zXGPz&PeHq`FRtG)$k|=@MzOeJBd=>b)6htUiMR}BJD%gc8`sc_G5t*4D~Gq6SWUaC zifKyfBHH^UjpWVGaz$-cFmISWE1F|XyMARbtsq5=|1gBgeYc{Eb_5#V6em@SS8xyM1F$&BJ&T*aK#l7iEDCapS|Ug>r{4YW%o zX+wY`1%|Ch)y@(;d2u^swz^Y{Wj09L*0RaknQXz{DSY&9DaerG+5(!?U9_C)tpX_G zypRnTQx9c}vmwdQ7gA=gW7mW`X-4rk7-Ho{AHU0yw~D~e@b@8>ID}KGS%qo0qVV{k ze5P3E$M;K~hXQjEnm^2rpPvBqIKh|hb&ln4R5j9=Ys2YF-D2{4bd8b%=acQ*NK7g= z<)$?k^Hb#|tB$&)GDugzqxcRwuDSE;)to6&UT|P;t;F}cD*1%dK1MSgquBD?pOANQ z4aj#(!#$UuT-pc0U08Gm$34_$aK{D9Cm%t(T1V&?IfCis!zlk_7xSl&@C?53QTGd2 zTJ>^F-9Lkx`}@HrVhDA8n1$DCcd+rYq4Yy3l&UAD(c+%z#PTHgqS7ojygh`Utk}yg z-Zmk-g%#}G99dX%>k{vJJBU3qaKe=R$1&x74ck+a#oER#M=6DAIP{_o_n*so-XP)) zO{w}!6V0;7MWuoXsTexD>pfkz_y?)_!Mxeq<5cuuI_^KUo8Ha7#7$GtrEOz|a|Thh zpy(MW_+`?V-`02BjZuo&JZTqYhj?&aR#%|VP7l}KN@H>%Q{brEaQ@v#Ac?GKI#dzG zdCWdtInv7$^iI1|)cr$bF0PLvU#g&b^BO4X(c@BgWz*ebx>P-+o-@_@#JqlK(^bun zRlQ~wAR7A{RKGuDZ)?xdP#ZZKp%_Lr`@1R?C41T3S^Z$PokNc=;})o{H|2hAhTM9;7&aIoORez}sJ8tfe|z)|SZOhw*4z5?K2i;=@8}EG*yF>#n2tuJ zf-E}Yev6h3)dxH2u@rXDgGRSl3J%Nj+|Z|P%v3LqUo3S6Vx~<(MafK5svXYmn(Z|l zw%HW}P)(@csW&@$S&w!<%$>k#8A;{1olO_lkK0A`1#3P(zZH5J1MdS*l_E`FgH*U>C(U?nL5JLXXx9Q|8kX3>B2(j0Ofv}m=0!nTq4a{viUJt6>mhu5xfNoX z-Jzl)(&${DI3C^Uz+Lfnq8(o~(Yn(dkFAzL_bD6k(86H6ubK=y&&?O+&k3w2Xa>ua zdj_RDzVS+;f~&&iDcLML2=U^ZsBH%0BwaPY!+j$)YeVF)AFRf47pI-Fe0W714F;Hr{Bp4(`()11px@ zV87qDfam%OI#lF?Z{N0aH_-?k2a+Lggf`J5DU6zW4E1VmL)@-6P#UL-&DUn(dljJH zdviGNh9*97j{!Jl>!bQ^8>7w<$H{4{7iBcq(E;TJ?TiYBbI7Huqv(5ZzFlNoD6`;Q7l@uvq9SPfpc?=0nA> zBs&d1Ia{Gf`VBtqo;E4>E+;!nDa1`vD&G_dKIFWY;6CXBbV+O=w?`Flp)Q%tPb0qT zs^BhgvV{BE@1Su*9NrtXgQXmO$mtAIgBfaPQ2k~Fi2j%iCxyJneyv2Bz33sgV1Xs{ zT-{9hXTq>(a0{0CtUe_RJo{R*ryU6J>DF zQWe?94$jrV8@s1Y#sHH~?2zsR+}&RSx%oL*XQqf2QJau!{|sgCJyB!bGb4#RtxR*| z6*ycF&pU@a;zv$!<*e5@(r5OP8YDUeCjAvQGux2N)x{Aev7nQq1tr;%dxwfgFw`1Jc;!h4~4kI52TGTQDsNYL*?sfrM|cwz3T8P7TNJQwZlg z@B)#xHdJsST)0gh`F{!EZSWD+j8LVDak98QUzVFJ_8!9DjY9r_I&!+HnA|l68_iA7 zSNtEo@fwaL89KPE;UR|jzQtG#hLRP-nY(cSDQe5}&gY83VC7m$w7O*YdIHd4HXnxd z`oI7$@FYsqQQ5K%bRL%QZ8|&ozO8YvZPFn$Wn)m}v^1uUG@@;eHwB*6Q1-=f6Zw=& z((l_^WSI7yMHZcAJ4)s0^>tko`R>W~Otqr7XQBk>&VGTPxV)?PC zz3El_CQPyxMX{TL1MbU440L$UC4HKV$r0;unQ99L?d!%s$$I#c`X1AABeBq(+N z_Wcl}c@euRr}K*UmZJOIC=%P@!7cZ5!Lu2ikm)23-|R2o8{u~sRa=agbj_f%U?!{> zJ(=AeA5OO{KQYrSyXipqFq&zd2oLt$X*=x)cKi1In1afohs|P~ng) z79dM(y+Hd>-7ucTdou@YzFgn7>RLO(LBu(nLP+@mpRq@iPV(?esr}&cl(bHVngL6sd@cQVB^>R@U#lkCmc< zNM)5uR8k?@GLubqva*xVAb#h4R8$fo4Q&-kMx}*R-*^559Opdm``q_+8KRy=3@l3i zN8ZN0BKGqdsr}asc;ci0ymNANFjpI*D^8IoLS|sfoimL*i`jn#@hI9W52+ku=#X?5 zsXW*~MubkY28yfjv#tcRy!k5aqVogB|&MNf7_FMXB`YQk}*N5X^ zq&CkXcq#tM=X@1hNBwa8W7fz>8PsIs;V3ge!)w~eGT{uo`u+yFdLxG89D35>`t3Aj z-6-W*@5kehtC&@iUx;gtEnAztifM`74O0v~!MY;}0|H|3_>*kfxy9(W{eaMl9S@8V81ZvsRgp#p|#9>$rg!_s})xb8WKE9mQ z%)UnbG;F|s&LU8(cu1Fik0lE~d?3!pZ!>zUQ|QktS+HptOUvG^fvQsh(4Djva^l6I ze(iVk}uR1gX} zvtU(PB%LqU2GhD9gTx{iP+*%#&t*y-KTLr+yieqA>^r)=XfBA#O5^9<3*bcMd#cj* z3&ZvPqxvf%QSFdDzMR~I;Wm;u-dV$3b@@sMKRjY-)C?FwQ>e(w0hyy`$dwHt*zjX9 zDO$_zS)$j2=Ls#`+V+CpYUm)PsiXAh)U_BlcNK(=x{~^r3-LhLVmjxiJ`BiChg;Q| zWXp|M${t7nfyxeW(c<3s4O8K_qc_yNi{<#7V~k|i7_%~Q3VCr^kVfZPla}z^BzU3& z_?_DeqUFBunSBG@>7}sj;Ys@RZY;j z+43M5(LTf^CI$1xbYZu7X%Hvt3>!j=CJhui95IAUPk8$8#*~P*bqe z$c72;*25(O0xqYMV72Ob$Q4cpuO%~?xrcm-a7GLHk&{Mm#`V)zhVjsLcpsT0*F=ko z7QuyTMdyMKw{!QCTFboUf;U)6yo9{t0txpfw9PH3ina|Cfr zuamTjIB+i0QW8Jz2(f;FM4wj*J%csu$1hw5#ln~DuPWvLv}~rlaBX<)9}g;Hz7U}( z3B9tB;B%{hI+eBnpPL6O-wPQD&v*!TtB=EKnI{nNAs*(Ldg9*a_9WBo2X(wOmG0dX zj3;B|$vWo*Rz0l`$&*Dy)@%|Zn#01!1?ljNua;&vgCn?+m>gQ3OwnE;H}nwcv=&S*+#!gZHb~(U= z$t)2Z^|Bz|<03P0zY!=Er7`K(E$FMk#jM--IEigAhc+o5TVc_~{F$dmr=Bb&Vq8C^ z$7C5vP(j<_U>wwHfyFR@zfq1-EUJAZm3zyJPGLMBrNJ_?80wEQ5m0 z{wko{c!Q_%fPrX^>D1a;%P3TEGh3!5q^br1r|SUEiI=F_lsu}#Do{FM8Tr@@@U77V zuQW(d!Rv$MnddCzZT3dKg)P44y5|P|*<_{679>BdS+D;xn2wWo$;IyyAlu;#UW1uL zTU`iWhu1Rg=F0Fw@f9S;$Uty$8EndOBNa{r|D{=xs_F&!D6X4S#7?0Bj=S-{O~?5W zHkR;twko|P+D-S$P6J^RGh(u|fdv2HTwi1#JUcSMD0|s**gZjy*mAR@X-6#48Mw)J zb&X(Wnh0}DAMQK6RhgVhIYs?9S5eu08T3UQcfa0J$z=K-oZgGAtD6a&FtvR&<^rv-k4s|>5J@I{|RiYkpa`~X#>yL8ZyN?7SC?bK!2xU;yUjI zS-$NFm0WLu9({Y6(&xcoaUR*4zb3FSZ5FJ0oQ$EeF4($)z>Z#FNNjmew+^lWE3d84 z@b)jW^4@re)Ylfyz^k)HFmcC9350(Vw8xtimU)WW}?T%IXQ3}t7lvlc=|u;AH2uo`$nZHpaPzi%z{ z$nCAzy*v(!i}=ig^O{u7oa>2MdDH*ww$jzVyQ#NBH`T~{N`6dECc$ybN%kHs;yIEJ z&ik@qW3(kXa$p`#ez*qRGRJw=t?Q_N!EF-QCrD+|JK@-&zfjgUmF#}O-ThP#)5_(0 zd6NsRV6ksCOw1W2ueeT0e6Sqe)Lo7luM=s^$Wdr6PQ=se`-uEcVfg#!4v6o(01}6n zL#!yrSe++=j?5%HT%v{h?78Qmq=d-ur-GK116lvp3PO8s!mrZi+xvvrXm zus#k1T02SF_Gb1}qc<6vJWAhhvcYC?Md%+ZATM;k(UMh)26D}AsOHf^eO$S-<7a!a z?*n(|QFawdZl(c!n#>9c=Hb$AWv0rvpZxtGh-pvc1kducK(<9#N2{0bJub>X+fRvg)wkGHbD(R+YnqxV(P2@{qwPaA7!d=9|KR!j0I zyBH5#N}#4{U9@!Y3;p)Gnlx8RBT9Z^?251QcK#B<1*KNF^VnW2O?i$&Uvk(TyIkz_0 z!@~f}gL~;Judn2R8pmVzGsB@AJxF`;ke~4=6~CK5!p4eQcr@cHwp)}isX`Yp`lucj zJDq^o@T=6~4g;xexAETbJPcdoi>qRP(0xDMal+3zfS-BTu_cJ(@R`D&Z6`@-)^V`D zs0;?*77>vT<@`fuLSW$iTl&k)1Uy!*gU7?)>7lD%xcyx|BW@iGJ_QBTb}j>WO z?6xxSJ<^lk-SUhq*R{Z_Un=NbkNM#JbOuR|pM?GeT+Y#sJFA*mq{ z2Fx-;R%u32(0t$C;jEV7&lD|{#%?& zJihqSR+j*hP%jDoKkKOa6;b>=`vh)#&bd0}hsYxDZ2s38K{&q77VEpOV_nWyK5i~T z+xflN8(V~NDaSyyDhLLknb;Tjz!Ls(QuuZWn=8U~mF>dl()-qUJ1e4jq)A0PxIaH=mo6A#DrcaXPC;Bvz`mCNoJkkSbYU;jwhNIb@s@60KaF&GY$X+fDqt$J0fv7TK}O|4P*Y7J*B)!5=)P2F ztiNOUT##edY+DBU(UB-J;VRL7nE6W&gKP4c>;jG-rn*xKmiFzTW3vxH zVWb1+cJAg?X-SjkojSz)(>@6w~sn2;ZiYEiZb+7yZ3~-By^6 zNjs;)=Ex0b+}@1)|JD(mZ$o4>C6DP@f0|uaq)h&s>H!`{#OdExS7|eUH+V_yhC}wM zQ02Z7s>E2>)6xVz#XlIG+=F!CJ`sTF;kaGz4yn5#j(57hGTPfxsLx0T&5M0Tqyk%r zDWhDwWA1m-oL^V_VaYvA&{o8W+&jRPa;$J!j%Pfs0esSqwtlzCclovOaJw3p2azB_ zW#6dR7{M=h_R!z=U*ij@jp$#u0S&pCwZJS6EPKANm!dwC{GAtYm%tL{+J$$#_UpQ| zF*geBCWoS~)^GatN-`bhU7=2I>PgqO9=5(-0F=%AsP&6vLRM{t|5%88(Ik zmu)d2cP&gyN&)?=hhbTO7TGcR0rifUML%0`9umVL`Z_uan#)6pzD^p>Hq^!OgIy@F zUkblFpTs#YW3VYFlk+sYaB{fyOzEUug&J9l1ys{Puyr{czzO(3eV z9vxb5v8EMW>;wr-ti6!O?q}ao7n8S)n0O%1(#so@+JjN{tR*|g{|vo*5!8H)-^TmsqzSon9?u$I%FG9~XN!ql^#N%7ze%}cGYw+Uc>dzCk+!-@tJJmn=CX;_(SH39K@N99%wpV zL9^1&kk>;^q;ly1aXI;(*57?e?e`ip4zqzgkF^GwC~*w%kHt;$;iu{d>LHsF#X zocmxZeqQK6JcLp(HRdBdWoSw2PGmu9M+uSteVg!e^WfPhTL@?p#|JKTyp$W$uyP~_ zhMtwPKAqy|GG!;1hn7Y8A3whVy`U+S*@hHp}j6uym@tC6>0LD|5IiKx3CMc+d z{ccx)&Zhf>U_H0K|Rne(15mvSU8E5o7SPY^bwgyG2_sW^9jJ$8j=p=TYJ z%ag9fe-Y>K+QATdbiyena$JM{bP}b>wFjV=>m@j9JYXjsdq?tg4-jUR2Yqy`iQMCQ zr%$Z88GMT#rbOi861&&%%K98FyI9E2IxAzeja%ELb(O%;t~0RK{w$W%xk1|`Ln@%7 z1{;>uFhaF`Y_l>8Djd~gea=V;OTifZwpjeU`7>NTqrf{@UgYpgu65H%E z^kb(d+#7!eNo*(_FrEeP8eAFalwCy0=Q>TgaRiU5?8hSyqo8A$0pnCBEU&2|B-e`i za)~zkWBM4S=!hkY%SlqR7!jS6hsSC&DOK45v!{I|PF0Q2m@EnNU;4AsQ3XA1NGJg4_k(@|LaC|li9&hS1-&~!~BC>V{0_Sjj_{`mnhd6NZ}u@&Uaw`;^% zU_Oqf%kWiWgmG?IC@nAQrzaoWE7N9vZfozaWipp`H42H>AFen7tDqwoVVh- zm@Q`1cCp`VUJ5 zO(*QvM4gl2BtKRgQX0KDf8iK0X80sz@h$TErVftm(1s3<`*PFEm^jxpQU`}L+G#C8 zCuK{~$fd!wvFQ*_PB{SRcY$o_m&B9xR|z>dAGUKWy75z0*T+bUpZ_jFSD<_w-3-$jpUh|=SexPF*s8OfBCg*!q*_<5Hl z7+hEY|2|Iy`GY>(&oUn#pDbar4Wo&5yC|%Qa)ujH3y>E-L^m{?!TXh?be~KN{d#XY zb<$rAWx{75z0VANy%`jHaFafKErLmRL{Us}2OMf>WDittfRKYfsnp1Q@;$nNXbj(^ zO{qCp2)d}wap@F0vT=j43H%N$qLakp(bxDtCi?4H)GgjaB;VdO6nXreCd4g(|2U>Y z^}R%N_|`+5Bu?YQrOV)IZ8(jeu!cq{tpb_ECD6Qu%PyQh0Q~}Ipl?78Obdp{x5&HX zS*tIKU)RS2VLVuyz8J+Oon3wS|fLi!!DC9sv}y^XtP zn)wCf9qLHFtuJdBG#LftC7|bKB0l4KkfJRqaCI~o^;)GE`$cb=gN4Sl-_@Krt$PW- zo%eu7_hrI+8A|7d>ac2Zwy1es4R*_O_mGbg(Dt(pZYR^AHhvpk*U7_Q2C2+KR|C3N zC5onn#}QV=mgx5aRA|2;Kc;xXBiGXqA@hnIx=>H+rpJQBV?K^LFT(V|BlN#}4@fjO z+g+R!2?x1vTD4&qJhruGm3?iPvtFe%jK2_mpO>c36F*YZh#*{$&2?GiedwhmWA?9L z4gEON3HM7D;Ntc?QgdrR6&xC;du}JtR)t>Tx;&St7`i}VO+H$zyhAyGByHm6xBY@a z%ynCLSlloKyNnuGvw>0)e0wP+5l!@-rX$>Ml_FleN!VDj2EQ2PQT9(Bli%=&#OY5& zjex1J>iRQs;mdS%?Pz6xzcQyGx-v|2&_t}x6o9jKi=n+R2%NX?fy|2QkdrLOmLBjW zmfyPqV z@w?O{u#uXC9p_w67wMzxIxtTp06h$bctU#(K-#F7p)Wg`iO)^R%dE*zR^W|_!#BX^ zy)S4Eh@pz3C!IgX9Q@|I1*wEkDt_V&UJ*D$F4wQ4Z!=fZa0S49ZvJpi|2kN&bBAM} z1tF1t2dAtKz#xvvZGWT^XPSgz_-w*;VxsVg?Rva&HI#7-G$9MyITu!k97$dyM@}zu z1^Jh`+}%|S*S)oa(1ufVmpzZnZ#sZmCOtq_qmc&p3eot!SSl3fgZ=GsIB!IRnw9S- zfrf9{c`bEFCpq8xYOtidyBT5WRn4soS%fH2S#|6>=CFnPbRT>8=!7d5PDr| zXBTnjVZF$0Fmm8MS$%sBe0Z@LwFI(A^5>1{_d1Lu+9cDaVNJMj@Ex`47@xV^Dct;A%*a56~p9MAfya^9W zs!`QuUpAoX9zDG_m__>+Yo|YV%?V3r^*S{KZtrFN{yuzcK1ZtC zE`yM@BU`2zMQ5D#CnX%WKq2G>`{!$E?a1K;yxTt(@V^JVsPVkd(F={9QbYY5AFIJT^CJe1TqqgLiB>@1u_Z6-$J+&f-W&cPjG_eavG zcYNSp-sB=TN1Wr?K(g9tnAj_eCxQ(P&y!^4sK;xvH`f9?<{yIVT2A!TtF`bk=M-~Q zp@^AmGZ}wgngfb!j8G+#>&o<)p;IR3BgJ7hGVm%0+gHHI=SVs{^8_r|a+zjMkA(2e znN;q&4yKjug*8%JutRk(E_ri-KJ7cqmSZCx3su99-N|SuzK~qpyA}-JOap80P|)W9 z_wql&>G}1Iq|96poDaSrj-0#W%fJJ2?2tdYB~M1`@4E}2T zOk!%GhZVvFUW;It`!=$@Op#7B8Z%Vi-AVpT*^alhrXX_VwDAgKnC8%Osg)E*s_LbB*uEJ&SC1BW* zPyDpKIZpLM;+gn|gf8l2cQ3RhHTxW4`lAuj%Y9ERzx<%)!{_KM`Hir8*<_4dv=R@k zj70iD7^>VnA=WApjQuz#>^yGo%st5Wee_}V&rGmvdIJ49YPin%3@s{C2b*L!$Vp#{ zUxiN5r@viM(NGHvdoGfB=9}>alZ)-glki95PTce43_h?Df;So-D6;%M+uD$W8?Rgg z*-sTvdSNbjwJk>X*=uOAybM`*R~X&1ftGG6VxC=FMebe@qzlD_X_My&y+3M>=Bxzn zs+DJdPx?qVav4{xwm3R9aw$0JA0nUpJ`qg}hEuN}Fz4@b?C=&Y@3qvLcFeCPlMlt9 z|7s)5`FNWq7>ryE$Fyp5BBM)fIIj82-y9B?o0`y(W;rKsCts>>~)}5 zO5`!SeKFix^b`hG@2A3s+}zV|1Q$2{Bv?;*I*hM-*SP`vG)P1<1#R5 zLL55O=F!agGx7alb!@kCMze_#*!{7H>LqZ!8L47Oj(3B~hnpbk-d38flMk8i_khHM zhw!puJ! zQcC;Du?xF!zv^7l_ld<$%MIAyAc)(Cqp>1>4o(t%j5~Rg=muX$Y@cIGqn3zZTcI&9 z3UQFw&h=GWazNTW2~bLx>zzKj^*#U)Q^@4=z!+QL1MZo6x2nZk+u6f;7DHQjK^w+JS9elT-5oG%ctbEB&IX(|FTT021Mf=dRa2xU2`it&ns6W9flKhrbP zABb4B2vIthMD$A@kqMrB2wYVSi_ETrT%S7J`0yW@`(hf`^Iu8&o3en_5{AqBmx1XG zmYt|627i6p$TzOfwt1+W?)K;*gH98{$6FF6aLn>YS=Frl8p>?HCW)n+T&brRmt){q z9!}a~KnHb5MsG6ebt_TUJql+v2ch-0IbbI_9TqLTM0lFQsP-<98vL!nBYTkaF0#dW zdVHMp=`P(Db(#BrQp7#lPB5`_EA`yn2s#cvu&vnv?PN5;BS`?-xV^QGSr%EgC6K=A z45x~D1k}qXQ`4o^Sj%-@DmiY>kI5ah>z)ie+`{eXQi5Q$MI5w~e$L%j1eQTu@AH!x znloWcMe=L%skxX01e#;lP$P=l)gV8NhyU0NoHq3pouXflw;qImWPS*+LJg$Zz!NHb zmeN;QGBEMR5qkJaFSC08IXdytZrH9NPA{kB(NlX>$ma}z-O?`LsVa#pcN*b`*fqq7 z>wPBatHI5o(=5E+L!CZPWu^%zL0)(a#5}qN@>BDmZHv9{pkdGqWJny|)^#p6bAmom0pnuLI~Tb&`H~c#mDf zF$F86wv)-X!oYdOW_tI|8^$6gnH+C_NACR9V$=3LC0d8=(C%0fzUS^f_FaEW$?K0~ zl>x^cJ$sNWl{^aG_EF3(oftSD{FAgfm%_Q@L+muJd*fnii)jI=IBQ@DJ*E1JZdiAQ zS+_(KJT*_k^;LF6>c4f+du=0ZKO#iF*Pn(~uFK@_5(mvk|C09qg5W|G*D>tjum=0P zYaer2rK@=osOnI{48(t@&2_iYFrx-(-3*wwb|W0tccs&|M$zB}RdmL18;wgy!gm`) z>huoyaNVLXG&|NntIr3MgG+^QyHFMNtZ^gD19OqDFV68QL{TdCDh}L|l=JC49(@lM|N$vYrCf$K*9+zBcU`>0N` zA6%2uViHztf*|D_dS+`1TsfBue*U$XuPp#a1Wv=3SXnG!%J4-)AT zF}7QeZ+;cfG3nJ*w6vYRxtfnTuh-+>?l{hws)tVvTG@m+6?Sb}EPF`*1sOT_n6aGu zjzrv?!J5iFr6nh7nJ})S>XScAXMeK8x0|-$t$P!3MU@69Yb);9(|%x4E3FzOI!d#zsMGl0UgG^o`3~?4UJf0w6ng z2^~w;@nVXD7oxwKB-FwT4pXBBEMQ zPNIKu-NT=iwDEf>nOwIJZfW`F%ABWh{Mh&!(B*o~dLMPrho=j& z|HSyujxR^C$5}WcXb4xOPT(&$OQM*aK&yV#5*4Mx;Jq)8CXB?8E7RtpHBloS>*KMg zynx(Nj-%%+95Iw*^2&VJg&XH^e)7s>qU$&6Tkw$@7W;94$@rJ&v z>$E9gln77hq6+Ru;O)O1V05yY9B^nQ(T$Z<-JysatlohydsFdd+Z?*Yrjp5c?}9Mn z0c`WE2Div8SRl6s6}*)=zw%~K!Sg7uz6YuTtLUb_YLeAXus-n^N_g}$5^9UVC-@eT z+pyZOW84g-{7;f=&UI*1!O)EXK(zMXVY5!nB&N|~Mtk1yV1qy?7)J1+d4mF+eo={k z2c>bLR~RH6n*p)S(YRmu2>uJ0$#u*^=;&_=b|}_}$k&KaHP1>cZJ*6r8^z#uv4?nD zi+isxiNsH<1nCOS9sk?Jl^&DPgN5AzplI@&k#(Pr_7;kexn(DbUm=Zq0s?UV0MbO| zNamfpCheKXb${X{;KA*MP;lZaqyIu1D$YuR{l4SCSPk$jV>ZBprc!c7ejmDKn!zKz zC|G9K$~@2B!R~3T#kq}-=zp?NC^TS!^#zAG?wbb=cz>cMw~WF1+YUHhf1XswctX3L z2kmM3LDESoM!Z;qst*c*Wc;Rkj5v3w+*Gpa$_BVJ;~AN@rW9l}mQfG4)g<hZzP%NWz^@?H8e1r4-d6dt$4+yQ zxwHtU3I;;(@BQ@T;62)Gp#ZzYLqP0YJv3=fpjwAD$={K+*3&2n+jT;4b)$o>mW>hz^Hjif)ACX?63li=;`u$52~_L18s0| zq$}K?=!i=TPm@{EaUk6^8Rh0}M2D2eoDX0IPF!k0#e|-blvoWmO01o18aw0rAr~4YMa!z@gFtviw*GZ^ygubZqJ=lx|)`yZIJy-mnCo9IdA82ObH(ri5?D zuTjA#5)gdE0c_e7x${ybQn%yi*#4cQCoISK?Hp_IYYiFfu%y~QV?pomFDlUO4gLWg zJU2Ja1;iUCX>Hu|Bk`PAU6@Zp{o?HuuvjyQN_dBg^x=(&aZ)VqV-?`OXhvo5t8DJ4J9TXzCGl)(# zbNx~)<{fgug{~*@l<@~FS5HM(nhP!CjdbJvwYXv3I_{iX59%+t`E;i??yzSd?C@@I zX)T2}7e>i{CnQ0w>MGs5<0VPd*a$=QUHFM#jGnvp;p}Kr7?}H>X;@nfVzc$3;#4%- zkXr@{^?R{V=`>acR-lr45WZcn0UMik!ORH@VEJ$kEbPrAyDx?iuTybk)Gr6_u18?nq+eMum+RX zCkF-Q(~KmX`Zxwn78`Y4o1O4N6Ovx&v11JtbYb}uIO=(WXXeX!+$v)^ez__=Z@_hP zpDaLs&Oha*m4I_y_L57X7HGf=WIZMs(eCr-LF(y6dRs1nU#t9w^u1Wda#={SjjjTX z%uG18IF>YcakIvT4kDdlh}CiL$PKwM>ONBqU!-!*+Lzv>(j$lTjeKNp7Eh@G&jBhT zc8PR!IKUK@Fg&U|0W=TqLhA}|xWZlM7)-0dux0uvtjhpKp)88@XuWJXuSn7J=Q|;tm3!%bz9zHKG<-f2yfzOU}nTYqX zbe!|rnQ~d9CGBh3Z+!(A5*-d_+pK8sFAhJ%&tc}pg~KV0x5TW1 z<1P&pu+LqW1NkB_N&>@SRD*`cX@HcZf%>vHd(TAAJm-suoxSY~vDfsb2 z9<>~UKx*?vxc|kR4v!2Itsr^o;U2+tKl-S5Sw4MNuY{jmB5-)qNqX?<7Fc~n9FiL2 znf8WfWOes`aB2``lzffYr}a@FYMuy*gWP`N>p!xo<`0$3Sd4QdPEzLvM|ibWfNtF1 z$n7TLXxbQ`tkvCu9^q;1qR1cAUTzMSilwt=A31OPeybtHK-GoKo{_7b0le3BM$jnq!p z#ciG|&}GR4&b?&7oVxIt_bIiEy*;48aSE>j+ayi<<%)@$&m4$9nMyJQ>PhWHK0G~T z4r1}js9R8tsk4=^Su_$?-h4*xmL%Z9L?P13{f|T{xM1h6a`JDb74*W7DPu0X=nz9gV9-IM# zmXoPIeNCbxRCx`br1AQj$)vsXC$;QuBJ1Xx;M4VL@WSU1J74A)n%SzsdX9S?xjT^L z{ZoW((j&~+s&Htz8VH#Qcfr_93$HAa#FQV3xN_cMoIi0KszdLRnJF5mXRnH9>ugZD zBA9g-`9mz%ClRf6=ZUaVJ3WL2F!)iG4gIl~#EIKb{T5^N)^vgijcK&>loM0(Q3=j1 z6oo6vx+EayB24|1LB-}rk!~4v81k>gTenm}v7bAevJA;}T?n53Rgi4<3N9?>`Z$^9 z;I&a2XGRo(q$I~BJSq>`HEZoHdv1T|`|(2o2& zWN!!`_8prB-yJ&XkG2Ln);)*o$0@`6ZR4!bUw!1A7l77t+%DD@+Q__t~jV;6ade3aV+6M~P!ZMzxV{&_p++B*h6mT-BeFB_S$uxWUIT!VDIRD#%8 zK_WQzk(Pv|k-i`ynAqG(r`_Pbb($%VG`E;a=yREobRnRBm(nt^DzatwF2h^u9P8w% zI(hT&0^PhWoAfx$r)I|Yc{NrnBiQZ&Df;VaU`8}O_>Tv5M|42n>KIzXDu~e&1%U+4 ztvE>&Kbl-37Ej|)|Kc)q$f+lGLtM63p`M!7o71d_smu+oqqgX#GU!* zvOl1J$dB*AQ+tn+Q~9E>@Xi%>EN?P?8y;oU#H`?`Xc`y}u7E44F|a}G99W*&1iu&# z_TCyzolE3k*Y_K+%(#=={~aKgLc;JP=iS=sD1#+RYWQViI(R>r&g%d4z{L@+w6XLs zuIZjjP3tzI>~U{+)%=27v+SZrxE{Fhwo%^BXVDNa!xIFKm%uB>G*~;{3*`|D;qkRx zSond!_uE`XXfj~7iwb%3*&eUeCE!X$m{ z1J2ygmTOFz58`lIG8zIE9zfluGi3k$7;y0*kn2`JezoPo&-psI>+WxQXvS4&oH-Y4 zQdhErx=G|}j|%BK7=&wW&XAIYFUgdV8mLyyV69sA!K=CqQf*7%dWr_yTIdcdtC6wU z7l}Hu4!FLF>m%VY&LKS+JdeJDSv?X?sfTR{sQU4*W$oK25`cS8s65?fKZe|1fM6<~UxdYH&k1 z8JE5$tYPG4&?w)6uJ7Y1Q=grWyTLs+w+vvo-ljyv= zIjrPnu1hYZfn%Wy>692PY?hNk?YW_ZcXNcSGBpIXW+l?PD-ZunX=HBLMbd{SMPOLA zgc?@FVD>dD5S?uf=4&HBH2e{%*6ZO5^*A!q7R1xlYDeh!T_yC|bCD8PduG0J2nHIt zP?78yys}9VX!0<<{PQaHyBvU(3ERn1&Sj;_?FSnFoxrtRX6sx2AxMm!gKOF};7Feg zG5qp{Znkd z!HBRdG%d*??~=JaZ}>_oKE~~bwpP}&=gW;$kYow@z8n|$mIh7FZIgbqN-q+D+3$EWkYBArrVx8)X7#V%ZrU)K_M*p+g;{t|t@= z+*)b6PZep-on1R?hAD>S9A-@&a%(MIRB+QqmaZ8Yq}%i6qUawp$oiWGRf>Gr^Tri( z6r|9kdNCHy&LlR4g(Os9Iu#V!!2EEpB%;%~4pPljd@d?Q?&oj7NscM3-LxV$Q`{Ad z3-vJiiZhHdGhje!l$q8lL0$6Hplkhko>Ux{R}WWVe&=l`o(=P1|KucC>flY1m*vxp zJuA8UEeG7P`5Gw^=Z-x7ULZ0h5w7TS?1zzOeCIA%IzA%B+*sQP`Fl@6=aOie{ze4S zEhj*<`6_tz?kw0^4$*`ohA`9F7<{tULi1)7X1kyoEcfMHudVXnII0M__Z9G!#aTMD zYYqx3Dq)4m0*G#(1!!5$lSx?!QWlqp$nRt#`OpykF0H~{X&&rc6Dhoxs03LDE-|j$ zH*2ef72UR#kACyl;)Q3Yz^p?jsosk2A!4*xB@fq%$^fc;AzsUi zspMxa3nuuBl|HS2(;60o%+hwEc(RYQJ@qEn%qC!qTMs!d|C{oE%>tJ&74o-46(y|; z@uC{%Jk9*UtZIy7RPt|Nk@6x8oMnKMZOdp$&1<^#l_(y)m`beLL*UwTBj_KG@O(ggD zVPV)N+S}=aH+3e~9oYAfYHXQ~LCUJw?6HA!Ge)6`cQ(1XTp3bB{*iB|chTF!ro(E31#j5A4yyw}f;#r!jZtslbv+9LY{LjB{7J!^9&^ z;Gy`Peo2wU3kTw1`noCj*f0ZL%ge!CV@ zN#}hlP#h3O$yHi3EWwlaTrh&X-gJ+1EalJx8bTmjY)yRcjnQIme)=kPiwJpJfIc}& z@14=0?L8W_(^i4e=--T04|r_z(mEP6Cyea7ERL!nCb0UeJn0UVfrak`8G165zovLC zk$#0#Kw>>~$xp%>k%w$!$P&~#n}!nP3ElAUCiTmkg3hN`poZdCV()XBF*4kWlY>v- z34>UAD}-aq$v8l3_c#re$m1Pz62M(vX7GZO!?|yl28-Hh^g`J>5}=h&Uux=OjZz|1 zdWyjhQ3>)`IhmYO2qP~=jmaH@3B+-&5Ns%GpFPGHEbAancy2>7 z;<noL0OTE&ti!-}|p1M`RIkTO>#KdiRo#`d66+ zrw&2HgIqWrKF0Km>F_1yT!5b<&xpZEab{gO54!>f>6avTIxVP`syT_1!SAkcZ<#y! z8>;~C!$RPyF?s4CY~5OpN&ILV99CZh|E_3qevZvVz-oY6%`4~g z8*QP(&K8Sqd11)*Vlu2}i)U7B#@BZL(TUA336En(ZZi!fQ~vA%N9#+5Sr1RJE3XvO z6U__?#tRz-NasK&$5pfWkjlHWNEFri?IieQ8vG)T(BGa;zH{!e^-0q>Z;UJPwRuZ| zHxD!3+q6hk{497NISG0`4AS?L95}vmB>t`mqno-=(-Q=B4cTw@X_ z{JI89b1O*m1922;nND=IE|Ucsx9Q4cEjpL$Jp={@p|@QW6}h&LD*Sj)>WjYd?R~eC zHyx%N!;s7REs3L66Dmle)>*X7n?lUAE5Kyt7LYmdg`M$453bm;P%c_VH4da=&&?M4 z&SeVW&6~om65{57bps%t-44rVo*^Ha;QNY?T$(m>xoOzOZT()&L}=iv_I_l9w+Br-!HrN}Bo zi1$3GY%L8^Dh(wmp(teUWDAj%UD8r`pNCROX-jEnZ|(VQ|K8s}&~>46-gBOF-=9x! zG?N@CWAid&VXs#k%#pl@kJcE2jPRBmko^#KN=zvGga=738bODx9%Izgt@NhhDQomM zhs+L1aF1TgV$UamfBJbiTY8hnFBV+4%00LtA;o6G%s3%;eJ2Ed-6@BJvcrs-dQpU{Dws_-z)7p8lGp4{I3pv8 z3hv$)GPG&*bWAQrc_z@RBPwi9N*dXX8V2iTXhKi2I$c$sL}3-CaO=AYyj9f(QTwfs zmcO4B-I9gP-d^ze(`eAzypw&)S;s7%M1%OTEzErVY5s0b6Tk7=J~n^cL2UYz3xlqc z==eY+n;f?S<~PG>77Ho^zn1m^1ZfOQsYL2cqNrv1Yh z<{Ztys$<#K2SwLVY41yvA9)4miE}d^!Mn%zVgFts z`IA)6%ShzY{8JGmE4X-ZktlBN*~@(!rN_$CBIx;|1hhU;PHf{TuI9bqL}>ZO2HzyX zE!_t!F>na2s=ALVQUY%v*N1=Uw~wX;D#MpyLxi`y`y@Rtisnt2$md?OBp10#tRMV> zi;rF5JSQfzlTrg{a@>NHik1uCS5cZV@dz$+Qo!(+VtYtO(GnE{x5*aluX9_E$9H*pIar<0px7#J43=LU2V+0mc`i20xmuZ~WH z?H^Wx`_N1%kWQt?zs=f?9X-dK7x;l&*-UyZ;sMU;de(nJ&$Aq%w>0GX3^vnP5q9S4 z!0Ui`=qZX>-wHlLAXSew6V>D$K%UHS8RJ1m-Nv0I^fmy!X5pZP%8+=gbu5 za>KvH@f%hxWFNK|L9=TmYj+>Oq@7EdkCYgRb&2rRix0EgTFb11H}vz)SWGu+bXbjW zr(Uip{G3H%HgTc8EcYLA74kRWv%(c9nZCd6{G@xr8>SBZyi<+=Zo{Z}tO6IaK$~Re zL<#ryd~UjI3LTs~ggV>jV8_tM>_z-U%5iH#rELvxXvvV7_aO*N+MwlAGrAT= z(Saer4+=f|ACpC`ZLFi&ni0{w{cICbS$KyP_sP-alh4rZ(hREnVt{7H%5a535tnx> znmz8mj0s!`nGg1|cc*h{VzRJCEyUsM!^yC^IE(Qa#SmK3&(8|m1YT!$!=h1Vn10U) z;MCM%*uYA1Em(pr7Td|II+&a0JBNa&D-fR{25GmaBB#C_-fq@o)`MQKbK+z6pz0u| zz1D{A%wuRTFsw~o<59J_m90sswRW1m3q~Yn!xp=xOzo4vA6pvCq^fhFOx+m%hE}6S z^#s~CVj6rh{fiE#ck%kSrqguUc;4b!3a9q>7#vV3WKTz@ppM=L_VivKJ0yRMx{UlF zv-CHPnK~LyPEDoYY(*&bom2rcM3BlsZC8#D;~r~ zPbq=cslAYRuYz@`BSc2uhR-eLFl9?GK9(R2`RAz&AK2#q{8 z!os8x{K?lwU|T1PmA~$w_Z@kdzf>81p2&cphs&Tz*O3-JTZg)5TbPN>Y}OIdh^y1o z+3`qM+zZ3lGEEjk?7AzOb}3Z|rP#fKO__*rh_j zrx|7mGH+-le3Cs zuGgBFr^R-DFx!9(hlfIx+Ya_1tp?Uu66UrO;rq{l14*j@<~~r;4&YZFby#FL_S!ZaKeK zQx|U7&8D;=xqRKGMPxDM|E`V;w79m3Hhw!w5y8=veJhcze>2y|mcf6P-h5k?s`fD09?;i1bt}jja-T%JQ^U zLl4A-Gvi3_1e6H;f@^S4LzMdcE5TPo zk7i$H@I5CEw3XdSU-krlMr{X9aQ38eC%W0$uZ387GXm-tT*l{%`rw7tAc`(M0>hFN zD0$j`yrZg5`dGx=&kp0C<*cC|PkF(etOxJA7eHrJB20T(&C9mBv-JKt_NlZM_fi`_ z>4F8BB(JAF-LJSL;Q;<#mxTAP@8xXjWLXMJpse}wr2gnW+w!T!`rq#l+^KwE|LkM% z*h527d@%;_Wf?mq)J-Q_Tawqd47NAYhkVx$5P$4Cciy>@$s5j~t&69V-pWU8q4O{{ zt;~e9ZQM8v|HKv>O~#9Ig)B^4@Q>tpGqtLbR3NYqC0A^rncPYA<0YA_+&H=~8VWa~ z|FA~22>i5l4m>$kD`5N69&)T$o4imL-#TLLHOp zxq@*OD!ku`PK51d@bHi|^d{eCRrAI`NSHT#6VDVFAJ1^)$k|-SZ^50n{uUPQbV4ze zcK+_cncU_7)}fx{E||Qx06;b#Y>uB}EpE+htFMjG5!KG(8AV?lRvp8 zUEzD?nuMisI^^H6m-$3agW=86oTHE6pjB$1{GKQS?$wiF&nVm~@GhqNdnO^*{g8udS5FxC?RkD{sYJ4zQo)hMG5=ywPJsxIC&w;Tk47MxC}$9x>C z)q00UTpE2pHIeQeJdEQzesOXh4&->UlJ*Th!k_ZHfnu3gnV4TZldTA3FF!^@rEpM8 z(srb?SyA*VNfH!I9O2gxUAP~UMB-Ya1!UW4evHmfXb8 zH@m4saB?^9*#np11Z!>)99a7z*?M zhg*~7N!)KD&pqBlVfU)(lH(FS_Q@U=u;&N!JtIbM?-pY2%H3@^rwy-m?`D~A3Soz# zu>QWQk^Yf-QvF&8Du?R8TYNf9(Mbc%7Q}@?f2|y)_H!~qKIH!7_4FibIWr#O#5OcV zg56Mo@upagb_EjF_m+ zf*nc8&?i$WaJL)4rr;~H6;p#zHd=Um+i3V2y$cdPPJwg2wlLiHKQ{8UIL!37CDkhe z&+_+5bezevJ;CO)6gIad6MP20}(T!pfz(5Ob%D zCJm;MLb@X@oiq}n11j13rN($7e?ICx8qOxY)?+g|CqSS^6r@` zD=-%RGnoY;!*tl;`ZP!#c^rP^9Ko1PE%o$rqH`T>H=#yGkCdkG_RiJ!_92V;b+%n2)xYYxWe!c zUT~a8ia8SMVm6t7Bl(e4|sXN3@6oXg7GI}X@ki|;hkLIvwqFS zcH`^p&I6sc!-=A-(<}{&T!mS;_X2h#-IdmDjce1Y-w6DR85I9=A38~%VMU%@OtJqR z|MZhH9o`&)7t80<(@Eaeb-pgJZjJ?<8lu&9BixvYoIA*cpH<}F+!DMjrZ2$kR~E#a zDdHUB9pUkzabP!AAC~Sr28%l0;$x8(DlmFLE3T!IRqR>vec4Atj{DKk8yoSF+8A2* z=OVYPLk7gW!$ISPDergZF&{o?OV4&}B8TiODlM?WORssldFcV}uqZ<(k22CXOQ3zd z>NKF_&zbD<;A1`xr-QFFz$IQ99_Z;Y`9Kdy@g7f6f7Ze~I~%slr40?;TewGh!Y#t5 z2lwl5QV;>~mVP~}<5#NHl5tN6dXk%KA@cq-HTnsz2}>jhf>)`OLIoygr%3lr2s4!(sNjTX`_GZ5 zXl8i{X~RYktC-IH`IrMc#veh~Dq;5GS`V8CTd*iF8(OWlakVa4)Hq}^HMS5p(5MQ# zPoKvtTQb43_Z>_BZx{Pm8_n#*jA?t-dFJ#W82Dx%a;&nZ3C&9dzx*;K0`Nv;Pe z1uNR){Q{dc_L7H(8AXQdp&rRD8q@lakCu`m+qx!f>Yj~1orkhle-kLrCY@Wf!W&ZF z$W!v%t4vh%FH78im~+^dfaI6Rd`!mCe3KPys!SYh8S;^t+RUQ49~tw<;q1TdFSxEx zjQGVtbo0eT(kbX=Ysb&0m{%g;SSwEagwGhOX$D&FhC)=50#quk6F3oDG3cf~?Dorm zfe%yIze92`_rDhI#1tV{*4u*NMzbj3N*vuSNunNIJ-njRi+i2j*=ylrRG&I%zrN)dRziuA2Rl8%r-PJI*ET4Hlar7da@s@gwp~f>FL!~wBEa%EBt(j zdnRHHich}td`1XG9=%ROB_7kd$~>BJP8$M0%%-GtRdVVmXByw)s3ctsil#25Ia>v8 z=(#s2J!?5LvXtjlA0A?R{wt(`8fms`%21fo-p_Zw-Glj5%pY(`ppz|m{OtN8U`A8S`R%cD0Cx%+Lajl1I4p+;d#>z7y}>+eI$>&TxBO?O0N(J;_8|7d}!PjpT%O zko^aoCL*wMJ{`rl%rtiOSrdI+>CWw(-p;bE>nSYOjq=C1v31LbQ$VvmP7ZQpG8Z>k z`-)Fu%*U5s`)`2X_Q8UDob#+UE~zF3^;~i|EcE0(F zYJcwK)<{ZHC=MZcujLr|HyVO3xgg4>@xTz@ux=x~P z`-D8{q8!2D_22?CtTct7!JQcYyc%U}m6)%{R^hzq!;V({u=ZG42x0&2fIQKsa3ZW8 zuO7}~89o|t|6~SNIIO3wY;_(Uv`m1Lqe|ehfhcIrw4)Q-U1;Mzfs?r?149&tLblx? zRtl{AG_!-a{-+8YvlAE|n)g}2YbVlNlaB`~ikZ!s8n$HY3byGMQ0lZj+(UIuw!vl; zDgC|6Ui=$DB5od--RVqucXP4-p(Nx~*s!aG&-lMJMO<(4Qg*CKo=&)$!9t4x?#25= za@M)W&R*G$U7jiY>`QeJdE_FK7)-=YDS>5tNE|n-x6y5Vbxdg*4wtsuwT7-Jp{N87 z#s})sGP&)T?zkU+yh_Ej+jrt7>33}FhA7OMDZIBW&0&78vr(q~1=?h^VeE>0c0fW6 z;tN;ND^pE4`--8_s&ZH$E%dZ~ss-O;Fl{!N3bQI#;JpoV@QHB$X(&C6Uxk^yU4aVQ zuk{iKp5@caf5t)=!UNvzMCKQejN9IMQ_g?QoY}cFcoreYiq7Tmf3%Pt@X{pnU&4$k zwuu{E*ebZE!?5|>UXonCn`(WR&}7vSB$=iK-!rVhY4kes&#y-NB6k?^W)IfCSpJydTATw})!5RqN5Xe#;~7Z0Tjg1GA63`oGP1;6M-_9-PXaKk>%jFLw!k!ZomQ`aU6N?@}mBvWAwO^4~ERVUV@%%uQ@Hc$5k9+&mi``$+i4ATMpwN+on;y=j zgYymXj?!s?X*QGY8HWk^xByyYIEF;V19@!C#=-V_cwJq@``z%O?F*G5hckw;trZX_ z@ez$h#;|AKM^drJWH>sB2gA5{8tb4zX&VF<(T$8`}Qq`k0B{S0d;X%f8W zL8O{#59u*UsH|{{Z%E}>jDaew?N@;6ln8-4`2^KkF0fPg;%TF?6YVmVr=($?bihPQ z@THYgN9F@e@dyMzzj8`7HKyJ%iq<|yO=&ILLhB{6Sk?Mru=@!|Vci#4l}I9e7I&su zCmm?eBURYHlG(zuMeK>d5bQo9N?zI5S+Ytt-+oS$T>r#UYS4W4V4kwTGn0h554%X? z)qXs_FC0a@Md0sML(mG%K=XaI_$tDQLeqkA?B6+bp~a2;`r`ufk*nFehh=2?d^(n& zz0WceGX%f<31;YTN?n0se52gO)&pWHc*M#;U?Ig&z2HZ`P+Uf@9$dp^M-K2B@hfQU z#d(w#y@E}#8wOh+>QeP#f7*BD8GThP#H%_nppz2~cUEVCZ<-QG4!Mb*VMB3rR}#sd zo=bTai`MtVQ|9?By4ILMXDi1ta@&s&OfK>6U2SM1y#vQ~X;HwgW!&RfS;!ukOE2Sn z!P@QyJ1r8+EtZr7(I5`?3ao?5gI`&N&SqhM?1X!z@htbkBk(;^4M($Up`g8nX^(zw zE!*133dU~&%Uko|lvY^vEF42hJ&MZu3v^K+PY& z_%@1RnFZxw?;sB&mSo|K3L}^j*Vy_eD-+^(S6KhFc*2tAsY8~?Wr0Pc4)w-@Z|ukn zXz$tsL7xwD5?>48;PqSxa0!PE2W04GL;)MqR*ewi%x0^`bDq5$=+T|(R-NqWC>7O* z0T~g3x8@0xcUlG=u0Po$e@#x=>kZZ>?qoihC2XX`Pi8ptCc9zq2egI-LUyM)XZS>z zjfidsYat7;tpn(X&TS??#k=k1S84E68V{mf*)ZVgPhx$Os9{nzi)>(MyG>w9M_&-m zBtNm$ei6In{+mV1%%IMg!!&Ah6I1Ubyf%+J06ioU&I z8KNG%*6J75uP^9<-0C36i0l?zzfExTSrXV=oVW5GWr$`HYobSA!Vu zBnV1zfR3v1*whPck#`QEnUNMLuBpZ7YMxEA{X&=as|nn!Zo1)NNS9;{p@>f5->MUA z--J~_@8{;srhd4L+VrZ(!TAWJcX#uW@2!Bu z6k+R^6j*89&fi?O1m5j-gQAe>5SX+cX7tyxflmc6(JKL8x0%tx%97h(@ZLt)}N!lXpFFN$)iYv&ZS3pZ|ARFp& z8cM75V3Mr`Ox`TqV_$w_+gGKLyQC-g^zB|)aB3yg4AwI}qopvoHU=`Xlktp~4Q)u( z2eT8Cz;hZDgpG-M{XG^HLojit!qx;|}r+>C3MhT_a>M~uzTg&%re7;s9P zO5~jJx_TJd&eeim>u~D&D+1GR7UOzcKpVFmv&y>Z#GY8|fx?19m^WbvED>7@BQzpF zUt=BkrE#>@tb`MBa0Er6Z?Sc*8Qi@*6BoMO3w z>25N3I~SsN!Y}4Lm=0AQ9dKY?8bk{D-sBiYOIw=Qmo-D#Ud?Vyzjqrmy3|QZ{s*en zcHu1TbCkDg1M1&O1~tEx%y?6;b=wDNcxbGNMtQ23u5W=eWG~~JO}|*7+;9+kBMRbs zB-kopkI5VIh`Y7D5lpO&Ah68=`X0Y!mwq~u&Z{nXqA%PFyXK?!n^Cl=VjXk2Ax|SZ zRN06hk#J-EaXkNM03QgmM2h{0nogbqbI=q*S3m75e(~wa`5p^J{%TlVIMU& zfpgt(IO!x$dFS>)i(3)1zEuvtmAAo>W=V)&z7UrG*5&8l?dRiU@|m`?2==Ij)7rL? z817!ce%I!)<6|$fr6VNT#|vzOKO%QQ_U#bzQT)NS2t2RYO^K9|<^nc+3X@zMOxmJ^ zdXCm`#%3fOo4y>I%|Efn-a&<$;6j$}HJId8&7S-&$FZ@a;LUJ>Pjh7ycfCdwh8S40h1Ci@9uGy|>$om&X$T#NW@8{57aE*?LQGjfbbL@tEDcAR4 zGSxQQ!FeBDSeuXpTwVt6AHXxk)M;QbkN_JNyR!KU{ou#?FnA^%!-m;CWc^$1KxL#g zTOWG2E%>uK7_B+U%5yT{phge`j#<`LGjk+7QD~r`do9?w*#Sy3r(j08BJ@1bwrU$) zhm$I6ndz3*m^)5{q|Vi|d2haBZ=XM$>hdMy~XyyIZo$opCBie5Xqsdq8aexZx`xDd-cM8Hj61s*DA3oh=Rt;sQ; zt)HBo%35sf*)Fro%=zO5TxHzY)_VOFP9NgVe|@xpW-S?IbMS2>*k=@ioYZPOdu}`h z9@m5K28&>QV;l@0<$%B3t3k&;6KtOzf{}Mk@Q%}KJYXaTCokl(x5Z*MlSUSRv7!n|LvS zi(KghD_v*6zu&vas<(^f->TwSvK**7B!Rm97@O7EPg%*vOH5mG5<9wImdORTpr1k) zerw8Lxy_QCv&%{7r*@EgIUHtIi;+%CH_wL$kdm@81c&%=HC}z-QCbZ9Mmyv5%Vlt& zTj-nxt_9EEUgY=H5B8?FTQ@f6g63x7u9r52?7AYYrM|aASojxwe|;Ml-Dw2 zhy&B82k@k2YQ|`@@fYElV4cObXEEqGaJoXwA+vG;3;;9 zvG6VwOs>y0kd@W5`>CoF;28|vw#oGHVJ2JN)lDgHMuVSEyKwhPVcSmRqv4Sk+~uMu z5YdrtS5Nb#UgNi9_Navms4gJ6z2fYFbqDkRV#)%S>slK&FT%W$r`g;2tI(azpvIk! z6v{1zodL1z+TF{j@f2~RY!H6^;YXW{Kk?_b@NC)a>!8Dh!PN=-U`fS4Fuq*ec4Uqi zC=486l@lIe!k!)`VmTge7as#{^ZDd!e~Am~RtLHAdu?tGw(x4$Wl)RD!dXjW*}#MY z7CH^YdD45u*NZ!~wd;Mg`3^3twNbo#;%+DW@xg`UDS+xbQ8#aCaqL{Bwo=T0Wym!3MPO>t2lMvlqBMj1B#w z0Zu7xSn9@mYgG0k@e%KqmDMzMz`PiD+jQiF%1I*gIE6PQLXPQ`zlI z^l=CGS>1|uzUspjuiN3{M@=ZY_zPNvxB8yKy|Cj~CD%H$fZyZfL&m^aN%<* zO)MG5e1h~yRO~k1PK(5p72+V*vmKADE}>b_%iKJ^;fie%tbgAoy5U(y-SUI9C}5k_ z=*Gn)RsuM4eLZ`f<_0PfQ4lfx81QBqP`g4@aC`|~2F)0u+vY>tW27PX(Fc}U_6hIG zY{2kQT{O$30A-Bl@L3Zw=#2V&bd0~p#?G~XWugsKcjqSVI`t1aHQNPFw+Pk0t;f0I zm8?5(BG@SC!V>o%yqnq%@;ZHxT`W5R>835rWm^aO|9Qfq98NItu+yL#lEy_`s9-7= z*Td~QvUur0JWUy+NHEieTrSUmKW{7fxnG1m;aL^h?->il1|b6H*NH}ZerxOW{$XwU z6*2Tj2a|f$!|U-v58U6Mo^Clx4tLM7b$e%HNxU{0wv2)kem)RFCe$Rp61G15#!|y$ zaQ~!FSdbqCs^ecm@9j6t{QDHR@pL;aeAvzm@2f)1iJjp7uax)IktH*)i`-+Q&7|0G z$Og6{)Au=xnZGM3UF{b7dZ>W>%rmGm|0P?hjWn?!mY2}-gOG&1tmNrvm|2x5bc?m% z>xOqIDrrJ*-WWpVoHOjxUJ>wNinMlw8-#`apX5QN$u)CH+VaDaJs5ELl40AaI1t<4g-;vc~+m4*V zdof?o&-ORlnEeWK^wRO`${#q2Jrp_#Bk9Hwfej&VfgaJz_!Aql_!R?rs8wo!5ymUq zaElatd;EZFx2>S160Cyym{<|Hjv!oY=!J^Dx0m6hurip!SFX4YFUuyTSw4%_e(XQxRDETK85)Rsc3)+KCkxB*xm zD1-H{q(F36A%&jR#^pW-xf^3A(3n#J;QMnJgw;LciWj_Ne-+}aat@E2;V0qWycf^jdrgPF8!y=q(^{4|O6b@N8NLlNyD{gOB=^AB42~P7 z`ak!drk!06)u4nl4G3;`1U) z`ss9){paj~fdmPwIqSJgp^TcQPA~-H> zjx@5BHQIDBcrSVf)ghO^AC=C^(}BJm*ibtFn)?L5Q2YdHn^4QHSAAgm3W9I6YA*A( zsljfKk#O_018GjV!CRM_z@|hQVfI==GIf+$Sj|FsR(WeLv?;(+-i3J6wb&&6ukLklw! zxxJH&L=~vV-W5+i+(tnw9q6Yop=QL_wjuLcp?Jb;?!Qn^_%V79TuZbgHx)HnyLyn0 z$Q&eHnZtNU&W5cL+?XMA$FtPie{kOXM4GAanEevimQCtYNFl@pMvgav7un9NwYMGD znJ=M>?h`?A#trQKva}^XBnk{nI)(4wZLnD0z*09XhQZ-3lv&WjOBv3g+xdcTv?3SI zCRMPq_2a0g#oXfZ0;P&Z9ZOx)RWEq+Mh%ls#M5r zSS>9Ht)jue0xEDSM1!riXqebfD%uGoWm3x2!ftUQ3VE2b#tlZ8#IeJg`tr$ojV|KBLx@mNv zrO$fP)jT+77z81EG{Jh*W8Uf3I;w7KzyK9x8s)u{o!6|SD-RCPz}{VgSNk=JHjbsK zEl22}#31`-cM6QQt3WT-3hFm?YOWUprwL_zP;fb$RTd9!zZbDkgDnvC>zb%+tVRM z;})|#)CAXGj)TQfkLitdIwrKf;zNe5f#n~ae}cYo3*$Uhj3}QjET|N$Hwq`X%j0tFAaOY4yPkR@9v`Z zC!F;riD^EJW@kb?(Z&Aq4my_H7L^gJEo^u@qj$jGi!H)Iv3wy=vos-bJs zMYc$y0=}hv#~B7C?6QzgOTFj}q1hKWBdHSH)!+la^OWI{Z!u{pAH;jl%*aB)g-paG zVD^unyz)LnhYvwUQQEfNy)H-7gShEhAM?E zw17~vv19@3A>Fu|Em(F3=X6h{$iMa6?!prEaM7V<&YR(#SQ*9)_k)h5PNY;FORyMe z4yBV_pB5OsQUC)@N&ZrhD3oY#gx;Ux)S@u~{tLcJk#AO0*_RW(sLlZlD zc`yI-gf?k!`N`aZ|F9StTV^SoUHi_w=O!qmkxQjGyoO)AN|ZgVySN0l?NR~VE?u~( z^pby^D9c)3oMAGnGHJ)Op`iP8Ed3LjvHvDcpkwQSM%qfzwU$77GW`{o{2`ueFOi_~ zkan(g{ca|+BbdiXQRrBGj>)9EbCDD5p?0JglMome#mWbHg}_nPzaRCn$YaJ}_D_we zDldX}6Vzd4PYJ5O7Z=a})77!`A8BL8sKR+_&1F+1|!fCPdZ#@M-1mGx>Im-r3+MR~a7S_uC=zQ_C2 zc*5LWgZvASvmVtGLK^>sTtT}gs}50u@mkqTWqLlm95~N~e;k0J#h=>#o1em>7R%6y zT7UXm@ekM38_|MLCm69|2i+K_3H*R5ZMEg`s7@Jn>nbrv?M_@gL6RP3`J#m7DYT6d zwXq#_4Vu48g7!f%l)ktM#)m4iRa*t8WquCZRCu>7n$xCzlX}^VWj36o{}ke6PGQXz zBbZQ|%H|wLcK<;*NXJXl=bvTP)2a;6VM;en5@v9^9vK3g-GE&ey6vqWl+jWpiy|Gb zlIlrAHfqZRJYV#LNe8TA=0)p4$Mz?la+t;V`++2$JCmKREi*it%dQs74gKIHT0m|5#}z`g7;tas6<5?O;+lo zOQ^t`s??;koulAZm^!Yzc#c{w?4*D$A+vV1g4XE?`;~GCo$VR|{gdT5WGl(zK_we~ zY#Toi70db>8ri4M9&E&HSy&Kd0fsAoaxrH@`L+YGY`1P0?HZFtOE09Np-vwy4XMVy zs6}k!<=0Fr-xF@zwqdfc?vA_Nvm;tqLI`N3cOvM(1{{KsLS`erOu zSE+&$v_Y1W2v;yoc&mP$g0W#6_{qOj$nfAf>vN-TGvj+#_ydZ&IGwkV%uFsvaL6^l z=k1-=>T}h}DBvdYk4~^DZFVrEKmim=?+EL`4CkFW1d{oexx-z3_{CLA=m5*$h*h)5 zH%=J_a!zw&C-{R`6NA}L=Y!_9bVx`rWgSm9vB9IsEH0#udmeI*)AdgTrKZh-H@l4) z4+gX8a~UJYEv73N0tXL+}^bm?~%gpus<1|9n3E6eiQn>$%6ya4rBhEdgdg|1xJ+j zqmGL*S8=rr*B(DZO+r8K+{Zz7&$tU;WF%G_#hCgy; zQ2u-!#BB5Aaw79l)9A>GFho+j>PBDZp(?#@e` zlKr){*CStGbeOQ!djUg47l+dliBYBt~)_sKeoUglQQOQeh5{D zCe!!l29&VSm#*Bo&JC@rC(EnejP?zn;z0$v|G9$AzAW@L$JO$eZY&bAIziC(G843W zPFnB2co~+tG{W(x_S}qvgqHCVa7o#j^Dw%EQZyAfo1HZAv^+dbe#H&zPimbV(S{)x zhho(II2gaFw`~t5klueSQ2xq}$+a#dxzceo$25R1U8_$UwGW}W=Le=56pPndlc0B; z4)bcAN_?pz9PO)P;=e4}nE+3)yRK%fa#9)!_qafONfc~rf5(T&4{JN`dWsuyd;-N@ zxxndJCSmKc0Ty8OoUQH$Jn8=zjaR#nm!2qW87OBi#dFw}Uk91tW&`%n-5gcs#^QL> z889l%gBL;qZDM=xGybp-Ed3=5fA=+@#Ca8%J7NSHjJwG_*^vRSZ;S^MqcN~P{RDiI z?1o97>f7ucc7vaDCY#(|jw*6K&XO`7(pmJDJYz^{^wn8#f$3z_y;52>#KL z5Pv2Gwl6b*aQ7;xn{^+iFC7Zbe#1aJAq7HfF0@XbltSWxhE%Qp#yZxb1|bJ4n$;g?>BOvnQ!@K(;dh3ry~D zcYnmNMvG9YKf8z8Ppzl6feB3NMKXVGvo4L(KMJ4XWZ{q71Ev&yn_D?!988HZgOI7h zyZ6U*`0vGEHZevQzW*(PPP;e!+{#qQ{P76pmFdGj_i1Rlw+75RO<~OBv-H{vnaOf% zrWMB1^vE1aO_|P=78sDh2ja5_SJ8!y=Gc0~4iy_kptDvU)T%eY61AQ9u3-9(>C@$O@;Dz2Y7c=)292GbNS&uIHXW?XlZ+iIj zVGJzNM1><;;O(_CcJ;0}u=fCBY8`BB`(iL#X+@Fu5A%Co%ixy3o)EjD0A9YB1iw$6 zhEJse|L?ppY$+HNyflNb+^Pc1wK`$;!Ob8yYXqMrcaTX&*+P%ODC}{WN+&13X!HF! zh+g*!Ib$zN+POaw9v^+BO*uy+p29;2Un-I2xv;OoqyOQ#!xHn0&rV zLEiZhv|aft)-7#9Db3|ny*!83-Zf&@Uz*v}uzs#i@f~aW5sp1S&G3Z2;HU}krKEZJ zR=sAjc%x8;&dw6{K@|m(`>2fHt{iIfQd$AuYwmFR!g=-geMP8xQ^)StTH)P54SGENZAu;B1%_9kxv^y#Iw=@dI*O2sbdbUOl#iA8uk65zhyXm~t79h_!l!$(@i z#U!`E!}{gO$?gI3c^iO#NX(_A7Vf70;6C;#!ghUsxTk3jm72D&twIx;YQ5o6Q6kKo zdy8ptHGK7=-JmpQ8u-Y$WA-WYwif$eOj7GV+NHW2ofY4+2ixE9>c^1|t9#){sd6^{ zaXa4etHNv97GT!CfDLaSz~_aD^ebl^tqhLlA1)VznJVHirOA>+tlx4shM;g~XSJL`Oupc@J`78TeExLV4NARj^z-@)2ENPnwoY=XW zvUbda{*|k#=R+@!e&hrFFU4SQ#5K(LZwowqxd+g+QRuq-z|-ZG?C;mf@JevvzL4}` zX7Xt;QGAT>j=GsG>(3-Hz|nQb&|g>Qg8kFxEhtjI-ni_9e=7HO2^i6~^ zpN)e2HC7botqGI5j9J*UI(EbTJ=1f^;IaBKns1QNB7=vb$v>pr>o1lFR$h6YsSG) z^L+MPL>dgmJJ|7W8B~;#0tF?maM*Dj`Fma4CzOotzhA-tH^|?n|TKEiBp8SR>+#E?A z4L&T_SDPkH3}C8}_4x1Zb}GoKA(z)$6k4233W+zk5FCA ze^s#6F_V3WUq}s0H=?(bA1u|>g;zDF(e|7>x4WpEg-|qrAJ{rob(l79b zR=2l3`ezMW@@Jv^(OmW`tQnhaC&O|t8_4a|gWs)-F(i@Ld;d-Bl;$%s|G?9#dzn;h zqKq91%}h_`CEL6ulU4+tqIo*O)cxTXlUQg9-nDI~3}?wwZmjNFoUJ=K0gc&3QQXN)UW58AG_&Dd?VFgrXle^8TA93{O{9!Nj#| zNlxl!C{T$7?l;0x$v9|`*aq{@$HRthN2+bKno*PbPKuAMfi2-ORQJ_qvT)=(vA-Ze zD#Xp<^7$x83D2alB?+YQNGuIIFbz9*uVzF-+vw|`d}1O0i@7!3jAo}L(_DFu?Owz& zekxuu;Ywc6b7L)#9iGfgyNPgeOd6igHo~?;dT`8Wh%MS=gu0`%aeKHXT$y-@-ZU7e zvPP5O=7JI$J*yoW8Y97R>lVBc@`Lz>szB^feRy+|^Ih1lru&Y1VMN&z-uy%%(`@BP zwolxXww!Z<+@<2UqN6-8pwNYJiDpZmYl8k#B&$V z(9zg@__=>7->U936dAoC%DEEoQ~xYH@rk1%fqW<}EsLNjaEre~g}a zS-=L%Y=h3bSD8%CDV;I?iiC+A1oQ7=nA87*WMsyWs6h`TlFmqucCza(*D@ie7J$W{ z<*4Jc9448na{0)=#3yV9PP(Opi%v6WzD449qgVK(7Q)h z(aR36>F7uxR^OHY&qgU6-n0|ec5)84MWT4GWD;5R=n5k}T@)S#g~MnJkBYV~X_D~r zW_VwdL8c)ac->C$q+Sg=)@8x%i|fd+-XXZD9m-Z7QHB=aa)sd==!If!^64kHV~aQf z@5N=w>iZ#3s7GOG-+eYII|Gy*CWCZ?JbkQH4Lwhmz?w2{Jvj9n_0N;R+Ib;#<0l(@ za>5;TW(ia2`{nf1-*D2^A^>?s`Ao6R1-fkgX8tARA&6aG#$|V>P(c%Te87(C2pVnimGKPzzUK5Ah*DQihrBW@SOzA zG{#Gr5yUKKn*`1h2l@68di^6E9xzd{}kdmW`$WTt}DlwR6AU5IU)w-F2np3$tk zBKUD)J9TW$psTx5;Ew~BpWG}AQ#l5B{pSf}?Ey*5TQC=t@`W)y-~)eo-*4*pD490Y z#?niLec1nWI$y9nhFTg$60ce2+$?_;{j*?z_FNnx$x{VT5DJNEza~t!OrXl|t#GTe zFIsO=#ue@7$e9{9R%DVBY^qw1%V-hV{Qe|K`pBmaew-`5L>T|*_0!Dq6za0{1TmSa zf#U1;k-mf?ydJb37w4SBokw!0ZkPqQ*U3<~b)$4wR5WZcR_Bi?KBuv5(O@N_jOGfl zpxRPL1y2dU^mWfjL97WdQ|?eXuS1a0(@Q;!O$g_HgAPokkFt(A!^HBE3~qU2!aD^WPrj8-q%0X2DCKj~d7Q>~T6#3!c1W zE%jAon`SGl(N&;B;}b}kwJrO6F~@khCjAi>O+D9kf%39V&}8}ywk`LB zW4W8a?twELww?iDuX^}1$}2!Y^)xP5$N}2oO+o}qh*`=G=J4MQIIS_3`SM&7w7!j! zhfnKBAis*YWKlE7REI+LiraLPMH}UAd|((XK?48H1h#(`WMr*a_FD{Q8uTnqu1 z1ZqlS9q*yc|}G0ulR`*4J;p=osMs!2FIZ7W}I zFduvVJ4Q84xE$_9Y1Z&Y2g}aj&Kc3$LDfwF{ns>-;b$RGdOjRwr=Fpcc>VOms2DEu zQzud?iA+_^Yc@Bel-_h}V7G=fv%4H-;%Jp4RsMQ}tX;#os077P?!;w$-_?Mk6J9Wj zPP?%4i=yDb@qVxszX6)z`C$5}h8*X1iOM%C;kNU1sQa*sgzBf$ofoI_m1{WOPgW7m z;dW~(HfM2GkpU7hZq{Nr7yK>?GhSgs#9cZaI(|PR3e+8R6-tThvKZ1(>t zws~z>IE@*sBuh8)aOY78oLe~&SqDK7jDJh*>RvG~pJuaODKpWtsfYgXZbnnp7^brF zDW1I?#qo__gWCUZN(rg9^!;eNvEa(i~WBC_&Z1RRzZGV9gia;74ZaKpus zyvVvi${lKX11TBgu`9R76gdn_=XgW)>u8AmxCAt>q|!;@iSVK}3ieiXk*kX;;R6$d z$0oib)%oE>_;D_o_t73TG!ig!{XUdECX2h8ROoV(O7@V%VO*V{l)x?|3Rf#zE$NmDk zhb@2;ygU7Z2Zx(k4vQwuv z_2Ohq?gX#na1GnAqMCayCX!E@b5ZuyDf(3Y8{4+dozTBm(SPSHs%x?u@BFIe*r1Ea zw~!xvU1@GcwYC`cOJ(wI@+?T-oyA~MA%@A9X2VN-3P;AvfnB#AwuXD6gH0dV^eGBI z=G}o`LrQ#NmI0HWa-zIiYYZyqW~}RWL-MSR{Lba~=&I$3s1$b!FUHAY&DRxhmtO~Y zx36=~pGa;$=R(BRt!kb}bTD6E0o9^Ih-}4o^5E7FGPW^=bMD+h(bko`p^j%-*t4gskh>vF~ zGB9NEY)G4sMJo%Wuq3>c&TQ_-lFFl~cd?$HD$ZjTf1iz|-7z?HLK(k3TMgd7Yl+T_ zO!%{i+n*Qq(*ZqU#^}l+yqLe7e*2`tmt6RoCdy337quCD|LanqqOA^7TLE^jvc|=S z{cz!ug@{{(!T!!6TMg?MJ0F4*bMU+4 z6>7PcJW#eB(Z7y2Qa>nL!_eDBYX1;nK(2952X#$*4}hH-64)k*T=q;1l-)vQG4Rcp}jq%cX)x zPm}gj9^fgsfrfl)<4LWkC9yVku!8GoCYg`W_;qv9qjM)Xb)Kg#3YOU65lKD=Hkhi4 zh0_VVTy7oSL49NFA@ZC*+(__ nEMO%Z3KPHKe3bm$Q+k>zwFOb^CDWSzTC;aa< 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%0D~(^*MnR-O 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

vr(DRF=9*s6w!H#VJCCr~yVIN}n9E~J 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 UZk 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

{nh2CB^eWMfwV)^!<;b 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 z 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 literal 0 HcmV?d00001 diff --git a/ML/SelfieQualityDetector.mlmodelc/model/coremldata.bin b/ML/SelfieQualityDetector.mlmodelc/model/coremldata.bin new file mode 100644 index 0000000000000000000000000000000000000000..ce4f3bc74a55a098394221091a55c20f27995d01 GIT binary patch literal 288 rcmZQ%fB*p~ot&RnW|R_dXlWdunO9I+!objA&qz=W1H { + get { + return ["conv2d_193_input"] + } + } + + func featureValue(for featureName: String) -> MLFeatureValue? { + if (featureName == "conv2d_193_input") { + return MLFeatureValue(pixelBuffer: conv2d_193_input) + } + return nil + } + + init(conv2d_193_input: CVPixelBuffer) { + self.conv2d_193_input = conv2d_193_input + } + + convenience init(conv2d_193_inputWith conv2d_193_input: CGImage) throws { + self.init(conv2d_193_input: try MLFeatureValue(cgImage: conv2d_193_input, pixelsWide: 120, pixelsHigh: 120, pixelFormatType: kCVPixelFormatType_32ARGB, options: nil).imageBufferValue!) + } + + convenience init(conv2d_193_inputAt conv2d_193_input: URL) throws { + self.init(conv2d_193_input: try MLFeatureValue(imageAt: conv2d_193_input, pixelsWide: 120, pixelsHigh: 120, pixelFormatType: kCVPixelFormatType_32ARGB, options: nil).imageBufferValue!) + } + + func setConv2d_193_input(with conv2d_193_input: CGImage) throws { + self.conv2d_193_input = try MLFeatureValue(cgImage: conv2d_193_input, pixelsWide: 120, pixelsHigh: 120, pixelFormatType: kCVPixelFormatType_32ARGB, options: nil).imageBufferValue! + } + + func setConv2d_193_input(with conv2d_193_input: URL) throws { + self.conv2d_193_input = try MLFeatureValue(imageAt: conv2d_193_input, pixelsWide: 120, pixelsHigh: 120, pixelFormatType: kCVPixelFormatType_32ARGB, options: nil).imageBufferValue! + } + +} + + +/// Model Prediction Output Type +@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) +class SelfieQualityDetectorOutput : MLFeatureProvider { + + /// Source provided by CoreML + private let provider : MLFeatureProvider + + /// Identity as multidimensional array of floats + var Identity: MLMultiArray { + return self.provider.featureValue(for: "Identity")!.multiArrayValue! + } + + /// Identity as multidimensional array of floats + @available(macOS 12.0, iOS 15.0, tvOS 15.0, watchOS 8.0, *) + var IdentityShapedArray: MLShapedArray { + return MLShapedArray(self.Identity) + } + + var featureNames: Set { + return self.provider.featureNames + } + + func featureValue(for featureName: String) -> MLFeatureValue? { + return self.provider.featureValue(for: featureName) + } + + init(Identity: MLMultiArray) { + self.provider = try! MLDictionaryFeatureProvider(dictionary: ["Identity" : MLFeatureValue(multiArray: Identity)]) + } + + init(features: MLFeatureProvider) { + self.provider = features + } +} + + +/// Class for model loading and prediction +@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) +class SelfieQualityDetector { + let model: MLModel + + /// URL of model assuming it was installed in the same bundle as this class + class var urlOfModelInThisBundle : URL { + let bundle = Bundle(for: self) + return bundle.url(forResource: "SelfieQualityDetector", withExtension:"mlmodelc")! + } + + /** + Construct SelfieQualityDetector instance with an existing MLModel object. + + Usually the application does not use this initializer unless it makes a subclass of SelfieQualityDetector. + Such application may want to use `MLModel(contentsOfURL:configuration:)` and `SelfieQualityDetector.urlOfModelInThisBundle` to create a MLModel object to pass-in. + + - parameters: + - model: MLModel object + */ + init(model: MLModel) { + self.model = model + } + + /** + Construct SelfieQualityDetector instance by automatically loading the model from the app's bundle. + */ + @available(*, deprecated, message: "Use init(configuration:) instead and handle errors appropriately.") + convenience init() { + try! self.init(contentsOf: type(of:self).urlOfModelInThisBundle) + } + + /** + Construct a model with configuration + + - parameters: + - configuration: the desired model configuration + + - throws: an NSError object that describes the problem + */ + convenience init(configuration: MLModelConfiguration) throws { + try self.init(contentsOf: type(of:self).urlOfModelInThisBundle, configuration: configuration) + } + + /** + Construct SelfieQualityDetector instance with explicit path to mlmodelc file + - parameters: + - modelURL: the file url of the model + + - throws: an NSError object that describes the problem + */ + convenience init(contentsOf modelURL: URL) throws { + try self.init(model: MLModel(contentsOf: modelURL)) + } + + /** + Construct a model with URL of the .mlmodelc directory and configuration + + - parameters: + - modelURL: the file url of the model + - configuration: the desired model configuration + + - throws: an NSError object that describes the problem + */ + convenience init(contentsOf modelURL: URL, configuration: MLModelConfiguration) throws { + try self.init(model: MLModel(contentsOf: modelURL, configuration: configuration)) + } + + /** + Construct SelfieQualityDetector instance asynchronously with optional configuration. + + Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread. + + - parameters: + - configuration: the desired model configuration + - handler: the completion handler to be called when the model loading completes successfully or unsuccessfully + */ + @available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) + class func load(configuration: MLModelConfiguration = MLModelConfiguration(), completionHandler handler: @escaping (Swift.Result) -> Void) { + return self.load(contentsOf: self.urlOfModelInThisBundle, configuration: configuration, completionHandler: handler) + } + + /** + Construct SelfieQualityDetector instance asynchronously with optional configuration. + + Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread. + + - parameters: + - configuration: the desired model configuration + */ + @available(macOS 12.0, iOS 15.0, tvOS 15.0, watchOS 8.0, *) + class func load(configuration: MLModelConfiguration = MLModelConfiguration()) async throws -> SelfieQualityDetector { + return try await self.load(contentsOf: self.urlOfModelInThisBundle, configuration: configuration) + } + + /** + Construct SelfieQualityDetector instance asynchronously with URL of the .mlmodelc directory with optional configuration. + + Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread. + + - parameters: + - modelURL: the URL to the model + - configuration: the desired model configuration + - handler: the completion handler to be called when the model loading completes successfully or unsuccessfully + */ + @available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) + class func load(contentsOf modelURL: URL, configuration: MLModelConfiguration = MLModelConfiguration(), completionHandler handler: @escaping (Swift.Result) -> Void) { + MLModel.load(contentsOf: modelURL, configuration: configuration) { result in + switch result { + case .failure(let error): + handler(.failure(error)) + case .success(let model): + handler(.success(SelfieQualityDetector(model: model))) + } + } + } + + /** + Construct SelfieQualityDetector instance asynchronously with URL of the .mlmodelc directory with optional configuration. + + Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread. + + - parameters: + - modelURL: the URL to the model + - configuration: the desired model configuration + */ + @available(macOS 12.0, iOS 15.0, tvOS 15.0, watchOS 8.0, *) + class func load(contentsOf modelURL: URL, configuration: MLModelConfiguration = MLModelConfiguration()) async throws -> SelfieQualityDetector { + let model = try await MLModel.load(contentsOf: modelURL, configuration: configuration) + return SelfieQualityDetector(model: model) + } + + /** + Make a prediction using the structured interface + + - parameters: + - input: the input to the prediction as SelfieQualityDetectorInput + + - throws: an NSError object that describes the problem + + - returns: the result of the prediction as SelfieQualityDetectorOutput + */ + func prediction(input: SelfieQualityDetectorInput) throws -> SelfieQualityDetectorOutput { + return try self.prediction(input: input, options: MLPredictionOptions()) + } + + /** + Make a prediction using the structured interface + + - parameters: + - input: the input to the prediction as SelfieQualityDetectorInput + - options: prediction options + + - throws: an NSError object that describes the problem + + - returns: the result of the prediction as SelfieQualityDetectorOutput + */ + func prediction(input: SelfieQualityDetectorInput, options: MLPredictionOptions) throws -> SelfieQualityDetectorOutput { + let outFeatures = try model.prediction(from: input, options:options) + return SelfieQualityDetectorOutput(features: outFeatures) + } + + /** + Make an asynchronous prediction using the structured interface + + - parameters: + - input: the input to the prediction as SelfieQualityDetectorInput + - options: prediction options + + - throws: an NSError object that describes the problem + + - returns: the result of the prediction as SelfieQualityDetectorOutput + */ + @available(macOS 14.0, iOS 17.0, tvOS 17.0, watchOS 10.0, *) + func prediction(input: SelfieQualityDetectorInput, options: MLPredictionOptions = MLPredictionOptions()) async throws -> SelfieQualityDetectorOutput { + let outFeatures = try await model.prediction(from: input, options:options) + return SelfieQualityDetectorOutput(features: outFeatures) + } + + /** + Make a prediction using the convenience interface + + - parameters: + - conv2d_193_input as color (kCVPixelFormatType_32BGRA) image buffer, 120 pixels wide by 120 pixels high + + - throws: an NSError object that describes the problem + + - returns: the result of the prediction as SelfieQualityDetectorOutput + */ + func prediction(conv2d_193_input: CVPixelBuffer) throws -> SelfieQualityDetectorOutput { + let input_ = SelfieQualityDetectorInput(conv2d_193_input: conv2d_193_input) + return try self.prediction(input: input_) + } + + /** + Make a batch prediction using the structured interface + + - parameters: + - inputs: the inputs to the prediction as [SelfieQualityDetectorInput] + - options: prediction options + + - throws: an NSError object that describes the problem + + - returns: the result of the prediction as [SelfieQualityDetectorOutput] + */ + func predictions(inputs: [SelfieQualityDetectorInput], options: MLPredictionOptions = MLPredictionOptions()) throws -> [SelfieQualityDetectorOutput] { + let batchIn = MLArrayBatchProvider(array: inputs) + let batchOut = try model.predictions(from: batchIn, options: options) + var results : [SelfieQualityDetectorOutput] = [] + results.reserveCapacity(inputs.count) + for i in 0.. CVPixelBuffer? { + return pixelBuffer(width: width, height: height, + pixelFormatType: kCVPixelFormatType_32ARGB, + colorSpace: CGColorSpaceCreateDeviceRGB(), + alphaInfo: .noneSkipFirst) + } + + /** + Resizes the image to `width` x `height` and converts it to a `CVPixelBuffer` + with the specified pixel format, color space, and alpha channel. + */ + public func pixelBuffer(width: Int, height: Int, + pixelFormatType: OSType, + colorSpace: CGColorSpace, + alphaInfo: CGImageAlphaInfo) -> CVPixelBuffer? { + var maybePixelBuffer: CVPixelBuffer? + let attrs = [kCVPixelBufferCGImageCompatibilityKey: kCFBooleanTrue, + kCVPixelBufferCGBitmapContextCompatibilityKey: kCFBooleanTrue] + let status = CVPixelBufferCreate(kCFAllocatorDefault, + width, + height, + pixelFormatType, + attrs as CFDictionary, + &maybePixelBuffer) + + guard status == kCVReturnSuccess, let pixelBuffer = maybePixelBuffer else { + return nil + } + + let flags = CVPixelBufferLockFlags(rawValue: 0) + guard kCVReturnSuccess == CVPixelBufferLockBaseAddress(pixelBuffer, flags) else { + return nil + } + defer { CVPixelBufferUnlockBaseAddress(pixelBuffer, flags) } + + guard let context = CGContext(data: CVPixelBufferGetBaseAddress(pixelBuffer), + width: width, + height: height, + bitsPerComponent: 8, + bytesPerRow: CVPixelBufferGetBytesPerRow(pixelBuffer), + space: colorSpace, + bitmapInfo: alphaInfo.rawValue) + else { + return nil + } + + UIGraphicsPushContext(context) + context.translateBy(x: 0, y: CGFloat(height)) + context.scaleBy(x: 1, y: -1) + self.draw(in: CGRect(x: 0, y: 0, width: width, height: height)) + UIGraphicsPopContext() + + return pixelBuffer + } +} + +extension UIImage { + /** + Creates a new UIImage from a CVPixelBuffer. + + - Note: Not all CVPixelBuffer pixel formats support conversion into a + CGImage-compatible pixel format. + */ + public convenience init?(pixelBuffer: CVPixelBuffer) { + if let cgImage = CGImage.create(pixelBuffer: pixelBuffer) { + self.init(cgImage: cgImage) + } else { + return nil + } + } +} diff --git a/Resources/si_anim_face.lottie b/Resources/si_anim_face.lottie deleted file mode 100644 index a0e834704050fa811a39ebfd5a251868424e0167..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2086 zcmbVNX;4#H7LI@{3Q^W5B4A``K_Ce+2}uAq+`(xwr0izVn@X&iV6EDe4+V zu%#hMs|j8PgH38c+tSj5Y;1tTj0E`t#~41BlZZSF^7u?H2T4St9Z|^5NFI2Y`OSdd zjEn`39^vvBd@Ge+_0}VrSalis}7YD)?4BCN#rJ*C8UFaAz1_x0YOdd#Iq9Tb< zBK$ZIgvih>js+a`;xa%e5{JuU11!jw#pT8!iID({4}Q&(yX5qjA({)-_}7cc5r8~4 zlmD$oRC0JS^0zjpO)5t}=RTYaZFL)?$K zW1HjmOc>mcUx$lmeYVD<+1=tMTt(?WFM zQ8a1<{aFfY5XV`#Uq|pr!n0z8by+o{$Ge>j;@2ik+}Kt_2JqYKd%AoEvhEYnx2C&} zNxcR{4y}(%G%}1z4Fbb|sRsrJ4z;YTT{$l+nEzO|OY!uqzOJ}TmeI2(`Qhi&ZQIRt z4SZ${C+(VlxNkukDe|T0M}Afwjlvu*Z@6@<+##CxYehyEm zCAY1`fSB~W2*rlumVv7av^J)k#m~f76}`f*ac>dXtP9UC=v3oun9o6!k7zt9(dhMX zR@AS|w{{LGoPE!-+j6yid6M)W$9;^W{AQ}rn>%z3=G!a1l3RTnP$w*|Jz?4TU2ry} zD7vv}RMQI{YFBd)^>0e5t{cLXl%!Ynl*crv}(1P zCVe;%WSUe;_s8b$j4Ig}VW~>befn58+89s?TV+F!J(Hqo!f@PAzI1$znZn^?;{(bkx`lI&cQqy%O*(X$Bs z5Suxla6@nPqa6lQyipi!J)n&ezm8AU(D}*KXq~Dr#C}!MfJ}R_6ecvI>MV}`0-GkB zNKMj~c18_(0P2o8d3XM_IxFg!wL0gY8QbtPYQMsuMqcMHAvH+E7>xUiiT77~LiEZ0 zc8NQ43o}ke7Ft{CqpMozoi%FXlrztb=4{v=R7>gn3aaPcM}Z|$ehIOtRjj=|)~9za z^3C6}xvt~nv8F#T#e{dtsqKFlO1pqI6SE!X1PbS&Z6?0^KBBkOuN~O%0JbjlBP({M zJSrHD^HI9M%`fUpZQqd%;^k$*4>Ktj6 zs}l>9z3visCpXtl!z*Y{Nv7(p`jWC-dqVttL*#`YnPa8COmfVn_wXzk<2%SEXIQ~IZop7<|B2|?Z-dFiIx9LG;t zcuG_*H}5w7BmwD?Ayp)-n6x_X;$#}WEaZJt}&r#7p~=ljW}(a z-2nTL)D89O+B#K4C!$Pfn9(1Fq-=>4CB_=%hfq|fJFNQR@}e6N3&5H_J!McwP1Mkd zVOMrOaQoG8V_4XOvB}%$Gq1KV^t_c}Q^YdmzTA9@4ky$~vha_cNTY2c_rZ!+U4gE*9tiuLR()*f^EM;3)pB5EgqgQy>bFjr zg_;CC*P#&vixa4a1;godThUFjh^_u-TkUV7YhGSzTu^>FIlZ{} yg-ThbW(521qPrx<-^ag6@OSEe7NGAmCrH8nA335@mTN9WQG;eFbn>;9UjGCk(Sid2 diff --git a/SmileID.podspec b/SmileID.podspec index cdf63eb88..919e2d383 100644 --- a/SmileID.podspec +++ b/SmileID.podspec @@ -12,6 +12,6 @@ Pod::Spec.new do |s| s.swift_version = '5.5' s.source_files = 'Sources/SmileID/Classes/**/*' s.resource_bundles = { - 'SmileID_SmileID' => ['Sources/SmileID/Resources/**/*.{storyboard,storyboardc,xib,nib,xcassets,json,png,ttf,lproj,xcprivacy}'] + 'SmileID_SmileID' => ['Sources/SmileID/Resources/**/*.{storyboard,storyboardc,xib,nib,xcassets,json,png,ttf,lproj,xcprivacy,mlmodelc}'] } end diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift index d0d74d046..53b7d7139 100644 --- a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift @@ -1,15 +1,63 @@ +import ARKit +import Combine import Foundation public class SelfieViewModelV2: ObservableObject { - @Published var processingState: ProcessingState? - let useStrictMode: Bool + private let isEnroll: Bool + private let userId: String + private let jobId: String + private let allowNewEnroll: Bool + private let skipApiSubmission: Bool + private let extraPartnerParams: [String: String] + private let useStrictMode: Bool + private let faceDetector = FaceDetector() var cameraManager = CameraManager(orientation: .portrait) - init( - useStrictMode: Bool = false + private var subscribers = Set() + + // UI Properties + @Published var unauthorizedAlert: AlertState? + @Published var directive: String = "Instructions.Start" + + public init( + isEnroll: Bool, + userId: String, + jobId: String, + allowNewEnroll: Bool, + skipApiSubmission: Bool, + extraPartnerParams: [String: String], + useStrictMode: Bool ) { + self.isEnroll = isEnroll + self.userId = userId + self.jobId = jobId + self.allowNewEnroll = allowNewEnroll + self.skipApiSubmission = skipApiSubmission + self.extraPartnerParams = extraPartnerParams self.useStrictMode = useStrictMode + + cameraManager.$status + .receive(on: DispatchQueue.main) + .filter { $0 == .unauthorized } + .map { _ in AlertState.cameraUnauthorized } + .sink { alert in self.unauthorizedAlert = alert } + .store(in: &subscribers) + + cameraManager.sampleBufferPublisher + .throttle(for: 0.35, scheduler: DispatchQueue.global(qos: .userInitiated), latest: true) + // Drop the first ~2 seconds to allow the user to settle in + .dropFirst(5) + .compactMap { $0 } + .sink(receiveValue: analyzeImage) + .store(in: &subscribers) + } + + func analyzeImage(image: CVPixelBuffer) {} + + func openSettings() { + guard let settingsURL = URL(string: UIApplication.openSettingsURLString) else { return } + UIApplication.shared.open(settingsURL) } } diff --git a/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift b/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift index 14017ee65..1b3326ed9 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift @@ -30,7 +30,15 @@ public struct OrchestratedSelfieCaptureScreenV2: View { self.showAttribution = showAttribution self.showInstructions = showInstructions self.onResult = onResult - viewModel = SelfieViewModelV2() + viewModel = SelfieViewModelV2( + isEnroll: isEnroll, + userId: userId, + jobId: jobId, + allowNewEnroll: allowNewEnroll, + skipApiSubmission: skipApiSubmission, + extraPartnerParams: extraPartnerParams, + useStrictMode: useStrictMode + ) } public var body: some View { @@ -39,7 +47,7 @@ public struct OrchestratedSelfieCaptureScreenV2: View { acknowledgedInstructions = true } } else { - SelfieCaptureScreenV2(showAttribution: showAttribution) + SelfieCaptureScreenV2(viewModel: viewModel, showAttribution: showAttribution) } } } diff --git a/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift b/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift index 851ed4577..67794fed2 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift @@ -2,22 +2,17 @@ import SwiftUI import Lottie public struct SelfieCaptureScreenV2: View { - @ObservedObject var viewModel = SelfieViewModelV2() + @ObservedObject var viewModel: SelfieViewModelV2 let showAttribution: Bool @State private var playbackMode: LottiePlaybackMode = LottiePlaybackMode.paused public var body: some View { VStack(spacing: 40) { - LottieView { - try await DotLottieFile.named("si_anim_face", bundle: SmileIDResourcesHelper.bundle) - } - .playing(loopMode: .autoReverse) - .frame(width: 80, height: 80) - - Text("Look up") + Text(SmileIDResourcesHelper.localizedString(for: viewModel.directive)) .font(SmileID.theme.header2) .foregroundColor(.primary) + ZStack { RoundedRectangle(cornerRadius: 25) .stroke(SmileID.theme.onLight, lineWidth: 20.0) @@ -38,6 +33,19 @@ public struct SelfieCaptureScreenV2: View { } } .frame(maxWidth: .infinity, maxHeight: .infinity) + .alert(item: $viewModel.unauthorizedAlert) { alert in + Alert( + title: Text(alert.title), + message: Text(alert.message ?? ""), + primaryButton: .default( + Text(SmileIDResourcesHelper.localizedString(for: "Camera.Unauthorized.PrimaryAction")), + action: { + viewModel.openSettings() + } + ), + secondaryButton: .cancel() + ) + } } // swiftlint:disable identifier_name From bc003987b9c23f7b16c1a827df7b7432142a2520 Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Mon, 2 Sep 2024 11:04:31 +0100 Subject: [PATCH 03/23] run pod install --- Example/Podfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Example/Podfile.lock b/Example/Podfile.lock index b438a2034..a7c06e2b7 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -43,7 +43,7 @@ SPEC CHECKSUMS: lottie-ios: fcb5e73e17ba4c983140b7d21095c834b3087418 netfox: 9d5cc727fe7576c4c7688a2504618a156b7d44b7 Sentry: 96ae1dcdf01a644bc3a3b1dc279cecaf48a833fb - SmileID: 8d3a64e845a5fb82239516def978391d4d814c9e + SmileID: 97a579344f72c543d6b3aa8b56722d05646d2023 SwiftLint: 3fe909719babe5537c552ee8181c0031392be933 ZIPFoundation: b8c29ea7ae353b309bc810586181fd073cb3312c From 2ae088448588b5ca960d2a6a3412ab5cd6af88d6 Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Tue, 10 Sep 2024 12:08:38 +0100 Subject: [PATCH 04/23] Introduce new versions for FaceDetector, SelfieViewModel classes and Liveness Check Manager. (#224) * implement design for selfie capture camera frame. * add lottie animation, product cells for selfie enrollment and selfie authentication with strict mode. * update new selfie view model with existing implementation * add some image utility functions, import selfie quality model and add selfie quality check to the image buffer from camera feed. * some code formatting * more code formatting * compile coreml model to generate .mlmodelc file. * automatically generate the model class file. * remove uncompiled model file. * disable lint from generated file. * make a separate class that will handle all the image processing and classification tasks for selfie quality check. * add some documentation and code formatting * fix issue with crop to face function. * introduce a new version for facedetector class and new debug design for selfie capture screen. also refactor state management and action handling for the selfie view model v2 * rename preview view to camera view controller * hook up new face detector class to the new selfie view model. * integrate the new model that takes an image input and also display the outputs in the debug view in real time. * remove lottie resources. code formatting. * Add new debug views and and also use av preview layer to calculate the bounding box * Fix issue with face bounding box. implement face size and positioning within the frame. * add instructions view to the selfie capture screen. * add image capture to the selfie view model. * Add a view to show captured images: selfie and liveness. * add active liveness manager class and move updating directive to the view model. * some clean up * remove print statements from facedetectorv2 * move face geometry check for active liveness into the liveness manager * refactor how current task is assigned and how directive for liveness task is displayed * update criteria for passing the liveness checks * fix the length of the captured image view * code formatting * add some documentation to liveness check manager class * more docs * run pod install * folder structure changes. * code formatting. * import UIkit inside Imageclassifier. * add the ML folder group into the right target. * some layout changes. * update the bundle for the generated ml model class. * move initialisation for the image classifier into the init function so that it's done only once --- Example/SmileID.xcodeproj/project.pbxproj | 118 +++---- ML/ImageClassifier.swift | 117 ------- SmileID.xcodeproj/project.pbxproj | 12 + .../Classes/Camera/CameraManager.swift | 4 +- .../Classes/Camera/CameraViewController.swift | 16 +- .../Model/DocumentCaptureViewModel.swift | 2 +- .../FaceDetector}/CGImage+CVPixelBuffer.swift | 0 .../Classes/FaceDetector/FaceDetectorV2.swift | 199 +++++++++++ .../FaceDetector/FaceGeometryModel.swift | 23 ++ .../FaceDetector/LivenessCheckManager.swift | 120 +++++++ ...{FaceDetectionState.swift => Models.swift} | 8 +- .../FaceDetector}/SelfieQualityDetector.swift | 2 +- .../FaceDetector}/UIImage+CVPixelBuffer.swift | 0 .../SelfieCapture/SelfieViewModel.swift | 2 +- .../SelfieCapture/SelfieViewModelAction.swift | 19 ++ .../SelfieCapture/SelfieViewModelV2.swift | 319 +++++++++++++++++- .../SelfieCapture/View/CameraView.swift | 19 +- .../View/CapturedImagesView.swift | 61 ++++ .../View/FaceBoundingBoxView.swift | 23 ++ .../View/FaceLayoutGuideView.swift | 16 + .../SelfieCapture/View/LayoutGuideView.swift | 19 ++ .../View/SelfieCaptureScreenV2.swift | 187 +++++----- .../View/UserInstructionsView.swift | 12 + Sources/SmileID/Classes/Util.swift | 15 + .../analytics/coremldata.bin | Bin .../coremldata.bin | Bin .../metadata.json | 0 .../model.espresso.net | 0 .../model.espresso.shape | 0 .../model.espresso.weights | Bin .../model/coremldata.bin | Bin .../neural_network_optionals/coremldata.bin | Bin 32 files changed, 1026 insertions(+), 287 deletions(-) delete mode 100644 ML/ImageClassifier.swift rename {ML => Sources/SmileID/Classes/FaceDetector}/CGImage+CVPixelBuffer.swift (100%) create mode 100644 Sources/SmileID/Classes/FaceDetector/FaceDetectorV2.swift create mode 100644 Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift rename Sources/SmileID/Classes/FaceDetector/{FaceDetectionState.swift => Models.swift} (75%) rename {ML => Sources/SmileID/Classes/FaceDetector}/SelfieQualityDetector.swift (99%) rename {ML => Sources/SmileID/Classes/FaceDetector}/UIImage+CVPixelBuffer.swift (100%) create mode 100644 Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift create mode 100644 Sources/SmileID/Classes/SelfieCapture/View/CapturedImagesView.swift create mode 100644 Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingBoxView.swift create mode 100644 Sources/SmileID/Classes/SelfieCapture/View/FaceLayoutGuideView.swift create mode 100644 Sources/SmileID/Classes/SelfieCapture/View/LayoutGuideView.swift create mode 100644 Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift rename {ML => Sources/SmileID/Resources/ML}/SelfieQualityDetector.mlmodelc/analytics/coremldata.bin (100%) rename {ML => Sources/SmileID/Resources/ML}/SelfieQualityDetector.mlmodelc/coremldata.bin (100%) rename {ML => Sources/SmileID/Resources/ML}/SelfieQualityDetector.mlmodelc/metadata.json (100%) rename {ML => Sources/SmileID/Resources/ML}/SelfieQualityDetector.mlmodelc/model.espresso.net (100%) rename {ML => Sources/SmileID/Resources/ML}/SelfieQualityDetector.mlmodelc/model.espresso.shape (100%) rename {ML => Sources/SmileID/Resources/ML}/SelfieQualityDetector.mlmodelc/model.espresso.weights (100%) rename {ML => Sources/SmileID/Resources/ML}/SelfieQualityDetector.mlmodelc/model/coremldata.bin (100%) rename {ML => Sources/SmileID/Resources/ML}/SelfieQualityDetector.mlmodelc/neural_network_optionals/coremldata.bin (100%) diff --git a/Example/SmileID.xcodeproj/project.pbxproj b/Example/SmileID.xcodeproj/project.pbxproj index d6ff32768..39ddd3e2b 100644 --- a/Example/SmileID.xcodeproj/project.pbxproj +++ b/Example/SmileID.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 0070E03EA5C2B707E67804D3 /* Pods_SmileID_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A98AE7C7B30F859CBC4DA6E /* Pods_SmileID_Example.framework */; }; 1E59E33E2BA1E64C00D2BAD2 /* PartnerParamsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E59E33D2BA1E64C00D2BAD2 /* PartnerParamsTests.swift */; }; 1E60ED372A29C306002695FF /* HomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E60ED322A29C306002695FF /* HomeViewController.swift */; }; 1E60ED382A29C306002695FF /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E60ED332A29C306002695FF /* Constants.swift */; }; @@ -39,7 +38,7 @@ 20B6D5EC2C21CE660023D51C /* DataStoreError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20B6D5EB2C21CE660023D51C /* DataStoreError.swift */; }; 20C360C82C454C130008DBDE /* RootViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20C360C72C454C130008DBDE /* RootViewModel.swift */; }; 20DFA0EC2C21917100AC2AE7 /* View+TextSelection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20DFA0EB2C21917100AC2AE7 /* View+TextSelection.swift */; }; - 20F3D6F32C25F4D700B32751 /* (null) in Sources */ = {isa = PBXBuildFile; }; + 20F3D6F32C25F4D700B32751 /* BuildFile in Sources */ = {isa = PBXBuildFile; }; 20F3D6F62C25F5C100B32751 /* SmileID.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 20F3D6F42C25F5C100B32751 /* SmileID.xcdatamodeld */; }; 5829A8C02BC7429A001C1E7E /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 5829A8BF2BC7429A001C1E7E /* PrivacyInfo.xcprivacy */; }; 585BE4882AC7748E0091DDD8 /* RestartableTimerTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 585BE4872AC7748E0091DDD8 /* RestartableTimerTest.swift */; }; @@ -48,7 +47,7 @@ 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 620F1E982B69194900185CD2 /* AlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 620F1E972B69194900185CD2 /* AlertView.swift */; }; - 620F1E9A2B691ABB00185CD2 /* (null) in Resources */ = {isa = PBXBuildFile; }; + 620F1E9A2B691ABB00185CD2 /* BuildFile in Resources */ = {isa = PBXBuildFile; }; 624777D02B0CDC9F00952842 /* EnhancedKycWithIdInputScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 624777CF2B0CDC9F00952842 /* EnhancedKycWithIdInputScreen.swift */; }; 62F6766F2B0D173600417419 /* EnhancedKycWithIdInputScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62F6766E2B0D173600417419 /* EnhancedKycWithIdInputScreenViewModel.swift */; }; 62F676712B0E00E800417419 /* EnhancedKycResultDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62F676702B0E00E800417419 /* EnhancedKycResultDelegate.swift */; }; @@ -72,7 +71,8 @@ 91CB21A52AC10C61005AEBF5 /* NavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CB21A42AC10C61005AEBF5 /* NavigationBar.swift */; }; 91D9FBC42AB481FE00A8D36B /* PollingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D9FBC32AB481FE00A8D36B /* PollingTests.swift */; }; 91D9FBD52AB8AB4700A8D36B /* CalculateSignatureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D9FBD42AB8AB4700A8D36B /* CalculateSignatureTests.swift */; }; - F703CAEEB3CEB5ADB5C99D44 /* Pods_SmileID_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 287986BB9E93D632523CC13A /* Pods_SmileID_Tests.framework */; }; + CF6C5B9C611F1E82DC393276 /* Pods_SmileID_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1BD6BC67E3ED75E00105F7B /* Pods_SmileID_Example.framework */; }; + D852C426DDFC5A53E45164A7 /* Pods_SmileID_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7429B58F2AFC96534131127 /* Pods_SmileID_Tests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -86,7 +86,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0A98AE7C7B30F859CBC4DA6E /* Pods_SmileID_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0374B5DE135D00E9C63222D2 /* Pods-SmileID_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.release.xcconfig"; sourceTree = ""; }; 1E59E33D2BA1E64C00D2BAD2 /* PartnerParamsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PartnerParamsTests.swift; sourceTree = ""; }; 1E60ED322A29C306002695FF /* HomeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; 1E60ED332A29C306002695FF /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; @@ -118,8 +118,6 @@ 20C360C72C454C130008DBDE /* RootViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewModel.swift; sourceTree = ""; }; 20DFA0EB2C21917100AC2AE7 /* View+TextSelection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+TextSelection.swift"; sourceTree = ""; }; 20F3D6F52C25F5C100B32751 /* SmileID.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SmileID.xcdatamodel; sourceTree = ""; }; - 262BF9A8643DF9220FD233E3 /* Pods-SmileID_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.release.xcconfig"; sourceTree = ""; }; - 287986BB9E93D632523CC13A /* Pods_SmileID_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5829A8BF2BC7429A001C1E7E /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 585BE4872AC7748E0091DDD8 /* RestartableTimerTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestartableTimerTest.swift; sourceTree = ""; }; 58C5F1D72B05925800A6080C /* BiometricKycWithIdInputScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BiometricKycWithIdInputScreen.swift; sourceTree = ""; }; @@ -135,7 +133,7 @@ 624777CF2B0CDC9F00952842 /* EnhancedKycWithIdInputScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnhancedKycWithIdInputScreen.swift; sourceTree = ""; }; 62F6766E2B0D173600417419 /* EnhancedKycWithIdInputScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnhancedKycWithIdInputScreenViewModel.swift; sourceTree = ""; }; 62F676702B0E00E800417419 /* EnhancedKycResultDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnhancedKycResultDelegate.swift; sourceTree = ""; }; - 67420F8D15457A4FC46AFB84 /* Pods-SmileID_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.debug.xcconfig"; sourceTree = ""; }; + 6A35EC7327A28317BD3691DB /* Pods-SmileID_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.debug.xcconfig"; sourceTree = ""; }; 6AC980584C522B17A099E098 /* Util.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Util.swift; sourceTree = ""; }; 6AC980D3CB9C357AD1B13D80 /* IdInfoInputScreen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdInfoInputScreen.swift; sourceTree = ""; }; 6AC982147640002B81F72DEC /* SettingsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; @@ -158,9 +156,11 @@ 91D9FBD42AB8AB4700A8D36B /* CalculateSignatureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculateSignatureTests.swift; sourceTree = ""; }; 94E7560A47E255DD8215C183 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 9755B6A19CF28DE212F24C83 /* SmileID.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = SmileID.podspec; path = ../SmileID.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + B7429B58F2AFC96534131127 /* Pods_SmileID_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C8CD2E3DB817D8C6334E9240 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; - F7E93DC564F4962974BFA3CB /* Pods-SmileID_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.debug.xcconfig"; sourceTree = ""; }; - FE4071A6FC696DDB1E5382FA /* Pods-SmileID_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.release.xcconfig"; sourceTree = ""; }; + D1BD6BC67E3ED75E00105F7B /* Pods_SmileID_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D6155C4F90D148251B9B9077 /* Pods-SmileID_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.release.xcconfig"; sourceTree = ""; }; + F88A959ED467AA6482744E51 /* Pods-SmileID_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -168,7 +168,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0070E03EA5C2B707E67804D3 /* Pods_SmileID_Example.framework in Frameworks */, + CF6C5B9C611F1E82DC393276 /* Pods_SmileID_Example.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -176,7 +176,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F703CAEEB3CEB5ADB5C99D44 /* Pods_SmileID_Tests.framework in Frameworks */, + D852C426DDFC5A53E45164A7 /* Pods_SmileID_Tests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -297,7 +297,7 @@ 607FACE81AFB9204008FA782 /* Tests */, 607FACD11AFB9204008FA782 /* Products */, 828BF541E068101B2E6ED55F /* Pods */, - 61C8F125453D3EB83C903E19 /* Frameworks */, + B5C101CE2863A6DEA0960B58 /* Frameworks */, ); sourceTree = ""; }; @@ -381,15 +381,6 @@ name = "Podspec Metadata"; sourceTree = ""; }; - 61C8F125453D3EB83C903E19 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0A98AE7C7B30F859CBC4DA6E /* Pods_SmileID_Example.framework */, - 287986BB9E93D632523CC13A /* Pods_SmileID_Tests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 624777CC2B0CDC5200952842 /* EnhancedKYC */ = { isa = PBXGroup; children = ( @@ -412,10 +403,10 @@ 828BF541E068101B2E6ED55F /* Pods */ = { isa = PBXGroup; children = ( - 67420F8D15457A4FC46AFB84 /* Pods-SmileID_Example.debug.xcconfig */, - 262BF9A8643DF9220FD233E3 /* Pods-SmileID_Example.release.xcconfig */, - F7E93DC564F4962974BFA3CB /* Pods-SmileID_Tests.debug.xcconfig */, - FE4071A6FC696DDB1E5382FA /* Pods-SmileID_Tests.release.xcconfig */, + F88A959ED467AA6482744E51 /* Pods-SmileID_Example.debug.xcconfig */, + 0374B5DE135D00E9C63222D2 /* Pods-SmileID_Example.release.xcconfig */, + 6A35EC7327A28317BD3691DB /* Pods-SmileID_Tests.debug.xcconfig */, + D6155C4F90D148251B9B9077 /* Pods-SmileID_Tests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -452,6 +443,15 @@ path = ../../Tests/Mocks; sourceTree = ""; }; + B5C101CE2863A6DEA0960B58 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D1BD6BC67E3ED75E00105F7B /* Pods_SmileID_Example.framework */, + B7429B58F2AFC96534131127 /* Pods_SmileID_Tests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -459,13 +459,13 @@ isa = PBXNativeTarget; buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SmileID_Example" */; buildPhases = ( - A9F06B7D2BE86D450711DA74 /* [CP] Check Pods Manifest.lock */, + BF04E59E0BBAEF08E0F6670F /* [CP] Check Pods Manifest.lock */, 607FACCC1AFB9204008FA782 /* Sources */, 917D79282AA8024400FA6624 /* SwiftLint */, 607FACCD1AFB9204008FA782 /* Frameworks */, 607FACCE1AFB9204008FA782 /* Resources */, - 24C14E01D54D394A2B3921B7 /* [CP] Embed Pods Frameworks */, C0BE335FFECD4DF6892309F3 /* Upload Debug Symbols to Sentry */, + 100910DDFF47A40C3D218CFE /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -480,7 +480,7 @@ isa = PBXNativeTarget; buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SmileID_Tests" */; buildPhases = ( - BD877CF0071F75996FF65D7F /* [CP] Check Pods Manifest.lock */, + 0A095CF74E534671ED6B5831 /* [CP] Check Pods Manifest.lock */, 607FACE11AFB9204008FA782 /* Sources */, 607FACE21AFB9204008FA782 /* Frameworks */, 607FACE31AFB9204008FA782 /* Resources */, @@ -546,7 +546,7 @@ buildActionMask = 2147483647; files = ( 1EFAB3172A375265008E3C13 /* Images.xcassets in Resources */, - 620F1E9A2B691ABB00185CD2 /* (null) in Resources */, + 620F1E9A2B691ABB00185CD2 /* BuildFile in Resources */, 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, 5829A8C02BC7429A001C1E7E /* PrivacyInfo.xcprivacy in Resources */, 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, @@ -563,7 +563,29 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 24C14E01D54D394A2B3921B7 /* [CP] Embed Pods Frameworks */ = { + 0A095CF74E534671ED6B5831 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-SmileID_Tests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 100910DDFF47A40C3D218CFE /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -611,7 +633,7 @@ shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\ncd ../Sources\n\"${PODS_ROOT}/SwiftLint/swiftlint\"\n"; }; - A9F06B7D2BE86D450711DA74 /* [CP] Check Pods Manifest.lock */ = { + BF04E59E0BBAEF08E0F6670F /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -633,28 +655,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - BD877CF0071F75996FF65D7F /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SmileID_Tests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; C0BE335FFECD4DF6892309F3 /* Upload Debug Symbols to Sentry */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -693,7 +693,7 @@ 1ED53F6D2A2F28590020BEFB /* SmileTextField.swift in Sources */, 91CB21A52AC10C61005AEBF5 /* NavigationBar.swift in Sources */, 1ED53F6B2A2F28590020BEFB /* ProductCell.swift in Sources */, - 20F3D6F32C25F4D700B32751 /* (null) in Sources */, + 20F3D6F32C25F4D700B32751 /* BuildFile in Sources */, 1E60ED382A29C306002695FF /* Constants.swift in Sources */, 624777D02B0CDC9F00952842 /* EnhancedKycWithIdInputScreen.swift in Sources */, 1ED53F712A2F28590020BEFB /* EnterUserIDView.swift in Sources */, @@ -879,7 +879,7 @@ }; 607FACF01AFB9204008FA782 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 67420F8D15457A4FC46AFB84 /* Pods-SmileID_Example.debug.xcconfig */; + baseConfigurationReference = F88A959ED467AA6482744E51 /* Pods-SmileID_Example.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "Apple Development"; @@ -912,7 +912,7 @@ }; 607FACF11AFB9204008FA782 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 262BF9A8643DF9220FD233E3 /* Pods-SmileID_Example.release.xcconfig */; + baseConfigurationReference = 0374B5DE135D00E9C63222D2 /* Pods-SmileID_Example.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "Apple Development"; @@ -944,7 +944,7 @@ }; 607FACF31AFB9204008FA782 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F7E93DC564F4962974BFA3CB /* Pods-SmileID_Tests.debug.xcconfig */; + baseConfigurationReference = 6A35EC7327A28317BD3691DB /* Pods-SmileID_Tests.debug.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; @@ -976,7 +976,7 @@ }; 607FACF41AFB9204008FA782 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FE4071A6FC696DDB1E5382FA /* Pods-SmileID_Tests.release.xcconfig */; + baseConfigurationReference = D6155C4F90D148251B9B9077 /* Pods-SmileID_Tests.release.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; diff --git a/ML/ImageClassifier.swift b/ML/ImageClassifier.swift deleted file mode 100644 index 4117ab05e..000000000 --- a/ML/ImageClassifier.swift +++ /dev/null @@ -1,117 +0,0 @@ -import CoreML -import Vision - -/// An enum representing possible errors during image classification -enum ImageClassifierError: Error { - case preprocessingFailed - case classificationFailed - case invalidOutputFormat - case imageConversionFailed - case faceCroppingFailed -} - -/// A structure representing the image quality check result -struct ImageQualityResult { - let passed: Bool - let confidence: Float - - var description: String { - return passed ? "Passed" : "Failed" - } -} - -/// A class that performs image classification to determine selfie quality using a Core ML Model -class ModelImageClassifier { - let cropSize = (width: 120, height: 120) - - init() {} - - /// Classifies an image using the Core ML Model - /// - Parameter image: The input image as a UIImage - /// - Returns: A result containing classifiction confidence. - func classify(imageBuffer: CVPixelBuffer) async throws -> ImageQualityResult { - do { - guard let image = UIImage(pixelBuffer: imageBuffer) else { - throw ImageClassifierError.preprocessingFailed - } - let croppedImage = try await cropToFace(image: image) - guard let convertedImage = croppedImage.pixelBuffer(width: cropSize.width, height: cropSize.height) else { - throw ImageClassifierError.preprocessingFailed - } - return try performClassification(imageBuffer: convertedImage) - } catch { - throw error - } - } - - /// Crops the input image to the region of the first face in the image. - /// - Parameter image: The original input image that should have a face. - /// - Returns: A cropped image of the detected face in the input image. - private func cropToFace(image: UIImage) async throws -> UIImage { - guard let cgImage = image.cgImage else { - throw ImageClassifierError.faceCroppingFailed - } - - let request = VNDetectFaceRectanglesRequest() - let handler = VNImageRequestHandler(cgImage: cgImage, options: [:]) - - try handler.perform([request]) - - guard let results = request.results, - let face = results.first else { - throw ImageClassifierError.faceCroppingFailed - } - - let boundingBox = face.boundingBox - - let size = CGSize( - width: boundingBox.width * image.size.width, - height: boundingBox.height * image.size.height - ) - let origin = CGPoint( - x: boundingBox.minX * image.size.width, - y: (1 - boundingBox.minY) * image.size.height - size.height - ) - - let faceRect = CGRect(origin: origin, size: size) - - guard let croppedImage = cgImage.cropping(to: faceRect) else { - throw ImageClassifierError.faceCroppingFailed - } - - return UIImage(cgImage: croppedImage) - } - - /// Performs the actual classification using the `ImageQualityCP20` model - /// - Parameter mlMultiArray: The processed input image as a MultiArray - /// - Returns: The ImageQualityResult - private func performClassification(imageBuffer: CVPixelBuffer) throws -> ImageQualityResult { - let modelConfiguration = MLModelConfiguration() - let model = try SelfieQualityDetector(configuration: modelConfiguration) - - let input = SelfieQualityDetectorInput(conv2d_193_input: imageBuffer) - - let prediction = try model.prediction(input: input) - let output = prediction.Identity - return try processModelOuput(output) - } - - /// Processes the model's output to determine the final classification - /// - Parameter output: The MLMultiArray output from the model - /// - Returns: The ImageQualityResult - private func processModelOuput(_ output: MLMultiArray) throws -> ImageQualityResult { - guard output.shape.count == 2, - output.shape[0] == 1, - output.shape[1] == 2 else { - throw ImageClassifierError.invalidOutputFormat - } - - let failScore = output[0].floatValue - let passScore = output[1].floatValue - - let passed = passScore > failScore - let confidence = passed ? passScore : failScore - - return ImageQualityResult(passed: passed, confidence: confidence) - } -} diff --git a/SmileID.xcodeproj/project.pbxproj b/SmileID.xcodeproj/project.pbxproj index 60c1081c3..014e6eb71 100644 --- a/SmileID.xcodeproj/project.pbxproj +++ b/SmileID.xcodeproj/project.pbxproj @@ -64,6 +64,7 @@ 1F33A24780AE0C89E89EDB3A /* NavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D2BD3354878490B62F04FB /* NavigationBar.swift */; }; 1F57B39849B01BB6E26B7F3B /* DocumentCaptureInstructionsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 540FE72848132B16535C7281 /* DocumentCaptureInstructionsScreen.swift */; }; 1F76F767069D4436C8AF6074 /* Injected.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EB66DD1BDD5A4C66AC800B3 /* Injected.swift */; }; + 20991A4E2C8625EE00C0B13E /* SelfieQualityDetector.mlmodelc in Resources */ = {isa = PBXBuildFile; fileRef = 20991A4C2C8625EE00C0B13E /* SelfieQualityDetector.mlmodelc */; }; 216916E16C0F6C9CBD698C92 /* ImageExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C1C11D7A28442BD26144875 /* ImageExtensions.swift */; }; 2228D942A74ACE036BCC6AC3 /* OrchestratedDocumentVerificationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A389AF9529CF6ADA5A11D4D6 /* OrchestratedDocumentVerificationViewModel.swift */; }; 225873F4B9CFD28079C4E610 /* FaceShape.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60101EA1F67FE523A8D10E2F /* FaceShape.swift */; }; @@ -760,6 +761,7 @@ 204E25AA87E9519F31645909 /* DocumentCaptureScreen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DocumentCaptureScreen.swift; path = Sources/SmileID/Classes/DocumentVerification/View/DocumentCaptureScreen.swift; sourceTree = ""; }; 2057FBF6B6724BE33B6CC727 /* DocumentCaptureScreen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DocumentCaptureScreen.swift; path = Sources/SmileID/Classes/DocumentVerification/View/DocumentCaptureScreen.swift; sourceTree = ""; }; 208563C91ED929072F239DE9 /* NavigationHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NavigationHelper.swift; path = Sources/SmileID/Classes/Helpers/NavigationHelper.swift; sourceTree = ""; }; + 20991A4C2C8625EE00C0B13E /* SelfieQualityDetector.mlmodelc */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = SelfieQualityDetector.mlmodelc; sourceTree = ""; }; 209BE3605849ED55515BE4BF /* OrchestratedDocumentVerificationViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OrchestratedDocumentVerificationViewModel.swift; path = Sources/SmileID/Classes/DocumentVerification/Model/OrchestratedDocumentVerificationViewModel.swift; sourceTree = ""; }; 20BD76F142CABEAE07EF1F67 /* SmileIDService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SmileIDService.swift; path = Sources/SmileID/Classes/Networking/SmileIDService.swift; sourceTree = ""; }; 20CAE1873FDA57190CC2F915 /* HTTPHeader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHeader.swift; path = Sources/SmileID/Classes/Networking/HTTPHeader.swift; sourceTree = ""; }; @@ -6522,6 +6524,7 @@ 1EEFC2BF2B58412300B8A934 /* Resources */ = { isa = PBXGroup; children = ( + 20991A4D2C8625EE00C0B13E /* ML */, 5829A8C42BC8494F001C1E7E /* PrivacyInfo.xcprivacy */, 1EEFC2C02B58412300B8A934 /* Media.xcassets */, 1EEFC2C12B58412300B8A934 /* Fonts */, @@ -6598,6 +6601,14 @@ path = DependencyContainer; sourceTree = ""; }; + 20991A4D2C8625EE00C0B13E /* ML */ = { + isa = PBXGroup; + children = ( + 20991A4C2C8625EE00C0B13E /* SelfieQualityDetector.mlmodelc */, + ); + path = ML; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -6730,6 +6741,7 @@ 5829A8C52BC8494F001C1E7E /* PrivacyInfo.xcprivacy in Resources */, 1EEFC3342B58412400B8A934 /* Localizable.strings in Resources */, 1EEFC3312B58412400B8A934 /* Media.xcassets in Resources */, + 20991A4E2C8625EE00C0B13E /* SelfieQualityDetector.mlmodelc in Resources */, 1EEFC3332B58412400B8A934 /* Epilogue-Bold.ttf in Resources */, 1EEFC2E92B58412300B8A934 /* ARViewController.xib in Resources */, 1EEFC3322B58412400B8A934 /* Epilogue-Medium.ttf in Resources */, diff --git a/Sources/SmileID/Classes/Camera/CameraManager.swift b/Sources/SmileID/Classes/Camera/CameraManager.swift index f22a21652..439f31d95 100644 --- a/Sources/SmileID/Classes/Camera/CameraManager.swift +++ b/Sources/SmileID/Classes/Camera/CameraManager.swift @@ -42,7 +42,9 @@ class CameraManager: NSObject, ObservableObject { @Published private(set) var status = Status.unconfigured private var orientation: Orientation - init(orientation: Orientation) { + static let shared: CameraManager = CameraManager(orientation: .portrait) + + private init(orientation: Orientation) { self.orientation = orientation super.init() sessionQueue.async { diff --git a/Sources/SmileID/Classes/Camera/CameraViewController.swift b/Sources/SmileID/Classes/Camera/CameraViewController.swift index f52bf3996..74072078e 100644 --- a/Sources/SmileID/Classes/Camera/CameraViewController.swift +++ b/Sources/SmileID/Classes/Camera/CameraViewController.swift @@ -2,7 +2,9 @@ import UIKit import Vision import AVFoundation -class PreviewView: UIViewController { +class CameraViewController: UIViewController { + var faceDetector: FaceDetectorV2? + var previewLayer: AVCaptureVideoPreviewLayer? private weak var cameraManager: CameraManager? @@ -17,6 +19,7 @@ class PreviewView: UIViewController { override func viewDidLoad() { super.viewDidLoad() + faceDetector?.viewDelegate = self configurePreviewLayer() } @@ -34,7 +37,16 @@ class PreviewView: UIViewController { } } -extension PreviewView: RectangleDetectionDelegate { +extension CameraViewController: FaceDetectorDelegate { + func convertFromMetadataToPreviewRect(rect: CGRect) -> CGRect { + guard let previewLayer = previewLayer else { + return CGRect.zero + } + return previewLayer.layerRectConverted(fromMetadataOutputRect: rect) + } +} + +extension CameraViewController: RectangleDetectionDelegate { func didDetectQuad( quad: Quadrilateral?, _ imageSize: CGSize, diff --git a/Sources/SmileID/Classes/DocumentVerification/Model/DocumentCaptureViewModel.swift b/Sources/SmileID/Classes/DocumentVerification/Model/DocumentCaptureViewModel.swift index 24c14d091..8a7afea69 100644 --- a/Sources/SmileID/Classes/DocumentVerification/Model/DocumentCaptureViewModel.swift +++ b/Sources/SmileID/Classes/DocumentVerification/Model/DocumentCaptureViewModel.swift @@ -35,7 +35,7 @@ class DocumentCaptureViewModel: ObservableObject { @Published var documentImageToConfirm: Data? @Published var captureError: Error? @Published var isCapturing = false - @Published var cameraManager = CameraManager(orientation: .portrait) + var cameraManager = CameraManager.shared init(knownAspectRatio: Double? = nil) { self.knownAspectRatio = knownAspectRatio diff --git a/ML/CGImage+CVPixelBuffer.swift b/Sources/SmileID/Classes/FaceDetector/CGImage+CVPixelBuffer.swift similarity index 100% rename from ML/CGImage+CVPixelBuffer.swift rename to Sources/SmileID/Classes/FaceDetector/CGImage+CVPixelBuffer.swift diff --git a/Sources/SmileID/Classes/FaceDetector/FaceDetectorV2.swift b/Sources/SmileID/Classes/FaceDetector/FaceDetectorV2.swift new file mode 100644 index 000000000..49bc7e0b8 --- /dev/null +++ b/Sources/SmileID/Classes/FaceDetector/FaceDetectorV2.swift @@ -0,0 +1,199 @@ +import AVFoundation +import Combine +import UIKit +import Vision + +protocol FaceDetectorDelegate: NSObjectProtocol { + func convertFromMetadataToPreviewRect(rect: CGRect) -> CGRect +} + +class FaceDetectorV2: NSObject { + private var selfieQualityModel: SelfieQualityDetector? + + private let cropSize = (width: 120, height: 120) + private let faceMovementThreshold: CGFloat = 0.15 + + var sequenceHandler = VNSequenceRequestHandler() + var currentFrameBuffer: CVPixelBuffer? + + weak var selfieViewModel: SelfieViewModelV2? + weak var viewDelegate: FaceDetectorDelegate? + + override init() { + super.init() + selfieQualityModel = createImageClassifier() + } + + private func createImageClassifier() -> SelfieQualityDetector? { + do { + let modelConfiguration = MLModelConfiguration() + let coreMLModel = try SelfieQualityDetector(configuration: modelConfiguration) + return coreMLModel + } catch { + return nil + } + } + + /// Run Face Capture quality and Face Bounding Box and roll/pitch/yaw tracking + func detect(_ imageBuffer: CVPixelBuffer) { + currentFrameBuffer = imageBuffer + + let detectFaceRectanglesRequest = VNDetectFaceRectanglesRequest( + completionHandler: detectedFaceRectangles + ) + + let detectCaptureQualityRequest = VNDetectFaceCaptureQualityRequest( + completionHandler: detectedFaceQualityRequest + ) + + do { + try sequenceHandler.perform( + [ + detectFaceRectanglesRequest, + detectCaptureQualityRequest + ], + on: imageBuffer, + orientation: .leftMirrored + ) + } catch { + selfieViewModel?.perform(action: .handleError(error)) + } + + do { + guard let image = UIImage(pixelBuffer: imageBuffer) else { + return + } + guard let croppedImage = try cropToFace(image: image) else { + return + } + guard let convertedImage = croppedImage.pixelBuffer(width: cropSize.width, height: cropSize.height) else { + return + } + selfieQualityRequest(imageBuffer: convertedImage) + } catch { + selfieViewModel?.perform(action: .handleError(error)) + } + } + + func selfieQualityRequest(imageBuffer: CVPixelBuffer) { + guard let selfieViewModel, + let selfieQualityModel else { return } + do { + let input = SelfieQualityDetectorInput(conv2d_193_input: imageBuffer) + + let prediction = try selfieQualityModel.prediction(input: input) + let output = prediction.Identity + + guard output.shape.count == 2, + output.shape[0] == 1, + output.shape[1] == 2 else { + return + } + + let passScore = output[0].floatValue + let failScore = output[1].floatValue + + let selfieQualityModel = SelfieQualityModel( + failed: failScore, + passed: passScore + ) + selfieViewModel.perform(action: .selfieQualityObservationDetected(selfieQualityModel)) + } catch { + selfieViewModel.perform(action: .handleError(error)) + } + } + + private func cropToFace(image: UIImage) throws -> UIImage? { + guard let cgImage = image.cgImage else { + return nil + } + + let request = VNDetectFaceRectanglesRequest() + let handler = VNImageRequestHandler(cgImage: cgImage, options: [:]) + + try handler.perform([request]) + + guard let results = request.results, + let face = results.first else { + return nil + } + + let boundingBox = face.boundingBox + + let size = CGSize( + width: boundingBox.width * image.size.width, + height: boundingBox.height * image.size.height + ) + let origin = CGPoint( + x: boundingBox.minX * image.size.width, + y: (1 - boundingBox.minY) * image.size.height - size.height + ) + + let faceRect = CGRect(origin: origin, size: size) + + guard let croppedImage = cgImage.cropping(to: faceRect) else { + return nil + } + + return UIImage(cgImage: croppedImage) + } +} + +// MARK: - Private methods +extension FaceDetectorV2 { + func detectedFaceRectangles(request: VNRequest, error: Error?) { + guard let selfieViewModel = selfieViewModel, + let viewDelegate = viewDelegate else { return } + + guard let results = request.results as? [VNFaceObservation], + let result = results.first else { + selfieViewModel.perform(action: .noFaceDetected) + return + } + + let convertedBoundingBox = viewDelegate.convertFromMetadataToPreviewRect(rect: result.boundingBox) + + if #available(iOS 15.0, *) { + let faceObservationModel = FaceGeometryModel( + boundingBox: convertedBoundingBox, + roll: result.roll ?? 0.0, + yaw: result.yaw ?? 0.0, + pitch: result.pitch ?? 0.0, + direction: faceDirection(faceObservation: result) + ) + selfieViewModel.perform(action: .faceObservationDetected(faceObservationModel)) + } else { + // Fallback on earlier versions + } + } + + private func faceDirection(faceObservation: VNFaceObservation) -> FaceDirection { + guard let yaw = faceObservation.yaw?.doubleValue else { + return .none + } + let yawInRadians = CGFloat(yaw) + + if yawInRadians > faceMovementThreshold { + return .right + } else if yawInRadians < -faceMovementThreshold { + return .left + } else { + return .none + } + } + + func detectedFaceQualityRequest(request: VNRequest, error: Error?) { + guard let selfieViewModel = selfieViewModel else { return } + + guard let results = request.results as? [VNFaceObservation], + let result = results.first else { + selfieViewModel.perform(action: .noFaceDetected) + return + } + + let faceQualityModel = FaceQualityModel( + quality: result.faceCaptureQuality ?? 0.0 + ) + selfieViewModel.perform(action: .faceQualityObservationDetected(faceQualityModel)) + } +} diff --git a/Sources/SmileID/Classes/FaceDetector/FaceGeometryModel.swift b/Sources/SmileID/Classes/FaceDetector/FaceGeometryModel.swift index 675261cd5..9075c71b4 100644 --- a/Sources/SmileID/Classes/FaceDetector/FaceGeometryModel.swift +++ b/Sources/SmileID/Classes/FaceDetector/FaceGeometryModel.swift @@ -4,4 +4,27 @@ struct FaceGeometryModel: Equatable { let boundingBox: CGRect let roll: NSNumber let yaw: NSNumber + let pitch: NSNumber + let direction: FaceDirection +} + +enum FaceDirection { + case left + case right + case none +} + +struct FaceQualityModel { + let quality: Float +} + +struct SelfieQualityModel { + let failed: Float + let passed: Float +} + +extension SelfieQualityModel { + static var zero: SelfieQualityModel { + return SelfieQualityModel(failed: 0, passed: 0) + } } diff --git a/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift b/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift new file mode 100644 index 000000000..62264e054 --- /dev/null +++ b/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift @@ -0,0 +1,120 @@ +import Foundation +import Vision + +/// Represents the different tasks in an active liveness check. +enum LivenessTask { + case lookLeft + case lookRight + case lookUp + + /// The user-friendly instruction for each task. + var instruction: String { + switch self { + case .lookLeft: + return "Look Left" + case .lookRight: + return "Look Right" + case .lookUp: + return "Look Up" + } + } +} + +class LivenessCheckManager: ObservableObject { + /// The sequence of liveness tasks to be performed. + private var livenessTaskSequence: [LivenessTask] = [] + /// The index pointing to the current task in the sequence. + private var currentTaskIndex: Int = 0 + /// The view model associated with the selfie capture process. + weak var selfieViewModel: SelfieViewModelV2? + /// A closure to trigger photo capture during the liveness check. + var captureImage: (() -> Void)? + + // MARK: Constants + + /// The minimum threshold for yaw (left-right head movement) + private let minYawAngleThreshold: CGFloat = 0.15 + /// The maximum threshold for yaw (left-right head movement) + private let maxYawAngleThreshold: CGFloat = 0.6 + /// The minimum threshold for pitch (up-down head movement) + private let minPitchAngleThreshold: CGFloat = 0.15 + /// The maximum threshold for pitch (up-down head movement) + private let maxPitchAngleThreshold: CGFloat = 0.6 + + // MARK: Face Orientation Properties + @Published private(set) var yawAngle: Double = 0.0 + @Published private(set) var rollAngle: Double = 0.0 + @Published private(set) var pitchAngle: Double = 0.0 + @Published private(set) var faceDirection: FaceDirection = .none + + /// Initializes the LivenessCheckManager with a shuffled set of tasks. + init() { + livenessTaskSequence = [.lookLeft, .lookRight, .lookUp].shuffled() + } + + /// The current liveness task. + private(set) var currentTask: LivenessTask? + + /// Advances to the next task in the sequence + /// - Returns: `true` if there is a next task, `false` if all tasks are completed. + private func advanceToNextTask() -> Bool { + guard currentTaskIndex < livenessTaskSequence.count - 1 else { + return false + } + currentTaskIndex += 1 + currentTask = livenessTaskSequence[currentTaskIndex] + return true + } + + /// Sets the initial task for the liveness check. + func initiateLivenessCheck() { + currentTask = livenessTaskSequence[currentTaskIndex] + } + + /// Processes face geometry data and checks for task completion + /// - Parameter faceGeometry: The current face geometry data. + func processFaceGeometry(_ faceGeometry: FaceGeometryModel) { + updateFaceOrientationValues(from: faceGeometry) + + guard let currentTask = currentTask else { return } + + switch currentTask { + case .lookLeft: + let yawValue = CGFloat(faceGeometry.yaw.doubleValue) + if yawValue < -minYawAngleThreshold { + completeCurrentTask() + } + case .lookRight: + let yawValue = CGFloat(faceGeometry.yaw.doubleValue) + if yawValue > minYawAngleThreshold { + completeCurrentTask() + } + case .lookUp: + let pitchValue = CGFloat(faceGeometry.pitch.doubleValue) + if pitchValue < -minPitchAngleThreshold { + completeCurrentTask() + } + } + } + + /// Updates the face orientation values based on the given face geometry. + /// - Parameter faceGeometry: The current face geometry data. + private func updateFaceOrientationValues(from faceGeometry: FaceGeometryModel) { + yawAngle = faceGeometry.yaw.doubleValue + rollAngle = faceGeometry.roll.doubleValue + pitchAngle = faceGeometry.pitch.doubleValue + } + + /// Completes the current task and moves to the next one. + /// If all tasks are completed, it signals the completion of the liveness challenge. + private func completeCurrentTask() { + captureImage?() + captureImage?() + + if !advanceToNextTask() { + // Liveness challenge complete + selfieViewModel?.perform(action: .activeLivenessCompleted) + self.currentTask = nil + } + } +} diff --git a/Sources/SmileID/Classes/FaceDetector/FaceDetectionState.swift b/Sources/SmileID/Classes/FaceDetector/Models.swift similarity index 75% rename from Sources/SmileID/Classes/FaceDetector/FaceDetectionState.swift rename to Sources/SmileID/Classes/FaceDetector/Models.swift index 83687b18c..0d0bdd2ac 100644 --- a/Sources/SmileID/Classes/FaceDetector/FaceDetectionState.swift +++ b/Sources/SmileID/Classes/FaceDetector/Models.swift @@ -1,19 +1,15 @@ import Foundation enum FaceDetectionState: Equatable { - case sceneUnstable - case finalFrame - case multipleFacesDetected case faceDetected case noFaceDetected case faceDetectionErrored - case smileFrame } -enum FaceObservation: Equatable { +enum FaceObservation { case faceFound(T) case faceNotFound - case errored(E) + case errored(Error) } enum FaceBoundsState { diff --git a/ML/SelfieQualityDetector.swift b/Sources/SmileID/Classes/FaceDetector/SelfieQualityDetector.swift similarity index 99% rename from ML/SelfieQualityDetector.swift rename to Sources/SmileID/Classes/FaceDetector/SelfieQualityDetector.swift index 43dc6a736..e87c214c6 100644 --- a/ML/SelfieQualityDetector.swift +++ b/Sources/SmileID/Classes/FaceDetector/SelfieQualityDetector.swift @@ -94,7 +94,7 @@ class SelfieQualityDetector { /// URL of model assuming it was installed in the same bundle as this class class var urlOfModelInThisBundle : URL { - let bundle = Bundle(for: self) + let bundle = SmileIDResourcesHelper.bundle return bundle.url(forResource: "SelfieQualityDetector", withExtension:"mlmodelc")! } diff --git a/ML/UIImage+CVPixelBuffer.swift b/Sources/SmileID/Classes/FaceDetector/UIImage+CVPixelBuffer.swift similarity index 100% rename from ML/UIImage+CVPixelBuffer.swift rename to Sources/SmileID/Classes/FaceDetector/UIImage+CVPixelBuffer.swift diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift index 1feb000e8..e3d96093b 100644 --- a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift @@ -26,7 +26,7 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { private let extraPartnerParams: [String: String] private let faceDetector = FaceDetector() - var cameraManager = CameraManager(orientation: .portrait) + var cameraManager = CameraManager.shared var shouldAnalyzeImages = true var lastAutoCaptureTime = Date() var previousHeadRoll = Double.infinity diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift new file mode 100644 index 000000000..13c24f5ee --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift @@ -0,0 +1,19 @@ +import Foundation + +enum SelfieViewModelAction { + // View Setup Actions + case windowSizeDetected(CGRect) + + // Face Detection Actions + case noFaceDetected + case faceObservationDetected(FaceGeometryModel) + case faceQualityObservationDetected(FaceQualityModel) + case selfieQualityObservationDetected(SelfieQualityModel) + case activeLivenessCompleted + case activeLivenessTimeout + + // Others + case toggleDebugMode + case openApplicationSettings + case handleError(Error) +} diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift index 53b7d7139..5592a0a1a 100644 --- a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift @@ -3,7 +3,71 @@ import Combine import Foundation public class SelfieViewModelV2: ObservableObject { + // MARK: Dependencies + let cameraManager = CameraManager.shared + let faceDetector = FaceDetectorV2() + let activeLiveness = LivenessCheckManager() + private var subscribers = Set() + + var selfieImage: URL? + var livenessImages: [URL] = [] + + // MARK: Publishers + @Published private(set) var debugEnabled: Bool + @Published var unauthorizedAlert: AlertState? + @Published var directive: String = "Instructions.Start" + + // MARK: Publishers for Vision data + @Published private(set) var hasDetectedValidFace: Bool + @Published private(set) var hasCompletedLivenessChallenge: Bool + @Published private(set) var faceDetectedState: FaceDetectionState { + didSet { + determineDirective() + } + } + @Published private(set) var faceGeometryState: FaceObservation { + didSet { + processUpdatedFaceGeometry() + } + } + @Published private(set) var faceQualityState: FaceObservation { + didSet { + processUpdatedFaceQuality() + } + } + @Published private(set) var selfieQualityState: FaceObservation { + didSet { + processUpdatedSelfieQuality() + } + } + @Published private(set) var isAcceptableBounds: FaceBoundsState { + didSet { + calculateDetectedFaceValidity() + } + } + @Published private(set) var isAcceptableFaceQuality: Bool { + didSet { + calculateDetectedFaceValidity() + } + } + @Published private(set) var isAcceptableSelfieQuality: Bool { + didSet { + calculateDetectedFaceValidity() + } + } + @Published private(set) var boundingXDelta: CGFloat = .zero + @Published private(set) var boundingYDelta: CGFloat = .zero + + // MARK: Constants + private let livenessImageSize = 320 + private let selfieImageSize = 640 + // MARK: UI Properties + @Published private(set) var faceQualityValue: Double = 0.0 + @Published private(set) var selfieQualityValue: SelfieQualityModel = .zero + var faceLayoutGuideFrame = CGRect(x: 0, y: 0, width: 200, height: 300) + + // MARK: Private Properties private let isEnroll: Bool private let userId: String private let jobId: String @@ -11,15 +75,6 @@ public class SelfieViewModelV2: ObservableObject { private let skipApiSubmission: Bool private let extraPartnerParams: [String: String] private let useStrictMode: Bool - private let faceDetector = FaceDetector() - - var cameraManager = CameraManager(orientation: .portrait) - - private var subscribers = Set() - - // UI Properties - @Published var unauthorizedAlert: AlertState? - @Published var directive: String = "Instructions.Start" public init( isEnroll: Bool, @@ -38,6 +93,24 @@ public class SelfieViewModelV2: ObservableObject { self.extraPartnerParams = extraPartnerParams self.useStrictMode = useStrictMode + hasDetectedValidFace = false + hasCompletedLivenessChallenge = false + faceDetectedState = .noFaceDetected + faceGeometryState = .faceNotFound + faceQualityState = .faceNotFound + selfieQualityState = .faceNotFound + isAcceptableBounds = .unknown + isAcceptableFaceQuality = false + isAcceptableSelfieQuality = false + + #if DEBUG + debugEnabled = true + #else + debugEnabled = false + #endif + + self.faceDetector.selfieViewModel = self + cameraManager.$status .receive(on: DispatchQueue.main) .filter { $0 == .unauthorized } @@ -46,7 +119,6 @@ public class SelfieViewModelV2: ObservableObject { .store(in: &subscribers) cameraManager.sampleBufferPublisher - .throttle(for: 0.35, scheduler: DispatchQueue.global(qos: .userInitiated), latest: true) // Drop the first ~2 seconds to allow the user to settle in .dropFirst(5) .compactMap { $0 } @@ -54,10 +126,233 @@ public class SelfieViewModelV2: ObservableObject { .store(in: &subscribers) } - func analyzeImage(image: CVPixelBuffer) {} + private func analyzeImage(imageBuffer: CVPixelBuffer) { + faceDetector.detect(imageBuffer) + if hasDetectedValidFace && selfieImage == nil { + captureSelfieImage(imageBuffer) + activeLiveness.initiateLivenessCheck() + } + + activeLiveness.captureImage = { [weak self] in + self?.captureLivenessImage(imageBuffer) + } + } + + // MARK: Actions + func perform(action: SelfieViewModelAction) { + switch action { + case let .windowSizeDetected(windowRect): + handleWindowSizeChanged(toRect: windowRect) + case .noFaceDetected: + publishNoFaceObserved() + case let .faceObservationDetected(faceObservation): + publishFaceObservation(faceObservation) + case let .faceQualityObservationDetected(faceQualityObservation): + publishFaceQualityObservation(faceQualityObservation) + case let .selfieQualityObservationDetected(selfieQualityObservation): + publishSelfieQualityObservation(selfieQualityObservation) + case .activeLivenessCompleted: + // Completed at this stage: submit the images. + return + case .activeLivenessTimeout: + // Submit with forced failure reason here. + return + case .toggleDebugMode: + toggleDebugMode() + case .openApplicationSettings: + openSettings() + case let .handleError(error): + handleError(error) + } + } + + // MARK: Action Handlers + private func handleWindowSizeChanged(toRect: CGRect) { + faceLayoutGuideFrame = CGRect( + x: toRect.midX - faceLayoutGuideFrame.width / 2, + y: toRect.midY - faceLayoutGuideFrame.height / 2, + width: faceLayoutGuideFrame.width, + height: faceLayoutGuideFrame.height + ) + } + + private func publishNoFaceObserved() { + DispatchQueue.main.async { [self] in + faceDetectedState = .noFaceDetected + faceGeometryState = .faceNotFound + } + } + + private func publishFaceObservation(_ faceGeometryModel: FaceGeometryModel) { + DispatchQueue.main.async { [self] in + faceDetectedState = .faceDetected + faceGeometryState = .faceFound(faceGeometryModel) + } + } + + private func publishFaceQualityObservation(_ faceQualityModel: FaceQualityModel) { + DispatchQueue.main.async { [self] in + faceDetectedState = .faceDetected + faceQualityState = .faceFound(faceQualityModel) + } + } + + private func publishSelfieQualityObservation(_ selfieQualityModel: SelfieQualityModel) { + DispatchQueue.main.async { [self] in + faceDetectedState = .faceDetected + selfieQualityState = .faceFound(selfieQualityModel) + } + } + + private func captureSelfieImage(_ pixelBuffer: CVPixelBuffer) { + do { + guard let imageData = ImageUtils.resizePixelBufferToHeight( + pixelBuffer, + height: selfieImageSize, + orientation: .up + ) else { + throw SmileIDError.unknown("Error resizing selfie image") + } + let selfieImage = try LocalStorage.createSelfieFile(jobId: jobId, selfieFile: imageData) + self.selfieImage = selfieImage + } catch { + handleError(error) + } + } + + private func captureLivenessImage(_ pixelBuffer: CVPixelBuffer) { + do { + guard let imageData = ImageUtils.resizePixelBufferToHeight( + pixelBuffer, + height: livenessImageSize, + orientation: .up + ) else { + throw SmileIDError.unknown("Error resizing liveness image") + } + let imageUrl = try LocalStorage.createLivenessFile(jobId: jobId, livenessFile: imageData) + livenessImages.append(imageUrl) + } catch { + handleError(error) + } + } + + private func handleError(_ error: Error) { + print(error.localizedDescription) + } - func openSettings() { + private func openSettings() { guard let settingsURL = URL(string: UIApplication.openSettingsURLString) else { return } UIApplication.shared.open(settingsURL) } + + private func toggleDebugMode() { + debugEnabled.toggle() + } +} + +// MARK: Helpers +extension SelfieViewModelV2 { + func determineDirective() { + switch faceDetectedState { + case .faceDetected: + if hasDetectedValidFace { + if let currentLivenessTask = activeLiveness.currentTask { + directive = currentLivenessTask.instruction + } else { + directive = "" + } + } else if isAcceptableBounds == .detectedFaceTooSmall { + directive = "Please bring your face closer to the camera" + } else if isAcceptableBounds == .detectedFaceTooLarge { + directive = "Please hold the camera further from your face" + } else if isAcceptableBounds == .detectedFaceOffCentre { + directive = "Please move your face to the center of the frame" + } else if !isAcceptableSelfieQuality { + directive = "Image quality is too low" + } else { + directive = "We cannot take your photo right now" + } + case .noFaceDetected: + directive = "Please look at the camera" + case .faceDetectionErrored: + directive = "An unexpected error ocurred" + } + } + + func processUpdatedFaceGeometry() { + switch faceGeometryState { + case let .faceFound(faceGeometryModel): + let boundingBox = faceGeometryModel.boundingBox + updateAcceptableBounds(using: boundingBox) + if hasDetectedValidFace && + selfieImage != nil && + activeLiveness.currentTask != nil { + activeLiveness.processFaceGeometry(faceGeometryModel) + } + case .faceNotFound: + invalidateFaceGeometryState() + case let .errored(error): + print(error.localizedDescription) + invalidateFaceGeometryState() + } + } + + func invalidateFaceGeometryState() { + // This is where we reset all the face geometry values. + isAcceptableBounds = .unknown + } + + func updateAcceptableBounds(using boundingBox: CGRect) { + boundingXDelta = abs(boundingBox.midX - faceLayoutGuideFrame.midX) + boundingYDelta = abs(boundingBox.midY - faceLayoutGuideFrame.midY) + + if boundingBox.width > 1.2 * faceLayoutGuideFrame.width { + isAcceptableBounds = .detectedFaceTooLarge + } else if boundingBox.width * 1.2 < faceLayoutGuideFrame.width { + isAcceptableBounds = .detectedFaceTooSmall + } else { + if abs(boundingBox.midX - faceLayoutGuideFrame.midX) > 50 { + isAcceptableBounds = .detectedFaceOffCentre + } else if abs(boundingBox.midY - faceLayoutGuideFrame.midY) > 50 { + isAcceptableBounds = .detectedFaceOffCentre + } else { + isAcceptableBounds = .detectedFaceAppropriateSizeAndPosition + } + } + } + + func processUpdatedFaceQuality() { + switch faceQualityState { + case let .faceFound(faceQualityModel): + // Check acceptable range here. + isAcceptableFaceQuality = faceQualityModel.quality > 0.2 + faceQualityValue = Double(faceQualityModel.quality) + case .faceNotFound: + isAcceptableFaceQuality = false + case let .errored(error): + print(error.localizedDescription) + isAcceptableFaceQuality = false + } + } + + func processUpdatedSelfieQuality() { + switch selfieQualityState { + case let .faceFound(selfieQualityModel): + // Check acceptable range here. + isAcceptableSelfieQuality = selfieQualityModel.passed > 0.5 + selfieQualityValue = selfieQualityModel + case .faceNotFound: + isAcceptableSelfieQuality = false + case let .errored(error): + print(error.localizedDescription) + isAcceptableSelfieQuality = false + } + } + + func calculateDetectedFaceValidity() { + hasDetectedValidFace = + isAcceptableBounds == .detectedFaceAppropriateSizeAndPosition && + isAcceptableFaceQuality && + isAcceptableSelfieQuality + } } diff --git a/Sources/SmileID/Classes/SelfieCapture/View/CameraView.swift b/Sources/SmileID/Classes/SelfieCapture/View/CameraView.swift index 8833a4a15..aa04685b2 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/CameraView.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/CameraView.swift @@ -3,16 +3,21 @@ import AVFoundation import Vision struct CameraView: UIViewControllerRepresentable { - typealias UIViewType = PreviewView - let preview: PreviewView + typealias UIViewType = CameraViewController + let cameraViewController: CameraViewController - init(cameraManager: CameraManager) { - preview = PreviewView(cameraManager: cameraManager) + init( + cameraManager: CameraManager, + selfieViewModel: SelfieViewModelV2? = nil + ) { + let controller = CameraViewController(cameraManager: cameraManager) + controller.faceDetector = selfieViewModel?.faceDetector + cameraViewController = controller } - func makeUIViewController(context: Context) -> PreviewView { - preview + func makeUIViewController(context: Context) -> CameraViewController { + cameraViewController } - func updateUIViewController(_ uiViewController: PreviewView, context: Context) {} + func updateUIViewController(_ uiViewController: CameraViewController, context: Context) {} } diff --git a/Sources/SmileID/Classes/SelfieCapture/View/CapturedImagesView.swift b/Sources/SmileID/Classes/SelfieCapture/View/CapturedImagesView.swift new file mode 100644 index 000000000..8a04c6162 --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/View/CapturedImagesView.swift @@ -0,0 +1,61 @@ +import SwiftUI + +struct CapturedImagesView: View { + var model: SelfieViewModelV2 + @State private var images: [UIImage] = [] + + var body: some View { + NavigationView { + ScrollView(.vertical, showsIndicators: false) { + VStack(alignment: .leading) { + if let selfieURL = model.selfieImage, + let selfieImage = loadImage(from: selfieURL) { + Image(uiImage: selfieImage) + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 148, height: 320) + } else { + Text("No selfie image") + .font(.title) + } + if !images.isEmpty { + ScrollView(.horizontal, showsIndicators: false) { + HStack { + ForEach(images, id: \.self) { image in + Image(uiImage: image) + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 148, height: 320) + } + } + } + } else { + Text("No liveness images") + .font(.title) + } + Spacer() + } + .foregroundColor(.primary) + .padding() + .frame(maxWidth: .infinity) + .navigationBarTitle(Text("Captured Images"), displayMode: .inline) + .onAppear { + loadImages() + } + } + } + } + + private func loadImages() { + images = model.livenessImages.compactMap { + loadImage(from: $0) + } + } + + private func loadImage(from url: URL) -> UIImage? { + guard let imageData = try? Data(contentsOf: url) else { + return nil + } + return UIImage(data: imageData) + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingBoxView.swift b/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingBoxView.swift new file mode 100644 index 000000000..1290e2c2b --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingBoxView.swift @@ -0,0 +1,23 @@ +import SwiftUI + +struct FaceBoundingBoxView: View { + @ObservedObject private(set) var model: SelfieViewModelV2 + + var body: some View { + switch model.faceGeometryState { + case let .faceFound(faceGeometryModel): + Rectangle() + .path(in: CGRect( + x: faceGeometryModel.boundingBox.origin.x, + y: faceGeometryModel.boundingBox.origin.y, + width: faceGeometryModel.boundingBox.width, + height: faceGeometryModel.boundingBox.height + )) + .stroke(Color.yellow, lineWidth: 2.0) + case .faceNotFound: + Rectangle().fill(Color.clear) + case .errored: + Rectangle().fill(Color.clear) + } + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/FaceLayoutGuideView.swift b/Sources/SmileID/Classes/SelfieCapture/View/FaceLayoutGuideView.swift new file mode 100644 index 000000000..b5745027b --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/View/FaceLayoutGuideView.swift @@ -0,0 +1,16 @@ +import SwiftUI + +struct FaceLayoutGuideView: View { + @ObservedObject private(set) var model: SelfieViewModelV2 + + var body: some View { + Rectangle() + .path(in: CGRect( + x: model.faceLayoutGuideFrame.minX, + y: model.faceLayoutGuideFrame.minY, + width: model.faceLayoutGuideFrame.width, + height: model.faceLayoutGuideFrame.height + )) + .stroke(Color.red) + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/LayoutGuideView.swift b/Sources/SmileID/Classes/SelfieCapture/View/LayoutGuideView.swift new file mode 100644 index 000000000..21d699e09 --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/View/LayoutGuideView.swift @@ -0,0 +1,19 @@ +import SwiftUI + +struct LayoutGuideView: View { + let layoutGuideFrame: CGRect + + var body: some View { + VStack { + Ellipse() + .stroke(.blue) + .frame(width: layoutGuideFrame.width, height: layoutGuideFrame.height) + } + } +} + +#Preview { + LayoutGuideView( + layoutGuideFrame: CGRect(x: 0, y: 0, width: 200, height: 300) + ) +} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift b/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift index 67794fed2..cc0cf214c 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift @@ -4,104 +4,131 @@ import Lottie public struct SelfieCaptureScreenV2: View { @ObservedObject var viewModel: SelfieViewModelV2 let showAttribution: Bool - - @State private var playbackMode: LottiePlaybackMode = LottiePlaybackMode.paused + @State private var showImages: Bool = false public var body: some View { - VStack(spacing: 40) { - Text(SmileIDResourcesHelper.localizedString(for: viewModel.directive)) - .font(SmileID.theme.header2) - .foregroundColor(.primary) - + GeometryReader { proxy in ZStack { - RoundedRectangle(cornerRadius: 25) - .stroke(SmileID.theme.onLight, lineWidth: 20.0) - CameraView(cameraManager: viewModel.cameraManager) - .clipShape(.rect(cornerRadius: 25)) - .onAppear { - viewModel.cameraManager.switchCamera(to: .front) + CameraView(cameraManager: viewModel.cameraManager, selfieViewModel: viewModel) + .onAppear { + viewModel.cameraManager.switchCamera(to: .front) + } + LayoutGuideView(layoutGuideFrame: viewModel.faceLayoutGuideFrame) + + if viewModel.debugEnabled { + DebugView() + } + VStack { + UserInstructionsView(model: viewModel) + Spacer() + } + } + .edgesIgnoringSafeArea(.all) + .onAppear { + viewModel.perform(action: .windowSizeDetected(proxy.frame(in: .global))) + } + .alert(item: $viewModel.unauthorizedAlert) { alert in + Alert( + title: Text(alert.title), + message: Text(alert.message ?? ""), + primaryButton: .default( + Text(SmileIDResourcesHelper.localizedString(for: "Camera.Unauthorized.PrimaryAction")), + action: { + viewModel.perform(action: .openApplicationSettings) } - CornerShapes() - RoundedRectangle(cornerRadius: 25) - .foregroundColor(.white.opacity(0.8)) - .cutout(Ellipse().scale(x: 0.8, y: 0.8)) + ), + secondaryButton: .cancel() + ) } - .frame(width: 300, height: 400) - - if showAttribution { - Image(uiImage: SmileIDResourcesHelper.SmileEmblem) + .sheet(isPresented: $showImages) { + CapturedImagesView(model: viewModel) } } - .frame(maxWidth: .infinity, maxHeight: .infinity) - .alert(item: $viewModel.unauthorizedAlert) { alert in - Alert( - title: Text(alert.title), - message: Text(alert.message ?? ""), - primaryButton: .default( - Text(SmileIDResourcesHelper.localizedString(for: "Camera.Unauthorized.PrimaryAction")), - action: { - viewModel.openSettings() + } + + // swiftlint:disable identifier_name + @ViewBuilder func DebugView() -> some View { + ZStack { + FaceBoundingBoxView(model: viewModel) + FaceLayoutGuideView(model: viewModel) + VStack(spacing: 0) { + Spacer() + Text("xDelta: \(viewModel.boundingXDelta)") + Text("yDelta: \(viewModel.boundingYDelta)") + switch viewModel.isAcceptableBounds { + case .unknown: + Text("Bounds - Unknown") + case .detectedFaceTooSmall: + Text("Bounds - Face too small") + case .detectedFaceTooLarge: + Text("Bounds - Face too large") + case .detectedFaceOffCentre: + Text("Bounds - Face off Center") + case .detectedFaceAppropriateSizeAndPosition: + Text("Bounds - Appropriate Size and Position") + } + Divider() + Text("Yaw: \(viewModel.activeLiveness.yawAngle)") + Text("Row: \(viewModel.activeLiveness.rollAngle)") + Text("Pitch: \(viewModel.activeLiveness.pitchAngle)") + Text("Quality: \(viewModel.faceQualityValue)") + Text("Fail: \(viewModel.selfieQualityValue.failed) | Pass: \(viewModel.selfieQualityValue.passed)") + .font(.subheadline.weight(.medium)) + .padding(5) + .background(Color.yellow) + .clipShape(.rect(cornerRadius: 5)) + .padding(.bottom, 10) + HStack { + switch viewModel.activeLiveness.faceDirection { + case .left: + Text("Looking Left") + case .right: + Text("Looking Right") + case .none: + Text("Looking Straight") + } + Spacer() + Button { + showImages = true + } label: { + RoundedRectangle(cornerRadius: 5) + .fill(.yellow) + .frame(width: 50, height: 50) + .overlay( + Text("\(viewModel.livenessImages.count + (viewModel.selfieImage != nil ? 1 : 0))") + .fontWeight(.medium) + .foregroundColor(.primary) + ) } - ), - secondaryButton: .cancel() - ) + } + } + .font(.footnote) + .foregroundColor(.white) + .padding(.bottom, 40) + .padding(.horizontal) } } // swiftlint:disable identifier_name - @ViewBuilder func CornerShapes() -> some View { + @ViewBuilder func CameraOverlayView() -> some View { VStack { HStack { - // Top Left Corner - CornerShape() - .stroke(SmileID.theme.success, style: StrokeStyle(lineWidth: 5)) - .frame(width: 40, height: 40) - .rotationEffect(.degrees(90)) - .offset(x: -2.0, y: -2.0) - Spacer() - // Top Right Corner - CornerShape() - .stroke(SmileID.theme.success, style: StrokeStyle(lineWidth: 5)) - .frame(width: 40, height: 40) - .rotationEffect(.degrees(180)) - .offset(x: 2.0, y: -2.0) + Text(SmileIDResourcesHelper.localizedString(for: viewModel.directive)) + .font(SmileID.theme.header2) + .foregroundColor(.primary) + .padding(.bottom) } + .background(Color.black) Spacer() HStack { - // Bottom Left Corner - CornerShape() - .stroke(SmileID.theme.success, style: StrokeStyle(lineWidth: 5)) - .frame(width: 40, height: 40) - .offset(x: -2.0, y: 2.0) - Spacer() - // Bottom Right Corner - CornerShape() - .stroke(SmileID.theme.success, style: StrokeStyle(lineWidth: 5)) - .frame(width: 40, height: 40) - .rotationEffect(.degrees(270)) - .offset(x: 2.0, y: 2.0) + Button { + viewModel.perform(action: .toggleDebugMode) + } label: { + Image(systemName: "ladybug") + .font(.title) + } + .buttonStyle(.plain) } } } } - -struct CornerShape: Shape { - let width: CGFloat = 40 - let height: CGFloat = 40 - let cornerRadius: CGFloat = 25 - - func path(in rect: CGRect) -> Path { - var path = Path() - path.move(to: CGPoint(x: 0, y: 0)) - path.addLine(to: CGPoint(x: 0, y: height - cornerRadius)) - path.addArc( - center: CGPoint(x: cornerRadius, y: height - cornerRadius), - radius: cornerRadius, - startAngle: .degrees(180), - endAngle: .degrees(90), - clockwise: true - ) - path.addLine(to: CGPoint(x: width, y: height)) - return path - } -} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift b/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift new file mode 100644 index 000000000..265b6cf21 --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift @@ -0,0 +1,12 @@ +import SwiftUI + +struct UserInstructionsView: View { + @ObservedObject var model: SelfieViewModelV2 + + var body: some View { + Text(model.directive) + .font(.title) + .foregroundColor(.white) + .padding() + } +} diff --git a/Sources/SmileID/Classes/Util.swift b/Sources/SmileID/Classes/Util.swift index 3e0e6e2f9..a05784767 100644 --- a/Sources/SmileID/Classes/Util.swift +++ b/Sources/SmileID/Classes/Util.swift @@ -24,6 +24,21 @@ public extension View { } } +extension View { + @inlinable func reverseMask( + alignment: Alignment = .center, + @ViewBuilder _ mask: () -> Mask + ) -> some View { + self.mask( + ZStack(alignment: alignment) { + Rectangle() + mask() + .blendMode(.destinationOut) + } + ) + } +} + private struct StackedShape: Shape { var bottom: Bottom var top: Top diff --git a/ML/SelfieQualityDetector.mlmodelc/analytics/coremldata.bin b/Sources/SmileID/Resources/ML/SelfieQualityDetector.mlmodelc/analytics/coremldata.bin similarity index 100% rename from ML/SelfieQualityDetector.mlmodelc/analytics/coremldata.bin rename to Sources/SmileID/Resources/ML/SelfieQualityDetector.mlmodelc/analytics/coremldata.bin diff --git a/ML/SelfieQualityDetector.mlmodelc/coremldata.bin b/Sources/SmileID/Resources/ML/SelfieQualityDetector.mlmodelc/coremldata.bin similarity index 100% rename from ML/SelfieQualityDetector.mlmodelc/coremldata.bin rename to Sources/SmileID/Resources/ML/SelfieQualityDetector.mlmodelc/coremldata.bin diff --git a/ML/SelfieQualityDetector.mlmodelc/metadata.json b/Sources/SmileID/Resources/ML/SelfieQualityDetector.mlmodelc/metadata.json similarity index 100% rename from ML/SelfieQualityDetector.mlmodelc/metadata.json rename to Sources/SmileID/Resources/ML/SelfieQualityDetector.mlmodelc/metadata.json diff --git a/ML/SelfieQualityDetector.mlmodelc/model.espresso.net b/Sources/SmileID/Resources/ML/SelfieQualityDetector.mlmodelc/model.espresso.net similarity index 100% rename from ML/SelfieQualityDetector.mlmodelc/model.espresso.net rename to Sources/SmileID/Resources/ML/SelfieQualityDetector.mlmodelc/model.espresso.net diff --git a/ML/SelfieQualityDetector.mlmodelc/model.espresso.shape b/Sources/SmileID/Resources/ML/SelfieQualityDetector.mlmodelc/model.espresso.shape similarity index 100% rename from ML/SelfieQualityDetector.mlmodelc/model.espresso.shape rename to Sources/SmileID/Resources/ML/SelfieQualityDetector.mlmodelc/model.espresso.shape diff --git a/ML/SelfieQualityDetector.mlmodelc/model.espresso.weights b/Sources/SmileID/Resources/ML/SelfieQualityDetector.mlmodelc/model.espresso.weights similarity index 100% rename from ML/SelfieQualityDetector.mlmodelc/model.espresso.weights rename to Sources/SmileID/Resources/ML/SelfieQualityDetector.mlmodelc/model.espresso.weights diff --git a/ML/SelfieQualityDetector.mlmodelc/model/coremldata.bin b/Sources/SmileID/Resources/ML/SelfieQualityDetector.mlmodelc/model/coremldata.bin similarity index 100% rename from ML/SelfieQualityDetector.mlmodelc/model/coremldata.bin rename to Sources/SmileID/Resources/ML/SelfieQualityDetector.mlmodelc/model/coremldata.bin diff --git a/ML/SelfieQualityDetector.mlmodelc/neural_network_optionals/coremldata.bin b/Sources/SmileID/Resources/ML/SelfieQualityDetector.mlmodelc/neural_network_optionals/coremldata.bin similarity index 100% rename from ML/SelfieQualityDetector.mlmodelc/neural_network_optionals/coremldata.bin rename to Sources/SmileID/Resources/ML/SelfieQualityDetector.mlmodelc/neural_network_optionals/coremldata.bin From ae9f30c288dfae87153b078dd50e6ede9532c74f Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Tue, 10 Sep 2024 13:15:07 +0100 Subject: [PATCH 05/23] run pod install --- Example/Podfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Example/Podfile.lock b/Example/Podfile.lock index d61ffa7dc..89dadd5ab 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -43,7 +43,7 @@ SPEC CHECKSUMS: lottie-ios: fcb5e73e17ba4c983140b7d21095c834b3087418 netfox: 9d5cc727fe7576c4c7688a2504618a156b7d44b7 Sentry: 96ae1dcdf01a644bc3a3b1dc279cecaf48a833fb - SmileID: cbeaf5142f11cea7a4778d7c000fa9b766c4afa2 + SmileID: f6cb330afceaa2511a4c43c3fa55db1c3ac5a0d7 SwiftLint: 3fe909719babe5537c552ee8181c0031392be933 ZIPFoundation: b8c29ea7ae353b309bc810586181fd073cb3312c From 801dbb66f11dd800fb1bbe7e96f25ebc0ea00025 Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Wed, 18 Sep 2024 10:44:23 +0100 Subject: [PATCH 06/23] run pod install. --- Example/Podfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Example/Podfile.lock b/Example/Podfile.lock index bc8afd390..0993693a4 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -43,7 +43,7 @@ SPEC CHECKSUMS: lottie-ios: fcb5e73e17ba4c983140b7d21095c834b3087418 netfox: 9d5cc727fe7576c4c7688a2504618a156b7d44b7 Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 - SmileID: ee09d74009d391e10b1576599264fdb43ef13c24 + SmileID: f5ed70647398bbb6b8e1132bb567f6b7c67e27ba SwiftLint: 3fe909719babe5537c552ee8181c0031392be933 ZIPFoundation: b8c29ea7ae353b309bc810586181fd073cb3312c From 784334116e37b650465d9ef7f4ec5f692788170c Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Wed, 18 Sep 2024 18:05:48 +0100 Subject: [PATCH 07/23] Liveness Capture Instructions Screen (#229) * implement design for selfie capture camera frame. * add lottie animation, product cells for selfie enrollment and selfie authentication with strict mode. * update new selfie view model with existing implementation * add some image utility functions, import selfie quality model and add selfie quality check to the image buffer from camera feed. * some code formatting * more code formatting * compile coreml model to generate .mlmodelc file. * automatically generate the model class file. * remove uncompiled model file. * disable lint from generated file. * make a separate class that will handle all the image processing and classification tasks for selfie quality check. * add some documentation and code formatting * fix issue with crop to face function. * introduce a new version for facedetector class and new debug design for selfie capture screen. also refactor state management and action handling for the selfie view model v2 * rename preview view to camera view controller * hook up new face detector class to the new selfie view model. * integrate the new model that takes an image input and also display the outputs in the debug view in real time. * remove lottie resources. code formatting. * Add new debug views and and also use av preview layer to calculate the bounding box * Fix issue with face bounding box. implement face size and positioning within the frame. * add instructions view to the selfie capture screen. * add image capture to the selfie view model. * Add a view to show captured images: selfie and liveness. * add active liveness manager class and move updating directive to the view model. * some clean up * remove print statements from facedetectorv2 * move face geometry check for active liveness into the liveness manager * refactor how current task is assigned and how directive for liveness task is displayed * update criteria for passing the liveness checks * fix the length of the captured image view * code formatting * add some documentation to liveness check manager class * more docs * run pod install * folder structure changes. * code formatting. * import UIkit inside Imageclassifier. * add some views for new selfie design * create a folder group for lottie files in the resources folder and add a new lottie file. * add lottie animation to liveness instructions screen. * rename selfie capture instructions view to liveness capture * Add liveness guides view with the 3 progress arcs * restore lottie view * import the liveness guide lottie file into resources. * Remove comments --- Example/Podfile.lock | 2 +- Example/SmileID.xcodeproj/project.pbxproj | 118 +++++++++--------- SmileID.podspec | 2 +- SmileID.xcodeproj/project.pbxproj | 14 +++ .../LivenessCaptureInstructionsView.swift | 40 ++++++ .../OrchestratedSelfieCaptureScreenV2.swift | 2 +- .../View/SelfieCaptureScreenV2.swift | 33 ++++- .../Localization/en.lproj/Localizable.strings | 2 + .../instructions_no_progress.lottie | Bin 0 -> 2808 bytes .../LottieFiles/liveness_guides.lottie | Bin 0 -> 2461 bytes 10 files changed, 145 insertions(+), 68 deletions(-) create mode 100644 Sources/SmileID/Classes/SelfieCapture/View/LivenessCaptureInstructionsView.swift create mode 100644 Sources/SmileID/Resources/LottieFiles/instructions_no_progress.lottie create mode 100644 Sources/SmileID/Resources/LottieFiles/liveness_guides.lottie diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 0993693a4..8dbb9bce1 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -43,7 +43,7 @@ SPEC CHECKSUMS: lottie-ios: fcb5e73e17ba4c983140b7d21095c834b3087418 netfox: 9d5cc727fe7576c4c7688a2504618a156b7d44b7 Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 - SmileID: f5ed70647398bbb6b8e1132bb567f6b7c67e27ba + SmileID: 8593ddd193b56a33b92ace62a28a7b2f1060d5f4 SwiftLint: 3fe909719babe5537c552ee8181c0031392be933 ZIPFoundation: b8c29ea7ae353b309bc810586181fd073cb3312c diff --git a/Example/SmileID.xcodeproj/project.pbxproj b/Example/SmileID.xcodeproj/project.pbxproj index 39ddd3e2b..7f8e462af 100644 --- a/Example/SmileID.xcodeproj/project.pbxproj +++ b/Example/SmileID.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 1BAF84DC5413131F42685CC5 /* Pods_SmileID_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5333B5310E298A6D6DD55B3A /* Pods_SmileID_Example.framework */; }; 1E59E33E2BA1E64C00D2BAD2 /* PartnerParamsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E59E33D2BA1E64C00D2BAD2 /* PartnerParamsTests.swift */; }; 1E60ED372A29C306002695FF /* HomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E60ED322A29C306002695FF /* HomeViewController.swift */; }; 1E60ED382A29C306002695FF /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E60ED332A29C306002695FF /* Constants.swift */; }; @@ -71,8 +72,7 @@ 91CB21A52AC10C61005AEBF5 /* NavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CB21A42AC10C61005AEBF5 /* NavigationBar.swift */; }; 91D9FBC42AB481FE00A8D36B /* PollingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D9FBC32AB481FE00A8D36B /* PollingTests.swift */; }; 91D9FBD52AB8AB4700A8D36B /* CalculateSignatureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D9FBD42AB8AB4700A8D36B /* CalculateSignatureTests.swift */; }; - CF6C5B9C611F1E82DC393276 /* Pods_SmileID_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1BD6BC67E3ED75E00105F7B /* Pods_SmileID_Example.framework */; }; - D852C426DDFC5A53E45164A7 /* Pods_SmileID_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7429B58F2AFC96534131127 /* Pods_SmileID_Tests.framework */; }; + DF8FE27EB6EFA41E25E5DB1A /* Pods_SmileID_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD7560E9E8222DBBB282E92D /* Pods_SmileID_Tests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -86,7 +86,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0374B5DE135D00E9C63222D2 /* Pods-SmileID_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.release.xcconfig"; sourceTree = ""; }; 1E59E33D2BA1E64C00D2BAD2 /* PartnerParamsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PartnerParamsTests.swift; sourceTree = ""; }; 1E60ED322A29C306002695FF /* HomeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; 1E60ED332A29C306002695FF /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; @@ -118,6 +117,7 @@ 20C360C72C454C130008DBDE /* RootViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewModel.swift; sourceTree = ""; }; 20DFA0EB2C21917100AC2AE7 /* View+TextSelection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+TextSelection.swift"; sourceTree = ""; }; 20F3D6F52C25F5C100B32751 /* SmileID.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SmileID.xcdatamodel; sourceTree = ""; }; + 5333B5310E298A6D6DD55B3A /* Pods_SmileID_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5829A8BF2BC7429A001C1E7E /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 585BE4872AC7748E0091DDD8 /* RestartableTimerTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestartableTimerTest.swift; sourceTree = ""; }; 58C5F1D72B05925800A6080C /* BiometricKycWithIdInputScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BiometricKycWithIdInputScreen.swift; sourceTree = ""; }; @@ -133,7 +133,7 @@ 624777CF2B0CDC9F00952842 /* EnhancedKycWithIdInputScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnhancedKycWithIdInputScreen.swift; sourceTree = ""; }; 62F6766E2B0D173600417419 /* EnhancedKycWithIdInputScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnhancedKycWithIdInputScreenViewModel.swift; sourceTree = ""; }; 62F676702B0E00E800417419 /* EnhancedKycResultDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnhancedKycResultDelegate.swift; sourceTree = ""; }; - 6A35EC7327A28317BD3691DB /* Pods-SmileID_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.debug.xcconfig"; sourceTree = ""; }; + 671096540C034CDAC1A40FCF /* Pods-SmileID_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.release.xcconfig"; sourceTree = ""; }; 6AC980584C522B17A099E098 /* Util.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Util.swift; sourceTree = ""; }; 6AC980D3CB9C357AD1B13D80 /* IdInfoInputScreen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdInfoInputScreen.swift; sourceTree = ""; }; 6AC982147640002B81F72DEC /* SettingsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; @@ -154,13 +154,13 @@ 91CB21A42AC10C61005AEBF5 /* NavigationBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBar.swift; sourceTree = ""; }; 91D9FBC32AB481FE00A8D36B /* PollingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollingTests.swift; sourceTree = ""; }; 91D9FBD42AB8AB4700A8D36B /* CalculateSignatureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculateSignatureTests.swift; sourceTree = ""; }; + 93E622318904ECA0247C9A16 /* Pods-SmileID_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.release.xcconfig"; sourceTree = ""; }; 94E7560A47E255DD8215C183 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 9755B6A19CF28DE212F24C83 /* SmileID.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = SmileID.podspec; path = ../SmileID.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - B7429B58F2AFC96534131127 /* Pods_SmileID_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A9535C8B07285882BA05488E /* Pods-SmileID_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.debug.xcconfig"; sourceTree = ""; }; C8CD2E3DB817D8C6334E9240 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; - D1BD6BC67E3ED75E00105F7B /* Pods_SmileID_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D6155C4F90D148251B9B9077 /* Pods-SmileID_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.release.xcconfig"; sourceTree = ""; }; - F88A959ED467AA6482744E51 /* Pods-SmileID_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.debug.xcconfig"; sourceTree = ""; }; + DD7560E9E8222DBBB282E92D /* Pods_SmileID_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FECD914E873DDF25CC04FCD7 /* Pods-SmileID_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -168,7 +168,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CF6C5B9C611F1E82DC393276 /* Pods_SmileID_Example.framework in Frameworks */, + 1BAF84DC5413131F42685CC5 /* Pods_SmileID_Example.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -176,13 +176,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D852C426DDFC5A53E45164A7 /* Pods_SmileID_Tests.framework in Frameworks */, + DF8FE27EB6EFA41E25E5DB1A /* Pods_SmileID_Tests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 092FA8C7B52EB8CE3DAD5B01 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5333B5310E298A6D6DD55B3A /* Pods_SmileID_Example.framework */, + DD7560E9E8222DBBB282E92D /* Pods_SmileID_Tests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 1E59E33C2BA1E5BF00D2BAD2 /* Model */ = { isa = PBXGroup; children = ( @@ -297,7 +306,7 @@ 607FACE81AFB9204008FA782 /* Tests */, 607FACD11AFB9204008FA782 /* Products */, 828BF541E068101B2E6ED55F /* Pods */, - B5C101CE2863A6DEA0960B58 /* Frameworks */, + 092FA8C7B52EB8CE3DAD5B01 /* Frameworks */, ); sourceTree = ""; }; @@ -403,10 +412,10 @@ 828BF541E068101B2E6ED55F /* Pods */ = { isa = PBXGroup; children = ( - F88A959ED467AA6482744E51 /* Pods-SmileID_Example.debug.xcconfig */, - 0374B5DE135D00E9C63222D2 /* Pods-SmileID_Example.release.xcconfig */, - 6A35EC7327A28317BD3691DB /* Pods-SmileID_Tests.debug.xcconfig */, - D6155C4F90D148251B9B9077 /* Pods-SmileID_Tests.release.xcconfig */, + FECD914E873DDF25CC04FCD7 /* Pods-SmileID_Example.debug.xcconfig */, + 671096540C034CDAC1A40FCF /* Pods-SmileID_Example.release.xcconfig */, + A9535C8B07285882BA05488E /* Pods-SmileID_Tests.debug.xcconfig */, + 93E622318904ECA0247C9A16 /* Pods-SmileID_Tests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -443,15 +452,6 @@ path = ../../Tests/Mocks; sourceTree = ""; }; - B5C101CE2863A6DEA0960B58 /* Frameworks */ = { - isa = PBXGroup; - children = ( - D1BD6BC67E3ED75E00105F7B /* Pods_SmileID_Example.framework */, - B7429B58F2AFC96534131127 /* Pods_SmileID_Tests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -459,13 +459,13 @@ isa = PBXNativeTarget; buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SmileID_Example" */; buildPhases = ( - BF04E59E0BBAEF08E0F6670F /* [CP] Check Pods Manifest.lock */, + 8A9D86814FE70DD58E5BD14A /* [CP] Check Pods Manifest.lock */, 607FACCC1AFB9204008FA782 /* Sources */, 917D79282AA8024400FA6624 /* SwiftLint */, 607FACCD1AFB9204008FA782 /* Frameworks */, 607FACCE1AFB9204008FA782 /* Resources */, C0BE335FFECD4DF6892309F3 /* Upload Debug Symbols to Sentry */, - 100910DDFF47A40C3D218CFE /* [CP] Embed Pods Frameworks */, + B7BC686F0A5581A888A79DD9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -480,7 +480,7 @@ isa = PBXNativeTarget; buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SmileID_Tests" */; buildPhases = ( - 0A095CF74E534671ED6B5831 /* [CP] Check Pods Manifest.lock */, + C406B782EB33AE5BF180A93B /* [CP] Check Pods Manifest.lock */, 607FACE11AFB9204008FA782 /* Sources */, 607FACE21AFB9204008FA782 /* Frameworks */, 607FACE31AFB9204008FA782 /* Resources */, @@ -563,7 +563,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0A095CF74E534671ED6B5831 /* [CP] Check Pods Manifest.lock */ = { + 8A9D86814FE70DD58E5BD14A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -578,14 +578,32 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SmileID_Tests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-SmileID_Example-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 100910DDFF47A40C3D218CFE /* [CP] Embed Pods Frameworks */ = { + 917D79282AA8024400FA6624 /* SwiftLint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = SwiftLint; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\ncd ../Sources\n\"${PODS_ROOT}/SwiftLint/swiftlint\"\n"; + }; + B7BC686F0A5581A888A79DD9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -615,25 +633,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 917D79282AA8024400FA6624 /* SwiftLint */ = { + C0BE335FFECD4DF6892309F3 /* Upload Debug Symbols to Sentry */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( + "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}", ); - name = SwiftLint; - outputFileListPaths = ( - ); + name = "Upload Debug Symbols to Sentry"; outputPaths = ( ); - runOnlyForDeploymentPostprocessing = 0; + runOnlyForDeploymentPostprocessing = 1; shellPath = /bin/sh; - shellScript = "# Type a script or drag a script file from your workspace to insert its path.\ncd ../Sources\n\"${PODS_ROOT}/SwiftLint/swiftlint\"\n"; + shellScript = "# This script is responsable to upload debug symbols and source context for Sentry.\nif which sentry-cli >/dev/null; then\nexport SENTRY_ORG=smile-identity\nexport SENTRY_PROJECT=ios\nERROR=$(sentry-cli debug-files upload --include-sources \"$DWARF_DSYM_FOLDER_PATH\" 2>&1 >/dev/null)\nif [ ! $? -eq 0 ]; then\necho \"warning: sentry-cli - $ERROR\"\nfi\nelse\necho \"warning: sentry-cli not installed, download from https://github.com/getsentry/sentry-cli/releases\"\nfi\n"; }; - BF04E59E0BBAEF08E0F6670F /* [CP] Check Pods Manifest.lock */ = { + C406B782EB33AE5BF180A93B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -648,28 +663,13 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SmileID_Example-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-SmileID_Tests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C0BE335FFECD4DF6892309F3 /* Upload Debug Symbols to Sentry */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}", - ); - name = "Upload Debug Symbols to Sentry"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 1; - shellPath = /bin/sh; - shellScript = "# This script is responsable to upload debug symbols and source context for Sentry.\nif which sentry-cli >/dev/null; then\nexport SENTRY_ORG=smile-identity\nexport SENTRY_PROJECT=ios\nERROR=$(sentry-cli debug-files upload --include-sources \"$DWARF_DSYM_FOLDER_PATH\" 2>&1 >/dev/null)\nif [ ! $? -eq 0 ]; then\necho \"warning: sentry-cli - $ERROR\"\nfi\nelse\necho \"warning: sentry-cli not installed, download from https://github.com/getsentry/sentry-cli/releases\"\nfi\n"; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -879,7 +879,7 @@ }; 607FACF01AFB9204008FA782 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F88A959ED467AA6482744E51 /* Pods-SmileID_Example.debug.xcconfig */; + baseConfigurationReference = FECD914E873DDF25CC04FCD7 /* Pods-SmileID_Example.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "Apple Development"; @@ -912,7 +912,7 @@ }; 607FACF11AFB9204008FA782 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0374B5DE135D00E9C63222D2 /* Pods-SmileID_Example.release.xcconfig */; + baseConfigurationReference = 671096540C034CDAC1A40FCF /* Pods-SmileID_Example.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "Apple Development"; @@ -944,7 +944,7 @@ }; 607FACF31AFB9204008FA782 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6A35EC7327A28317BD3691DB /* Pods-SmileID_Tests.debug.xcconfig */; + baseConfigurationReference = A9535C8B07285882BA05488E /* Pods-SmileID_Tests.debug.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; @@ -976,7 +976,7 @@ }; 607FACF41AFB9204008FA782 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D6155C4F90D148251B9B9077 /* Pods-SmileID_Tests.release.xcconfig */; + baseConfigurationReference = 93E622318904ECA0247C9A16 /* Pods-SmileID_Tests.release.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; diff --git a/SmileID.podspec b/SmileID.podspec index ce1cbfbb1..94b279387 100644 --- a/SmileID.podspec +++ b/SmileID.podspec @@ -12,6 +12,6 @@ Pod::Spec.new do |s| s.swift_version = '5.5' s.source_files = 'Sources/SmileID/Classes/**/*' s.resource_bundles = { - 'SmileID_SmileID' => ['Sources/SmileID/Resources/**/*.{storyboard,storyboardc,xib,nib,xcassets,json,png,ttf,lproj,xcprivacy,mlmodelc}'] + 'SmileID_SmileID' => ['Sources/SmileID/Resources/**/*.{storyboard,storyboardc,xib,nib,xcassets,json,png,ttf,lproj,xcprivacy,mlmodelc,lottie}'] } end diff --git a/SmileID.xcodeproj/project.pbxproj b/SmileID.xcodeproj/project.pbxproj index 014e6eb71..267e11f0c 100644 --- a/SmileID.xcodeproj/project.pbxproj +++ b/SmileID.xcodeproj/project.pbxproj @@ -64,6 +64,7 @@ 1F33A24780AE0C89E89EDB3A /* NavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D2BD3354878490B62F04FB /* NavigationBar.swift */; }; 1F57B39849B01BB6E26B7F3B /* DocumentCaptureInstructionsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 540FE72848132B16535C7281 /* DocumentCaptureInstructionsScreen.swift */; }; 1F76F767069D4436C8AF6074 /* Injected.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EB66DD1BDD5A4C66AC800B3 /* Injected.swift */; }; + 20F003CB2C873B6900672247 /* instructions_no_progress.lottie in Resources */ = {isa = PBXBuildFile; fileRef = 20F003C72C873B6900672247 /* instructions_no_progress.lottie */; }; 20991A4E2C8625EE00C0B13E /* SelfieQualityDetector.mlmodelc in Resources */ = {isa = PBXBuildFile; fileRef = 20991A4C2C8625EE00C0B13E /* SelfieQualityDetector.mlmodelc */; }; 216916E16C0F6C9CBD698C92 /* ImageExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C1C11D7A28442BD26144875 /* ImageExtensions.swift */; }; 2228D942A74ACE036BCC6AC3 /* OrchestratedDocumentVerificationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A389AF9529CF6ADA5A11D4D6 /* OrchestratedDocumentVerificationViewModel.swift */; }; @@ -768,6 +769,8 @@ 20CFB81122DB79C093EA7AF3 /* Util.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Util.swift; path = Sources/SmileID/Classes/Util.swift; sourceTree = ""; }; 20D1376E9583C6F256F44751 /* OrchestratedBiometricKycScreen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OrchestratedBiometricKycScreen.swift; path = Sources/SmileID/Classes/BiometricKYC/OrchestratedBiometricKycScreen.swift; sourceTree = ""; }; 20DD4040D9134AA8DCB36716 /* NetworkUtil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkUtil.swift; path = Sources/SmileID/Classes/Networking/NetworkUtil.swift; sourceTree = ""; }; + 20F003C72C873B6900672247 /* instructions_no_progress.lottie */ = {isa = PBXFileReference; lastKnownFileType = file; path = instructions_no_progress.lottie; sourceTree = ""; }; + 20F003C92C873B6900672247 /* SelfieQualityDetector.mlmodelc */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = SelfieQualityDetector.mlmodelc; sourceTree = ""; }; 20FF40672D680434F3B889C4 /* HTTPHeader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHeader.swift; path = Sources/SmileID/Classes/Networking/HTTPHeader.swift; sourceTree = ""; }; 210B15F79B188F3B01A5B1D1 /* FontType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FontType.swift; path = Sources/SmileID/Classes/Helpers/FontType.swift; sourceTree = ""; }; 21305E202DCA6666BB4D95DD /* FontType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FontType.swift; path = Sources/SmileID/Classes/Helpers/FontType.swift; sourceTree = ""; }; @@ -6524,6 +6527,7 @@ 1EEFC2BF2B58412300B8A934 /* Resources */ = { isa = PBXGroup; children = ( + 20F003C82C873B6900672247 /* LottieFiles */, 20991A4D2C8625EE00C0B13E /* ML */, 5829A8C42BC8494F001C1E7E /* PrivacyInfo.xcprivacy */, 1EEFC2C02B58412300B8A934 /* Media.xcassets */, @@ -6601,6 +6605,14 @@ path = DependencyContainer; sourceTree = ""; }; + 20F003C82C873B6900672247 /* LottieFiles */ = { + isa = PBXGroup; + children = ( + 20F003C72C873B6900672247 /* instructions_no_progress.lottie */, + ); + path = LottieFiles; + sourceTree = ""; + }; 20991A4D2C8625EE00C0B13E /* ML */ = { isa = PBXGroup; children = ( @@ -6740,11 +6752,13 @@ 1EEFC2C72B58412300B8A934 /* .swiftlint.yml in Resources */, 5829A8C52BC8494F001C1E7E /* PrivacyInfo.xcprivacy in Resources */, 1EEFC3342B58412400B8A934 /* Localizable.strings in Resources */, + 20F003CB2C873B6900672247 /* instructions_no_progress.lottie in Resources */, 1EEFC3312B58412400B8A934 /* Media.xcassets in Resources */, 20991A4E2C8625EE00C0B13E /* SelfieQualityDetector.mlmodelc in Resources */, 1EEFC3332B58412400B8A934 /* Epilogue-Bold.ttf in Resources */, 1EEFC2E92B58412300B8A934 /* ARViewController.xib in Resources */, 1EEFC3322B58412400B8A934 /* Epilogue-Medium.ttf in Resources */, + 20F003CC2C873B6900672247 /* SelfieQualityDetector.mlmodelc in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Sources/SmileID/Classes/SelfieCapture/View/LivenessCaptureInstructionsView.swift b/Sources/SmileID/Classes/SelfieCapture/View/LivenessCaptureInstructionsView.swift new file mode 100644 index 000000000..07363910c --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/View/LivenessCaptureInstructionsView.swift @@ -0,0 +1,40 @@ +import Lottie +import SwiftUI + +public struct LivenessCaptureInstructionsView: View { + let showAttribution: Bool + let onInstructionsAcknowledged: () -> Void + + public var body: some View { + VStack { + ZStack { + LottieView { + try await DotLottieFile.named("instructions_no_progress", bundle: SmileIDResourcesHelper.bundle) + } + .playing(loopMode: .loop) + .frame(width: 235, height: 235) + } + .padding(.top, 100) + Spacer() + Text(SmileIDResourcesHelper.localizedString(for: "Instructions.SelfieCapture")) + .multilineTextAlignment(.center) + .font(SmileID.theme.header4) + .foregroundColor(SmileID.theme.tertiary) + + Spacer() + + VStack(spacing: 20) { + SmileButton( + title: "Action.GetStarted", + clicked: onInstructionsAcknowledged + ) + + if showAttribution { + Image(uiImage: SmileIDResourcesHelper.SmileEmblem) + } + } + } + .padding(.horizontal, 24) + .padding(.bottom, 40) + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift b/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift index 1b3326ed9..879f8049b 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift @@ -43,7 +43,7 @@ public struct OrchestratedSelfieCaptureScreenV2: View { public var body: some View { if showInstructions, !acknowledgedInstructions { - SmartSelfieInstructionsScreen(showAttribution: showAttribution) { + LivenessCaptureInstructionsView(showAttribution: showAttribution) { acknowledgedInstructions = true } } else { diff --git a/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift b/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift index cc0cf214c..bb3550f42 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift @@ -1,5 +1,5 @@ -import SwiftUI import Lottie +import SwiftUI public struct SelfieCaptureScreenV2: View { @ObservedObject var viewModel: SelfieViewModelV2 @@ -13,15 +13,36 @@ public struct SelfieCaptureScreenV2: View { .onAppear { viewModel.cameraManager.switchCamera(to: .front) } - LayoutGuideView(layoutGuideFrame: viewModel.faceLayoutGuideFrame) - if viewModel.debugEnabled { - DebugView() - } + Rectangle() + .fill(.white) + .reverseMask { + Circle() + .frame(width: 260, height: 260) + } + + // Face Bounds Indicator + Circle() + .stroke(.red, lineWidth: 10) + .frame(width: 275, height: 275) + .hidden() + Circle() + .fill(.black.opacity(0.7)) + .frame(width: 260, height: 260) + .overlay( + Text("Lottie animation\ngoes here.") + .fontWeight(.medium) + .foregroundColor(.white) + ) VStack { - UserInstructionsView(model: viewModel) + Text(viewModel.directive) + .multilineTextAlignment(.center) + .font(SmileID.theme.header1) + .foregroundColor(SmileID.theme.accent) + .padding(.top, 80) Spacer() } + .padding() } .edgesIgnoringSafeArea(.all) .onAppear { diff --git a/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings b/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings index 44456b528..91fbaae8a 100644 --- a/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings +++ b/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings @@ -22,6 +22,7 @@ "Instructions.PutFaceInOval" = "Position your face in the oval"; "Instructions.Quality" = "Move to well lit area and clear face of obstructions"; "Instructions.Start" = "Put your face inside the oval frame and wait until it turns green"; +"Instructions.SelfieCapture" = "Position you head in camera frame. \nThen move in the direction that is indicated"; "Instructions.Document.Front.Header" = "Submit Front of ID"; "Instructions.Document.Front.Callout" = "We'll use it to verify your identity. Please follow the instructions below"; "Instructions.Document.GoodLightBody" = "Make sure your ID image is taken in a well-lit environment. Ensure the ID is clear and visible."; @@ -45,6 +46,7 @@ "Action.TakePhoto" = "Take Photo"; "Action.UploadPhoto" = "Upload Photo"; "Action.Skip" = "Skip back of ID"; +"Action.GetStarted" = "Get Started"; "Camera.AgentMode" = "Agent Mode"; "Camera.Unauthorized.Title" = "Allow access to your camera"; diff --git a/Sources/SmileID/Resources/LottieFiles/instructions_no_progress.lottie b/Sources/SmileID/Resources/LottieFiles/instructions_no_progress.lottie new file mode 100644 index 0000000000000000000000000000000000000000..3207aaa70ce1fe8201f4faaf8e937c22245d99a4 GIT binary patch literal 2808 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 literal 0 HcmV?d00001 diff --git a/Sources/SmileID/Resources/LottieFiles/liveness_guides.lottie b/Sources/SmileID/Resources/LottieFiles/liveness_guides.lottie new file mode 100644 index 0000000000000000000000000000000000000000..c3ed55e2442da0552e25fcf283004813a73284ec GIT binary patch literal 2461 zcmZuzdpHx^AKx%d&2Y2}i%pC#9jC}HLuA(zD1WXz@+(%N#JGIP%*Mdea&>B2D0 z61hYfx@k+fU-L>5r77>!@2TJKc{=Ag&pGGw`Fte$Qa5G=9hd|$SNg{8HS;VB$CKs7=lBV?gtzq5oSK@Q=E11UO>j8UR3W003C6*6$SmvzpnD z^2}UBlKSivVpklS4DSha?oIp1qo}$m5;Ob{O=0I-STj<&U%`--&vf?b{OYlmy9YbS zNsX}RMFg8Y|9VLCRqH^j%aFSpSC`3beOGPDh4%wRb0Z;p7DPXIp;#ZyyiegU^N5q^^ifFwGE@a zIw}mfjJ%eTR@0O*pn73Lr)4>jySabTYfL4{c;xhsGaKWNIGOfpt&}!#eMic9xoQj8 zwU8XRdC~>N%;xQC77X>g{71#*N6O=fkNZkNNeVi;hR+F4_6#6qO!60}K82j<&@{bk z`#r{9i3nN#DluPl)@C~rtr^E2GSKEX$SdZjmQ=NOp7sRPc!rE+vX=~&(vHu+*MW%) zi&JYfx+z}5JL+-Q0_Grei}eLhofaFq9t)I_B>pL6g2vSMw%nkl@1LGuHEItyoDzM+ zGuyCdVf_Wfy}+eoM;}t2@o=uY^8|6=qo zDNip5KG+JARAW?L#a5g@Pj^sH1NfCMWPd{n*}bn|K|}1#Qzb zqxT1R4xY29Dv|2FY}zO7u2W-!bx2J)>J&;aB`DM{nnb-{k~347u{)7vIE>X>$@dx zOs#(b$kw4>U(xWnC9_-vlC)Y*yCsyesxg6b=-vKZ&USZzHu3A~uU_S(?hR_YT(-Bo znVT7&>a4{?T~mcBnP?~|Npjnr$&ETdjPJa;bnRU$d)|Pp>AfJ96A>YfZ%a&+qD0;mJ*Q1erLhZLV8&rU@<*^zpqXf>0l;+~Ao zuJ*~W5slq#cHzD1X-Aa|Hh35*t5uJIzmd?gFBIoZ5FFTAoZHAKL&^PZ_qO6A6+%Qq-`ZE$OQVldQb@GCyNh|dWmv5@ zJ$bb@LzlXOOLHE&KG&Y#Ir+IjYMSe6$pRasp~huC=B_iObV5VUZ(8&4q%hzmx_7Yd z#Zr&l5t-RQ#aN$r`F$Dv9{ty9-KVYDwZ813omEejqrvjQOgNhQs&44JsZe6R%r#LB zLYQ`_j??ncdY*}m&#P5aL^$>K=%g!(^q_9m62M0}c@Rfrt*zJl$mZ*pTRdY?iB`{n z1-D}cRi&UJa(joRi#;&2^0CWGys~aLJk75bU+yIuLioUtzX|bqwpQU?v0~zHmLDb5poi*$pro zTT*@S@6s^VCTll+`LT9IfhK#78np&ad))xEotWS^o zX{n#nOgcKSIb61BaHx>h^BHgp4j8P~Ln2&r6Cij^4^0Y zOUf9mXo*Sxd$j&AyfzDZXa-U@Nl|J#LP(_kj4raR~?*mUs>cAn%5wa4j zel6&OtU@7nzXt#Y@=D~C#OvEml)R%t-+)zNJG~#I3)L+aOsNrbIE=uK zqTez(pX>HLRJybe;?yT{9SntLhWq9<Z^k1{^0(z>3y-Fq zHoPg@OITc+y~H0!t2qIR9=yFT(VgnsAAdYIR2XG3e^Df?IzFDl1$8fj^+owbXVi8) z+K{cfMVbC85psbWYO~qVae&{`mB-L1 Date: Fri, 20 Sep 2024 11:34:49 +0100 Subject: [PATCH 08/23] run pod install. --- Example/Podfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 4b638dabb..b66c542af 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -51,7 +51,7 @@ SPEC CHECKSUMS: lottie-ios: fcb5e73e17ba4c983140b7d21095c834b3087418 netfox: 9d5cc727fe7576c4c7688a2504618a156b7d44b7 Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 - SmileID: 41b6c7ea0ec44116c43e94a1221acde297bd3b08 + SmileID: 480b1dac78c52f0e2d542646649cd764a869785f SwiftLint: 3fe909719babe5537c552ee8181c0031392be933 ZIPFoundation: b8c29ea7ae353b309bc810586181fd073cb3312c From e26f608549e6760f2ff4870ced7d2d82a429ee06 Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Thu, 26 Sep 2024 10:10:07 +0100 Subject: [PATCH 09/23] run pod install --- Example/Podfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Example/Podfile.lock b/Example/Podfile.lock index c66eab95d..8662eba2d 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -51,7 +51,7 @@ SPEC CHECKSUMS: lottie-ios: fcb5e73e17ba4c983140b7d21095c834b3087418 netfox: 9d5cc727fe7576c4c7688a2504618a156b7d44b7 Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 - SmileID: 6222ec839420b69917ae23ea11876d78d2529620 + SmileID: 1139c57f9a38a0b3540b9807b2bfe15ee01974dd SwiftLint: 3fe909719babe5537c552ee8181c0031392be933 ZIPFoundation: b8c29ea7ae353b309bc810586181fd073cb3312c From a4b7ffe44c8b5f3b2047c324397d67cff13977ff Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Thu, 26 Sep 2024 15:48:08 +0100 Subject: [PATCH 10/23] New Camera UI (#235) * improve code and file structure * add the liveness guides * add some config values to liveness guides view. * change lottie animation frame * run pod install * setup animation progress time for the liiveness guide lottie animation. * refactor the components of liveness guides view. --- .../SelfieCapture/View/ArcProgressView.swift | 69 +++++++++++++++++++ .../SelfieCapture/View/FaceBoundingArea.swift | 43 ++++++++++++ .../SelfieCapture/View/LayoutGuideView.swift | 6 -- .../View/LivenessGuidesView.swift | 29 ++++++++ .../View/SelfieCaptureScreenV2.swift | 36 ++++------ .../View/UserInstructionsView.swift | 16 +++-- 6 files changed, 166 insertions(+), 33 deletions(-) create mode 100644 Sources/SmileID/Classes/SelfieCapture/View/ArcProgressView.swift create mode 100644 Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift create mode 100644 Sources/SmileID/Classes/SelfieCapture/View/LivenessGuidesView.swift diff --git a/Sources/SmileID/Classes/SelfieCapture/View/ArcProgressView.swift b/Sources/SmileID/Classes/SelfieCapture/View/ArcProgressView.swift new file mode 100644 index 000000000..fd3f26084 --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/View/ArcProgressView.swift @@ -0,0 +1,69 @@ +import SwiftUI + +struct ArcProgressView: View { + // Configuration Properties + var strokeLineWidth: CGFloat = 12 + var arcSize: CGSize = .init(width: 290, height: 290) + var progressTrackColor: Color = .gray.opacity(0.3) + var progressFillColor: Color = .green + + // View Properties + var progress: CGFloat + var totalSteps: Int = 10 + var minValue: CGFloat = 0 + var maxValue: CGFloat = 1.0 + var clockwise: Bool = false + + var body: some View { + ZStack { + ArcShape(clockwise: clockwise) + .stroke( + style: StrokeStyle( + lineWidth: strokeLineWidth, + lineCap: .round, + lineJoin: .round + ) + ) + .foregroundColor(progressTrackColor) + .frame(width: arcSize.width, height: arcSize.height) + ArcShape(clockwise: clockwise) + .trim(from: 0.0, to: normalizedProgress) + .stroke( + style: StrokeStyle( + lineWidth: strokeLineWidth, + lineCap: .round, + lineJoin: .round + ) + ) + .animation(.linear, value: normalizedProgress) + .foregroundColor(progressFillColor) + .frame(width: arcSize.width, height: arcSize.height) + } + } + + private var normalizedProgress: CGFloat { + (progress - minValue) / (maxValue - minValue) + } + + private var remainingSteps: Int { + return max(0, totalSteps - Int(progress)) + } +} + +struct ArcShape: Shape { + var startAngle: CGFloat = 180 + var endAngle: CGFloat = 120 + var clockwise: Bool = false + + func path(in rect: CGRect) -> Path { + var path = Path() + path.addArc( + center: CGPoint(x: rect.midX, y: rect.midY), + radius: rect.width / 2, + startAngle: Angle(degrees: startAngle), + endAngle: Angle(degrees: clockwise ? endAngle : -endAngle), + clockwise: clockwise + ) + return path + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift b/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift new file mode 100644 index 000000000..b43c6c1a1 --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift @@ -0,0 +1,43 @@ +import Lottie +import SwiftUI + +struct FaceBoundingArea: View { + @State private var playbackMode: LottiePlaybackMode = .paused + + // Constants + private let lookRightAnimationRange: ClosedRange = 0...0.4 + private let lookLeftAnimationRange: ClosedRange = 0.4...0.64 + private let lookUpAnimationRange: ClosedRange = 0.64...1.0 + + var body: some View { + ZStack { + // Face Bounds Indicator + Circle() + .stroke(.red, lineWidth: 10) + .frame(width: 275, height: 275) + Circle() + .fill(.black.opacity(0.5)) + .frame(width: 260, height: 260) + .overlay( + LottieView { + try await DotLottieFile.named("liveness_guides", bundle: SmileIDResourcesHelper.bundle) + } + .playbackMode(playbackMode) + .frame(width: 224, height: 224) + ) + } + .onAppear { + playbackMode = getPlaybackMode() + } + } + + private func getPlaybackMode() -> LottiePlaybackMode { + return .playing( + .fromProgress( + lookUpAnimationRange.lowerBound, + toProgress: lookUpAnimationRange.upperBound, + loopMode: .autoReverse + ) + ) + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/LayoutGuideView.swift b/Sources/SmileID/Classes/SelfieCapture/View/LayoutGuideView.swift index 21d699e09..dd3f33e62 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/LayoutGuideView.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/LayoutGuideView.swift @@ -11,9 +11,3 @@ struct LayoutGuideView: View { } } } - -#Preview { - LayoutGuideView( - layoutGuideFrame: CGRect(x: 0, y: 0, width: 200, height: 300) - ) -} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/LivenessGuidesView.swift b/Sources/SmileID/Classes/SelfieCapture/View/LivenessGuidesView.swift new file mode 100644 index 000000000..ec9a234fa --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/View/LivenessGuidesView.swift @@ -0,0 +1,29 @@ +import SwiftUI + +struct LivenessGuidesView: View { + @Binding var topArcProgress: CGFloat + @Binding var rightArcProgress: CGFloat + @Binding var leftArcProgress: CGFloat + + var body: some View { + ZStack { + // Top Arc + ArcProgressView(progress: topArcProgress) + .rotationEffect(Angle(degrees: 60)) + .opacity(topArcProgress > 0.0 ? 1.0 : 0.0) + .animation(.easeInOut(duration: 0.2), value: topArcProgress) + + // Right Arc + ArcProgressView(progress: rightArcProgress, clockwise: true) + .rotationEffect(Angle(degrees: -150)) + .opacity(rightArcProgress > 0.0 ? 1.0 : 0.0) + .animation(.easeInOut(duration: 0.2), value: rightArcProgress) + + // Left Arc + ArcProgressView(progress: leftArcProgress) + .rotationEffect(Angle(degrees: -30)) + .opacity(leftArcProgress > 0.0 ? 1.0 : 0.0) + .animation(.easeInOut(duration: 0.2), value: leftArcProgress) + } + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift b/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift index bb3550f42..3d1730d35 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift @@ -6,14 +6,20 @@ public struct SelfieCaptureScreenV2: View { let showAttribution: Bool @State private var showImages: Bool = false + @State private var progress1: CGFloat = 0.3 + @State private var progress2: CGFloat = 0.8 + @State private var progress3: CGFloat = 0.5 + public var body: some View { GeometryReader { proxy in ZStack { + // Camera Preview Layer CameraView(cameraManager: viewModel.cameraManager, selfieViewModel: viewModel) .onAppear { viewModel.cameraManager.switchCamera(to: .front) } + // CameraPreview Mask Rectangle() .fill(.white) .reverseMask { @@ -21,28 +27,14 @@ public struct SelfieCaptureScreenV2: View { .frame(width: 260, height: 260) } - // Face Bounds Indicator - Circle() - .stroke(.red, lineWidth: 10) - .frame(width: 275, height: 275) - .hidden() - Circle() - .fill(.black.opacity(0.7)) - .frame(width: 260, height: 260) - .overlay( - Text("Lottie animation\ngoes here.") - .fontWeight(.medium) - .foregroundColor(.white) - ) - VStack { - Text(viewModel.directive) - .multilineTextAlignment(.center) - .font(SmileID.theme.header1) - .foregroundColor(SmileID.theme.accent) - .padding(.top, 80) - Spacer() - } - .padding() + FaceBoundingArea() + UserInstructionsView(viewModel: viewModel) + LivenessGuidesView( + topArcProgress: $progress1, + rightArcProgress: $progress2, + leftArcProgress: $progress3 + ) + .hidden() } .edgesIgnoringSafeArea(.all) .onAppear { diff --git a/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift b/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift index 265b6cf21..eccea35b7 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift @@ -1,12 +1,18 @@ import SwiftUI struct UserInstructionsView: View { - @ObservedObject var model: SelfieViewModelV2 + @ObservedObject var viewModel: SelfieViewModelV2 var body: some View { - Text(model.directive) - .font(.title) - .foregroundColor(.white) - .padding() + VStack { + Text(SmileIDResourcesHelper.localizedString(for: viewModel.directive)) + .multilineTextAlignment(.center) + .font(SmileID.theme.header2) + .foregroundColor(SmileID.theme.accent) + .padding(.top, 40) + .padding(.horizontal, 50) + Spacer() + } + .padding() } } From f0ac8750bbffceca4ea75cc558e4dc498d088880 Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Thu, 3 Oct 2024 11:47:41 +0100 Subject: [PATCH 11/23] run pod install. --- Example/Podfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Example/Podfile.lock b/Example/Podfile.lock index cda8300d1..9a323849c 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -51,7 +51,7 @@ SPEC CHECKSUMS: lottie-ios: fcb5e73e17ba4c983140b7d21095c834b3087418 netfox: 9d5cc727fe7576c4c7688a2504618a156b7d44b7 Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 - SmileID: 5c847978928cf6f31a5bcf423570dfc27d8a0dbf + SmileID: 972b2cc43e729aec22e4ba6bebfc3725cdfd1433 SwiftLint: 3fe909719babe5537c552ee8181c0031392be933 ZIPFoundation: b8c29ea7ae353b309bc810586181fd073cb3312c From 135f05753acdcc72c5cdbc033637e0c9fe171341 Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Wed, 9 Oct 2024 14:02:56 +0100 Subject: [PATCH 12/23] Connect ViewModel to New UI and Refactoring (#237) * improve code and file structure * add the liveness guides * add some config values to liveness guides view. * change lottie animation frame * run pod install * setup animation progress time for the liiveness guide lottie animation. * fix homeview fore each warnings. * connect face bounds detection to the the indicator. * add throttling to camera feed. * use full screen cover to present home screen products. * control progress arc visibility based on progress. * add a dummy submit function. * setup timers. * add animation to the progress fill arcs. * refactor the components of liveness guides view. * setup delay timer and introduce state for the current animation that should be displayed with instructions after delay. * update arc shape init * add new lottie files. define a guide animation enum to hold the animation details. * some refactoring. * create a validator class for the face observation data. * refactor buffer image processing and communication between face detector, face validator and selfie view model. some code formatting. * remove some debug views. some refactoring and improvements. * make capture instruction strings localizable * introduce current liveness task into the face validator to set the right capture instruction. * fix cropping for selfie quality check. * show or hide the circular ring and the liveness guides based on whether face is within bounds. * add processing view to view captured images. * reset animation as user is completing liveness checks * localise instruction. use appropriate error for face not found. * refactor image conversion for use in brightness and selfie quality checks. * replace ObservedObject with StateObject in HomeView to prevent multiple initialising. --- Example/SmileID.xcodeproj/project.pbxproj | 150 ++++---- Example/SmileID/Home/HomeView.swift | 9 +- Example/SmileID/Home/ProductCell.swift | 8 +- .../Classes/Camera/CameraViewController.swift | 2 +- .../Classes/FaceDetector/FaceDetectorV2.swift | 215 ++++++----- .../FaceDetector/FaceGeometryModel.swift | 12 +- .../Classes/FaceDetector/FaceValidator.swift | 132 +++++++ .../FaceDetector/LivenessCheckManager.swift | 127 ++++-- .../SelfieCapture/CaptureGuideAnimation.swift | 49 +++ .../SelfieCaptureInstruction.swift | 54 +++ .../SelfieCapture/SelfieViewModelAction.swift | 6 +- .../SelfieCapture/SelfieViewModelV2.swift | 360 +++++++----------- .../SelfieCapture/View/FaceBoundingArea.swift | 59 +-- .../View/FaceBoundingBoxView.swift | 23 -- .../View/FaceLayoutGuideView.swift | 16 - .../LivenessCaptureInstructionsView.swift | 12 + .../OrchestratedSelfieCaptureScreen.swift | 6 +- .../View/SelfieCaptureScreenV2.swift | 131 ++----- ...sView.swift => SelfieProcessingView.swift} | 2 +- .../View/UserInstructionsView.swift | 4 +- .../Localization/en.lproj/Localizable.strings | 7 + .../LottieFiles/light_animation.lottie | Bin 0 -> 2094 bytes .../Resources/LottieFiles/positioning.lottie | Bin 0 -> 2664 bytes 23 files changed, 762 insertions(+), 622 deletions(-) create mode 100644 Sources/SmileID/Classes/FaceDetector/FaceValidator.swift create mode 100644 Sources/SmileID/Classes/SelfieCapture/CaptureGuideAnimation.swift create mode 100644 Sources/SmileID/Classes/SelfieCapture/SelfieCaptureInstruction.swift delete mode 100644 Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingBoxView.swift delete mode 100644 Sources/SmileID/Classes/SelfieCapture/View/FaceLayoutGuideView.swift rename Sources/SmileID/Classes/SelfieCapture/View/{CapturedImagesView.swift => SelfieProcessingView.swift} (98%) create mode 100644 Sources/SmileID/Resources/LottieFiles/light_animation.lottie create mode 100644 Sources/SmileID/Resources/LottieFiles/positioning.lottie diff --git a/Example/SmileID.xcodeproj/project.pbxproj b/Example/SmileID.xcodeproj/project.pbxproj index 2766c6a2c..cc5c04461 100644 --- a/Example/SmileID.xcodeproj/project.pbxproj +++ b/Example/SmileID.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 1B229387BA34905BADB7776E /* Pods_SmileID_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 718422487EFECF403E12E64E /* Pods_SmileID_Example.framework */; }; 1E59E33E2BA1E64C00D2BAD2 /* PartnerParamsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E59E33D2BA1E64C00D2BAD2 /* PartnerParamsTests.swift */; }; 1E60ED372A29C306002695FF /* HomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E60ED322A29C306002695FF /* HomeViewController.swift */; }; 1E60ED382A29C306002695FF /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E60ED332A29C306002695FF /* Constants.swift */; }; @@ -64,6 +63,8 @@ 6AC98B6FFA753C5463F7216F /* SmileConfigEntryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC984E484EEF69069C705C7 /* SmileConfigEntryView.swift */; }; 6AC98C0E9305B4B3EB66ED35 /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC980584C522B17A099E098 /* Util.swift */; }; 6AC98F5682012E19C815AE70 /* DocumentSelectorViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC9893915EBA33F6984A6D9 /* DocumentSelectorViewModel.swift */; }; + 7A41A4E7F2F61443C92D1410 /* Pods_SmileID_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D2FA3DD9146D52A19577F54 /* Pods_SmileID_Tests.framework */; }; + 7C1E37843B470E1ECF8A2260 /* Pods_SmileID_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8BAC74F0F90CC68EE4E8873 /* Pods_SmileID_Example.framework */; }; 918321EA2A52E36A00D6FB7F /* URLSessionRestServiceClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 918321E02A52E36A00D6FB7F /* URLSessionRestServiceClientTests.swift */; }; 918321EB2A52E36A00D6FB7F /* XCTestExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 918321E12A52E36A00D6FB7F /* XCTestExtension.swift */; }; 918321EC2A52E36A00D6FB7F /* DependencyContainerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 918321E32A52E36A00D6FB7F /* DependencyContainerTests.swift */; }; @@ -72,7 +73,6 @@ 91CB21A52AC10C61005AEBF5 /* NavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CB21A42AC10C61005AEBF5 /* NavigationBar.swift */; }; 91D9FBC42AB481FE00A8D36B /* PollingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D9FBC32AB481FE00A8D36B /* PollingTests.swift */; }; 91D9FBD52AB8AB4700A8D36B /* CalculateSignatureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D9FBD42AB8AB4700A8D36B /* CalculateSignatureTests.swift */; }; - CAF00E3C75F6ADCC1E5AE60A /* Pods_SmileID_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF55180EE707E0648C395190 /* Pods_SmileID_Tests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -86,7 +86,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0C27F5BE0A9BAAD20932D47D /* Pods-SmileID_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.debug.xcconfig"; sourceTree = ""; }; 1E59E33D2BA1E64C00D2BAD2 /* PartnerParamsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PartnerParamsTests.swift; sourceTree = ""; }; 1E60ED322A29C306002695FF /* HomeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; 1E60ED332A29C306002695FF /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; @@ -118,8 +117,6 @@ 20C360C72C454C130008DBDE /* RootViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewModel.swift; sourceTree = ""; }; 20DFA0EB2C21917100AC2AE7 /* View+TextSelection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+TextSelection.swift"; sourceTree = ""; }; 20F3D6F52C25F5C100B32751 /* SmileID.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SmileID.xcdatamodel; sourceTree = ""; }; - 3736E6936005080B51DC930F /* Pods-SmileID_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.release.xcconfig"; sourceTree = ""; }; - 38D85EC9740D09436F10E980 /* Pods-SmileID_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.debug.xcconfig"; sourceTree = ""; }; 5829A8BF2BC7429A001C1E7E /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 585BE4872AC7748E0091DDD8 /* RestartableTimerTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestartableTimerTest.swift; sourceTree = ""; }; 58C5F1D72B05925800A6080C /* BiometricKycWithIdInputScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BiometricKycWithIdInputScreen.swift; sourceTree = ""; }; @@ -147,7 +144,8 @@ 6AC9893915EBA33F6984A6D9 /* DocumentSelectorViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DocumentSelectorViewModel.swift; sourceTree = ""; }; 6AC98BA00298258573CBCBD4 /* ScannerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScannerViewController.swift; sourceTree = ""; }; 6AC98BC49871655D87C7DEE3 /* SettingsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewModel.swift; sourceTree = ""; }; - 718422487EFECF403E12E64E /* Pods_SmileID_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6E907B7A51A30501D222F7A1 /* Pods-SmileID_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.debug.xcconfig"; sourceTree = ""; }; + 8D2FA3DD9146D52A19577F54 /* Pods_SmileID_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 918321E02A52E36A00D6FB7F /* URLSessionRestServiceClientTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLSessionRestServiceClientTests.swift; sourceTree = ""; }; 918321E12A52E36A00D6FB7F /* XCTestExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = XCTestExtension.swift; path = ../../Tests/XCTestExtension.swift; sourceTree = ""; }; 918321E32A52E36A00D6FB7F /* DependencyContainerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DependencyContainerTests.swift; sourceTree = ""; }; @@ -158,9 +156,11 @@ 91D9FBD42AB8AB4700A8D36B /* CalculateSignatureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculateSignatureTests.swift; sourceTree = ""; }; 94E7560A47E255DD8215C183 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 9755B6A19CF28DE212F24C83 /* SmileID.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = SmileID.podspec; path = ../SmileID.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - AF55180EE707E0648C395190 /* Pods_SmileID_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BA3576C81141A6C8FB2A3ECF /* Pods-SmileID_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.release.xcconfig"; sourceTree = ""; }; C8CD2E3DB817D8C6334E9240 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; - EC1A4BF74BF20D4385E0CEA1 /* Pods-SmileID_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.release.xcconfig"; sourceTree = ""; }; + E8BAC74F0F90CC68EE4E8873 /* Pods_SmileID_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EAC22FC6E2C754C1D6B827F7 /* Pods-SmileID_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.release.xcconfig"; sourceTree = ""; }; + ED20D3A26C43CE815DC17A5F /* Pods-SmileID_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -168,7 +168,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1B229387BA34905BADB7776E /* Pods_SmileID_Example.framework in Frameworks */, + 7C1E37843B470E1ECF8A2260 /* Pods_SmileID_Example.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -176,7 +176,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CAF00E3C75F6ADCC1E5AE60A /* Pods_SmileID_Tests.framework in Frameworks */, + 7A41A4E7F2F61443C92D1410 /* Pods_SmileID_Tests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -278,6 +278,15 @@ path = Helpers; sourceTree = ""; }; + 356C3F5818E6FD9EB9DB6AD4 /* Frameworks */ = { + isa = PBXGroup; + children = ( + E8BAC74F0F90CC68EE4E8873 /* Pods_SmileID_Example.framework */, + 8D2FA3DD9146D52A19577F54 /* Pods_SmileID_Tests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 58C5F1D62B05922100A6080C /* BiometricKYC */ = { isa = PBXGroup; children = ( @@ -297,7 +306,7 @@ 607FACE81AFB9204008FA782 /* Tests */, 607FACD11AFB9204008FA782 /* Products */, 828BF541E068101B2E6ED55F /* Pods */, - E88F96F2DEFAFF10CCF982E2 /* Frameworks */, + 356C3F5818E6FD9EB9DB6AD4 /* Frameworks */, ); sourceTree = ""; }; @@ -403,10 +412,10 @@ 828BF541E068101B2E6ED55F /* Pods */ = { isa = PBXGroup; children = ( - 0C27F5BE0A9BAAD20932D47D /* Pods-SmileID_Example.debug.xcconfig */, - 3736E6936005080B51DC930F /* Pods-SmileID_Example.release.xcconfig */, - 38D85EC9740D09436F10E980 /* Pods-SmileID_Tests.debug.xcconfig */, - EC1A4BF74BF20D4385E0CEA1 /* Pods-SmileID_Tests.release.xcconfig */, + ED20D3A26C43CE815DC17A5F /* Pods-SmileID_Example.debug.xcconfig */, + EAC22FC6E2C754C1D6B827F7 /* Pods-SmileID_Example.release.xcconfig */, + 6E907B7A51A30501D222F7A1 /* Pods-SmileID_Tests.debug.xcconfig */, + BA3576C81141A6C8FB2A3ECF /* Pods-SmileID_Tests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -443,15 +452,6 @@ path = ../../Tests/Mocks; sourceTree = ""; }; - E88F96F2DEFAFF10CCF982E2 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 718422487EFECF403E12E64E /* Pods_SmileID_Example.framework */, - AF55180EE707E0648C395190 /* Pods_SmileID_Tests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -459,13 +459,13 @@ isa = PBXNativeTarget; buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SmileID_Example" */; buildPhases = ( - A8844648E240C4012E2F4931 /* [CP] Check Pods Manifest.lock */, + CBA71781AF69B78CA901C352 /* [CP] Check Pods Manifest.lock */, 607FACCC1AFB9204008FA782 /* Sources */, 917D79282AA8024400FA6624 /* SwiftLint */, 607FACCD1AFB9204008FA782 /* Frameworks */, 607FACCE1AFB9204008FA782 /* Resources */, C0BE335FFECD4DF6892309F3 /* Upload Debug Symbols to Sentry */, - E71DEE69CE1BFE014013BDFC /* [CP] Embed Pods Frameworks */, + 81AA40A9DF7958775C866BAD /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -480,7 +480,7 @@ isa = PBXNativeTarget; buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SmileID_Tests" */; buildPhases = ( - E594EEEB073850BE36B39940 /* [CP] Check Pods Manifest.lock */, + 43AC4A9752FE774CAA6A9ECC /* [CP] Check Pods Manifest.lock */, 607FACE11AFB9204008FA782 /* Sources */, 607FACE21AFB9204008FA782 /* Frameworks */, 607FACE31AFB9204008FA782 /* Resources */, @@ -563,7 +563,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 917D79282AA8024400FA6624 /* SwiftLint */ = { + 43AC4A9752FE774CAA6A9ECC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -571,17 +571,53 @@ inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); - name = SwiftLint; + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-SmileID_Tests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Type a script or drag a script file from your workspace to insert its path.\ncd ../Sources\n\"${PODS_ROOT}/SwiftLint/swiftlint\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 81AA40A9DF7958775C866BAD /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/ArkanaKeys/ArkanaKeys.framework", + "${BUILT_PRODUCTS_DIR}/ArkanaKeysInterfaces/ArkanaKeysInterfaces.framework", + "${BUILT_PRODUCTS_DIR}/FingerprintJS/FingerprintJS.framework", + "${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework", + "${BUILT_PRODUCTS_DIR}/SmileID/SmileID.framework", + "${BUILT_PRODUCTS_DIR}/ZIPFoundation/ZIPFoundation.framework", + "${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework", + "${BUILT_PRODUCTS_DIR}/netfox/netfox.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ArkanaKeys.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ArkanaKeysInterfaces.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FingerprintJS.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SmileID.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZIPFoundation.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Lottie.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/netfox.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - A8844648E240C4012E2F4931 /* [CP] Check Pods Manifest.lock */ = { + 917D79282AA8024400FA6624 /* SwiftLint */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -589,19 +625,15 @@ inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; + name = SwiftLint; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SmileID_Example-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\ncd ../Sources\n\"${PODS_ROOT}/SwiftLint/swiftlint\"\n"; }; C0BE335FFECD4DF6892309F3 /* Upload Debug Symbols to Sentry */ = { isa = PBXShellScriptBuildPhase; @@ -618,7 +650,7 @@ shellPath = /bin/sh; shellScript = "# This script is responsable to upload debug symbols and source context for Sentry.\nif which sentry-cli >/dev/null; then\nexport SENTRY_ORG=smile-identity\nexport SENTRY_PROJECT=ios\nERROR=$(sentry-cli debug-files upload --include-sources \"$DWARF_DSYM_FOLDER_PATH\" 2>&1 >/dev/null)\nif [ ! $? -eq 0 ]; then\necho \"warning: sentry-cli - $ERROR\"\nfi\nelse\necho \"warning: sentry-cli not installed, download from https://github.com/getsentry/sentry-cli/releases\"\nfi\n"; }; - E594EEEB073850BE36B39940 /* [CP] Check Pods Manifest.lock */ = { + CBA71781AF69B78CA901C352 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -633,45 +665,13 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SmileID_Tests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-SmileID_Example-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E71DEE69CE1BFE014013BDFC /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/ArkanaKeys/ArkanaKeys.framework", - "${BUILT_PRODUCTS_DIR}/ArkanaKeysInterfaces/ArkanaKeysInterfaces.framework", - "${BUILT_PRODUCTS_DIR}/FingerprintJS/FingerprintJS.framework", - "${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework", - "${BUILT_PRODUCTS_DIR}/SmileID/SmileID.framework", - "${BUILT_PRODUCTS_DIR}/ZIPFoundation/ZIPFoundation.framework", - "${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework", - "${BUILT_PRODUCTS_DIR}/netfox/netfox.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ArkanaKeys.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ArkanaKeysInterfaces.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FingerprintJS.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SmileID.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZIPFoundation.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Lottie.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/netfox.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -881,7 +881,7 @@ }; 607FACF01AFB9204008FA782 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0C27F5BE0A9BAAD20932D47D /* Pods-SmileID_Example.debug.xcconfig */; + baseConfigurationReference = ED20D3A26C43CE815DC17A5F /* Pods-SmileID_Example.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "Apple Development"; @@ -914,7 +914,7 @@ }; 607FACF11AFB9204008FA782 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3736E6936005080B51DC930F /* Pods-SmileID_Example.release.xcconfig */; + baseConfigurationReference = EAC22FC6E2C754C1D6B827F7 /* Pods-SmileID_Example.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "Apple Development"; @@ -946,7 +946,7 @@ }; 607FACF31AFB9204008FA782 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38D85EC9740D09436F10E980 /* Pods-SmileID_Tests.debug.xcconfig */; + baseConfigurationReference = 6E907B7A51A30501D222F7A1 /* Pods-SmileID_Tests.debug.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; @@ -978,7 +978,7 @@ }; 607FACF41AFB9204008FA782 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EC1A4BF74BF20D4385E0CEA1 /* Pods-SmileID_Tests.release.xcconfig */; + baseConfigurationReference = BA3576C81141A6C8FB2A3ECF /* Pods-SmileID_Tests.release.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; diff --git a/Example/SmileID/Home/HomeView.swift b/Example/SmileID/Home/HomeView.swift index fab415fe1..877e2c548 100644 --- a/Example/SmileID/Home/HomeView.swift +++ b/Example/SmileID/Home/HomeView.swift @@ -4,11 +4,10 @@ import SwiftUI struct HomeView: View { let version = SmileID.version let build = Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "Unknown" - @ObservedObject var viewModel: HomeViewModel - @ObservedObject var networkMonitor = NetworkMonitor.shared + @StateObject var viewModel: HomeViewModel init(config: Config) { - viewModel = HomeViewModel(config: config) + _viewModel = StateObject(wrappedValue: HomeViewModel(config: config)) } var body: some View { @@ -300,9 +299,9 @@ private struct MyVerticalGrid: View { ScrollView { VStack(alignment: .leading, spacing: 8) { let numRows = (items.count + maxColumns - 1) / maxColumns - ForEach(0 ..< numRows) { rowIndex in + ForEach(0 ..< numRows, id: \.self) { rowIndex in HStack(spacing: 16) { - ForEach(0 ..< maxColumns) { columnIndex in + ForEach(0 ..< maxColumns, id: \.self) { columnIndex in let itemIndex = rowIndex * maxColumns + columnIndex let width = geo.size.width / CGFloat(maxColumns) if itemIndex < items.count { diff --git a/Example/SmileID/Home/ProductCell.swift b/Example/SmileID/Home/ProductCell.swift index 0633a18b0..dd524e994 100644 --- a/Example/SmileID/Home/ProductCell.swift +++ b/Example/SmileID/Home/ProductCell.swift @@ -41,8 +41,12 @@ struct ProductCell: View { .frame(maxWidth: .infinity) .background(SmileID.theme.accent) .cornerRadius(8) - .sheet(isPresented: $isPresented, content: { AnyView(content()) - }) + .fullScreenCover( + isPresented: $isPresented, + content: { + AnyView(content()) + } + ) } ) } diff --git a/Sources/SmileID/Classes/Camera/CameraViewController.swift b/Sources/SmileID/Classes/Camera/CameraViewController.swift index 74072078e..26f2797dd 100644 --- a/Sources/SmileID/Classes/Camera/CameraViewController.swift +++ b/Sources/SmileID/Classes/Camera/CameraViewController.swift @@ -37,7 +37,7 @@ class CameraViewController: UIViewController { } } -extension CameraViewController: FaceDetectorDelegate { +extension CameraViewController: FaceDetectorViewDelegate { func convertFromMetadataToPreviewRect(rect: CGRect) -> CGRect { guard let previewLayer = previewLayer else { return CGRect.zero diff --git a/Sources/SmileID/Classes/FaceDetector/FaceDetectorV2.swift b/Sources/SmileID/Classes/FaceDetector/FaceDetectorV2.swift index 49bc7e0b8..f71c69520 100644 --- a/Sources/SmileID/Classes/FaceDetector/FaceDetectorV2.swift +++ b/Sources/SmileID/Classes/FaceDetector/FaceDetectorV2.swift @@ -3,21 +3,38 @@ import Combine import UIKit import Vision -protocol FaceDetectorDelegate: NSObjectProtocol { +enum FaceDetectorError: Error { + case unableToLoadSelfieModel + case invalidSelfieModelOutput + case noFaceDetected + case unableToCropImage +} + +protocol FaceDetectorViewDelegate: NSObjectProtocol { func convertFromMetadataToPreviewRect(rect: CGRect) -> CGRect } +protocol FaceDetectorResultDelegate: AnyObject { + func faceDetector( + _ detector: FaceDetectorV2, + didDetectFace faceGeometry: FaceGeometryData, + withFaceQuality faceQuality: Float, + selfieQuality: SelfieQualityData, + brightness: Int + ) + func faceDetector(_ detector: FaceDetectorV2, didFailWithError error: Error) +} + class FaceDetectorV2: NSObject { private var selfieQualityModel: SelfieQualityDetector? private let cropSize = (width: 120, height: 120) private let faceMovementThreshold: CGFloat = 0.15 - var sequenceHandler = VNSequenceRequestHandler() - var currentFrameBuffer: CVPixelBuffer? + private var sequenceHandler = VNSequenceRequestHandler() - weak var selfieViewModel: SelfieViewModelV2? - weak var viewDelegate: FaceDetectorDelegate? + weak var viewDelegate: FaceDetectorViewDelegate? + weak var resultDelegate: FaceDetectorResultDelegate? override init() { super.init() @@ -35,77 +52,89 @@ class FaceDetectorV2: NSObject { } /// Run Face Capture quality and Face Bounding Box and roll/pitch/yaw tracking - func detect(_ imageBuffer: CVPixelBuffer) { - currentFrameBuffer = imageBuffer - - let detectFaceRectanglesRequest = VNDetectFaceRectanglesRequest( - completionHandler: detectedFaceRectangles - ) - - let detectCaptureQualityRequest = VNDetectFaceCaptureQualityRequest( - completionHandler: detectedFaceQualityRequest - ) + func processImageBuffer(_ imageBuffer: CVPixelBuffer) { + let detectFaceRectanglesRequest = VNDetectFaceRectanglesRequest() + let detectCaptureQualityRequest = VNDetectFaceCaptureQualityRequest() do { try sequenceHandler.perform( - [ - detectFaceRectanglesRequest, - detectCaptureQualityRequest - ], + [detectFaceRectanglesRequest, detectCaptureQualityRequest], on: imageBuffer, orientation: .leftMirrored ) - } catch { - selfieViewModel?.perform(action: .handleError(error)) - } - - do { - guard let image = UIImage(pixelBuffer: imageBuffer) else { - return - } - guard let croppedImage = try cropToFace(image: image) else { + guard let faceDetections = detectFaceRectanglesRequest.results, + let faceQualityObservations = detectCaptureQualityRequest.results, + let faceObservation = faceDetections.first, + let faceQualityObservation = faceQualityObservations.first + else { + self.resultDelegate?.faceDetector(self, didFailWithError: FaceDetectorError.noFaceDetected) return } - guard let convertedImage = croppedImage.pixelBuffer(width: cropSize.width, height: cropSize.height) else { - return + + let convertedBoundingBox = + self.viewDelegate?.convertFromMetadataToPreviewRect(rect: faceObservation.boundingBox) ?? .zero + + let uiImage = UIImage(pixelBuffer: imageBuffer) + let brightness = self.calculateBrightness(uiImage) + let croppedImage = try self.cropImageToFace(uiImage) + + let selfieQualityData = try self.selfieQualityRequest(imageBuffer: croppedImage) + + if #available(iOS 15.0, *) { + let faceGeometryData = FaceGeometryData( + boundingBox: convertedBoundingBox, + roll: faceObservation.roll ?? 0.0, + yaw: faceObservation.yaw ?? 0.0, + pitch: faceObservation.pitch ?? 0.0, + direction: faceDirection(faceObservation: faceObservation) + ) + self.resultDelegate? + .faceDetector( + self, + didDetectFace: faceGeometryData, + withFaceQuality: faceQualityObservation.faceCaptureQuality ?? 0.0, + selfieQuality: selfieQualityData, + brightness: brightness + ) + } else { + // Fallback on earlier versions } - selfieQualityRequest(imageBuffer: convertedImage) } catch { - selfieViewModel?.perform(action: .handleError(error)) + self.resultDelegate?.faceDetector(self, didFailWithError: error) } } - func selfieQualityRequest(imageBuffer: CVPixelBuffer) { - guard let selfieViewModel, - let selfieQualityModel else { return } - do { - let input = SelfieQualityDetectorInput(conv2d_193_input: imageBuffer) + func selfieQualityRequest(imageBuffer: CVPixelBuffer) throws -> SelfieQualityData { + guard let selfieQualityModel else { + throw FaceDetectorError.unableToLoadSelfieModel + } + let input = SelfieQualityDetectorInput(conv2d_193_input: imageBuffer) - let prediction = try selfieQualityModel.prediction(input: input) - let output = prediction.Identity + let prediction = try selfieQualityModel.prediction(input: input) + let output = prediction.Identity - guard output.shape.count == 2, - output.shape[0] == 1, - output.shape[1] == 2 else { - return - } + guard output.shape.count == 2, + output.shape[0] == 1, + output.shape[1] == 2 + else { + throw FaceDetectorError.invalidSelfieModelOutput + } - let passScore = output[0].floatValue - let failScore = output[1].floatValue + let passScore = output[0].floatValue + let failScore = output[1].floatValue - let selfieQualityModel = SelfieQualityModel( - failed: failScore, - passed: passScore - ) - selfieViewModel.perform(action: .selfieQualityObservationDetected(selfieQualityModel)) - } catch { - selfieViewModel.perform(action: .handleError(error)) - } + let selfieQualityData = SelfieQualityData( + failed: failScore, + passed: passScore + ) + return selfieQualityData } - private func cropToFace(image: UIImage) throws -> UIImage? { - guard let cgImage = image.cgImage else { - return nil + private func cropImageToFace( + _ image: UIImage? + ) throws -> CVPixelBuffer { + guard let image, let cgImage = image.cgImage else { + throw FaceDetectorError.unableToCropImage } let request = VNDetectFaceRectanglesRequest() @@ -114,8 +143,9 @@ class FaceDetectorV2: NSObject { try handler.perform([request]) guard let results = request.results, - let face = results.first else { - return nil + let face = results.first + else { + throw FaceDetectorError.noFaceDetected } let boundingBox = face.boundingBox @@ -131,40 +161,38 @@ class FaceDetectorV2: NSObject { let faceRect = CGRect(origin: origin, size: size) - guard let croppedImage = cgImage.cropping(to: faceRect) else { - return nil + guard let croppedCGImage = cgImage.cropping(to: faceRect) else { + throw FaceDetectorError.unableToCropImage } - return UIImage(cgImage: croppedImage) - } -} + let croppedImage = UIImage(cgImage: croppedCGImage) + guard let resizedImage = croppedImage.pixelBuffer(width: cropSize.width, height: cropSize.height) else { + throw FaceDetectorError.unableToCropImage + } -// MARK: - Private methods -extension FaceDetectorV2 { - func detectedFaceRectangles(request: VNRequest, error: Error?) { - guard let selfieViewModel = selfieViewModel, - let viewDelegate = viewDelegate else { return } + return resizedImage + } - guard let results = request.results as? [VNFaceObservation], - let result = results.first else { - selfieViewModel.perform(action: .noFaceDetected) - return + private func calculateBrightness(_ image: UIImage?) -> Int { + guard let image, let cgImage = image.cgImage, + let imageData = cgImage.dataProvider?.data, + let dataPointer = CFDataGetBytePtr(imageData) + else { + return 0 } - let convertedBoundingBox = viewDelegate.convertFromMetadataToPreviewRect(rect: result.boundingBox) - - if #available(iOS 15.0, *) { - let faceObservationModel = FaceGeometryModel( - boundingBox: convertedBoundingBox, - roll: result.roll ?? 0.0, - yaw: result.yaw ?? 0.0, - pitch: result.pitch ?? 0.0, - direction: faceDirection(faceObservation: result) - ) - selfieViewModel.perform(action: .faceObservationDetected(faceObservationModel)) - } else { - // Fallback on earlier versions + let bytesPerPixel = cgImage.bitsPerPixel / cgImage.bitsPerComponent + let dataLength = CFDataGetLength(imageData) + var result = 0.0 + for index in stride(from: 0, to: dataLength, by: bytesPerPixel) { + let red = dataPointer[index] + let green = dataPointer[index + 1] + let blue = dataPointer[index + 2] + result += 0.299 * Double(red) + 0.587 * Double(green) + 0.114 * Double(blue) } + let pixelsCount = dataLength / bytesPerPixel + let brightness = Int(result) / pixelsCount + return brightness } private func faceDirection(faceObservation: VNFaceObservation) -> FaceDirection { @@ -181,19 +209,4 @@ extension FaceDetectorV2 { return .none } } - - func detectedFaceQualityRequest(request: VNRequest, error: Error?) { - guard let selfieViewModel = selfieViewModel else { return } - - guard let results = request.results as? [VNFaceObservation], - let result = results.first else { - selfieViewModel.perform(action: .noFaceDetected) - return - } - - let faceQualityModel = FaceQualityModel( - quality: result.faceCaptureQuality ?? 0.0 - ) - selfieViewModel.perform(action: .faceQualityObservationDetected(faceQualityModel)) - } } diff --git a/Sources/SmileID/Classes/FaceDetector/FaceGeometryModel.swift b/Sources/SmileID/Classes/FaceDetector/FaceGeometryModel.swift index 9075c71b4..1c569250e 100644 --- a/Sources/SmileID/Classes/FaceDetector/FaceGeometryModel.swift +++ b/Sources/SmileID/Classes/FaceDetector/FaceGeometryModel.swift @@ -1,6 +1,6 @@ import Foundation -struct FaceGeometryModel: Equatable { +struct FaceGeometryData: Equatable { let boundingBox: CGRect let roll: NSNumber let yaw: NSNumber @@ -14,17 +14,17 @@ enum FaceDirection { case none } -struct FaceQualityModel { +struct FaceQualityData { let quality: Float } -struct SelfieQualityModel { +struct SelfieQualityData { let failed: Float let passed: Float } -extension SelfieQualityModel { - static var zero: SelfieQualityModel { - return SelfieQualityModel(failed: 0, passed: 0) +extension SelfieQualityData { + static var zero: SelfieQualityData { + return SelfieQualityData(failed: 0, passed: 0) } } diff --git a/Sources/SmileID/Classes/FaceDetector/FaceValidator.swift b/Sources/SmileID/Classes/FaceDetector/FaceValidator.swift new file mode 100644 index 000000000..90f795b6a --- /dev/null +++ b/Sources/SmileID/Classes/FaceDetector/FaceValidator.swift @@ -0,0 +1,132 @@ +import Foundation + +protocol FaceValidatorDelegate: AnyObject { + func updateValidationResult(_ result: FaceValidationResult) +} + +struct FaceValidationResult { + let userInstruction: SelfieCaptureInstruction? + let hasDetectedValidFace: Bool + let faceInBounds: Bool +} + +final class FaceValidator { + weak var delegate: FaceValidatorDelegate? + private var faceLayoutGuideFrame: CGRect = .zero + + // MARK: Constants + private let selfieQualityThreshold: Float = 0.5 + private let luminanceThreshold: ClosedRange = 80...200 + private let faceBoundsMultiplier: CGFloat = 1.2 + private let faceBoundsThreshold: CGFloat = 50 + + init() {} + + func setLayoutGuideFrame(with frame: CGRect) { + self.faceLayoutGuideFrame = frame + } + + func validate( + faceGeometry: FaceGeometryData, + selfieQuality: SelfieQualityData, + brightness: Int, + currentLivenessTask: LivenessTask? + ) { + // check face bounds + let faceBoundsState = checkAcceptableBounds(using: faceGeometry.boundingBox) + let isAcceptableBounds = faceBoundsState == .detectedFaceAppropriateSizeAndPosition + + // check brightness + let isAcceptableBrightness = luminanceThreshold.contains(brightness) + + // check selfie quality + let isAcceptableSelfieQuality = checkSelfieQuality(selfieQuality) + + // check that face is ready for capture + let hasDetectedValidFace = checkValidFace( + isAcceptableBounds, + isAcceptableBrightness, + isAcceptableSelfieQuality + ) + + // determine what instruction/animation to display to users + let userInstruction = userInstruction( + from: faceBoundsState, + detectedValidFace: hasDetectedValidFace, + isAcceptableBrightness: isAcceptableBrightness, + isAcceptableSelfieQuality: isAcceptableSelfieQuality, + livenessTask: currentLivenessTask + ) + + let validationResult = FaceValidationResult( + userInstruction: userInstruction, + hasDetectedValidFace: hasDetectedValidFace, + faceInBounds: isAcceptableBounds + ) + delegate?.updateValidationResult(validationResult) + } + + private func userInstruction( + from faceBoundsState: FaceBoundsState, + detectedValidFace: Bool, + isAcceptableBrightness: Bool, + isAcceptableSelfieQuality: Bool, + livenessTask: LivenessTask? + ) -> SelfieCaptureInstruction? { + if detectedValidFace { + if let livenessTask { + switch livenessTask { + case .lookLeft: + return .lookLeft + case .lookRight: + return .lookRight + case .lookUp: + return .lookUp + } + } + return nil + } else if faceBoundsState == .detectedFaceOffCentre { + return .headInFrame + } else if faceBoundsState == .detectedFaceTooSmall { + return .moveCloser + } else if faceBoundsState == .detectedFaceTooLarge { + return .moveBack + } else if !isAcceptableSelfieQuality || !isAcceptableBrightness { + return .goodLight + } + return nil + } + + // MARK: Validation Checks + private func checkAcceptableBounds(using boundingBox: CGRect) -> FaceBoundsState { + if boundingBox.width > faceBoundsMultiplier * faceLayoutGuideFrame.width { + return .detectedFaceTooLarge + } else if boundingBox.width * faceBoundsMultiplier < faceLayoutGuideFrame.width { + return .detectedFaceTooSmall + } else { + if abs( + boundingBox.midX - faceLayoutGuideFrame.midX + ) > faceBoundsThreshold { + return .detectedFaceOffCentre + } else if abs(boundingBox.midY - faceLayoutGuideFrame.midY) > faceBoundsThreshold { + return .detectedFaceOffCentre + } else { + return .detectedFaceAppropriateSizeAndPosition + } + } + } + + private func checkSelfieQuality(_ value: SelfieQualityData) -> Bool { + return value.passed >= selfieQualityThreshold + } + + private func checkValidFace( + _ isAcceptableBounds: Bool, + _ isAcceptableBrightness: Bool, + _ isAcceptableSelfieQuality: Bool + ) -> Bool { + return isAcceptableBounds && + isAcceptableBrightness && + isAcceptableSelfieQuality + } +} diff --git a/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift b/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift index 62264e054..ee7cbfa3a 100644 --- a/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift +++ b/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift @@ -6,18 +6,6 @@ enum LivenessTask { case lookLeft case lookRight case lookUp - - /// The user-friendly instruction for each task. - var instruction: String { - switch self { - case .lookLeft: - return "Look Left" - case .lookRight: - return "Look Right" - case .lookUp: - return "Look Up" - } - } } class LivenessCheckManager: ObservableObject { @@ -31,33 +19,72 @@ class LivenessCheckManager: ObservableObject { var captureImage: (() -> Void)? // MARK: Constants - /// The minimum threshold for yaw (left-right head movement) private let minYawAngleThreshold: CGFloat = 0.15 /// The maximum threshold for yaw (left-right head movement) - private let maxYawAngleThreshold: CGFloat = 0.6 + private let maxYawAngleThreshold: CGFloat = 0.3 /// The minimum threshold for pitch (up-down head movement) private let minPitchAngleThreshold: CGFloat = 0.15 /// The maximum threshold for pitch (up-down head movement) - private let maxPitchAngleThreshold: CGFloat = 0.6 + private let maxPitchAngleThreshold: CGFloat = 0.3 + /// The timeout duration for each task in seconds. + private let taskTimeoutDuration: TimeInterval = 120 // MARK: Face Orientation Properties - @Published private(set) var yawAngle: Double = 0.0 - @Published private(set) var rollAngle: Double = 0.0 - @Published private(set) var pitchAngle: Double = 0.0 - @Published private(set) var faceDirection: FaceDirection = .none + @Published var lookLeftProgress: CGFloat = 0.0 + @Published var lookRightProgress: CGFloat = 0.0 + @Published var lookUpProgress: CGFloat = 0.0 + + /// The current liveness task. + private(set) var currentTask: LivenessTask? { + didSet { + if currentTask != nil { + resetTaskTimer() + } else { + stopTaskTimer() + } + } + } + /// The timer used for task timeout. + private var taskTimer: Timer? + private var elapsedTime: TimeInterval = 0.0 /// Initializes the LivenessCheckManager with a shuffled set of tasks. init() { livenessTaskSequence = [.lookLeft, .lookRight, .lookUp].shuffled() } - /// The current liveness task. - private(set) var currentTask: LivenessTask? + /// Cleans up resources when the manager is no longer needed. + deinit { + stopTaskTimer() + } + + /// Resets the task timer to the initial timeout duration. + private func resetTaskTimer() { + stopTaskTimer() + taskTimer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { _ in + self.elapsedTime += 1 + if self.elapsedTime == self.taskTimeoutDuration { + self.handleTaskTimeout() + } + } + } + + /// Stops the current task timer. + private func stopTaskTimer() { + taskTimer?.invalidate() + taskTimer = nil + } + + /// Handles the timeout event for a task. + private func handleTaskTimeout() { + stopTaskTimer() + selfieViewModel?.perform(action: .activeLivenessTimeout) + } /// Advances to the next task in the sequence /// - Returns: `true` if there is a next task, `false` if all tasks are completed. - private func advanceToNextTask() -> Bool { + private func advanceToNextTask() -> Bool { guard currentTaskIndex < livenessTaskSequence.count - 1 else { return false } @@ -73,41 +100,57 @@ class LivenessCheckManager: ObservableObject { /// Processes face geometry data and checks for task completion /// - Parameter faceGeometry: The current face geometry data. - func processFaceGeometry(_ faceGeometry: FaceGeometryModel) { - updateFaceOrientationValues(from: faceGeometry) + func processFaceGeometry(_ faceGeometry: FaceGeometryData) { + let yawValue = CGFloat(faceGeometry.yaw.doubleValue) + let pitchValue = CGFloat(faceGeometry.pitch.doubleValue) + updateFaceOrientationValues(yawValue, pitchValue) + } + /// Updates the face orientation values based on the given face geometry. + /// - Parameter faceGeometry: The current face geometry data. + private func updateFaceOrientationValues( + _ yawValue: CGFloat, + _ pitchValue: CGFloat + ) { guard let currentTask = currentTask else { return } switch currentTask { case .lookLeft: - let yawValue = CGFloat(faceGeometry.yaw.doubleValue) if yawValue < -minYawAngleThreshold { - completeCurrentTask() + let progress = + yawValue + .normalized(min: -minYawAngleThreshold, max: -maxYawAngleThreshold) + lookLeftProgress = min(max(lookLeftProgress, progress), 1.0) + if lookLeftProgress == 1.0 { + completeCurrentTask() + } } case .lookRight: - let yawValue = CGFloat(faceGeometry.yaw.doubleValue) if yawValue > minYawAngleThreshold { - completeCurrentTask() + let progress = + yawValue + .normalized(min: minYawAngleThreshold, max: maxYawAngleThreshold) + lookRightProgress = min(max(lookRightProgress, progress), 1.0) + if lookRightProgress == 1.0 { + completeCurrentTask() + } } case .lookUp: - let pitchValue = CGFloat(faceGeometry.pitch.doubleValue) if pitchValue < -minPitchAngleThreshold { - completeCurrentTask() + let progress = + pitchValue + .normalized(min: -minPitchAngleThreshold, max: -maxPitchAngleThreshold) + lookUpProgress = min(max(lookUpProgress, progress), 1.0) + if lookUpProgress == 1.0 { + completeCurrentTask() + } } } } - /// Updates the face orientation values based on the given face geometry. - /// - Parameter faceGeometry: The current face geometry data. - private func updateFaceOrientationValues(from faceGeometry: FaceGeometryModel) { - yawAngle = faceGeometry.yaw.doubleValue - rollAngle = faceGeometry.roll.doubleValue - pitchAngle = faceGeometry.pitch.doubleValue - } - /// Completes the current task and moves to the next one. /// If all tasks are completed, it signals the completion of the liveness challenge. - private func completeCurrentTask() { + private func completeCurrentTask() { captureImage?() captureImage?() @@ -118,3 +161,9 @@ class LivenessCheckManager: ObservableObject { } } } + +extension CGFloat { + func normalized(min: CGFloat, max: CGFloat) -> CGFloat { + return (self - min) / (max - min) + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/CaptureGuideAnimation.swift b/Sources/SmileID/Classes/SelfieCapture/CaptureGuideAnimation.swift new file mode 100644 index 000000000..13d274ba0 --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/CaptureGuideAnimation.swift @@ -0,0 +1,49 @@ +import Foundation + +enum CaptureGuideAnimation: Equatable { + case goodLight + case headInFrame + case moveBack + case moveCloser + case lookRight + case lookLeft + case lookUp + + var fileName: String { + switch self { + case .goodLight: + return "light_animation" + case .headInFrame: + return "positioning" + case .moveBack: + return "positioning" + case .moveCloser: + return "positioning" + case .lookRight: + return "liveness_guides" + case .lookLeft: + return "liveness_guides" + case .lookUp: + return "liveness_guides" + } + } + + var animationProgressRange: ClosedRange { + switch self { + case .headInFrame: + return 0...0.28 + case .moveBack: + return 0.38...0.67 + case .moveCloser: + return 0.73...1.0 + case .lookRight: + return 0...0.4 + case .lookLeft: + return 0.4...0.64 + case .lookUp: + return 0.64...1.0 + default: + return 0...1.0 + } + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieCaptureInstruction.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieCaptureInstruction.swift new file mode 100644 index 000000000..f86998116 --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieCaptureInstruction.swift @@ -0,0 +1,54 @@ +import Foundation + +enum SelfieCaptureInstruction { + case headInFrame + case moveBack + case moveCloser + case lookStraight + case goodLight + case lookLeft + case lookRight + case lookUp + + var instruction: String { + switch self { + case .headInFrame: + return "Instructions.PositionHeadInView" + case .moveCloser: + return "Instructions.MoveCloser" + case .moveBack: + return "Instructions.MoveBack" + case .lookStraight: + return "Instructions.PositionHeadInView" + case .goodLight: + return "Instructions.Brightness" + case .lookLeft: + return "Instructions.TurnHeadLeft" + case .lookRight: + return "Instructions.TurnHeadRight" + case .lookUp: + return "Instructions.TurnHeadUp" + } + } + + var guideAnimation: CaptureGuideAnimation { + switch self { + case .headInFrame: + return .headInFrame + case .moveCloser: + return .moveCloser + case .moveBack: + return .moveBack + case .lookStraight: + return .headInFrame + case .goodLight: + return .goodLight + case .lookLeft: + return .lookLeft + case .lookRight: + return .lookRight + case .lookUp: + return .lookUp + } + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift index 13c24f5ee..4052e3c15 100644 --- a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift @@ -5,15 +5,11 @@ enum SelfieViewModelAction { case windowSizeDetected(CGRect) // Face Detection Actions - case noFaceDetected - case faceObservationDetected(FaceGeometryModel) - case faceQualityObservationDetected(FaceQualityModel) - case selfieQualityObservationDetected(SelfieQualityModel) case activeLivenessCompleted case activeLivenessTimeout // Others - case toggleDebugMode + case setupDelayTimer case openApplicationSettings case handleError(Error) } diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift index 5592a0a1a..33c316582 100644 --- a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift @@ -6,68 +6,42 @@ public class SelfieViewModelV2: ObservableObject { // MARK: Dependencies let cameraManager = CameraManager.shared let faceDetector = FaceDetectorV2() - let activeLiveness = LivenessCheckManager() + private let faceValidator = FaceValidator() + var livenessCheckManager = LivenessCheckManager() private var subscribers = Set() + private var guideAnimationDelayTimer: Timer? + // MARK: Private Properties + private var faceLayoutGuideFrame = CGRect(x: 0, y: 0, width: 200, height: 300) + private var elapsedGuideAnimationDelay: TimeInterval = 0 var selfieImage: URL? var livenessImages: [URL] = [] - - // MARK: Publishers - @Published private(set) var debugEnabled: Bool - @Published var unauthorizedAlert: AlertState? - @Published var directive: String = "Instructions.Start" - - // MARK: Publishers for Vision data - @Published private(set) var hasDetectedValidFace: Bool - @Published private(set) var hasCompletedLivenessChallenge: Bool - @Published private(set) var faceDetectedState: FaceDetectionState { - didSet { - determineDirective() - } - } - @Published private(set) var faceGeometryState: FaceObservation { - didSet { - processUpdatedFaceGeometry() - } - } - @Published private(set) var faceQualityState: FaceObservation { - didSet { - processUpdatedFaceQuality() - } - } - @Published private(set) var selfieQualityState: FaceObservation { - didSet { - processUpdatedSelfieQuality() - } - } - @Published private(set) var isAcceptableBounds: FaceBoundsState { - didSet { - calculateDetectedFaceValidity() - } - } - @Published private(set) var isAcceptableFaceQuality: Bool { - didSet { - calculateDetectedFaceValidity() - } + private var hasDetectedValidFace: Bool = false + private var shouldBeginLivenessChallenge: Bool { + hasDetectedValidFace && + selfieImage != nil && + livenessCheckManager.currentTask != nil } - @Published private(set) var isAcceptableSelfieQuality: Bool { - didSet { - calculateDetectedFaceValidity() - } + private var shouldSubmitJob: Bool { + selfieImage != nil && + livenessImages.count == numLivenessImages } - @Published private(set) var boundingXDelta: CGFloat = .zero - @Published private(set) var boundingYDelta: CGFloat = .zero // MARK: Constants private let livenessImageSize = 320 private let selfieImageSize = 640 + private let numLivenessImages = 6 + private let guideAnimationDelayTime: TimeInterval = 3 // MARK: UI Properties - @Published private(set) var faceQualityValue: Double = 0.0 - @Published private(set) var selfieQualityValue: SelfieQualityModel = .zero - var faceLayoutGuideFrame = CGRect(x: 0, y: 0, width: 200, height: 300) + @Published var unauthorizedAlert: AlertState? + @Published private(set) var userInstruction: SelfieCaptureInstruction? + @Published private(set) var faceInBounds: Bool = false + @Published private(set) var showGuideAnimation: Bool = false + @Published private(set) var isSubmittingJob: Bool = false + @Published var isShowingImages: Bool = false - // MARK: Private Properties + // MARK: Injected Properties private let isEnroll: Bool private let userId: String private let jobId: String @@ -92,24 +66,30 @@ public class SelfieViewModelV2: ObservableObject { self.skipApiSubmission = skipApiSubmission self.extraPartnerParams = extraPartnerParams self.useStrictMode = useStrictMode + self.initialSetup() + } - hasDetectedValidFace = false - hasCompletedLivenessChallenge = false - faceDetectedState = .noFaceDetected - faceGeometryState = .faceNotFound - faceQualityState = .faceNotFound - selfieQualityState = .faceNotFound - isAcceptableBounds = .unknown - isAcceptableFaceQuality = false - isAcceptableSelfieQuality = false - - #if DEBUG - debugEnabled = true - #else - debugEnabled = false - #endif + deinit { + stopGuideAnimationDelayTimer() + } - self.faceDetector.selfieViewModel = self + private func initialSetup() { + self.faceValidator.delegate = self + self.faceDetector.resultDelegate = self + self.livenessCheckManager.selfieViewModel = self + + self.faceValidator.setLayoutGuideFrame(with: faceLayoutGuideFrame) + self.userInstruction = .headInFrame + + livenessCheckManager.$lookLeftProgress + .merge( + with: livenessCheckManager.$lookRightProgress, + livenessCheckManager.$lookUpProgress + ) + .sink { [weak self] _ in + self?.resetGuideAnimationDelayTimer() + } + .store(in: &subscribers) cameraManager.$status .receive(on: DispatchQueue.main) @@ -120,20 +100,25 @@ public class SelfieViewModelV2: ObservableObject { cameraManager.sampleBufferPublisher // Drop the first ~2 seconds to allow the user to settle in + .throttle( + for: 0.35, + scheduler: DispatchQueue.global(qos: .userInitiated), + latest: true + ) .dropFirst(5) .compactMap { $0 } - .sink(receiveValue: analyzeImage) + .sink(receiveValue: analyzeFrame) .store(in: &subscribers) } - private func analyzeImage(imageBuffer: CVPixelBuffer) { - faceDetector.detect(imageBuffer) + private func analyzeFrame(imageBuffer: CVPixelBuffer) { + faceDetector.processImageBuffer(imageBuffer) if hasDetectedValidFace && selfieImage == nil { captureSelfieImage(imageBuffer) - activeLiveness.initiateLivenessCheck() + livenessCheckManager.initiateLivenessCheck() } - activeLiveness.captureImage = { [weak self] in + livenessCheckManager.captureImage = { [weak self] in self?.captureLivenessImage(imageBuffer) } } @@ -143,22 +128,14 @@ public class SelfieViewModelV2: ObservableObject { switch action { case let .windowSizeDetected(windowRect): handleWindowSizeChanged(toRect: windowRect) - case .noFaceDetected: - publishNoFaceObserved() - case let .faceObservationDetected(faceObservation): - publishFaceObservation(faceObservation) - case let .faceQualityObservationDetected(faceQualityObservation): - publishFaceQualityObservation(faceQualityObservation) - case let .selfieQualityObservationDetected(selfieQualityObservation): - publishSelfieQualityObservation(selfieQualityObservation) case .activeLivenessCompleted: - // Completed at this stage: submit the images. - return + if shouldSubmitJob { + submitJob() + } case .activeLivenessTimeout: - // Submit with forced failure reason here. - return - case .toggleDebugMode: - toggleDebugMode() + submitJob(forcedFailure: true) + case .setupDelayTimer: + resetGuideAnimationDelayTimer() case .openApplicationSettings: openSettings() case let .handleError(error): @@ -166,51 +143,53 @@ public class SelfieViewModelV2: ObservableObject { } } - // MARK: Action Handlers - private func handleWindowSizeChanged(toRect: CGRect) { - faceLayoutGuideFrame = CGRect( - x: toRect.midX - faceLayoutGuideFrame.width / 2, - y: toRect.midY - faceLayoutGuideFrame.height / 2, - width: faceLayoutGuideFrame.width, - height: faceLayoutGuideFrame.height - ) - } - - private func publishNoFaceObserved() { - DispatchQueue.main.async { [self] in - faceDetectedState = .noFaceDetected - faceGeometryState = .faceNotFound + private func publishUserInstruction(_ instruction: SelfieCaptureInstruction?) { + if self.userInstruction != instruction { + self.userInstruction = instruction + self.resetGuideAnimationDelayTimer() } } +} - private func publishFaceObservation(_ faceGeometryModel: FaceGeometryModel) { - DispatchQueue.main.async { [self] in - faceDetectedState = .faceDetected - faceGeometryState = .faceFound(faceGeometryModel) +// MARK: Action Handlers +extension SelfieViewModelV2 { + private func resetGuideAnimationDelayTimer() { + elapsedGuideAnimationDelay = 0 + showGuideAnimation = false + stopGuideAnimationDelayTimer() + guideAnimationDelayTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in + self.elapsedGuideAnimationDelay += 1 + if self.elapsedGuideAnimationDelay == self.guideAnimationDelayTime { + self.showGuideAnimation = true + self.stopGuideAnimationDelayTimer() + } } } - private func publishFaceQualityObservation(_ faceQualityModel: FaceQualityModel) { - DispatchQueue.main.async { [self] in - faceDetectedState = .faceDetected - faceQualityState = .faceFound(faceQualityModel) - } + private func stopGuideAnimationDelayTimer() { + guideAnimationDelayTimer?.invalidate() + guideAnimationDelayTimer = nil } - private func publishSelfieQualityObservation(_ selfieQualityModel: SelfieQualityModel) { - DispatchQueue.main.async { [self] in - faceDetectedState = .faceDetected - selfieQualityState = .faceFound(selfieQualityModel) - } + private func handleWindowSizeChanged(toRect: CGRect) { + faceLayoutGuideFrame = CGRect( + x: toRect.midX - faceLayoutGuideFrame.width / 2, + y: toRect.midY - faceLayoutGuideFrame.height / 2, + width: faceLayoutGuideFrame.width, + height: faceLayoutGuideFrame.height + ) + faceValidator.setLayoutGuideFrame(with: faceLayoutGuideFrame) } private func captureSelfieImage(_ pixelBuffer: CVPixelBuffer) { do { - guard let imageData = ImageUtils.resizePixelBufferToHeight( - pixelBuffer, - height: selfieImageSize, - orientation: .up - ) else { + guard + let imageData = ImageUtils.resizePixelBufferToHeight( + pixelBuffer, + height: selfieImageSize, + orientation: .up + ) + else { throw SmileIDError.unknown("Error resizing selfie image") } let selfieImage = try LocalStorage.createSelfieFile(jobId: jobId, selfieFile: imageData) @@ -222,11 +201,13 @@ public class SelfieViewModelV2: ObservableObject { private func captureLivenessImage(_ pixelBuffer: CVPixelBuffer) { do { - guard let imageData = ImageUtils.resizePixelBufferToHeight( - pixelBuffer, - height: livenessImageSize, - orientation: .up - ) else { + guard + let imageData = ImageUtils.resizePixelBufferToHeight( + pixelBuffer, + height: livenessImageSize, + orientation: .up + ) + else { throw SmileIDError.unknown("Error resizing liveness image") } let imageUrl = try LocalStorage.createLivenessFile(jobId: jobId, livenessFile: imageData) @@ -244,115 +225,54 @@ public class SelfieViewModelV2: ObservableObject { guard let settingsURL = URL(string: UIApplication.openSettingsURLString) else { return } UIApplication.shared.open(settingsURL) } - - private func toggleDebugMode() { - debugEnabled.toggle() - } } -// MARK: Helpers -extension SelfieViewModelV2 { - func determineDirective() { - switch faceDetectedState { - case .faceDetected: - if hasDetectedValidFace { - if let currentLivenessTask = activeLiveness.currentTask { - directive = currentLivenessTask.instruction - } else { - directive = "" - } - } else if isAcceptableBounds == .detectedFaceTooSmall { - directive = "Please bring your face closer to the camera" - } else if isAcceptableBounds == .detectedFaceTooLarge { - directive = "Please hold the camera further from your face" - } else if isAcceptableBounds == .detectedFaceOffCentre { - directive = "Please move your face to the center of the frame" - } else if !isAcceptableSelfieQuality { - directive = "Image quality is too low" - } else { - directive = "We cannot take your photo right now" - } - case .noFaceDetected: - directive = "Please look at the camera" - case .faceDetectionErrored: - directive = "An unexpected error ocurred" - } - } - - func processUpdatedFaceGeometry() { - switch faceGeometryState { - case let .faceFound(faceGeometryModel): - let boundingBox = faceGeometryModel.boundingBox - updateAcceptableBounds(using: boundingBox) - if hasDetectedValidFace && - selfieImage != nil && - activeLiveness.currentTask != nil { - activeLiveness.processFaceGeometry(faceGeometryModel) - } - case .faceNotFound: - invalidateFaceGeometryState() - case let .errored(error): - print(error.localizedDescription) - invalidateFaceGeometryState() +// MARK: FaceDetectorResultDelegate Methods +extension SelfieViewModelV2: FaceDetectorResultDelegate { + func faceDetector( + _ detector: FaceDetectorV2, + didDetectFace faceGeometry: FaceGeometryData, + withFaceQuality faceQuality: Float, + selfieQuality: SelfieQualityData, + brightness: Int + ) { + faceValidator + .validate( + faceGeometry: faceGeometry, + selfieQuality: selfieQuality, + brightness: brightness, + currentLivenessTask: self.livenessCheckManager.currentTask + ) + if shouldBeginLivenessChallenge { + livenessCheckManager.processFaceGeometry(faceGeometry) } } - func invalidateFaceGeometryState() { - // This is where we reset all the face geometry values. - isAcceptableBounds = .unknown - } - - func updateAcceptableBounds(using boundingBox: CGRect) { - boundingXDelta = abs(boundingBox.midX - faceLayoutGuideFrame.midX) - boundingYDelta = abs(boundingBox.midY - faceLayoutGuideFrame.midY) - - if boundingBox.width > 1.2 * faceLayoutGuideFrame.width { - isAcceptableBounds = .detectedFaceTooLarge - } else if boundingBox.width * 1.2 < faceLayoutGuideFrame.width { - isAcceptableBounds = .detectedFaceTooSmall - } else { - if abs(boundingBox.midX - faceLayoutGuideFrame.midX) > 50 { - isAcceptableBounds = .detectedFaceOffCentre - } else if abs(boundingBox.midY - faceLayoutGuideFrame.midY) > 50 { - isAcceptableBounds = .detectedFaceOffCentre - } else { - isAcceptableBounds = .detectedFaceAppropriateSizeAndPosition - } + func faceDetector(_ detector: FaceDetectorV2, didFailWithError error: Error) { + DispatchQueue.main.async { + self.publishUserInstruction(.headInFrame) } + print(error.localizedDescription) } +} - func processUpdatedFaceQuality() { - switch faceQualityState { - case let .faceFound(faceQualityModel): - // Check acceptable range here. - isAcceptableFaceQuality = faceQualityModel.quality > 0.2 - faceQualityValue = Double(faceQualityModel.quality) - case .faceNotFound: - isAcceptableFaceQuality = false - case let .errored(error): - print(error.localizedDescription) - isAcceptableFaceQuality = false +// MARK: FaceValidatorDelegate Methods +extension SelfieViewModelV2: FaceValidatorDelegate { + func updateValidationResult(_ result: FaceValidationResult) { + DispatchQueue.main.async { + self.faceInBounds = result.faceInBounds + self.hasDetectedValidFace = result.hasDetectedValidFace + self.publishUserInstruction(result.userInstruction) } } +} - func processUpdatedSelfieQuality() { - switch selfieQualityState { - case let .faceFound(selfieQualityModel): - // Check acceptable range here. - isAcceptableSelfieQuality = selfieQualityModel.passed > 0.5 - selfieQualityValue = selfieQualityModel - case .faceNotFound: - isAcceptableSelfieQuality = false - case let .errored(error): - print(error.localizedDescription) - isAcceptableSelfieQuality = false +// MARK: API Helpers +extension SelfieViewModelV2 { + func submitJob(forcedFailure: Bool = false) { + DispatchQueue.main.async { + self.isSubmittingJob = true + self.isShowingImages = true } } - - func calculateDetectedFaceValidity() { - hasDetectedValidFace = - isAcceptableBounds == .detectedFaceAppropriateSizeAndPosition && - isAcceptableFaceQuality && - isAcceptableSelfieQuality - } } diff --git a/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift b/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift index b43c6c1a1..b678711df 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift @@ -2,40 +2,53 @@ import Lottie import SwiftUI struct FaceBoundingArea: View { - @State private var playbackMode: LottiePlaybackMode = .paused + var faceInBounds: Bool + var showGuideAnimation: Bool + var guideAnimation: CaptureGuideAnimation? - // Constants - private let lookRightAnimationRange: ClosedRange = 0...0.4 - private let lookLeftAnimationRange: ClosedRange = 0.4...0.64 - private let lookUpAnimationRange: ClosedRange = 0.64...1.0 + @State private var playbackMode: LottiePlaybackMode = .paused var body: some View { ZStack { // Face Bounds Indicator - Circle() - .stroke(.red, lineWidth: 10) - .frame(width: 275, height: 275) - Circle() - .fill(.black.opacity(0.5)) - .frame(width: 260, height: 260) - .overlay( - LottieView { - try await DotLottieFile.named("liveness_guides", bundle: SmileIDResourcesHelper.bundle) + if !faceInBounds { + Circle() + .stroke( + faceInBounds ? .green : .red, + lineWidth: 10 + ) + .frame(width: 275, height: 275) + } + + if let guideAnimation = guideAnimation, + showGuideAnimation { + Circle() + .fill(.black.opacity(0.5)) + .frame(width: 260, height: 260) + .overlay( + LottieView { + try await DotLottieFile + .named( + guideAnimation.fileName, + bundle: SmileIDResourcesHelper.bundle + ) + } + .playbackMode(playbackMode) + .frame(width: 224, height: 224) + ) + .clipShape(.circle) + .onAppear { + playbackMode = getPlaybackMode(guideAnimation) } - .playbackMode(playbackMode) - .frame(width: 224, height: 224) - ) - } - .onAppear { - playbackMode = getPlaybackMode() + } } } - private func getPlaybackMode() -> LottiePlaybackMode { + private func getPlaybackMode(_ animation: CaptureGuideAnimation) -> LottiePlaybackMode { return .playing( .fromProgress( - lookUpAnimationRange.lowerBound, - toProgress: lookUpAnimationRange.upperBound, + animation.animationProgressRange.lowerBound, + toProgress: animation.animationProgressRange.upperBound, loopMode: .autoReverse ) ) diff --git a/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingBoxView.swift b/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingBoxView.swift deleted file mode 100644 index 1290e2c2b..000000000 --- a/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingBoxView.swift +++ /dev/null @@ -1,23 +0,0 @@ -import SwiftUI - -struct FaceBoundingBoxView: View { - @ObservedObject private(set) var model: SelfieViewModelV2 - - var body: some View { - switch model.faceGeometryState { - case let .faceFound(faceGeometryModel): - Rectangle() - .path(in: CGRect( - x: faceGeometryModel.boundingBox.origin.x, - y: faceGeometryModel.boundingBox.origin.y, - width: faceGeometryModel.boundingBox.width, - height: faceGeometryModel.boundingBox.height - )) - .stroke(Color.yellow, lineWidth: 2.0) - case .faceNotFound: - Rectangle().fill(Color.clear) - case .errored: - Rectangle().fill(Color.clear) - } - } -} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/FaceLayoutGuideView.swift b/Sources/SmileID/Classes/SelfieCapture/View/FaceLayoutGuideView.swift deleted file mode 100644 index b5745027b..000000000 --- a/Sources/SmileID/Classes/SelfieCapture/View/FaceLayoutGuideView.swift +++ /dev/null @@ -1,16 +0,0 @@ -import SwiftUI - -struct FaceLayoutGuideView: View { - @ObservedObject private(set) var model: SelfieViewModelV2 - - var body: some View { - Rectangle() - .path(in: CGRect( - x: model.faceLayoutGuideFrame.minX, - y: model.faceLayoutGuideFrame.minY, - width: model.faceLayoutGuideFrame.width, - height: model.faceLayoutGuideFrame.height - )) - .stroke(Color.red) - } -} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/LivenessCaptureInstructionsView.swift b/Sources/SmileID/Classes/SelfieCapture/View/LivenessCaptureInstructionsView.swift index 07363910c..ed8808675 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/LivenessCaptureInstructionsView.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/LivenessCaptureInstructionsView.swift @@ -5,8 +5,20 @@ public struct LivenessCaptureInstructionsView: View { let showAttribution: Bool let onInstructionsAcknowledged: () -> Void + @Environment(\.presentationMode) private var presentationMode + public var body: some View { VStack { + HStack { + Button { + presentationMode.wrappedValue.dismiss() + } label: { + Text(SmileIDResourcesHelper.localizedString(for: "Action.Cancel")) + .foregroundColor(SmileID.theme.accent) + } + Spacer() + } + ZStack { LottieView { try await DotLottieFile.named("instructions_no_progress", bundle: SmileIDResourcesHelper.bundle) diff --git a/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreen.swift b/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreen.swift index 48c7e9335..824e7ccad 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreen.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreen.swift @@ -9,11 +9,11 @@ public struct OrchestratedSelfieCaptureScreen: View { public let showInstructions: Bool public let onResult: SmartSelfieResultDelegate @ObservedObject var viewModel: SelfieViewModel - + @State private var localMetadata = LocalMetadata() @State private var acknowledgedInstructions = false private var originalBrightness = UIScreen.main.brightness - + public init( userId: String, jobId: String, @@ -40,7 +40,7 @@ public struct OrchestratedSelfieCaptureScreen: View { localMetadata: LocalMetadata() ) } - + public var body: some View { if showInstructions, !acknowledgedInstructions { SmartSelfieInstructionsScreen(showAttribution: showAttribution) { diff --git a/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift b/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift index 3d1730d35..90ae5eff8 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift @@ -4,11 +4,8 @@ import SwiftUI public struct SelfieCaptureScreenV2: View { @ObservedObject var viewModel: SelfieViewModelV2 let showAttribution: Bool - @State private var showImages: Bool = false - @State private var progress1: CGFloat = 0.3 - @State private var progress2: CGFloat = 0.8 - @State private var progress3: CGFloat = 0.5 + @Environment(\.presentationMode) private var presentationMode public var body: some View { GeometryReader { proxy in @@ -17,6 +14,7 @@ public struct SelfieCaptureScreenV2: View { CameraView(cameraManager: viewModel.cameraManager, selfieViewModel: viewModel) .onAppear { viewModel.cameraManager.switchCamera(to: .front) + viewModel.perform(action: .setupDelayTimer) } // CameraPreview Mask @@ -27,14 +25,31 @@ public struct SelfieCaptureScreenV2: View { .frame(width: 260, height: 260) } - FaceBoundingArea() - UserInstructionsView(viewModel: viewModel) - LivenessGuidesView( - topArcProgress: $progress1, - rightArcProgress: $progress2, - leftArcProgress: $progress3 + FaceBoundingArea( + faceInBounds: viewModel.faceInBounds, + showGuideAnimation: viewModel.showGuideAnimation, + guideAnimation: viewModel.userInstruction?.guideAnimation ) - .hidden() + UserInstructionsView(viewModel: viewModel) + if viewModel.faceInBounds { + LivenessGuidesView( + topArcProgress: $viewModel.livenessCheckManager.lookUpProgress, + rightArcProgress: $viewModel.livenessCheckManager.lookRightProgress, + leftArcProgress: $viewModel.livenessCheckManager.lookLeftProgress + ) + } + + VStack { + Spacer() + Button { + viewModel.cameraManager.pauseSession() + presentationMode.wrappedValue.dismiss() + } label: { + Text(SmileIDResourcesHelper.localizedString(for: "Action.Cancel")) + .foregroundColor(SmileID.theme.accent) + } + } + .padding(.vertical, 40) } .edgesIgnoringSafeArea(.all) .onAppear { @@ -45,7 +60,9 @@ public struct SelfieCaptureScreenV2: View { title: Text(alert.title), message: Text(alert.message ?? ""), primaryButton: .default( - Text(SmileIDResourcesHelper.localizedString(for: "Camera.Unauthorized.PrimaryAction")), + Text( + SmileIDResourcesHelper.localizedString( + for: "Camera.Unauthorized.PrimaryAction")), action: { viewModel.perform(action: .openApplicationSettings) } @@ -53,94 +70,8 @@ public struct SelfieCaptureScreenV2: View { secondaryButton: .cancel() ) } - .sheet(isPresented: $showImages) { - CapturedImagesView(model: viewModel) - } - } - } - - // swiftlint:disable identifier_name - @ViewBuilder func DebugView() -> some View { - ZStack { - FaceBoundingBoxView(model: viewModel) - FaceLayoutGuideView(model: viewModel) - VStack(spacing: 0) { - Spacer() - Text("xDelta: \(viewModel.boundingXDelta)") - Text("yDelta: \(viewModel.boundingYDelta)") - switch viewModel.isAcceptableBounds { - case .unknown: - Text("Bounds - Unknown") - case .detectedFaceTooSmall: - Text("Bounds - Face too small") - case .detectedFaceTooLarge: - Text("Bounds - Face too large") - case .detectedFaceOffCentre: - Text("Bounds - Face off Center") - case .detectedFaceAppropriateSizeAndPosition: - Text("Bounds - Appropriate Size and Position") - } - Divider() - Text("Yaw: \(viewModel.activeLiveness.yawAngle)") - Text("Row: \(viewModel.activeLiveness.rollAngle)") - Text("Pitch: \(viewModel.activeLiveness.pitchAngle)") - Text("Quality: \(viewModel.faceQualityValue)") - Text("Fail: \(viewModel.selfieQualityValue.failed) | Pass: \(viewModel.selfieQualityValue.passed)") - .font(.subheadline.weight(.medium)) - .padding(5) - .background(Color.yellow) - .clipShape(.rect(cornerRadius: 5)) - .padding(.bottom, 10) - HStack { - switch viewModel.activeLiveness.faceDirection { - case .left: - Text("Looking Left") - case .right: - Text("Looking Right") - case .none: - Text("Looking Straight") - } - Spacer() - Button { - showImages = true - } label: { - RoundedRectangle(cornerRadius: 5) - .fill(.yellow) - .frame(width: 50, height: 50) - .overlay( - Text("\(viewModel.livenessImages.count + (viewModel.selfieImage != nil ? 1 : 0))") - .fontWeight(.medium) - .foregroundColor(.primary) - ) - } - } - } - .font(.footnote) - .foregroundColor(.white) - .padding(.bottom, 40) - .padding(.horizontal) - } - } - - // swiftlint:disable identifier_name - @ViewBuilder func CameraOverlayView() -> some View { - VStack { - HStack { - Text(SmileIDResourcesHelper.localizedString(for: viewModel.directive)) - .font(SmileID.theme.header2) - .foregroundColor(.primary) - .padding(.bottom) - } - .background(Color.black) - Spacer() - HStack { - Button { - viewModel.perform(action: .toggleDebugMode) - } label: { - Image(systemName: "ladybug") - .font(.title) - } - .buttonStyle(.plain) + .sheet(isPresented: $viewModel.isShowingImages) { + SelfieProcessingView(model: viewModel) } } } diff --git a/Sources/SmileID/Classes/SelfieCapture/View/CapturedImagesView.swift b/Sources/SmileID/Classes/SelfieCapture/View/SelfieProcessingView.swift similarity index 98% rename from Sources/SmileID/Classes/SelfieCapture/View/CapturedImagesView.swift rename to Sources/SmileID/Classes/SelfieCapture/View/SelfieProcessingView.swift index 8a04c6162..a9c0876c3 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/CapturedImagesView.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/SelfieProcessingView.swift @@ -1,6 +1,6 @@ import SwiftUI -struct CapturedImagesView: View { +struct SelfieProcessingView: View { var model: SelfieViewModelV2 @State private var images: [UIImage] = [] diff --git a/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift b/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift index eccea35b7..30b52ab71 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift @@ -5,11 +5,11 @@ struct UserInstructionsView: View { var body: some View { VStack { - Text(SmileIDResourcesHelper.localizedString(for: viewModel.directive)) + Text(SmileIDResourcesHelper.localizedString(for: viewModel.userInstruction?.instruction ?? "")) .multilineTextAlignment(.center) .font(SmileID.theme.header2) .foregroundColor(SmileID.theme.accent) - .padding(.top, 40) + .padding(.top, 80) .padding(.horizontal, 50) Spacer() } diff --git a/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings b/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings index 91fbaae8a..4027e5c0d 100644 --- a/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings +++ b/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings @@ -14,6 +14,7 @@ "Instructions.Action" = "I'm Ready"; "Instructions.UnableToDetectFace" = "Unable to detect face. Please ensure your face is in the oval"; "Instructions.MoveCloser" = "Move closer"; +"Instructions.MoveBack" = "Move back"; "Instructions.MoveFarther" = "Move farther away"; "Instructions.UnknownError" = "We cannot take your photo right now"; "Instructions.MultipleFaces" = "Ensure only one face is visible"; @@ -21,8 +22,13 @@ "Instructions.Capturing" = "Capturing…"; "Instructions.PutFaceInOval" = "Position your face in the oval"; "Instructions.Quality" = "Move to well lit area and clear face of obstructions"; +"Instructions.Brightness" = "Move to a well lit room"; "Instructions.Start" = "Put your face inside the oval frame and wait until it turns green"; "Instructions.SelfieCapture" = "Position you head in camera frame. \nThen move in the direction that is indicated"; +"Instructions.PositionHeadInView" = "Position your head in view"; +"Instructions.TurnHeadLeft" = "Turn your head to the left"; +"Instructions.TurnHeadRight" = "Turn your head to the right"; +"Instructions.TurnHeadUp" = "Turn your head slightly up"; "Instructions.Document.Front.Header" = "Submit Front of ID"; "Instructions.Document.Front.Callout" = "We'll use it to verify your identity. Please follow the instructions below"; "Instructions.Document.GoodLightBody" = "Make sure your ID image is taken in a well-lit environment. Ensure the ID is clear and visible."; @@ -47,6 +53,7 @@ "Action.UploadPhoto" = "Upload Photo"; "Action.Skip" = "Skip back of ID"; "Action.GetStarted" = "Get Started"; +"Action.Cancel" = "Cancel"; "Camera.AgentMode" = "Agent Mode"; "Camera.Unauthorized.Title" = "Allow access to your camera"; diff --git a/Sources/SmileID/Resources/LottieFiles/light_animation.lottie b/Sources/SmileID/Resources/LottieFiles/light_animation.lottie new file mode 100644 index 0000000000000000000000000000000000000000..2640b2d52e0d43b697861d1bf7aeded422dccd9c GIT binary patch literal 2094 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 F`v-d*tQ7zN literal 0 HcmV?d00001 From 1c642f57d7251ebe6f57759a086a4fa687b3a130 Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Mon, 28 Oct 2024 12:28:34 +0100 Subject: [PATCH 13/23] run pod install --- Example/Podfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Example/Podfile.lock b/Example/Podfile.lock index a2d6a64be..6e7dbe16e 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -51,7 +51,7 @@ SPEC CHECKSUMS: lottie-ios: fcb5e73e17ba4c983140b7d21095c834b3087418 netfox: 9d5cc727fe7576c4c7688a2504618a156b7d44b7 Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 - SmileID: 0ce57af077a6d201d382b67209f9d8742db6c97b + SmileID: 50af832bbd9f96a649325645ecfd25b05faecf41 SwiftLint: 3fe909719babe5537c552ee8181c0031392be933 ZIPFoundation: b8c29ea7ae353b309bc810586181fd073cb3312c From a93950f09304a0109ba094d484b007a3c357bc53 Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Wed, 6 Nov 2024 12:30:03 +0100 Subject: [PATCH 14/23] Box Oval Interface for Selfie Capture Screen (#250) * improve code and file structure * add the liveness guides * add some config values to liveness guides view. * change lottie animation frame * run pod install * setup animation progress time for the liiveness guide lottie animation. * fix homeview fore each warnings. * connect face bounds detection to the the indicator. * add throttling to camera feed. * use full screen cover to present home screen products. * control progress arc visibility based on progress. * add a dummy submit function. * setup timers. * add animation to the progress fill arcs. * refactor the components of liveness guides view. * setup delay timer and introduce state for the current animation that should be displayed with instructions after delay. * update arc shape init * add new lottie files. define a guide animation enum to hold the animation details. * some refactoring. * create a validator class for the face observation data. * refactor buffer image processing and communication between face detector, face validator and selfie view model. some code formatting. * remove some debug views. some refactoring and improvements. * make capture instruction strings localizable * introduce current liveness task into the face validator to set the right capture instruction. * fix cropping for selfie quality check. * show or hide the circular ring and the liveness guides based on whether face is within bounds. * add processing view to view captured images. * reset animation as user is completing liveness checks * inject current liveness task into liveness guide to control which progress is showing. update reset delay timer on main thread. use appropriate error for face detection during cropping. * processing screen layout. introduce a backport of stateobject. * run pod install to import missing lottie files. * present selfie capture flow in navigation view, programmatically navigate to processing view based on capture status. add a circular progress view with a loader image for the selfie processing view. * refactor view appear setup and reset selfie capture state variables * import submit method from selfie viewmodel. * extract submit selfie functionality into a new class to manage the submission processes. * some refactoring * move backport and stateobject to helper folder. * code formatting. * restore threshold value * replace ObservedObject with StateObject in HomeView so that it's initialised once. * use proxy size instead of frame for window size calculation and face layout guide positioning. * remove stateobject backport * use a delegate to communicate selfie submission updates to selfie view model. add the right title to processing screen. * update processing changes on main thread. * inject failure reason into the api call for submitting selfie * rename selfie submission manager * reset the threshold for timeout for liveness check. * remove presentation mode variable. * introduce an environment key to manage dismissing of the selfie capture flow. * improve error handling of selfie capture. * localise strings. * code formatting. * pod install * make loader background color themeable. * run pod install. * fix missing files and build errors. * redesign selfie capture screen to use box and oval for camera area and face bounding area * add a view to preview selfie image, also add an actions view. * redesign the the progress arcs for active liveness. * improvements to validating face bounding box. add a frame to selfie preview image. * remove processing view, add a view state to control visibility of different items based on capture state. * adjust face size and position evaluation. fix layout for attribution and retry button. * change active liveness progress colours * code formatting. * update faceboundmultiplier constant. * refactor task timer. * improve submission handling. --- Example/SmileID.xcodeproj/project.pbxproj | 100 ++++---- Example/SmileID/Home/HomeView.swift | 26 +- Example/SmileID/Home/ProductCell.swift | 11 +- .../Classes/FaceDetector/FaceDetectorV2.swift | 11 +- .../Classes/FaceDetector/FaceValidator.swift | 37 +-- .../FaceDetector/LivenessCheckManager.swift | 19 +- .../Classes/Helpers/NavigationHelper.swift | 11 + .../Helpers/SmileIDResourcesHelper.swift | 1 + .../Networking/Models/FailureReason.swift | 11 + .../Classes/Networking/ServiceRunnable.swift | 105 +++++--- .../Classes/Networking/SmileIDService.swift | 6 + .../SelfieSubmissionManager.swift | 234 ++++++++++++++++++ .../SelfieCapture/SelfieViewModel.swift | 10 +- .../SelfieCapture/SelfieViewModelAction.swift | 9 +- .../SelfieCapture/SelfieViewModelV2.swift | 192 +++++++++++--- .../SelfieCapture/View/ArcProgressView.swift | 45 +++- .../View/CircularProgressView.swift | 20 ++ .../SelfieCapture/View/FaceBoundingArea.swift | 22 +- .../LivenessCaptureInstructionsView.swift | 26 +- .../View/LivenessGuidesView.swift | 27 +- .../OrchestratedSelfieCaptureScreenV2.swift | 23 +- .../View/SelfieActionsView.swift | 26 ++ .../View/SelfieCaptureScreenV2.swift | 150 ++++++++--- .../View/SelfiePreviewView.swift | 13 + .../View/SelfieProcessingView.swift | 61 ----- .../View/SubmissionStatusView.swift | 26 ++ .../View/UserInstructionsView.swift | 23 +- Sources/SmileID/Classes/SmileID.swift | 2 +- .../Classes/Views/ProcessingScreen.swift | 10 +- .../Localization/en.lproj/Localizable.strings | 4 + .../Loader.imageset/Contents.json | 23 ++ .../Media.xcassets/Loader.imageset/Loader.png | Bin 0 -> 2441 bytes .../Loader.imageset/Loader@2x.png | Bin 0 -> 6456 bytes .../Loader.imageset/Loader@3x.png | Bin 0 -> 11554 bytes Tests/Mocks/NetworkingMocks.swift | 2 + 35 files changed, 956 insertions(+), 330 deletions(-) create mode 100644 Sources/SmileID/Classes/Networking/Models/FailureReason.swift create mode 100644 Sources/SmileID/Classes/SelfieCapture/SelfieSubmissionManager.swift create mode 100644 Sources/SmileID/Classes/SelfieCapture/View/CircularProgressView.swift create mode 100644 Sources/SmileID/Classes/SelfieCapture/View/SelfieActionsView.swift create mode 100644 Sources/SmileID/Classes/SelfieCapture/View/SelfiePreviewView.swift delete mode 100644 Sources/SmileID/Classes/SelfieCapture/View/SelfieProcessingView.swift create mode 100644 Sources/SmileID/Classes/SelfieCapture/View/SubmissionStatusView.swift create mode 100644 Sources/SmileID/Resources/Media.xcassets/Loader.imageset/Contents.json create mode 100644 Sources/SmileID/Resources/Media.xcassets/Loader.imageset/Loader.png create mode 100644 Sources/SmileID/Resources/Media.xcassets/Loader.imageset/Loader@2x.png create mode 100644 Sources/SmileID/Resources/Media.xcassets/Loader.imageset/Loader@3x.png diff --git a/Example/SmileID.xcodeproj/project.pbxproj b/Example/SmileID.xcodeproj/project.pbxproj index b075a29db..d5f4a145c 100644 --- a/Example/SmileID.xcodeproj/project.pbxproj +++ b/Example/SmileID.xcodeproj/project.pbxproj @@ -63,8 +63,6 @@ 6AC98B6FFA753C5463F7216F /* SmileConfigEntryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC984E484EEF69069C705C7 /* SmileConfigEntryView.swift */; }; 6AC98C0E9305B4B3EB66ED35 /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC980584C522B17A099E098 /* Util.swift */; }; 6AC98F5682012E19C815AE70 /* DocumentSelectorViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC9893915EBA33F6984A6D9 /* DocumentSelectorViewModel.swift */; }; - 7A41A4E7F2F61443C92D1410 /* Pods_SmileID_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D2FA3DD9146D52A19577F54 /* Pods_SmileID_Tests.framework */; }; - 7C1E37843B470E1ECF8A2260 /* Pods_SmileID_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8BAC74F0F90CC68EE4E8873 /* Pods_SmileID_Example.framework */; }; 918321EA2A52E36A00D6FB7F /* URLSessionRestServiceClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 918321E02A52E36A00D6FB7F /* URLSessionRestServiceClientTests.swift */; }; 918321EB2A52E36A00D6FB7F /* XCTestExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 918321E12A52E36A00D6FB7F /* XCTestExtension.swift */; }; 918321EC2A52E36A00D6FB7F /* DependencyContainerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 918321E32A52E36A00D6FB7F /* DependencyContainerTests.swift */; }; @@ -73,6 +71,8 @@ 91CB21A52AC10C61005AEBF5 /* NavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CB21A42AC10C61005AEBF5 /* NavigationBar.swift */; }; 91D9FBC42AB481FE00A8D36B /* PollingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D9FBC32AB481FE00A8D36B /* PollingTests.swift */; }; 91D9FBD52AB8AB4700A8D36B /* CalculateSignatureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D9FBD42AB8AB4700A8D36B /* CalculateSignatureTests.swift */; }; + C449A598C4B78EB14B493293 /* Pods_SmileID_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02FE7FAA5FCF2B4172E1B98D /* Pods_SmileID_Example.framework */; }; + D4216F3C762CB28B31699F35 /* Pods_SmileID_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3A0FB77997B5C7D540E6873 /* Pods_SmileID_Tests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -86,6 +86,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 02FE7FAA5FCF2B4172E1B98D /* Pods_SmileID_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1E59E33D2BA1E64C00D2BAD2 /* PartnerParamsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PartnerParamsTests.swift; sourceTree = ""; }; 1E60ED322A29C306002695FF /* HomeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; 1E60ED332A29C306002695FF /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; @@ -117,6 +118,7 @@ 20C360C72C454C130008DBDE /* RootViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewModel.swift; sourceTree = ""; }; 20DFA0EB2C21917100AC2AE7 /* View+TextSelection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+TextSelection.swift"; sourceTree = ""; }; 20F3D6F52C25F5C100B32751 /* SmileID.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SmileID.xcdatamodel; sourceTree = ""; }; + 23822FF3F5838ECB320564F5 /* Pods-SmileID_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.release.xcconfig"; sourceTree = ""; }; 5829A8BF2BC7429A001C1E7E /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 585BE4872AC7748E0091DDD8 /* RestartableTimerTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestartableTimerTest.swift; sourceTree = ""; }; 58C5F1D72B05925800A6080C /* BiometricKycWithIdInputScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BiometricKycWithIdInputScreen.swift; sourceTree = ""; }; @@ -144,8 +146,9 @@ 6AC9893915EBA33F6984A6D9 /* DocumentSelectorViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DocumentSelectorViewModel.swift; sourceTree = ""; }; 6AC98BA00298258573CBCBD4 /* ScannerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScannerViewController.swift; sourceTree = ""; }; 6AC98BC49871655D87C7DEE3 /* SettingsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewModel.swift; sourceTree = ""; }; - 6E907B7A51A30501D222F7A1 /* Pods-SmileID_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.debug.xcconfig"; sourceTree = ""; }; - 8D2FA3DD9146D52A19577F54 /* Pods_SmileID_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 70FFBEEAB7A2E3A33EE9EA93 /* Pods-SmileID_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.release.xcconfig"; sourceTree = ""; }; + 784454F0D57FB1E2742E2156 /* Pods-SmileID_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.debug.xcconfig"; sourceTree = ""; }; + 821B859ACAC64E44F59427CD /* Pods-SmileID_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.debug.xcconfig"; sourceTree = ""; }; 918321E02A52E36A00D6FB7F /* URLSessionRestServiceClientTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLSessionRestServiceClientTests.swift; sourceTree = ""; }; 918321E12A52E36A00D6FB7F /* XCTestExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = XCTestExtension.swift; path = ../../Tests/XCTestExtension.swift; sourceTree = ""; }; 918321E32A52E36A00D6FB7F /* DependencyContainerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DependencyContainerTests.swift; sourceTree = ""; }; @@ -156,11 +159,8 @@ 91D9FBD42AB8AB4700A8D36B /* CalculateSignatureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculateSignatureTests.swift; sourceTree = ""; }; 94E7560A47E255DD8215C183 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 9755B6A19CF28DE212F24C83 /* SmileID.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = SmileID.podspec; path = ../SmileID.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - BA3576C81141A6C8FB2A3ECF /* Pods-SmileID_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.release.xcconfig"; sourceTree = ""; }; C8CD2E3DB817D8C6334E9240 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; - E8BAC74F0F90CC68EE4E8873 /* Pods_SmileID_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EAC22FC6E2C754C1D6B827F7 /* Pods-SmileID_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.release.xcconfig"; sourceTree = ""; }; - ED20D3A26C43CE815DC17A5F /* Pods-SmileID_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.debug.xcconfig"; sourceTree = ""; }; + F3A0FB77997B5C7D540E6873 /* Pods_SmileID_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -168,7 +168,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7C1E37843B470E1ECF8A2260 /* Pods_SmileID_Example.framework in Frameworks */, + C449A598C4B78EB14B493293 /* Pods_SmileID_Example.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -176,7 +176,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7A41A4E7F2F61443C92D1410 /* Pods_SmileID_Tests.framework in Frameworks */, + D4216F3C762CB28B31699F35 /* Pods_SmileID_Tests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -278,11 +278,11 @@ path = Helpers; sourceTree = ""; }; - 356C3F5818E6FD9EB9DB6AD4 /* Frameworks */ = { + 34F29B5AE452286D795FCD29 /* Frameworks */ = { isa = PBXGroup; children = ( - E8BAC74F0F90CC68EE4E8873 /* Pods_SmileID_Example.framework */, - 8D2FA3DD9146D52A19577F54 /* Pods_SmileID_Tests.framework */, + 02FE7FAA5FCF2B4172E1B98D /* Pods_SmileID_Example.framework */, + F3A0FB77997B5C7D540E6873 /* Pods_SmileID_Tests.framework */, ); name = Frameworks; sourceTree = ""; @@ -306,7 +306,7 @@ 607FACE81AFB9204008FA782 /* Tests */, 607FACD11AFB9204008FA782 /* Products */, 828BF541E068101B2E6ED55F /* Pods */, - 356C3F5818E6FD9EB9DB6AD4 /* Frameworks */, + 34F29B5AE452286D795FCD29 /* Frameworks */, ); sourceTree = ""; }; @@ -412,10 +412,10 @@ 828BF541E068101B2E6ED55F /* Pods */ = { isa = PBXGroup; children = ( - ED20D3A26C43CE815DC17A5F /* Pods-SmileID_Example.debug.xcconfig */, - EAC22FC6E2C754C1D6B827F7 /* Pods-SmileID_Example.release.xcconfig */, - 6E907B7A51A30501D222F7A1 /* Pods-SmileID_Tests.debug.xcconfig */, - BA3576C81141A6C8FB2A3ECF /* Pods-SmileID_Tests.release.xcconfig */, + 784454F0D57FB1E2742E2156 /* Pods-SmileID_Example.debug.xcconfig */, + 70FFBEEAB7A2E3A33EE9EA93 /* Pods-SmileID_Example.release.xcconfig */, + 821B859ACAC64E44F59427CD /* Pods-SmileID_Tests.debug.xcconfig */, + 23822FF3F5838ECB320564F5 /* Pods-SmileID_Tests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -459,13 +459,13 @@ isa = PBXNativeTarget; buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SmileID_Example" */; buildPhases = ( - CBA71781AF69B78CA901C352 /* [CP] Check Pods Manifest.lock */, + 09CE3487C58D7803D9B1254B /* [CP] Check Pods Manifest.lock */, 607FACCC1AFB9204008FA782 /* Sources */, 917D79282AA8024400FA6624 /* SwiftLint */, 607FACCD1AFB9204008FA782 /* Frameworks */, 607FACCE1AFB9204008FA782 /* Resources */, C0BE335FFECD4DF6892309F3 /* Upload Debug Symbols to Sentry */, - 81AA40A9DF7958775C866BAD /* [CP] Embed Pods Frameworks */, + 088EDD4D204057C2E745D8BC /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -480,7 +480,7 @@ isa = PBXNativeTarget; buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SmileID_Tests" */; buildPhases = ( - 43AC4A9752FE774CAA6A9ECC /* [CP] Check Pods Manifest.lock */, + FB435C9B79B1BE5E6BD677F2 /* [CP] Check Pods Manifest.lock */, 607FACE11AFB9204008FA782 /* Sources */, 607FACE21AFB9204008FA782 /* Frameworks */, 607FACE31AFB9204008FA782 /* Resources */, @@ -563,29 +563,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 43AC4A9752FE774CAA6A9ECC /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SmileID_Tests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 81AA40A9DF7958775C866BAD /* [CP] Embed Pods Frameworks */ = { + 088EDD4D204057C2E745D8BC /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -617,6 +595,28 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + 09CE3487C58D7803D9B1254B /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-SmileID_Example-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 917D79282AA8024400FA6624 /* SwiftLint */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -650,7 +650,7 @@ shellPath = /bin/sh; shellScript = "# This script is responsable to upload debug symbols and source context for Sentry.\nif which sentry-cli >/dev/null; then\nexport SENTRY_ORG=smile-identity\nexport SENTRY_PROJECT=ios\nERROR=$(sentry-cli debug-files upload --include-sources \"$DWARF_DSYM_FOLDER_PATH\" 2>&1 >/dev/null)\nif [ ! $? -eq 0 ]; then\necho \"warning: sentry-cli - $ERROR\"\nfi\nelse\necho \"warning: sentry-cli not installed, download from https://github.com/getsentry/sentry-cli/releases\"\nfi\n"; }; - CBA71781AF69B78CA901C352 /* [CP] Check Pods Manifest.lock */ = { + FB435C9B79B1BE5E6BD677F2 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -665,7 +665,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SmileID_Example-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-SmileID_Tests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -881,7 +881,7 @@ }; 607FACF01AFB9204008FA782 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ED20D3A26C43CE815DC17A5F /* Pods-SmileID_Example.debug.xcconfig */; + baseConfigurationReference = 784454F0D57FB1E2742E2156 /* Pods-SmileID_Example.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "Apple Development"; @@ -914,7 +914,7 @@ }; 607FACF11AFB9204008FA782 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EAC22FC6E2C754C1D6B827F7 /* Pods-SmileID_Example.release.xcconfig */; + baseConfigurationReference = 70FFBEEAB7A2E3A33EE9EA93 /* Pods-SmileID_Example.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "Apple Distribution"; @@ -946,7 +946,7 @@ }; 607FACF31AFB9204008FA782 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6E907B7A51A30501D222F7A1 /* Pods-SmileID_Tests.debug.xcconfig */; + baseConfigurationReference = 821B859ACAC64E44F59427CD /* Pods-SmileID_Tests.debug.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; @@ -979,7 +979,7 @@ }; 607FACF41AFB9204008FA782 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BA3576C81141A6C8FB2A3ECF /* Pods-SmileID_Tests.release.xcconfig */; + baseConfigurationReference = 23822FF3F5838ECB320564F5 /* Pods-SmileID_Tests.release.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Distribution"; diff --git a/Example/SmileID/Home/HomeView.swift b/Example/SmileID/Home/HomeView.swift index 877e2c548..430291899 100644 --- a/Example/SmileID/Home/HomeView.swift +++ b/Example/SmileID/Home/HomeView.swift @@ -10,16 +10,16 @@ struct HomeView: View { _viewModel = StateObject(wrappedValue: HomeViewModel(config: config)) } + let columns = [GridItem(.flexible()), GridItem(.flexible())] + var body: some View { NavigationView { VStack(spacing: 24) { Text("Test Our Products") .font(SmileID.theme.header2) .foregroundColor(.black) - - MyVerticalGrid( - maxColumns: 2, - items: [ + ScrollView(showsIndicators: false) { + LazyVGrid(columns: columns) { ProductCell( image: "smart_selfie_enroll", name: "SmartSelfie™ Enrollment", @@ -38,7 +38,7 @@ struct HomeView: View { ) ) } - ), + ) ProductCell( image: "smart_selfie_authentication", name: "SmartSelfie™ Authentication", @@ -51,7 +51,7 @@ struct HomeView: View { delegate: viewModel ) } - ), + ) ProductCell( image: "smart_selfie_enroll", name: "SmartSelfie™ Enrollment (Strict Mode)", @@ -71,7 +71,7 @@ struct HomeView: View { ) ) } - ), + ) ProductCell( image: "smart_selfie_authentication", name: "SmartSelfie™ Authentication (Strict Mode)", @@ -85,7 +85,7 @@ struct HomeView: View { delegate: viewModel ) } - ), + ) ProductCell( image: "enhanced_kyc", name: "Enhanced KYC", @@ -101,7 +101,7 @@ struct HomeView: View { ) ) } - ), + ) ProductCell( image: "biometric", name: "Biometric KYC", @@ -117,7 +117,7 @@ struct HomeView: View { ) ) } - ), + ) ProductCell( image: "document", name: "\nDocument Verification", @@ -131,7 +131,7 @@ struct HomeView: View { delegate: viewModel ) } - ), + ) ProductCell( image: "enhanced_doc_v", name: "Enhanced Document Verification", @@ -146,10 +146,8 @@ struct HomeView: View { ) } ) - ].map { - AnyView($0) } - ) + } Text("Partner \(viewModel.partnerId) - Version \(version) - Build \(build)") .font(SmileID.theme.body) diff --git a/Example/SmileID/Home/ProductCell.swift b/Example/SmileID/Home/ProductCell.swift index dd524e994..a25967ce2 100644 --- a/Example/SmileID/Home/ProductCell.swift +++ b/Example/SmileID/Home/ProductCell.swift @@ -1,18 +1,18 @@ import SmileID import SwiftUI -struct ProductCell: View { +struct ProductCell: View { let image: String let name: String let onClick: (() -> Void)? - @ViewBuilder let content: () -> any View + @ViewBuilder let content: () -> Content @State private var isPresented: Bool = false init( image: String, name: String, onClick: (() -> Void)? = nil, - @ViewBuilder content: @escaping () -> any View + @ViewBuilder content: @escaping () -> Content ) { self.image = image self.name = name @@ -44,7 +44,10 @@ struct ProductCell: View { .fullScreenCover( isPresented: $isPresented, content: { - AnyView(content()) + NavigationView { + content() + } + .environment(\.modalMode, $isPresented) } ) } diff --git a/Sources/SmileID/Classes/FaceDetector/FaceDetectorV2.swift b/Sources/SmileID/Classes/FaceDetector/FaceDetectorV2.swift index f71c69520..8a9ba94f6 100644 --- a/Sources/SmileID/Classes/FaceDetector/FaceDetectorV2.swift +++ b/Sources/SmileID/Classes/FaceDetector/FaceDetectorV2.swift @@ -67,12 +67,14 @@ class FaceDetectorV2: NSObject { let faceObservation = faceDetections.first, let faceQualityObservation = faceQualityObservations.first else { - self.resultDelegate?.faceDetector(self, didFailWithError: FaceDetectorError.noFaceDetected) + self.resultDelegate?.faceDetector( + self, didFailWithError: FaceDetectorError.noFaceDetected) return } let convertedBoundingBox = - self.viewDelegate?.convertFromMetadataToPreviewRect(rect: faceObservation.boundingBox) ?? .zero + self.viewDelegate?.convertFromMetadataToPreviewRect( + rect: faceObservation.boundingBox) ?? .zero let uiImage = UIImage(pixelBuffer: imageBuffer) let brightness = self.calculateBrightness(uiImage) @@ -166,7 +168,10 @@ class FaceDetectorV2: NSObject { } let croppedImage = UIImage(cgImage: croppedCGImage) - guard let resizedImage = croppedImage.pixelBuffer(width: cropSize.width, height: cropSize.height) else { + guard + let resizedImage = croppedImage.pixelBuffer( + width: cropSize.width, height: cropSize.height) + else { throw FaceDetectorError.unableToCropImage } diff --git a/Sources/SmileID/Classes/FaceDetector/FaceValidator.swift b/Sources/SmileID/Classes/FaceDetector/FaceValidator.swift index 90f795b6a..bee6b2ece 100644 --- a/Sources/SmileID/Classes/FaceDetector/FaceValidator.swift +++ b/Sources/SmileID/Classes/FaceDetector/FaceValidator.swift @@ -17,7 +17,7 @@ final class FaceValidator { // MARK: Constants private let selfieQualityThreshold: Float = 0.5 private let luminanceThreshold: ClosedRange = 80...200 - private let faceBoundsMultiplier: CGFloat = 1.2 + private let faceBoundsMultiplier: CGFloat = 1.5 private let faceBoundsThreshold: CGFloat = 50 init() {} @@ -33,7 +33,10 @@ final class FaceValidator { currentLivenessTask: LivenessTask? ) { // check face bounds - let faceBoundsState = checkAcceptableBounds(using: faceGeometry.boundingBox) + let faceBoundsState = checkFaceSizeAndPosition( + using: faceGeometry.boundingBox, + shouldCheckCentering: currentLivenessTask == nil + ) let isAcceptableBounds = faceBoundsState == .detectedFaceAppropriateSizeAndPosition // check brightness @@ -98,22 +101,26 @@ final class FaceValidator { } // MARK: Validation Checks - private func checkAcceptableBounds(using boundingBox: CGRect) -> FaceBoundsState { - if boundingBox.width > faceBoundsMultiplier * faceLayoutGuideFrame.width { + private func checkFaceSizeAndPosition(using boundingBox: CGRect, shouldCheckCentering: Bool) -> FaceBoundsState { + let maxFaceWidth = faceLayoutGuideFrame.width - 20 + let minFaceWidth = faceLayoutGuideFrame.width / faceBoundsMultiplier + + if boundingBox.width > maxFaceWidth { return .detectedFaceTooLarge - } else if boundingBox.width * faceBoundsMultiplier < faceLayoutGuideFrame.width { + } else if boundingBox.width < minFaceWidth { return .detectedFaceTooSmall - } else { - if abs( - boundingBox.midX - faceLayoutGuideFrame.midX - ) > faceBoundsThreshold { - return .detectedFaceOffCentre - } else if abs(boundingBox.midY - faceLayoutGuideFrame.midY) > faceBoundsThreshold { + } + + if shouldCheckCentering { + let horizontalOffset = abs(boundingBox.midX - faceLayoutGuideFrame.midX) + let verticalOffset = abs(boundingBox.midY - faceLayoutGuideFrame.midY) + + if horizontalOffset > faceBoundsThreshold || verticalOffset > faceBoundsThreshold { return .detectedFaceOffCentre - } else { - return .detectedFaceAppropriateSizeAndPosition } } + + return .detectedFaceAppropriateSizeAndPosition } private func checkSelfieQuality(_ value: SelfieQualityData) -> Bool { @@ -125,8 +132,6 @@ final class FaceValidator { _ isAcceptableBrightness: Bool, _ isAcceptableSelfieQuality: Bool ) -> Bool { - return isAcceptableBounds && - isAcceptableBrightness && - isAcceptableSelfieQuality + return isAcceptableBounds && isAcceptableBrightness && isAcceptableSelfieQuality } } diff --git a/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift b/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift index ee7cbfa3a..9805aa481 100644 --- a/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift +++ b/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift @@ -61,17 +61,26 @@ class LivenessCheckManager: ObservableObject { /// Resets the task timer to the initial timeout duration. private func resetTaskTimer() { - stopTaskTimer() - taskTimer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { _ in - self.elapsedTime += 1 - if self.elapsedTime == self.taskTimeoutDuration { - self.handleTaskTimeout() + guard taskTimer == nil else { return } + DispatchQueue.main.async { + self.taskTimer = Timer.scheduledTimer( + withTimeInterval: 1.0, + repeats: true) { [weak self] _ in + self?.taskTimerFired() } } } + private func taskTimerFired() { + self.elapsedTime += 1 + if self.elapsedTime == self.taskTimeoutDuration { + self.handleTaskTimeout() + } + } + /// Stops the current task timer. private func stopTaskTimer() { + guard taskTimer != nil else { return } taskTimer?.invalidate() taskTimer = nil } diff --git a/Sources/SmileID/Classes/Helpers/NavigationHelper.swift b/Sources/SmileID/Classes/Helpers/NavigationHelper.swift index 0936b1d9e..fb8e26e6a 100644 --- a/Sources/SmileID/Classes/Helpers/NavigationHelper.swift +++ b/Sources/SmileID/Classes/Helpers/NavigationHelper.swift @@ -16,3 +16,14 @@ extension View { } } } + +public struct ModalModeKey: EnvironmentKey { + public static let defaultValue = Binding.constant(false) +} + +extension EnvironmentValues { + public var modalMode: Binding { + get { self[ModalModeKey.self] } + set { self[ModalModeKey.self] = newValue } + } +} diff --git a/Sources/SmileID/Classes/Helpers/SmileIDResourcesHelper.swift b/Sources/SmileID/Classes/Helpers/SmileIDResourcesHelper.swift index ef89fb622..38a40a681 100644 --- a/Sources/SmileID/Classes/Helpers/SmileIDResourcesHelper.swift +++ b/Sources/SmileID/Classes/Helpers/SmileIDResourcesHelper.swift @@ -76,6 +76,7 @@ public class SmileIDResourcesHelper { public static var ConsentContactDetails = SmileIDResourcesHelper.image("ConsentContactDetails")! public static var ConsentDocumentInfo = SmileIDResourcesHelper.image("ConsentDocumentInfo")! public static var ConsentPersonalInfo = SmileIDResourcesHelper.image("ConsentPersonalInfo")! + public static var Loader = SmileIDResourcesHelper.image("Loader")! /// Size of font. public static let pointSize: CGFloat = 16 diff --git a/Sources/SmileID/Classes/Networking/Models/FailureReason.swift b/Sources/SmileID/Classes/Networking/Models/FailureReason.swift new file mode 100644 index 000000000..8d901a64c --- /dev/null +++ b/Sources/SmileID/Classes/Networking/Models/FailureReason.swift @@ -0,0 +1,11 @@ +import Foundation + +public enum FailureReason { + case activeLivenessTimedOut + + var key: String { + switch self { + case .activeLivenessTimedOut: return "mobile_active_liveness_timed_out" + } + } +} diff --git a/Sources/SmileID/Classes/Networking/ServiceRunnable.swift b/Sources/SmileID/Classes/Networking/ServiceRunnable.swift index 32d05ddce..16a944630 100644 --- a/Sources/SmileID/Classes/Networking/ServiceRunnable.swift +++ b/Sources/SmileID/Classes/Networking/ServiceRunnable.swift @@ -4,18 +4,18 @@ protocol ServiceRunnable { var serviceClient: RestServiceClient { get } associatedtype PathType: CustomStringConvertible var baseURL: URL? { get } - + /// POST service call to a particular path with a body. /// - Parameters: /// - path: Endpoint to execute the POST call. /// - body: The contents of the body of the request. func post(to path: PathType, with body: T) async throws -> U - + /// Get service call to a particular path /// - Parameters: /// - path: Endpoint to execute the GET call. func get(to path: PathType) async throws -> U - + // POST service call to make a multipart request. /// - Parameters: /// - path: Endpoint to execute the POST call. @@ -31,9 +31,10 @@ protocol ServiceRunnable { callbackUrl: String?, sandboxResult: Int?, allowNewEnroll: Bool?, + failureReason: FailureReason?, metadata: Metadata ) async throws -> SmartSelfieResponse - + /// PUT service call to a particular path with a body. /// - Parameters: /// - data: Data to be uploaded @@ -53,7 +54,7 @@ extension ServiceRunnable { } return URL(string: SmileID.config.prodLambdaUrl) } - + func post( to path: PathType, with body: T @@ -66,7 +67,7 @@ extension ServiceRunnable { ) return try await serviceClient.send(request: request) } - + func get(to path: PathType) async throws -> U { let request = try createRestRequest( path: path, @@ -74,7 +75,7 @@ extension ServiceRunnable { ) return try await serviceClient.send(request: request) } - + func multipart( to path: PathType, signature: String, @@ -86,6 +87,7 @@ extension ServiceRunnable { callbackUrl: String? = nil, sandboxResult: Int? = nil, allowNewEnroll: Bool? = nil, + failureReason: FailureReason? = nil, metadata: Metadata = Metadata.default() ) async throws -> SmartSelfieResponse { let boundary = generateBoundary() @@ -108,14 +110,15 @@ extension ServiceRunnable { callbackUrl: callbackUrl?.nilIfEmpty(), sandboxResult: sandboxResult, allowNewEnroll: allowNewEnroll, + failureReason: failureReason, metadata: metadata, boundary: boundary ) ) - + return try await serviceClient.multipart(request: request) } - + private func createMultiPartRequest( url: PathType, method: RestMethod, @@ -126,15 +129,15 @@ extension ServiceRunnable { guard var baseURL = baseURL?.absoluteString else { throw URLError(.badURL) } - + if let range = baseURL.range(of: "/v1/", options: .backwards) { baseURL.removeSubrange(range) } - + guard let url = URL(string: baseURL)?.appendingPathComponent(path) else { throw URLError(.badURL) } - + let request = RestRequest( url: url, method: method, @@ -143,7 +146,7 @@ extension ServiceRunnable { ) return request } - + func upload( data: Data, to url: String, @@ -157,7 +160,7 @@ extension ServiceRunnable { ) return try await serviceClient.upload(request: uploadRequest) } - + private func createUploadRequest( url: String, method: RestMethod, @@ -176,7 +179,7 @@ extension ServiceRunnable { ) return request } - + private func createRestRequest( path: PathType, method: RestMethod, @@ -188,7 +191,7 @@ extension ServiceRunnable { guard let url = baseURL?.appendingPathComponent(path) else { throw URLError(.badURL) } - + do { let request = try RestRequest( url: url, @@ -202,7 +205,7 @@ extension ServiceRunnable { throw error } } - + private func createRestRequest( path: PathType, method: RestMethod, @@ -212,7 +215,7 @@ extension ServiceRunnable { guard let url = baseURL?.appendingPathComponent(path) else { throw URLError(.badURL) } - + let request = RestRequest( url: url, method: method, @@ -220,11 +223,11 @@ extension ServiceRunnable { ) return request } - + func generateBoundary() -> String { return UUID().uuidString } - + // swiftlint:disable line_length cyclomatic_complexity func createMultiPartRequestData( selfieImage: MultipartBody, @@ -234,67 +237,75 @@ extension ServiceRunnable { callbackUrl: String?, sandboxResult: Int?, allowNewEnroll: Bool?, + failureReason: FailureReason?, metadata: Metadata = Metadata.default(), boundary: String ) -> Data { let lineBreak = "\r\n" var body = Data() - + // Append parameters if available if let parameters = partnerParams { if let boundaryData = "--\(boundary)\(lineBreak)".data(using: .utf8), - let dispositionData = "Content-Disposition: form-data; name=\"partner_params\"\(lineBreak)".data(using: .utf8), - let contentTypeData = "Content-Type: application/json\(lineBreak + lineBreak)".data(using: .utf8), - let lineBreakData = lineBreak.data(using: .utf8) { + let dispositionData = "Content-Disposition: form-data; name=\"partner_params\"\(lineBreak)".data( + using: .utf8), + let contentTypeData = "Content-Type: application/json\(lineBreak + lineBreak)".data(using: .utf8), + let lineBreakData = lineBreak.data(using: .utf8) { body.append(boundaryData) body.append(dispositionData) body.append(contentTypeData) - + if let jsonData = try? JSONSerialization.data(withJSONObject: parameters, options: []) { body.append(jsonData) body.append(lineBreakData) } } } - + // Append userId if available if let userId = userId { if let valueData = "\(userId)\(lineBreak)".data(using: .utf8) { body.append("--\(boundary)\(lineBreak)".data(using: .utf8)!) - body.append("Content-Disposition: form-data; name=\"user_id\"\(lineBreak + lineBreak)".data(using: .utf8)!) + body.append( + "Content-Disposition: form-data; name=\"user_id\"\(lineBreak + lineBreak)".data(using: .utf8)!) body.append(valueData) } } - + // Append callbackUrl if available if let callbackUrl = callbackUrl { if let valueData = "\(callbackUrl)\(lineBreak)".data(using: .utf8) { body.append("--\(boundary)\(lineBreak)".data(using: .utf8)!) - body.append("Content-Disposition: form-data; name=\"callback_url\"\(lineBreak + lineBreak)".data(using: .utf8)!) + body.append( + "Content-Disposition: form-data; name=\"callback_url\"\(lineBreak + lineBreak)".data(using: .utf8)!) body.append(valueData) } } - + // Append sandboxResult if available if let sandboxResult = sandboxResult { let sandboxResultString = "\(sandboxResult)" if let valueData = "\(sandboxResultString)\(lineBreak)".data(using: .utf8) { body.append("--\(boundary)\(lineBreak)".data(using: .utf8)!) - body.append("Content-Disposition: form-data; name=\"sandbox_result\"\(lineBreak + lineBreak)".data(using: .utf8)!) + body.append( + "Content-Disposition: form-data; name=\"sandbox_result\"\(lineBreak + lineBreak)".data( + using: .utf8)!) body.append(valueData) } } - + // Append allowNewEnroll if available if let allowNewEnroll = allowNewEnroll { let allowNewEnrollString = "\(allowNewEnroll)" if let valueData = "\(allowNewEnrollString)\(lineBreak)".data(using: .utf8) { body.append("--\(boundary)\(lineBreak)".data(using: .utf8)!) - body.append("Content-Disposition: form-data; name=\"allow_new_enroll\"\(lineBreak + lineBreak)".data(using: .utf8)!) + body.append( + "Content-Disposition: form-data; name=\"allow_new_enroll\"\(lineBreak + lineBreak)".data( + using: .utf8)!) body.append(valueData) } } - + // Append metadata let encoder = JSONEncoder() if let metadataData = try? encoder.encode(metadata.items) { @@ -304,23 +315,39 @@ extension ServiceRunnable { body.append(metadataData) body.append(lineBreak.data(using: .utf8)!) } - + // Append liveness media files for item in livenessImages { body.append("--\(boundary)\(lineBreak)".data(using: .utf8)!) - body.append("Content-Disposition: form-data; name=\"\("liveness_images")\"; filename=\"\(item.filename)\"\(lineBreak)".data(using: .utf8)!) + body.append( + "Content-Disposition: form-data; name=\"\("liveness_images")\"; filename=\"\(item.filename)\"\(lineBreak)" + .data(using: .utf8)!) body.append("Content-Type: \(item.mimeType)\(lineBreak + lineBreak)".data(using: .utf8)!) body.append(item.data) body.append(lineBreak.data(using: .utf8)!) } - + // Append selfie media file body.append("--\(boundary)\(lineBreak)".data(using: .utf8)!) - body.append("Content-Disposition: form-data; name=\"\("selfie_image")\"; filename=\"\(selfieImage.filename)\"\(lineBreak)".data(using: .utf8)!) + body.append( + "Content-Disposition: form-data; name=\"\("selfie_image")\"; filename=\"\(selfieImage.filename)\"\(lineBreak)" + .data(using: .utf8)!) body.append("Content-Type: \(selfieImage.mimeType)\(lineBreak + lineBreak)".data(using: .utf8)!) body.append(selfieImage.data) body.append(lineBreak.data(using: .utf8)!) - + + // Append failure reason if available + if let failureReason { + let activeLivenessTimedOutString = "\(failureReason == .activeLivenessTimedOut)" + if let valueData = "\(activeLivenessTimedOutString)\(lineBreak)".data(using: .utf8) { + body.append("--\(boundary)\(lineBreak)".data(using: .utf8)!) + body.append( + "Content-Disposition: form-data; name=\"\(failureReason.key)\"\(lineBreak + lineBreak)".data( + using: .utf8)!) + body.append(valueData) + } + } + // Append final boundary body.append("--\(boundary)--\(lineBreak)".data(using: .utf8)!) return body diff --git a/Sources/SmileID/Classes/Networking/SmileIDService.swift b/Sources/SmileID/Classes/Networking/SmileIDService.swift index ec9176774..a5661aed8 100644 --- a/Sources/SmileID/Classes/Networking/SmileIDService.swift +++ b/Sources/SmileID/Classes/Networking/SmileIDService.swift @@ -24,6 +24,7 @@ public protocol SmileIDServiceable { callbackUrl: String?, sandboxResult: Int?, allowNewEnroll: Bool?, + failureReason: FailureReason?, metadata: Metadata ) async throws -> SmartSelfieResponse @@ -38,6 +39,7 @@ public protocol SmileIDServiceable { partnerParams: [String: String]?, callbackUrl: String?, sandboxResult: Int?, + failureReason: FailureReason?, metadata: Metadata ) async throws -> SmartSelfieResponse @@ -222,6 +224,7 @@ public class SmileIDService: SmileIDServiceable, ServiceRunnable { callbackUrl: String? = SmileID.callbackUrl, sandboxResult: Int? = nil, allowNewEnroll: Bool? = nil, + failureReason: FailureReason? = nil, metadata: Metadata = Metadata.default() ) async throws -> SmartSelfieResponse { try await multipart( @@ -235,6 +238,7 @@ public class SmileIDService: SmileIDServiceable, ServiceRunnable { callbackUrl: callbackUrl, sandboxResult: sandboxResult, allowNewEnroll: allowNewEnroll, + failureReason: failureReason, metadata: metadata ) } @@ -248,6 +252,7 @@ public class SmileIDService: SmileIDServiceable, ServiceRunnable { partnerParams: [String: String]? = nil, callbackUrl: String? = SmileID.callbackUrl, sandboxResult: Int? = nil, + failureReason: FailureReason? = nil, metadata: Metadata = Metadata.default() ) async throws -> SmartSelfieResponse { try await multipart( @@ -260,6 +265,7 @@ public class SmileIDService: SmileIDServiceable, ServiceRunnable { partnerParams: partnerParams, callbackUrl: callbackUrl, sandboxResult: sandboxResult, + failureReason: failureReason, metadata: metadata ) } diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieSubmissionManager.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieSubmissionManager.swift new file mode 100644 index 000000000..7b7d5c7a6 --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieSubmissionManager.swift @@ -0,0 +1,234 @@ +import SwiftUI + +protocol SelfieSubmissionDelegate: AnyObject { + func submissionDidSucceed(_ apiResponse: SmartSelfieResponse) + func submissionDidFail(with error: Error, errorMessage: String?, errorMessageRes: String?) +} + +final class SelfieSubmissionManager { + // MARK: - Properties + private let userId: String + private let jobId: String + private let isEnroll: Bool + private let numLivenessImages: Int + private let allowNewEnroll: Bool + private var selfieImage: URL? + private var livenessImages: [URL] + private var extraPartnerParams: [String: String] + private let localMetadata: LocalMetadata + + weak var delegate: SelfieSubmissionDelegate? + + // MARK: - Initializer + init( + userId: String, + jobId: String, + isEnroll: Bool, + numLivenessImages: Int, + allowNewEnroll: Bool, + selfieImage: URL?, + livenessImages: [URL], + extraPartnerParams: [String: String], + localMetadata: LocalMetadata + ) { + self.userId = userId + self.jobId = jobId + self.isEnroll = isEnroll + self.numLivenessImages = numLivenessImages + self.allowNewEnroll = allowNewEnroll + self.selfieImage = selfieImage + self.livenessImages = livenessImages + self.extraPartnerParams = extraPartnerParams + self.localMetadata = localMetadata + } + + func submitJob(forcedFailure: Bool = false) async throws { + do { + // Validate that the necessary selfie data is present + try validateImages(forcedFailure: forcedFailure) + + // Determine the type of job (enrollment or authentication) + let jobType = determineJobType() + // Create an authentication request based on the job type + let authRequest = createAuthRequest(jobType: jobType) + + // Save the job locally if offline mode is allowed + if SmileID.allowOfflineMode { + try saveOfflineMode(jobType: jobType) + } + + // Authenticate the request with the API + let authResponse = try await SmileID.api.authenticate(request: authRequest) + + // Prepare the images for submission + let (smartSelfieImage, smartSelfieLivenessImages) = try prepareImagesForSubmission() + + // Submit the job data to the API + let response = try await submitJobRequest( + authResponse: authResponse, + smartSelfieImage: smartSelfieImage, + smartSelfieLivenessImages: smartSelfieLivenessImages, + forcedFailure: forcedFailure + ) + + // Update local storage after successful submission + try updateLocalStorageAfterSuccess() + + // Send out api response after successful submission + self.delegate?.submissionDidSucceed(response) + } catch let error as SmileIDError { + handleJobSubmissionFailure(error) + } + } + + private func validateImages(forcedFailure: Bool) throws { + if forcedFailure { + guard selfieImage != nil else { + throw SmileIDError.unknown("Selfie capture failed") + } + } else { + guard selfieImage != nil, livenessImages.count == numLivenessImages else { + throw SmileIDError.unknown("Selfie capture failed") + } + } + } + + private func determineJobType() -> JobType { + return isEnroll ? JobType.smartSelfieEnrollment : JobType.smartSelfieAuthentication + } + + private func createAuthRequest(jobType: JobType) -> AuthenticationRequest { + return AuthenticationRequest( + jobType: jobType, + enrollment: isEnroll, + jobId: jobId, + userId: userId + ) + } + + private func saveOfflineMode(jobType: JobType) throws { + try LocalStorage.saveOfflineJob( + jobId: jobId, + userId: userId, + jobType: jobType, + enrollment: isEnroll, + allowNewEnroll: allowNewEnroll, + localMetadata: localMetadata, + partnerParams: extraPartnerParams + ) + } + + private func prepareImagesForSubmission() throws -> (MultipartBody, [MultipartBody]) { + guard let smartSelfieImage = createMultipartBody(from: selfieImage) else { + throw SmileIDError.unknown("Failed to process selfie image") + } + + let smartSelfieLivenessImages = livenessImages.compactMap { + createMultipartBody(from: $0) + } + guard smartSelfieLivenessImages.count == numLivenessImages else { + throw SmileIDError.unknown("Liveness image count mismatch") + } + + return (smartSelfieImage, smartSelfieLivenessImages) + } + + private func createMultipartBody(from fileURL: URL?) -> MultipartBody? { + guard let fileURL = fileURL, + let imageData = try? Data(contentsOf: fileURL) + else { return nil } + return MultipartBody( + withImage: imageData, + forKey: fileURL.lastPathComponent, + forName: fileURL.lastPathComponent + ) + } + + private func submitJobRequest( + authResponse: AuthenticationResponse, + smartSelfieImage: MultipartBody, + smartSelfieLivenessImages: [MultipartBody], + forcedFailure: Bool + ) async throws -> SmartSelfieResponse { + if isEnroll { + return try await SmileID.api + .doSmartSelfieEnrollment( + signature: authResponse.signature, + timestamp: authResponse.timestamp, + selfieImage: smartSelfieImage, + livenessImages: smartSelfieLivenessImages, + userId: userId, + partnerParams: extraPartnerParams, + callbackUrl: SmileID.callbackUrl, + sandboxResult: nil, + allowNewEnroll: allowNewEnroll, + failureReason: forcedFailure ? .activeLivenessTimedOut : nil, + metadata: localMetadata.metadata + ) + } else { + return try await SmileID.api + .doSmartSelfieAuthentication( + signature: authResponse.signature, + timestamp: authResponse.timestamp, + userId: userId, + selfieImage: smartSelfieImage, + livenessImages: smartSelfieLivenessImages, + partnerParams: extraPartnerParams, + callbackUrl: SmileID.callbackUrl, + sandboxResult: nil, + failureReason: forcedFailure ? .activeLivenessTimedOut : nil, + metadata: localMetadata.metadata + ) + } + } + + private func updateLocalStorageAfterSuccess() throws { + // Move the job to the submitted jobs directory for record-keeping + try LocalStorage.moveToSubmittedJobs(jobId: self.jobId) + + // Update the references to the submitted selfie and liveness images + self.selfieImage = try LocalStorage.getFileByType( + jobId: jobId, + fileType: FileType.selfie, + submitted: true + ) + self.livenessImages = + try LocalStorage.getFilesByType( + jobId: jobId, + fileType: FileType.liveness, + submitted: true + ) ?? [] + } + + private func handleJobSubmissionFailure(_ smileIDError: SmileIDError) { + do { + let didMove = try LocalStorage.handleOfflineJobFailure(jobId: self.jobId, error: smileIDError) + if didMove { + self.selfieImage = try LocalStorage.getFileByType(jobId: jobId, fileType: .selfie, submitted: true) + self.livenessImages = + try LocalStorage.getFilesByType(jobId: jobId, fileType: .liveness, submitted: true) ?? [] + } + } catch { + let (errorMessageRes, errorMessage) = toErrorMessage(error: smileIDError) + self.delegate? + .submissionDidFail( + with: error, + errorMessage: errorMessageRes, + errorMessageRes: errorMessage + ) + return + } + + if SmileID.allowOfflineMode, SmileIDError.isNetworkFailure(error: smileIDError) { + self.delegate?.submissionDidFail(with: smileIDError, errorMessage: nil, errorMessageRes: "Offline.Message") + } else { + let (errorMessageRes, errorMessage) = toErrorMessage(error: smileIDError) + self.delegate? + .submissionDidFail( + with: smileIDError, + errorMessage: errorMessage, + errorMessageRes: errorMessageRes + ) + } + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift index 94b601fdc..dddb58c24 100644 --- a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift @@ -28,7 +28,7 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { private var localMetadata: LocalMetadata private let faceDetector = FaceDetector() - var cameraManager = CameraManager(orientation: .portrait) + var cameraManager = CameraManager.shared var shouldAnalyzeImages = true var lastAutoCaptureTime = Date() var previousHeadRoll = Double.infinity @@ -95,8 +95,10 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { .store(in: &subscribers) localMetadata.addMetadata( - useBackCamera ? Metadatum.SelfieImageOrigin(cameraFacing: .backCamera) - : Metadatum.SelfieImageOrigin(cameraFacing: .frontCamera)) + useBackCamera + ? Metadatum.SelfieImageOrigin(cameraFacing: .backCamera) + : Metadatum.SelfieImageOrigin(cameraFacing: .frontCamera) + ) } let metadataTimerStart = MonotonicTime() @@ -382,6 +384,7 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { callbackUrl: SmileID.callbackUrl, sandboxResult: nil, allowNewEnroll: allowNewEnroll, + failureReason: nil, metadata: localMetadata.metadata ) } else { @@ -394,6 +397,7 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { partnerParams: extraPartnerParams, callbackUrl: SmileID.callbackUrl, sandboxResult: nil, + failureReason: nil, metadata: localMetadata.metadata ) } diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift index 4052e3c15..579803a9f 100644 --- a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift @@ -1,15 +1,18 @@ -import Foundation +import SwiftUI enum SelfieViewModelAction { // View Setup Actions - case windowSizeDetected(CGRect) + case onViewAppear + case windowSizeDetected(CGSize, EdgeInsets) // Face Detection Actions case activeLivenessCompleted case activeLivenessTimeout + case jobProcessingDone + case retryJobSubmission + // Others - case setupDelayTimer case openApplicationSettings case handleError(Error) } diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift index 33c316582..8057d48f7 100644 --- a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift @@ -1,6 +1,6 @@ import ARKit import Combine -import Foundation +import SwiftUI public class SelfieViewModelV2: ObservableObject { // MARK: Dependencies @@ -10,22 +10,32 @@ public class SelfieViewModelV2: ObservableObject { var livenessCheckManager = LivenessCheckManager() private var subscribers = Set() private var guideAnimationDelayTimer: Timer? + private let metadataTimerStart = MonotonicTime() // MARK: Private Properties - private var faceLayoutGuideFrame = CGRect(x: 0, y: 0, width: 200, height: 300) + private var faceLayoutGuideFrame = CGRect(x: 0, y: 0, width: 250, height: 350) private var elapsedGuideAnimationDelay: TimeInterval = 0 - var selfieImage: URL? + var selfieImage: UIImage? + var selfieImageURL: URL? { + didSet { + DispatchQueue.main.async { + self.selfieCaptured = self.selfieImage != nil + } + } + } var livenessImages: [URL] = [] private var hasDetectedValidFace: Bool = false private var shouldBeginLivenessChallenge: Bool { - hasDetectedValidFace && - selfieImage != nil && - livenessCheckManager.currentTask != nil + hasDetectedValidFace && selfieImage != nil && livenessCheckManager.currentTask != nil } private var shouldSubmitJob: Bool { - selfieImage != nil && - livenessImages.count == numLivenessImages + selfieImage != nil && livenessImages.count == numLivenessImages } + private var forcedFailure: Bool = false + private var apiResponse: SmartSelfieResponse? + private var error: Error? + @Published public var errorMessageRes: String? + @Published public var errorMessage: String? // MARK: Constants private let livenessImageSize = 320 @@ -37,9 +47,9 @@ public class SelfieViewModelV2: ObservableObject { @Published var unauthorizedAlert: AlertState? @Published private(set) var userInstruction: SelfieCaptureInstruction? @Published private(set) var faceInBounds: Bool = false + @Published private(set) var selfieCaptured: Bool = false @Published private(set) var showGuideAnimation: Bool = false - @Published private(set) var isSubmittingJob: Bool = false - @Published var isShowingImages: Bool = false + @Published private(set) var selfieCaptureState: SelfieCaptureState = .capturingSelfie // MARK: Injected Properties private let isEnroll: Bool @@ -49,6 +59,22 @@ public class SelfieViewModelV2: ObservableObject { private let skipApiSubmission: Bool private let extraPartnerParams: [String: String] private let useStrictMode: Bool + private let onResult: SmartSelfieResultDelegate + private var localMetadata: LocalMetadata + + enum SelfieCaptureState: Equatable { + case capturingSelfie + case processing(ProcessingState) + + var title: String { + switch self { + case .capturingSelfie: + return "Instructions.Capturing" + case let .processing(processingState): + return processingState.title + } + } + } public init( isEnroll: Bool, @@ -57,7 +83,9 @@ public class SelfieViewModelV2: ObservableObject { allowNewEnroll: Bool, skipApiSubmission: Bool, extraPartnerParams: [String: String], - useStrictMode: Bool + useStrictMode: Bool, + onResult: SmartSelfieResultDelegate, + localMetadata: LocalMetadata ) { self.isEnroll = isEnroll self.userId = userId @@ -66,6 +94,8 @@ public class SelfieViewModelV2: ObservableObject { self.skipApiSubmission = skipApiSubmission self.extraPartnerParams = extraPartnerParams self.useStrictMode = useStrictMode + self.onResult = onResult + self.localMetadata = localMetadata self.initialSetup() } @@ -87,7 +117,9 @@ public class SelfieViewModelV2: ObservableObject { livenessCheckManager.$lookUpProgress ) .sink { [weak self] _ in - self?.resetGuideAnimationDelayTimer() + DispatchQueue.main.async { + self?.resetGuideAnimationDelayTimer() + } } .store(in: &subscribers) @@ -99,13 +131,13 @@ public class SelfieViewModelV2: ObservableObject { .store(in: &subscribers) cameraManager.sampleBufferPublisher - // Drop the first ~2 seconds to allow the user to settle in .throttle( for: 0.35, scheduler: DispatchQueue.global(qos: .userInitiated), latest: true ) - .dropFirst(5) + // Drop the first ~2 seconds to allow the user to settle in + .dropFirst(5) .compactMap { $0 } .sink(receiveValue: analyzeFrame) .store(in: &subscribers) @@ -126,16 +158,21 @@ public class SelfieViewModelV2: ObservableObject { // MARK: Actions func perform(action: SelfieViewModelAction) { switch action { - case let .windowSizeDetected(windowRect): - handleWindowSizeChanged(toRect: windowRect) + case let .windowSizeDetected(windowRect, safeAreaInsets): + handleWindowSizeChanged(toRect: windowRect, edgeInsets: safeAreaInsets) case .activeLivenessCompleted: - if shouldSubmitJob { - submitJob() - } + self.cameraManager.pauseSession() + handleSubmission() case .activeLivenessTimeout: - submitJob(forcedFailure: true) - case .setupDelayTimer: - resetGuideAnimationDelayTimer() + self.forcedFailure = true + self.cameraManager.pauseSession() + handleSubmission() + case .onViewAppear: + handleViewAppeared() + case .jobProcessingDone: + onFinished(callback: onResult) + case .retryJobSubmission: + handleSubmission() case .openApplicationSettings: openSettings() case let .handleError(error): @@ -156,7 +193,7 @@ extension SelfieViewModelV2 { private func resetGuideAnimationDelayTimer() { elapsedGuideAnimationDelay = 0 showGuideAnimation = false - stopGuideAnimationDelayTimer() + guard guideAnimationDelayTimer == nil else { return } guideAnimationDelayTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in self.elapsedGuideAnimationDelay += 1 if self.elapsedGuideAnimationDelay == self.guideAnimationDelayTime { @@ -167,14 +204,30 @@ extension SelfieViewModelV2 { } private func stopGuideAnimationDelayTimer() { + guard guideAnimationDelayTimer != nil else { return } guideAnimationDelayTimer?.invalidate() guideAnimationDelayTimer = nil } - private func handleWindowSizeChanged(toRect: CGRect) { + private func handleViewAppeared() { + cameraManager.switchCamera(to: .front) + resetGuideAnimationDelayTimer() + resetSelfieCaptureState() + } + + private func resetSelfieCaptureState() { + selfieImage = nil + livenessImages = [] + selfieCaptureState = .capturingSelfie + forcedFailure = false + } + + private func handleWindowSizeChanged(toRect: CGSize, edgeInsets: EdgeInsets) { + let topPadding: CGFloat = edgeInsets.top + 100 + print(edgeInsets.top) faceLayoutGuideFrame = CGRect( - x: toRect.midX - faceLayoutGuideFrame.width / 2, - y: toRect.midY - faceLayoutGuideFrame.height / 2, + x: (toRect.width / 2) - faceLayoutGuideFrame.width / 2, + y: topPadding, width: faceLayoutGuideFrame.width, height: faceLayoutGuideFrame.height ) @@ -192,8 +245,8 @@ extension SelfieViewModelV2 { else { throw SmileIDError.unknown("Error resizing selfie image") } - let selfieImage = try LocalStorage.createSelfieFile(jobId: jobId, selfieFile: imageData) - self.selfieImage = selfieImage + self.selfieImage = UIImage(data: imageData) + self.selfieImageURL = try LocalStorage.createSelfieFile(jobId: jobId, selfieFile: imageData) } catch { handleError(error) } @@ -221,6 +274,15 @@ extension SelfieViewModelV2 { print(error.localizedDescription) } + private func handleSubmission() { + DispatchQueue.main.async { + self.selfieCaptureState = .processing(.inProgress) + } + Task { + try await submitJob() + } + } + private func openSettings() { guard let settingsURL = URL(string: UIApplication.openSettingsURLString) else { return } UIApplication.shared.open(settingsURL) @@ -267,12 +329,76 @@ extension SelfieViewModelV2: FaceValidatorDelegate { } } -// MARK: API Helpers -extension SelfieViewModelV2 { - func submitJob(forcedFailure: Bool = false) { +// MARK: Selfie Job Submission +extension SelfieViewModelV2: SelfieSubmissionDelegate { + public func submitJob() async throws { + // Add metadata before submission + addSelfieCaptureDurationMetaData() + + if skipApiSubmission { + // Skip API submission and update processing state to success + self.selfieCaptureState = .processing(.success) + return + } + // Create an instance of SelfieSubmissionManager to manage the submission process + let submissionManager = SelfieSubmissionManager( + userId: self.userId, + jobId: self.jobId, + isEnroll: self.isEnroll, + numLivenessImages: self.numLivenessImages, + allowNewEnroll: self.allowNewEnroll, + selfieImage: self.selfieImageURL, + livenessImages: self.livenessImages, + extraPartnerParams: self.extraPartnerParams, + localMetadata: self.localMetadata + ) + submissionManager.delegate = self + try await submissionManager.submitJob(forcedFailure: self.forcedFailure) + } + + private func addSelfieCaptureDurationMetaData() { + localMetadata.addMetadata( + Metadatum.SelfieCaptureDuration(duration: metadataTimerStart.elapsedTime())) + } + + public func onFinished(callback: SmartSelfieResultDelegate) { + if let selfieImageURL = selfieImageURL, + let selfiePath = getRelativePath(from: selfieImageURL), + livenessImages.count == numLivenessImages, + !livenessImages.contains(where: { getRelativePath(from: $0) == nil }) { + let livenessImagesPaths = livenessImages.compactMap { getRelativePath(from: $0) } + + callback.didSucceed( + selfieImage: selfiePath, + livenessImages: livenessImagesPaths, + apiResponse: apiResponse + ) + } else if let error = error { + callback.didError(error: error) + } else { + callback.didError(error: SmileIDError.unknown("Unknown error")) + } + } + + // MARK: SelfieJobSubmissionDelegate Methods + + func submissionDidSucceed(_ apiResponse: SmartSelfieResponse) { + DispatchQueue.main.async { + self.apiResponse = apiResponse + self.selfieCaptureState = .processing(.success) + } + } + + func submissionDidFail( + with error: Error, + errorMessage: String?, + errorMessageRes: String? + ) { DispatchQueue.main.async { - self.isSubmittingJob = true - self.isShowingImages = true + self.error = error + self.errorMessage = errorMessage + self.errorMessageRes = errorMessageRes + self.selfieCaptureState = .processing(.error) } } } diff --git a/Sources/SmileID/Classes/SelfieCapture/View/ArcProgressView.swift b/Sources/SmileID/Classes/SelfieCapture/View/ArcProgressView.swift index fd3f26084..ffd20e2a9 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/ArcProgressView.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/ArcProgressView.swift @@ -3,20 +3,23 @@ import SwiftUI struct ArcProgressView: View { // Configuration Properties var strokeLineWidth: CGFloat = 12 - var arcSize: CGSize = .init(width: 290, height: 290) - var progressTrackColor: Color = .gray.opacity(0.3) - var progressFillColor: Color = .green + var arcSize: CGSize = .init(width: 270, height: 270) + var progressTrackColor: Color = SmileID.theme.onDark + var progressFillColor: Color = SmileID.theme.success // View Properties + var position: Position var progress: CGFloat var totalSteps: Int = 10 var minValue: CGFloat = 0 var maxValue: CGFloat = 1.0 var clockwise: Bool = false + enum Position { case top, right, left } + var body: some View { ZStack { - ArcShape(clockwise: clockwise) + ArcShape(clockwise: clockwise, position: position) .stroke( style: StrokeStyle( lineWidth: strokeLineWidth, @@ -26,7 +29,7 @@ struct ArcProgressView: View { ) .foregroundColor(progressTrackColor) .frame(width: arcSize.width, height: arcSize.height) - ArcShape(clockwise: clockwise) + ArcShape(clockwise: clockwise, position: position) .trim(from: 0.0, to: normalizedProgress) .stroke( style: StrokeStyle( @@ -51,19 +54,43 @@ struct ArcProgressView: View { } struct ArcShape: Shape { - var startAngle: CGFloat = 180 - var endAngle: CGFloat = 120 var clockwise: Bool = false + var position: ArcProgressView.Position func path(in rect: CGRect) -> Path { var path = Path() + + // Position-dependent values + let startAngle: CGFloat = 180 + let endAngle: CGFloat + let radius: CGFloat + let horizontalOffset: CGFloat + let verticalOffset: CGFloat + + switch position { + case .top: + endAngle = 120 + radius = rect.width / 2 + horizontalOffset = 0 + verticalOffset = 0 + case .right, .left: + endAngle = 150 + radius = rect.width + horizontalOffset = -(radius - rect.width / 2) + verticalOffset = 0 + } + path.addArc( - center: CGPoint(x: rect.midX, y: rect.midY), - radius: rect.width / 2, + center: CGPoint( + x: rect.midX - horizontalOffset, + y: rect.midY - verticalOffset + ), + radius: radius, startAngle: Angle(degrees: startAngle), endAngle: Angle(degrees: clockwise ? endAngle : -endAngle), clockwise: clockwise ) + return path } } diff --git a/Sources/SmileID/Classes/SelfieCapture/View/CircularProgressView.swift b/Sources/SmileID/Classes/SelfieCapture/View/CircularProgressView.swift new file mode 100644 index 000000000..863eb7aaa --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/View/CircularProgressView.swift @@ -0,0 +1,20 @@ +import SwiftUI + +struct CircularProgressView: View { + @State private var rotationAngle: Double = 0.0 + + var body: some View { + Image(uiImage: SmileIDResourcesHelper.Loader) + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 48, height: 48) + .rotationEffect(Angle(degrees: rotationAngle)) + .onAppear { + DispatchQueue.main.async { + withAnimation(.linear(duration: 1.0).repeatForever(autoreverses: false)) { + rotationAngle = 360 + } + } + } + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift b/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift index b678711df..440e255fd 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift @@ -3,28 +3,28 @@ import SwiftUI struct FaceBoundingArea: View { var faceInBounds: Bool + var selfieCaptured: Bool var showGuideAnimation: Bool var guideAnimation: CaptureGuideAnimation? + private let faceShape = FaceShape() @State private var playbackMode: LottiePlaybackMode = .paused var body: some View { ZStack { // Face Bounds Indicator - if !faceInBounds { - Circle() - .stroke( - faceInBounds ? .green : .red, - lineWidth: 10 - ) - .frame(width: 275, height: 275) - } + faceShape + .stroke( + faceInBounds ? selfieCaptured ? .clear : SmileID.theme.success : SmileID.theme.error, + style: StrokeStyle(lineWidth: 10) + ) + .frame(width: 270, height: 370) if let guideAnimation = guideAnimation, showGuideAnimation { - Circle() + faceShape .fill(.black.opacity(0.5)) - .frame(width: 260, height: 260) + .frame(width: 270, height: 370) .overlay( LottieView { try await DotLottieFile @@ -36,7 +36,7 @@ struct FaceBoundingArea: View { .playbackMode(playbackMode) .frame(width: 224, height: 224) ) - .clipShape(.circle) + .clipShape(faceShape) .onAppear { playbackMode = getPlaybackMode(guideAnimation) } diff --git a/Sources/SmileID/Classes/SelfieCapture/View/LivenessCaptureInstructionsView.swift b/Sources/SmileID/Classes/SelfieCapture/View/LivenessCaptureInstructionsView.swift index ed8808675..153c4a50b 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/LivenessCaptureInstructionsView.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/LivenessCaptureInstructionsView.swift @@ -2,16 +2,22 @@ import Lottie import SwiftUI public struct LivenessCaptureInstructionsView: View { - let showAttribution: Bool - let onInstructionsAcknowledged: () -> Void + @Environment(\.modalMode) private var modalMode + @State private var showSelfieCaptureView: Bool = false - @Environment(\.presentationMode) private var presentationMode + private let showAttribution: Bool + private let viewModel: SelfieViewModelV2 + + public init(showAttribution: Bool, viewModel: SelfieViewModelV2) { + self.showAttribution = showAttribution + self.viewModel = viewModel + } public var body: some View { VStack { HStack { Button { - presentationMode.wrappedValue.dismiss() + self.modalMode.wrappedValue = false } label: { Text(SmileIDResourcesHelper.localizedString(for: "Action.Cancel")) .foregroundColor(SmileID.theme.accent) @@ -36,9 +42,19 @@ public struct LivenessCaptureInstructionsView: View { Spacer() VStack(spacing: 20) { + NavigationLink( + destination: SelfieCaptureScreenV2( + viewModel: viewModel, + showAttribution: showAttribution + ), + isActive: $showSelfieCaptureView + ) { EmptyView() } + SmileButton( title: "Action.GetStarted", - clicked: onInstructionsAcknowledged + clicked: { + self.showSelfieCaptureView = true + } ) if showAttribution { diff --git a/Sources/SmileID/Classes/SelfieCapture/View/LivenessGuidesView.swift b/Sources/SmileID/Classes/SelfieCapture/View/LivenessGuidesView.swift index ec9a234fa..1e7f2a307 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/LivenessGuidesView.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/LivenessGuidesView.swift @@ -1,29 +1,28 @@ import SwiftUI struct LivenessGuidesView: View { + var currentLivenessTask: LivenessTask @Binding var topArcProgress: CGFloat @Binding var rightArcProgress: CGFloat @Binding var leftArcProgress: CGFloat var body: some View { ZStack { - // Top Arc - ArcProgressView(progress: topArcProgress) + ArcProgressView(position: .top, progress: topArcProgress) .rotationEffect(Angle(degrees: 60)) - .opacity(topArcProgress > 0.0 ? 1.0 : 0.0) - .animation(.easeInOut(duration: 0.2), value: topArcProgress) + .opacity(currentLivenessTask == .lookUp ? 1.0 : 0.0) + .animation(.easeInOut(duration: 0.2), value: currentLivenessTask) + .padding(.bottom, 120) - // Right Arc - ArcProgressView(progress: rightArcProgress, clockwise: true) - .rotationEffect(Angle(degrees: -150)) - .opacity(rightArcProgress > 0.0 ? 1.0 : 0.0) - .animation(.easeInOut(duration: 0.2), value: rightArcProgress) + ArcProgressView(position: .right, progress: rightArcProgress, clockwise: true) + .rotationEffect(Angle(degrees: -155)) + .opacity(currentLivenessTask == .lookRight ? 1.0 : 0.0) + .animation(.easeInOut(duration: 0.2), value: currentLivenessTask) - // Left Arc - ArcProgressView(progress: leftArcProgress) - .rotationEffect(Angle(degrees: -30)) - .opacity(leftArcProgress > 0.0 ? 1.0 : 0.0) - .animation(.easeInOut(duration: 0.2), value: leftArcProgress) + ArcProgressView(position: .left, progress: leftArcProgress) + .rotationEffect(Angle(degrees: -25)) + .opacity(currentLivenessTask == .lookLeft ? 1.0 : 0.0) + .animation(.easeInOut(duration: 0.2), value: currentLivenessTask) } } } diff --git a/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift b/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift index 879f8049b..d78716078 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift @@ -8,9 +8,8 @@ public struct OrchestratedSelfieCaptureScreenV2: View { public let showAttribution: Bool public let showInstructions: Bool public let onResult: SmartSelfieResultDelegate - @ObservedObject var viewModel: SelfieViewModelV2 + private let viewModel: SelfieViewModelV2 - @State private var acknowledgedInstructions = false private var originalBrightness = UIScreen.main.brightness public init( @@ -30,24 +29,30 @@ public struct OrchestratedSelfieCaptureScreenV2: View { self.showAttribution = showAttribution self.showInstructions = showInstructions self.onResult = onResult - viewModel = SelfieViewModelV2( + self.viewModel = SelfieViewModelV2( isEnroll: isEnroll, userId: userId, jobId: jobId, allowNewEnroll: allowNewEnroll, skipApiSubmission: skipApiSubmission, extraPartnerParams: extraPartnerParams, - useStrictMode: useStrictMode + useStrictMode: useStrictMode, + onResult: onResult, + localMetadata: LocalMetadata() ) } public var body: some View { - if showInstructions, !acknowledgedInstructions { - LivenessCaptureInstructionsView(showAttribution: showAttribution) { - acknowledgedInstructions = true - } + if showInstructions { + LivenessCaptureInstructionsView( + showAttribution: showAttribution, + viewModel: viewModel + ) } else { - SelfieCaptureScreenV2(viewModel: viewModel, showAttribution: showAttribution) + SelfieCaptureScreenV2( + viewModel: viewModel, + showAttribution: showAttribution + ) } } } diff --git a/Sources/SmileID/Classes/SelfieCapture/View/SelfieActionsView.swift b/Sources/SmileID/Classes/SelfieCapture/View/SelfieActionsView.swift new file mode 100644 index 000000000..789f19792 --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/View/SelfieActionsView.swift @@ -0,0 +1,26 @@ +import SwiftUI + +struct SelfieActionsView: View { + var processingState: ProcessingState + var retryAction: () -> Void + var doneAction: () -> Void + + var body: some View { + VStack { + Spacer() + switch processingState { + case .inProgress: + EmptyView() + case .success: + SmileButton(title: "Action.Done") { + doneAction() + } + case .error: + SmileButton(title: "Confirmation.Retry") { + retryAction() + } + } + } + .padding(.horizontal, 65) + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift b/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift index 90ae5eff8..3822a43c1 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift @@ -1,59 +1,120 @@ -import Lottie import SwiftUI public struct SelfieCaptureScreenV2: View { @ObservedObject var viewModel: SelfieViewModelV2 let showAttribution: Bool - @Environment(\.presentationMode) private var presentationMode + private let faceShape = FaceShape() + @Environment(\.modalMode) private var modalMode public var body: some View { GeometryReader { proxy in - ZStack { - // Camera Preview Layer - CameraView(cameraManager: viewModel.cameraManager, selfieViewModel: viewModel) - .onAppear { - viewModel.cameraManager.switchCamera(to: .front) - viewModel.perform(action: .setupDelayTimer) - } + VStack(spacing: 10) { + switch viewModel.selfieCaptureState { + case .capturingSelfie: + ZStack { + CameraView( + cameraManager: viewModel.cameraManager, + selfieViewModel: viewModel + ) + .cornerRadius(40) - // CameraPreview Mask - Rectangle() - .fill(.white) - .reverseMask { - Circle() - .frame(width: 260, height: 260) + RoundedRectangle(cornerRadius: 40) + .fill(SmileID.theme.tertiary.opacity(0.8)) + .reverseMask(alignment: .top) { + faceShape + .frame(width: 250, height: 350) + .padding(.top, 60) + } + VStack { + ZStack { + FaceBoundingArea( + faceInBounds: viewModel.faceInBounds, + selfieCaptured: viewModel.selfieCaptured, + showGuideAnimation: viewModel.showGuideAnimation, + guideAnimation: viewModel.userInstruction?.guideAnimation + ) + if let currentLivenessTask = viewModel.livenessCheckManager.currentTask { + LivenessGuidesView( + currentLivenessTask: currentLivenessTask, + topArcProgress: $viewModel.livenessCheckManager.lookUpProgress, + rightArcProgress: $viewModel.livenessCheckManager.lookRightProgress, + leftArcProgress: $viewModel.livenessCheckManager.lookLeftProgress + ) + } + } + .padding(.top, 50) + Spacer() + if let userInstruction = viewModel.userInstruction { + UserInstructionsView( + instruction: userInstruction.instruction + ) + } + } + } + .selfieCaptureFrameBackground() + if showAttribution { + Image(uiImage: SmileIDResourcesHelper.SmileEmblem) + } + case let .processing(processingState): + ZStack { + if let selfieImage = viewModel.selfieImage { + SelfiePreviewView(image: selfieImage) + } + RoundedRectangle(cornerRadius: 40) + .fill(SmileID.theme.tertiary.opacity(0.8)) + .reverseMask(alignment: .top) { + faceShape + .frame(width: 250, height: 350) + .padding(.top, 60) + } + VStack { + Spacer() + UserInstructionsView( + instruction: processingState.title, + message: getErrorSubtitle( + errorMessageRes: viewModel.errorMessageRes, + errorMessage: viewModel.errorMessage + ) + ) + } + SubmissionStatusView(processState: processingState) + .padding(.bottom, 40) + } + .selfieCaptureFrameBackground() + if showAttribution { + Image(uiImage: SmileIDResourcesHelper.SmileEmblem) } - FaceBoundingArea( - faceInBounds: viewModel.faceInBounds, - showGuideAnimation: viewModel.showGuideAnimation, - guideAnimation: viewModel.userInstruction?.guideAnimation - ) - UserInstructionsView(viewModel: viewModel) - if viewModel.faceInBounds { - LivenessGuidesView( - topArcProgress: $viewModel.livenessCheckManager.lookUpProgress, - rightArcProgress: $viewModel.livenessCheckManager.lookRightProgress, - leftArcProgress: $viewModel.livenessCheckManager.lookLeftProgress + Spacer() + SelfieActionsView( + processingState: processingState, + retryAction: { viewModel.perform(action: .retryJobSubmission) }, + doneAction: { + modalMode.wrappedValue = false + viewModel.perform(action: .jobProcessingDone) + } ) } - VStack { - Spacer() - Button { - viewModel.cameraManager.pauseSession() - presentationMode.wrappedValue.dismiss() - } label: { - Text(SmileIDResourcesHelper.localizedString(for: "Action.Cancel")) - .foregroundColor(SmileID.theme.accent) - } + Spacer() + + Button { + modalMode.wrappedValue = false + viewModel.perform(action: .jobProcessingDone) + } label: { + Text(SmileIDResourcesHelper.localizedString(for: "Action.Cancel")) + .font(SmileID.theme.button) + .foregroundColor(SmileID.theme.error) } - .padding(.vertical, 40) } - .edgesIgnoringSafeArea(.all) + .navigationBarHidden(true) .onAppear { - viewModel.perform(action: .windowSizeDetected(proxy.frame(in: .global))) + viewModel.perform(action: .windowSizeDetected(proxy.size, proxy.safeAreaInsets)) + viewModel.perform(action: .onViewAppear) + } + .onDisappear { + viewModel.cameraManager.pauseSession() } .alert(item: $viewModel.unauthorizedAlert) { alert in Alert( @@ -70,9 +131,16 @@ public struct SelfieCaptureScreenV2: View { secondaryButton: .cancel() ) } - .sheet(isPresented: $viewModel.isShowingImages) { - SelfieProcessingView(model: viewModel) - } } } } + +extension View { + func selfieCaptureFrameBackground() -> some View { + self + .shadow(color: .black.opacity(0.25), radius: 4, x: 0, y: 4) + .frame(height: 520) + .padding(.horizontal) + .padding(.top, 40) + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/SelfiePreviewView.swift b/Sources/SmileID/Classes/SelfieCapture/View/SelfiePreviewView.swift new file mode 100644 index 000000000..7687fc9f6 --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/View/SelfiePreviewView.swift @@ -0,0 +1,13 @@ +import SwiftUI + +struct SelfiePreviewView: View { + var image: UIImage + + var body: some View { + Image(uiImage: image) + .resizable() + .aspectRatio(contentMode: .fill) + .frame(height: 520) + .clipShape(.rect(cornerRadius: 40)) + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/SelfieProcessingView.swift b/Sources/SmileID/Classes/SelfieCapture/View/SelfieProcessingView.swift deleted file mode 100644 index a9c0876c3..000000000 --- a/Sources/SmileID/Classes/SelfieCapture/View/SelfieProcessingView.swift +++ /dev/null @@ -1,61 +0,0 @@ -import SwiftUI - -struct SelfieProcessingView: View { - var model: SelfieViewModelV2 - @State private var images: [UIImage] = [] - - var body: some View { - NavigationView { - ScrollView(.vertical, showsIndicators: false) { - VStack(alignment: .leading) { - if let selfieURL = model.selfieImage, - let selfieImage = loadImage(from: selfieURL) { - Image(uiImage: selfieImage) - .resizable() - .aspectRatio(contentMode: .fill) - .frame(width: 148, height: 320) - } else { - Text("No selfie image") - .font(.title) - } - if !images.isEmpty { - ScrollView(.horizontal, showsIndicators: false) { - HStack { - ForEach(images, id: \.self) { image in - Image(uiImage: image) - .resizable() - .aspectRatio(contentMode: .fill) - .frame(width: 148, height: 320) - } - } - } - } else { - Text("No liveness images") - .font(.title) - } - Spacer() - } - .foregroundColor(.primary) - .padding() - .frame(maxWidth: .infinity) - .navigationBarTitle(Text("Captured Images"), displayMode: .inline) - .onAppear { - loadImages() - } - } - } - } - - private func loadImages() { - images = model.livenessImages.compactMap { - loadImage(from: $0) - } - } - - private func loadImage(from url: URL) -> UIImage? { - guard let imageData = try? Data(contentsOf: url) else { - return nil - } - return UIImage(data: imageData) - } -} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/SubmissionStatusView.swift b/Sources/SmileID/Classes/SelfieCapture/View/SubmissionStatusView.swift new file mode 100644 index 000000000..faab587e0 --- /dev/null +++ b/Sources/SmileID/Classes/SelfieCapture/View/SubmissionStatusView.swift @@ -0,0 +1,26 @@ +import SwiftUI + +struct SubmissionStatusView: View { + var processState: ProcessingState + + var body: some View { + switch processState { + case .inProgress: + CircularProgressView() + .frame(width: 48, height: 48) + case .success: + StatusImage("checkmark.circle.fill", color: SmileID.theme.success) + case .error: + StatusImage("xmark.circle.fill", color: SmileID.theme.error) + } + } + + // swiftlint:disable identifier_name + @ViewBuilder func StatusImage(_ image: String, color: Color) -> some View { + Image(systemName: image) + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 48, height: 48) + .foregroundColor(color) + } +} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift b/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift index 30b52ab71..a70b77106 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift @@ -1,18 +1,25 @@ import SwiftUI struct UserInstructionsView: View { - @ObservedObject var viewModel: SelfieViewModelV2 + var instruction: String + var message: String? var body: some View { VStack { - Text(SmileIDResourcesHelper.localizedString(for: viewModel.userInstruction?.instruction ?? "")) - .multilineTextAlignment(.center) + Spacer(minLength: 0) + Text(SmileIDResourcesHelper.localizedString(for: instruction)) .font(SmileID.theme.header2) - .foregroundColor(SmileID.theme.accent) - .padding(.top, 80) - .padding(.horizontal, 50) - Spacer() + .foregroundColor(SmileID.theme.onDark) + .multilineTextAlignment(.center) + .lineLimit(3) + .minimumScaleFactor(0.8) + if let message = message { + Text(message) + .multilineTextAlignment(.center) + .font(SmileID.theme.header5) + .foregroundColor(SmileID.theme.onDark) + } } - .padding() + .padding(20) } } diff --git a/Sources/SmileID/Classes/SmileID.swift b/Sources/SmileID/Classes/SmileID.swift index 73e6412c8..8e594b426 100644 --- a/Sources/SmileID/Classes/SmileID.swift +++ b/Sources/SmileID/Classes/SmileID.swift @@ -207,7 +207,7 @@ public class SmileID { LocalStorage.getFileByType(jobId: jobId, fileType: .selfie), LocalStorage.getFileByType(jobId: jobId, fileType: .documentFront), LocalStorage.getFileByType(jobId: jobId, fileType: .documentBack), - LocalStorage.getInfoJsonFile(jobId: jobId), + LocalStorage.getInfoJsonFile(jobId: jobId) ].compactMap { $0 } allFiles = livenessFiles + additionalFiles } catch { diff --git a/Sources/SmileID/Classes/Views/ProcessingScreen.swift b/Sources/SmileID/Classes/Views/ProcessingScreen.swift index c59b3d7ed..ae56f456b 100644 --- a/Sources/SmileID/Classes/Views/ProcessingScreen.swift +++ b/Sources/SmileID/Classes/Views/ProcessingScreen.swift @@ -1,10 +1,18 @@ import Foundation import SwiftUI -public enum ProcessingState { +public enum ProcessingState: Equatable { case inProgress case success case error + + var title: String { + switch self { + case .inProgress: return "ProcessingState.Submitting" + case .success: return "ProcessingState.Successful" + case .error: return "ProcessingState.Failed" + } + } } /// This screen represents a generic Processing state. It has 3 sub-states: In Progress, Success, and diff --git a/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings b/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings index 4027e5c0d..a0049efc6 100644 --- a/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings +++ b/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings @@ -43,6 +43,9 @@ "Confirmation.ProcessingSelfie" = "Processing Selfie"; "Confirmation.Time" = "Just a few more seconds"; "Confirmation.SelfieCaptureComplete" = "Selfie Capture Complete"; +"ProcessingState.Submitting" = "Submitting"; +"ProcessingState.Successful" = "Successful"; +"ProcessingState.Failed" = "Failed"; "Confirmation.SuccessBody" = "Your selfie was successfully taken. You can now proceed."; "Confirmation.Continue" = "Continue"; "Confirmation.Failure" = "Your selfie failed to process"; @@ -54,6 +57,7 @@ "Action.Skip" = "Skip back of ID"; "Action.GetStarted" = "Get Started"; "Action.Cancel" = "Cancel"; +"Action.Done" = "Done"; "Camera.AgentMode" = "Agent Mode"; "Camera.Unauthorized.Title" = "Allow access to your camera"; diff --git a/Sources/SmileID/Resources/Media.xcassets/Loader.imageset/Contents.json b/Sources/SmileID/Resources/Media.xcassets/Loader.imageset/Contents.json new file mode 100644 index 000000000..e39cf2a55 --- /dev/null +++ b/Sources/SmileID/Resources/Media.xcassets/Loader.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Loader.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Loader@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Loader@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Sources/SmileID/Resources/Media.xcassets/Loader.imageset/Loader.png b/Sources/SmileID/Resources/Media.xcassets/Loader.imageset/Loader.png new file mode 100644 index 0000000000000000000000000000000000000000..e6d0524dc3774f799bcb5adfff297949c12023a8 GIT binary patch literal 2441 zcmV;433m30P)fFZFfm+z6>bUP^AP!d|3jVwpwSX7GSJxCW6B#%Ymjwp>%De z=6}!!4@pxZjt);9Si0+1v&A$k0viW*H-vuiJ|JAq&zKm2G+N@8=4%Fb2)BD(W8N-m z_h^1uB70EWKf%v$I_0JEMYT|wXdxheinLh=A~%WHjHER@9tlg3@0ot1+;7fiG|ow2 z!?E^_M(J5l-t!)4kCClG411O;K9& z%3_2bc&*ucna-C$%ZZ1+CQWoFv8`HXVyunhp}bV$kNcPGdXX-Iw4P}DDiCkQAT;qz ziA_?n`9W9WiLT~dzofYmD82MfXn_$6JJj*yd}*R0`=_~T{9Mw~_v6J-zieoyM zDBBJ+@7hD>BC!7C?)i@KcfdBQ8M%pFNg;CR$*x7-J9HUj<8kl0h{W%SbS;~bjV~lJ zj-zh-+u{fNruUUIA9l2VAHXLqGaVmNIgeZ}@GSeAy~7BL-(m132G27i9Yx`9X7)XU zKx^;L+oA9}^wx$CA$T_ZZYJx?A)QOwUW3!V7eT z#rN}%8KK9il#<|FSCJ^(GudtlwDfuPXkQ2PpumUGj#4lDeaXYabcLmR#m~l|{$FsG zp<|~bIQV^GBpwAz0Qt-c!(ob>q;)*Q2by-iPGusU&FxRav@;;0;+#s}Z#Rmd4CAWQ|PrbTxS+RA$n>V*41PL8r|KIQ_;sm+|j#0K5@tlNOp{-)VH& zX@61>nBER2vbToWamD#TqBi|$9)U)!Y07=N3A*4q^-_t*=Q{JJ1`hV?|YNI@qZ&?uFu{ZErKlncer<5_Lu z;05@Cq7L!x0+p$}x%sy=7dcl6j$eZ)4N_Jm9q%* z1LQ=#I6%a-JDQw4%AN$T;utN2ldh~lxAHV2Bs&$|&pfwwEj{;N8Zeva^O(rmA7ss= z_TVP-c zole%p(gf?a9Qp1Qp9^=HKPZ5&_VXmGWI{wDA*w1IpM=MS*9WT-HQ~^kq-23zsvQMP z`mtogXXpycv17+lS=Ye(80pKbjHEAG7fj?Q+ouTZTlr+s_`zEYp53Wk7>>dlT2FX4 z&=nHiS4bqnR07&hrUDV=d=bcO-YaRJ<&2fNS64jr4-`1>+l6$BKm<#wTHK5mHPU64 z>koN}iSeLL7XlGN`vG<$5=ox-%hF!cgXH3M^CNCMeqnf@1Z*UD=V)@*` z?RCP8EK(3HT%nVWsKB{VB}ey&yQ7)?KXQYkrFX{~Vbp3a__eJWPH zjrU*F4Gs^%=+&cbSB+JuG*)+vC@AB&qt;|{mCEBR{=E;Rlv{{DibcvBYSpg(<2>q-~Y%u{hXV8 zH}(9asltsu%VuO#4J3YevsUm@AvWS%r4CPsaJYMsm!mnzroVblw7_jB)D`NT97!z3 zMi_Ct6~LkSybdF$sD@r&**5-h@0ry$>lX(ftp zfFiU%9Eg~V#orNrBR_+^Fcu4RW&r;&~e?+p1aR>k(ZRfbm72*b+dX>VT}x( zlnBB~0r#z$2Sx#~1DPNn6tj^Z6|roPrT@@q$7V023zYu@zyhD**(af700000NkvXX Hu0mjfsx_I+ literal 0 HcmV?d00001 diff --git a/Sources/SmileID/Resources/Media.xcassets/Loader.imageset/Loader@2x.png b/Sources/SmileID/Resources/Media.xcassets/Loader.imageset/Loader@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b8444aec05f75f68df7fe8fbc8a1e8e28b4d8aa1 GIT binary patch literal 6456 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 literal 0 HcmV?d00001 diff --git a/Sources/SmileID/Resources/Media.xcassets/Loader.imageset/Loader@3x.png b/Sources/SmileID/Resources/Media.xcassets/Loader.imageset/Loader@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e95d4492b9c92baf59445734aa0ae058a18c1d1d GIT binary patch literal 11554 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 UN55X}i2wiq07*qoM6N<$g1p|begFUf literal 0 HcmV?d00001 diff --git a/Tests/Mocks/NetworkingMocks.swift b/Tests/Mocks/NetworkingMocks.swift index e72c113c5..eb8d1fef3 100644 --- a/Tests/Mocks/NetworkingMocks.swift +++ b/Tests/Mocks/NetworkingMocks.swift @@ -124,6 +124,7 @@ class MockSmileIdentityService: SmileIDServiceable { callbackUrl _: String?, sandboxResult _: Int?, allowNewEnroll _: Bool?, + failureReason: FailureReason?, metadata _: Metadata ) async throws -> SmartSelfieResponse { if MockHelper.shouldFail { @@ -154,6 +155,7 @@ class MockSmileIdentityService: SmileIDServiceable { partnerParams _: [String: String]?, callbackUrl _: String?, sandboxResult _: Int?, + failureReason: FailureReason?, metadata _: Metadata ) async throws -> SmartSelfieResponse { if MockHelper.shouldFail { From 87f434fc45f6fee17c67c95499075f3dff4776c4 Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Fri, 8 Nov 2024 14:23:48 +0100 Subject: [PATCH 15/23] Face Validator Tests (#252) * add test for valid face. * add more test cases for face validator class. * refactor out common functionality for reusability in the validator tests. --- Example/SmileID.xcodeproj/project.pbxproj | 4 + Example/Tests/FaceValidatorTests.swift | 147 ++++++++++++++++++++++ 2 files changed, 151 insertions(+) create mode 100644 Example/Tests/FaceValidatorTests.swift diff --git a/Example/SmileID.xcodeproj/project.pbxproj b/Example/SmileID.xcodeproj/project.pbxproj index d5f4a145c..ebf5b21c6 100644 --- a/Example/SmileID.xcodeproj/project.pbxproj +++ b/Example/SmileID.xcodeproj/project.pbxproj @@ -27,6 +27,7 @@ 20343AEF2C206BDF003536F5 /* JobListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20343AEE2C206BDF003536F5 /* JobListItem.swift */; }; 20343AF22C206CEC003536F5 /* JobData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20343AF12C206CEC003536F5 /* JobData.swift */; }; 20343AFA2C2086D3003536F5 /* EmptyStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20343AF92C2086D3003536F5 /* EmptyStateView.swift */; }; + 204C95A12CDA455600A07386 /* FaceValidatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 204C95A02CDA455600A07386 /* FaceValidatorTests.swift */; }; 205FB4A52C29AF1500FDE64F /* Date+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 205FB4A42C29AF1500FDE64F /* Date+Extensions.swift */; }; 205FB4A72C2C32A500FDE64F /* JobItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 205FB4A62C2C32A500FDE64F /* JobItemModel.swift */; }; 2089720E2C2624EE00D07D68 /* DataStoreClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2089720D2C2624EE00D07D68 /* DataStoreClient.swift */; }; @@ -106,6 +107,7 @@ 20343AEE2C206BDF003536F5 /* JobListItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JobListItem.swift; sourceTree = ""; }; 20343AF12C206CEC003536F5 /* JobData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JobData.swift; sourceTree = ""; }; 20343AF92C2086D3003536F5 /* EmptyStateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyStateView.swift; sourceTree = ""; }; + 204C95A02CDA455600A07386 /* FaceValidatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaceValidatorTests.swift; sourceTree = ""; }; 205FB4A42C29AF1500FDE64F /* Date+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Date+Extensions.swift"; sourceTree = ""; }; 205FB4A62C2C32A500FDE64F /* JobItemModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JobItemModel.swift; sourceTree = ""; }; 2089720D2C2624EE00D07D68 /* DataStoreClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataStoreClient.swift; sourceTree = ""; }; @@ -368,6 +370,7 @@ 918321E12A52E36A00D6FB7F /* XCTestExtension.swift */, 607FACE91AFB9204008FA782 /* Supporting Files */, 585BE4872AC7748E0091DDD8 /* RestartableTimerTest.swift */, + 204C95A02CDA455600A07386 /* FaceValidatorTests.swift */, ); path = Tests; sourceTree = ""; @@ -744,6 +747,7 @@ 585BE4882AC7748E0091DDD8 /* RestartableTimerTest.swift in Sources */, 58C7118C2A69DE920062BBFB /* EnhancedKycTest.swift in Sources */, 918321EC2A52E36A00D6FB7F /* DependencyContainerTests.swift in Sources */, + 204C95A12CDA455600A07386 /* FaceValidatorTests.swift in Sources */, 918321EA2A52E36A00D6FB7F /* URLSessionRestServiceClientTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Example/Tests/FaceValidatorTests.swift b/Example/Tests/FaceValidatorTests.swift new file mode 100644 index 000000000..a345a42f6 --- /dev/null +++ b/Example/Tests/FaceValidatorTests.swift @@ -0,0 +1,147 @@ +import XCTest + +@testable import SmileID + +class FaceValidatorTests: XCTestCase { + var faceValidator: FaceValidator! + var mockDelegate: MockFaceValidatorDelegate! + + override func setUp() { + super.setUp() + faceValidator = FaceValidator() + mockDelegate = MockFaceValidatorDelegate() + faceValidator.delegate = mockDelegate + let guideFrame: CGRect = .init(x: 30, y: 100, width: 250, height: 350) + faceValidator.setLayoutGuideFrame(with: guideFrame) + } + + override func tearDown() { + faceValidator = nil + mockDelegate = nil + super.tearDown() + } + + func testValidateWithValidFace() { + let result = performValidation( + faceBoundingBox: CGRect(x: 65, y: 164, width: 190, height: 190), + selfieQualityData: SelfieQualityData(failed: 0.1, passed: 0.9), + brighness: 100 + ) + + XCTAssertTrue(result.faceInBounds) + XCTAssertTrue(result.hasDetectedValidFace) + XCTAssertNil(result.userInstruction) + } + + func testValidateWithFaceTooSmall() { + let result = performValidation( + faceBoundingBox: CGRect(x: 65, y: 164, width: 100, height: 100), + selfieQualityData: SelfieQualityData(failed: 0.1, passed: 0.9), + brighness: 100 + ) + + XCTAssertFalse(result.faceInBounds) + XCTAssertFalse(result.hasDetectedValidFace) + XCTAssertEqual(result.userInstruction, .moveCloser) + } + + func testValidateWithFaceTooLarge() { + let result = performValidation( + faceBoundingBox: CGRect(x: 65, y: 164, width: 250, height: 250), + selfieQualityData: SelfieQualityData(failed: 0.1, passed: 0.9), + brighness: 100 + ) + + XCTAssertFalse(result.faceInBounds) + XCTAssertFalse(result.hasDetectedValidFace) + XCTAssertEqual(result.userInstruction, .moveBack) + } + + func testValidWithFaceOffCentre() { + let result = performValidation( + faceBoundingBox: CGRect(x: 125, y: 164, width: 190, height: 190), + selfieQualityData: SelfieQualityData(failed: 0.1, passed: 0.9), + brighness: 100 + ) + + XCTAssertFalse(result.faceInBounds) + XCTAssertFalse(result.hasDetectedValidFace) + XCTAssertEqual(result.userInstruction, .headInFrame) + } + + func testValidateWithPoorBrightness() { + let result = performValidation( + faceBoundingBox: CGRect(x: 65, y: 164, width: 190, height: 190), + selfieQualityData: SelfieQualityData(failed: 0.1, passed: 0.9), + brighness: 70 + ) + + XCTAssertTrue(result.faceInBounds) + XCTAssertFalse(result.hasDetectedValidFace) + XCTAssertEqual(result.userInstruction, .goodLight) + } + + func testValidateWithPoorSelfieQuality() { + let result = performValidation( + faceBoundingBox: CGRect(x: 65, y: 164, width: 190, height: 190), + selfieQualityData: SelfieQualityData(failed: 0.6, passed: 0.4), + brighness: 70 + ) + + XCTAssertTrue(result.faceInBounds) + XCTAssertFalse(result.hasDetectedValidFace) + XCTAssertEqual(result.userInstruction, .goodLight) + } + + func testValidateWithLivenessTask() { + let result = performValidation( + faceBoundingBox: CGRect(x: 65, y: 164, width: 190, height: 190), + selfieQualityData: SelfieQualityData(failed: 0.3, passed: 0.7), + brighness: 100, + livenessTask: .lookLeft + ) + + XCTAssertTrue(result.faceInBounds) + XCTAssertTrue(result.hasDetectedValidFace) + XCTAssertEqual(result.userInstruction, .lookLeft) + } +} + +// MARK: - Helpers +extension FaceValidatorTests { + func performValidation( + faceBoundingBox: CGRect, + selfieQualityData: SelfieQualityData, + brighness: Int, + livenessTask: LivenessTask? = nil + ) -> FaceValidationResult { + let faceGeometry = FaceGeometryData( + boundingBox: faceBoundingBox, + roll: 0, + yaw: 0, + pitch: 0, + direction: .none + ) + faceValidator.validate( + faceGeometry: faceGeometry, + selfieQuality: selfieQualityData, + brightness: brighness, + currentLivenessTask: livenessTask + ) + + guard let mockValidationResult = mockDelegate.validationResult else { + XCTFail("Validation result should not be nil") + return FaceValidationResult(userInstruction: nil, hasDetectedValidFace: false, faceInBounds: false) + } + return mockValidationResult + } +} + +// MARK: - Mocks +class MockFaceValidatorDelegate: FaceValidatorDelegate { + var validationResult: FaceValidationResult? + + func updateValidationResult(_ result: FaceValidationResult) { + self.validationResult = result + } +} From 569676f49f2b3ca9d1958ba234bc0c229bd47314 Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Mon, 11 Nov 2024 09:17:46 +0100 Subject: [PATCH 16/23] run pod install --- Example/Podfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 2f4db7331..e05e36e93 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -51,7 +51,7 @@ SPEC CHECKSUMS: lottie-ios: fcb5e73e17ba4c983140b7d21095c834b3087418 netfox: 9d5cc727fe7576c4c7688a2504618a156b7d44b7 Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 - SmileID: 3c6d3101c7da84fe9acc36c10d2a189192f00d13 + SmileID: 93184d185549dec6858a3cc567bd9423de79abbb SwiftLint: 3fe909719babe5537c552ee8181c0031392be933 ZIPFoundation: b8c29ea7ae353b309bc810586181fd073cb3312c From e7e10695975ee3db0f2bfb48cad812bba436d38f Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Tue, 10 Dec 2024 01:05:11 +0100 Subject: [PATCH 17/23] run pod install. --- Example/Podfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Example/Podfile.lock b/Example/Podfile.lock index f9273bacb..aa431d6b5 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -51,7 +51,7 @@ SPEC CHECKSUMS: lottie-ios: fcb5e73e17ba4c983140b7d21095c834b3087418 netfox: 9d5cc727fe7576c4c7688a2504618a156b7d44b7 Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 - SmileID: 44fef36001a02aa7362368e8a3f1127c03751166 + SmileID: dc04628f6e1572fc6e407649bfd05f91647ed947 SwiftLint: 3fe909719babe5537c552ee8181c0031392be933 ZIPFoundation: b8c29ea7ae353b309bc810586181fd073cb3312c From 26a110f1139175bee65420d9bd64ad3595d4d424 Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Tue, 10 Dec 2024 12:42:22 +0100 Subject: [PATCH 18/23] Liveness Timeout Images (#253) * decouple selfieviewmodel from livenesscheckmanager * improve object references so to prevent retain cycles. * write custom encoding function for failure reason, replace forced failure with failure reason enum. append failure reason data to multipart form request body. * check that submission task is nil before assigning it. * remove unnecessary comment * feat: update changelog (#254) * feat: update changelog * chore: lint fix * fix wrong version set for fingerprintjs package and dependency name causing spm not to resolve (#257) * added autoassign to workflow (#259) * added autoassign to workflow * added autoassign to workflow/fix * pod install * add beta tag to strict mode products. add a cancel toolbar button to all product screens. remove cancel button from liveness instructions screen. * use a different multiplier for checking face bounds for selfie and liveness capture hide liveness progress if face is not valid. * bump build number and add haptic feedback to selfie capture. * reduce luminance threshold lowerbound * reduce luminace threshold lower bound * introduce a function to flip the selfie image for preview during submission. * reduce head turn thresholds * remove brightness check from selfie capture v2 * adjust screen brightness for selfie capture screen v2 * Chore(deps): bump rexml from 3.3.6 to 3.3.9 (#249) Bumps [rexml](https://github.com/ruby/rexml) from 3.3.6 to 3.3.9. - [Release notes](https://github.com/ruby/rexml/releases) - [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md) - [Commits](https://github.com/ruby/rexml/compare/v3.3.6...v3.3.9) --- updated-dependencies: - dependency-name: rexml dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: JNdhlovu Co-authored-by: Tobi Omotayo * bump version number. * replace selfie quality check with vision face quality in face detector and face validator. * reset the submission task when there is a response or error. * improve publisher reference for legacy selfie view model. * use weak reference in legacy selfie view model to prevent retain cycle. * introduce a backport of StateObject into sdk helpers * disable idle timer when capturing selfie and enable it back when dismissed. * use a backport of stateobject in selfie capture screen. * bump build number. * restore brightness check * check orientation before analyzing camera frames. * add a did cancel delegate method to selfie result delegate. * Chore(deps): bump slackapi/slack-github-action (#260) * add property to set camera name in camera manager. implement fallback for pre-ios 15 devices. add didCancel endpoint to smart selfie result delegate. * use uniqueID for cameraname. add a delay when capturing random liveness images during timeout. * import new typeface DMSans and define a model to manage its fonts and styles. * add face not within frame case to face bounds state. * remove overlay from face bounding area. introduce new version of animations. * code formatting. * correct instructions typo. * change new smart selfie products name. disable lint checks for backport files. code formatting. * rename smart selfie v2 to enhanced * pod install. --------- Signed-off-by: dependabot[bot] Co-authored-by: JNdhlovu Co-authored-by: Davina Anthony <97633603+daviinaa@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Example/SmileID.xcodeproj/project.pbxproj | 146 +++++++------- Example/SmileID/Home/HomeView.swift | 4 +- Example/SmileID/Home/ProductCell.swift | 10 + Example/SmileID/WelcomeScreen.swift | 2 +- Example/Tests/FaceValidatorTests.swift | 22 +-- .../Classes/Camera/CameraManager.swift | 3 + .../Classes/Camera/CameraViewController.swift | 2 +- ...torV2.swift => EnhancedFaceDetector.swift} | 42 ++-- .../Classes/FaceDetector/FaceValidator.swift | 40 ++-- .../FaceDetector/LivenessCheckManager.swift | 40 ++-- .../SmileID/Classes/FaceDetector/Models.swift | 1 + .../SmileID/Classes/Helpers/Backport.swift | 52 +++++ .../SmileID/Classes/Helpers/DMSansFont.swift | 36 ++++ .../Helpers/DeviceRotationViewModifier.swift | 19 ++ .../Classes/Helpers/HapticManager.swift | 23 +++ .../SmileID/Classes/Helpers/StateObject.swift | 151 ++++++++++++++ Sources/SmileID/Classes/Helpers/Theme.swift | 14 +- .../Networking/Models/FailureReason.swift | 14 +- .../Classes/Networking/ServiceRunnable.swift | 16 +- .../SelfieCapture/CaptureGuideAnimation.swift | 11 +- ...ift => EnhancedSmartSelfieViewModel.swift} | 185 ++++++++++++++---- .../SelfieCaptureInstruction.swift | 5 + .../SelfieSubmissionManager.swift | 43 ++-- .../SelfieCapture/SelfieViewModel.swift | 13 +- .../SelfieCapture/SelfieViewModelAction.swift | 5 +- .../SmartSelfieResultDelegate.swift | 5 + .../SelfieCapture/View/CameraView.swift | 2 +- ...wift => EnhancedSelfieCaptureScreen.swift} | 17 +- .../SelfieCapture/View/FaceBoundingArea.swift | 30 ++- .../View/FaceShapedProgressIndicator.swift | 2 +- .../LivenessCaptureInstructionsView.swift | 24 +-- ...estratedEnhancedSelfieCaptureScreen.swift} | 10 +- Sources/SmileID/Classes/SmileID.swift | 4 +- Sources/SmileID/Classes/Util.swift | 4 + .../SmileID/Resources/Fonts/DMSans-Bold.ttf | Bin 0 -> 56268 bytes .../SmileID/Resources/Fonts/DMSans-Medium.ttf | Bin 0 -> 56376 bytes .../Resources/Fonts/DMSans-Regular.ttf | Bin 0 -> 56348 bytes .../Localization/en.lproj/Localizable.strings | 3 +- .../LottieFiles/device_orientation.lottie | Bin 0 -> 2249 bytes .../instruction_screen_with_side_bar.lottie | Bin 0 -> 3318 bytes .../instructions_no_progress.lottie | Bin 2808 -> 0 bytes .../light_animation_with_bg.lottie | Bin 0 -> 2061 bytes .../liveness_guides_with_bg.lottie | Bin 0 -> 2759 bytes 43 files changed, 718 insertions(+), 282 deletions(-) rename Sources/SmileID/Classes/FaceDetector/{FaceDetectorV2.swift => EnhancedFaceDetector.swift} (85%) create mode 100644 Sources/SmileID/Classes/Helpers/Backport.swift create mode 100644 Sources/SmileID/Classes/Helpers/DMSansFont.swift create mode 100644 Sources/SmileID/Classes/Helpers/DeviceRotationViewModifier.swift create mode 100644 Sources/SmileID/Classes/Helpers/HapticManager.swift create mode 100644 Sources/SmileID/Classes/Helpers/StateObject.swift rename Sources/SmileID/Classes/SelfieCapture/{SelfieViewModelV2.swift => EnhancedSmartSelfieViewModel.swift} (68%) rename Sources/SmileID/Classes/SelfieCapture/View/{SelfieCaptureScreenV2.swift => EnhancedSelfieCaptureScreen.swift} (90%) rename Sources/SmileID/Classes/SelfieCapture/View/{OrchestratedSelfieCaptureScreenV2.swift => OrchestratedEnhancedSelfieCaptureScreen.swift} (86%) create mode 100644 Sources/SmileID/Resources/Fonts/DMSans-Bold.ttf create mode 100644 Sources/SmileID/Resources/Fonts/DMSans-Medium.ttf create mode 100644 Sources/SmileID/Resources/Fonts/DMSans-Regular.ttf create mode 100644 Sources/SmileID/Resources/LottieFiles/device_orientation.lottie create mode 100644 Sources/SmileID/Resources/LottieFiles/instruction_screen_with_side_bar.lottie delete mode 100644 Sources/SmileID/Resources/LottieFiles/instructions_no_progress.lottie create mode 100644 Sources/SmileID/Resources/LottieFiles/light_animation_with_bg.lottie create mode 100644 Sources/SmileID/Resources/LottieFiles/liveness_guides_with_bg.lottie diff --git a/Example/SmileID.xcodeproj/project.pbxproj b/Example/SmileID.xcodeproj/project.pbxproj index ebf5b21c6..01757d569 100644 --- a/Example/SmileID.xcodeproj/project.pbxproj +++ b/Example/SmileID.xcodeproj/project.pbxproj @@ -39,7 +39,7 @@ 20B6D5EC2C21CE660023D51C /* DataStoreError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20B6D5EB2C21CE660023D51C /* DataStoreError.swift */; }; 20C360C82C454C130008DBDE /* RootViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20C360C72C454C130008DBDE /* RootViewModel.swift */; }; 20DFA0EC2C21917100AC2AE7 /* View+TextSelection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20DFA0EB2C21917100AC2AE7 /* View+TextSelection.swift */; }; - 20F3D6F32C25F4D700B32751 /* (null) in Sources */ = {isa = PBXBuildFile; }; + 20F3D6F32C25F4D700B32751 /* BuildFile in Sources */ = {isa = PBXBuildFile; }; 20F3D6F62C25F5C100B32751 /* SmileID.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 20F3D6F42C25F5C100B32751 /* SmileID.xcdatamodeld */; }; 5829A8C02BC7429A001C1E7E /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 5829A8BF2BC7429A001C1E7E /* PrivacyInfo.xcprivacy */; }; 585BE4882AC7748E0091DDD8 /* RestartableTimerTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 585BE4872AC7748E0091DDD8 /* RestartableTimerTest.swift */; }; @@ -48,10 +48,11 @@ 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 620F1E982B69194900185CD2 /* AlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 620F1E972B69194900185CD2 /* AlertView.swift */; }; - 620F1E9A2B691ABB00185CD2 /* (null) in Resources */ = {isa = PBXBuildFile; }; + 620F1E9A2B691ABB00185CD2 /* BuildFile in Resources */ = {isa = PBXBuildFile; }; 624777D02B0CDC9F00952842 /* EnhancedKycWithIdInputScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 624777CF2B0CDC9F00952842 /* EnhancedKycWithIdInputScreen.swift */; }; 62F6766F2B0D173600417419 /* EnhancedKycWithIdInputScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62F6766E2B0D173600417419 /* EnhancedKycWithIdInputScreenViewModel.swift */; }; 62F676712B0E00E800417419 /* EnhancedKycResultDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62F676702B0E00E800417419 /* EnhancedKycResultDelegate.swift */; }; + 682911036C447B7771BFFECF /* Pods_SmileID_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00CD865E9409021F98A68FCB /* Pods_SmileID_Tests.framework */; }; 6AC9802B9D1A630961B5454B /* CodeScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC98436935FFEA40E632182 /* CodeScanner.swift */; }; 6AC983F056A8F9088D6CF3F7 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC982147640002B81F72DEC /* SettingsView.swift */; }; 6AC984526F49F4E8F52C7494 /* ScannerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC98BA00298258573CBCBD4 /* ScannerViewController.swift */; }; @@ -72,8 +73,7 @@ 91CB21A52AC10C61005AEBF5 /* NavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CB21A42AC10C61005AEBF5 /* NavigationBar.swift */; }; 91D9FBC42AB481FE00A8D36B /* PollingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D9FBC32AB481FE00A8D36B /* PollingTests.swift */; }; 91D9FBD52AB8AB4700A8D36B /* CalculateSignatureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D9FBD42AB8AB4700A8D36B /* CalculateSignatureTests.swift */; }; - C449A598C4B78EB14B493293 /* Pods_SmileID_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02FE7FAA5FCF2B4172E1B98D /* Pods_SmileID_Example.framework */; }; - D4216F3C762CB28B31699F35 /* Pods_SmileID_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3A0FB77997B5C7D540E6873 /* Pods_SmileID_Tests.framework */; }; + A6888C0B92766926550DD3A8 /* Pods_SmileID_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C99338201884FF93283419C /* Pods_SmileID_Example.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -87,7 +87,8 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 02FE7FAA5FCF2B4172E1B98D /* Pods_SmileID_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 00CD865E9409021F98A68FCB /* Pods_SmileID_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 08F30BD5CB20E5AB9E6E211E /* Pods-SmileID_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.debug.xcconfig"; sourceTree = ""; }; 1E59E33D2BA1E64C00D2BAD2 /* PartnerParamsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PartnerParamsTests.swift; sourceTree = ""; }; 1E60ED322A29C306002695FF /* HomeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; 1E60ED332A29C306002695FF /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; @@ -120,7 +121,7 @@ 20C360C72C454C130008DBDE /* RootViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewModel.swift; sourceTree = ""; }; 20DFA0EB2C21917100AC2AE7 /* View+TextSelection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+TextSelection.swift"; sourceTree = ""; }; 20F3D6F52C25F5C100B32751 /* SmileID.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SmileID.xcdatamodel; sourceTree = ""; }; - 23822FF3F5838ECB320564F5 /* Pods-SmileID_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.release.xcconfig"; sourceTree = ""; }; + 573532D688419D93192B1FA9 /* Pods-SmileID_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.release.xcconfig"; sourceTree = ""; }; 5829A8BF2BC7429A001C1E7E /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 585BE4872AC7748E0091DDD8 /* RestartableTimerTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestartableTimerTest.swift; sourceTree = ""; }; 58C5F1D72B05925800A6080C /* BiometricKycWithIdInputScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BiometricKycWithIdInputScreen.swift; sourceTree = ""; }; @@ -148,9 +149,7 @@ 6AC9893915EBA33F6984A6D9 /* DocumentSelectorViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DocumentSelectorViewModel.swift; sourceTree = ""; }; 6AC98BA00298258573CBCBD4 /* ScannerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScannerViewController.swift; sourceTree = ""; }; 6AC98BC49871655D87C7DEE3 /* SettingsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewModel.swift; sourceTree = ""; }; - 70FFBEEAB7A2E3A33EE9EA93 /* Pods-SmileID_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.release.xcconfig"; sourceTree = ""; }; - 784454F0D57FB1E2742E2156 /* Pods-SmileID_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.debug.xcconfig"; sourceTree = ""; }; - 821B859ACAC64E44F59427CD /* Pods-SmileID_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.debug.xcconfig"; sourceTree = ""; }; + 7C99338201884FF93283419C /* Pods_SmileID_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 918321E02A52E36A00D6FB7F /* URLSessionRestServiceClientTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLSessionRestServiceClientTests.swift; sourceTree = ""; }; 918321E12A52E36A00D6FB7F /* XCTestExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = XCTestExtension.swift; path = ../../Tests/XCTestExtension.swift; sourceTree = ""; }; 918321E32A52E36A00D6FB7F /* DependencyContainerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DependencyContainerTests.swift; sourceTree = ""; }; @@ -162,7 +161,8 @@ 94E7560A47E255DD8215C183 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 9755B6A19CF28DE212F24C83 /* SmileID.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = SmileID.podspec; path = ../SmileID.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; C8CD2E3DB817D8C6334E9240 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; - F3A0FB77997B5C7D540E6873 /* Pods_SmileID_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CEDFCC61E89691A1B378145A /* Pods-SmileID_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.release.xcconfig"; sourceTree = ""; }; + F346EF1ED1DF5227E7973AF9 /* Pods-SmileID_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -170,7 +170,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C449A598C4B78EB14B493293 /* Pods_SmileID_Example.framework in Frameworks */, + A6888C0B92766926550DD3A8 /* Pods_SmileID_Example.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -178,7 +178,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D4216F3C762CB28B31699F35 /* Pods_SmileID_Tests.framework in Frameworks */, + 682911036C447B7771BFFECF /* Pods_SmileID_Tests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -280,15 +280,6 @@ path = Helpers; sourceTree = ""; }; - 34F29B5AE452286D795FCD29 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 02FE7FAA5FCF2B4172E1B98D /* Pods_SmileID_Example.framework */, - F3A0FB77997B5C7D540E6873 /* Pods_SmileID_Tests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 58C5F1D62B05922100A6080C /* BiometricKYC */ = { isa = PBXGroup; children = ( @@ -308,7 +299,7 @@ 607FACE81AFB9204008FA782 /* Tests */, 607FACD11AFB9204008FA782 /* Products */, 828BF541E068101B2E6ED55F /* Pods */, - 34F29B5AE452286D795FCD29 /* Frameworks */, + F16927B498A45E522FEB3C95 /* Frameworks */, ); sourceTree = ""; }; @@ -415,10 +406,10 @@ 828BF541E068101B2E6ED55F /* Pods */ = { isa = PBXGroup; children = ( - 784454F0D57FB1E2742E2156 /* Pods-SmileID_Example.debug.xcconfig */, - 70FFBEEAB7A2E3A33EE9EA93 /* Pods-SmileID_Example.release.xcconfig */, - 821B859ACAC64E44F59427CD /* Pods-SmileID_Tests.debug.xcconfig */, - 23822FF3F5838ECB320564F5 /* Pods-SmileID_Tests.release.xcconfig */, + F346EF1ED1DF5227E7973AF9 /* Pods-SmileID_Example.debug.xcconfig */, + 573532D688419D93192B1FA9 /* Pods-SmileID_Example.release.xcconfig */, + 08F30BD5CB20E5AB9E6E211E /* Pods-SmileID_Tests.debug.xcconfig */, + CEDFCC61E89691A1B378145A /* Pods-SmileID_Tests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -455,6 +446,15 @@ path = ../../Tests/Mocks; sourceTree = ""; }; + F16927B498A45E522FEB3C95 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7C99338201884FF93283419C /* Pods_SmileID_Example.framework */, + 00CD865E9409021F98A68FCB /* Pods_SmileID_Tests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -462,13 +462,13 @@ isa = PBXNativeTarget; buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SmileID_Example" */; buildPhases = ( - 09CE3487C58D7803D9B1254B /* [CP] Check Pods Manifest.lock */, + 8512F34E77FF72CD8905BE42 /* [CP] Check Pods Manifest.lock */, 607FACCC1AFB9204008FA782 /* Sources */, 917D79282AA8024400FA6624 /* SwiftLint */, 607FACCD1AFB9204008FA782 /* Frameworks */, 607FACCE1AFB9204008FA782 /* Resources */, C0BE335FFECD4DF6892309F3 /* Upload Debug Symbols to Sentry */, - 088EDD4D204057C2E745D8BC /* [CP] Embed Pods Frameworks */, + B4E6B9DF4045B6E197C117D0 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -483,7 +483,7 @@ isa = PBXNativeTarget; buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SmileID_Tests" */; buildPhases = ( - FB435C9B79B1BE5E6BD677F2 /* [CP] Check Pods Manifest.lock */, + C3515D148A433E1DCDCE17DF /* [CP] Check Pods Manifest.lock */, 607FACE11AFB9204008FA782 /* Sources */, 607FACE21AFB9204008FA782 /* Frameworks */, 607FACE31AFB9204008FA782 /* Resources */, @@ -549,7 +549,7 @@ buildActionMask = 2147483647; files = ( 1EFAB3172A375265008E3C13 /* Images.xcassets in Resources */, - 620F1E9A2B691ABB00185CD2 /* (null) in Resources */, + 620F1E9A2B691ABB00185CD2 /* BuildFile in Resources */, 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, 5829A8C02BC7429A001C1E7E /* PrivacyInfo.xcprivacy in Resources */, 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, @@ -566,39 +566,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 088EDD4D204057C2E745D8BC /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/ArkanaKeys/ArkanaKeys.framework", - "${BUILT_PRODUCTS_DIR}/ArkanaKeysInterfaces/ArkanaKeysInterfaces.framework", - "${BUILT_PRODUCTS_DIR}/FingerprintJS/FingerprintJS.framework", - "${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework", - "${BUILT_PRODUCTS_DIR}/SmileID/SmileID.framework", - "${BUILT_PRODUCTS_DIR}/ZIPFoundation/ZIPFoundation.framework", - "${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework", - "${BUILT_PRODUCTS_DIR}/netfox/netfox.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ArkanaKeys.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ArkanaKeysInterfaces.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FingerprintJS.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SmileID.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZIPFoundation.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Lottie.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/netfox.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 09CE3487C58D7803D9B1254B /* [CP] Check Pods Manifest.lock */ = { + 8512F34E77FF72CD8905BE42 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -638,6 +606,38 @@ shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\ncd ../Sources\n\"${PODS_ROOT}/SwiftLint/swiftlint\"\n"; }; + B4E6B9DF4045B6E197C117D0 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/ArkanaKeys/ArkanaKeys.framework", + "${BUILT_PRODUCTS_DIR}/ArkanaKeysInterfaces/ArkanaKeysInterfaces.framework", + "${BUILT_PRODUCTS_DIR}/FingerprintJS/FingerprintJS.framework", + "${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework", + "${BUILT_PRODUCTS_DIR}/SmileID/SmileID.framework", + "${BUILT_PRODUCTS_DIR}/ZIPFoundation/ZIPFoundation.framework", + "${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework", + "${BUILT_PRODUCTS_DIR}/netfox/netfox.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ArkanaKeys.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ArkanaKeysInterfaces.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FingerprintJS.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SmileID.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZIPFoundation.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Lottie.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/netfox.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; C0BE335FFECD4DF6892309F3 /* Upload Debug Symbols to Sentry */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -653,7 +653,7 @@ shellPath = /bin/sh; shellScript = "# This script is responsable to upload debug symbols and source context for Sentry.\nif which sentry-cli >/dev/null; then\nexport SENTRY_ORG=smile-identity\nexport SENTRY_PROJECT=ios\nERROR=$(sentry-cli debug-files upload --include-sources \"$DWARF_DSYM_FOLDER_PATH\" 2>&1 >/dev/null)\nif [ ! $? -eq 0 ]; then\necho \"warning: sentry-cli - $ERROR\"\nfi\nelse\necho \"warning: sentry-cli not installed, download from https://github.com/getsentry/sentry-cli/releases\"\nfi\n"; }; - FB435C9B79B1BE5E6BD677F2 /* [CP] Check Pods Manifest.lock */ = { + C3515D148A433E1DCDCE17DF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -698,7 +698,7 @@ 1ED53F6D2A2F28590020BEFB /* SmileTextField.swift in Sources */, 91CB21A52AC10C61005AEBF5 /* NavigationBar.swift in Sources */, 1ED53F6B2A2F28590020BEFB /* ProductCell.swift in Sources */, - 20F3D6F32C25F4D700B32751 /* (null) in Sources */, + 20F3D6F32C25F4D700B32751 /* BuildFile in Sources */, 1E60ED382A29C306002695FF /* Constants.swift in Sources */, 624777D02B0CDC9F00952842 /* EnhancedKycWithIdInputScreen.swift in Sources */, 1ED53F712A2F28590020BEFB /* EnterUserIDView.swift in Sources */, @@ -885,13 +885,13 @@ }; 607FACF01AFB9204008FA782 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 784454F0D57FB1E2742E2156 /* Pods-SmileID_Example.debug.xcconfig */; + baseConfigurationReference = F346EF1ED1DF5227E7973AF9 /* Pods-SmileID_Example.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Development"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 36; + CURRENT_PROJECT_VERSION = 39; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 99P7YGX9Q6; @@ -901,7 +901,7 @@ INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.3.0; + MARKETING_VERSION = 1.3.1; MODULE_NAME = ExampleApp; PRODUCT_BUNDLE_IDENTIFIER = "com.smileidentity.example-ios"; PRODUCT_NAME = "Smile ID"; @@ -918,13 +918,13 @@ }; 607FACF11AFB9204008FA782 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 70FFBEEAB7A2E3A33EE9EA93 /* Pods-SmileID_Example.release.xcconfig */; + baseConfigurationReference = 573532D688419D93192B1FA9 /* Pods-SmileID_Example.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "Apple Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 36; + CURRENT_PROJECT_VERSION = 39; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 99P7YGX9Q6; @@ -934,7 +934,7 @@ INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.3.0; + MARKETING_VERSION = 1.3.1; MODULE_NAME = ExampleApp; PRODUCT_BUNDLE_IDENTIFIER = "com.smileidentity.example-ios"; PRODUCT_NAME = "Smile ID"; @@ -950,7 +950,7 @@ }; 607FACF31AFB9204008FA782 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 821B859ACAC64E44F59427CD /* Pods-SmileID_Tests.debug.xcconfig */; + baseConfigurationReference = 08F30BD5CB20E5AB9E6E211E /* Pods-SmileID_Tests.debug.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; @@ -983,7 +983,7 @@ }; 607FACF41AFB9204008FA782 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 23822FF3F5838ECB320564F5 /* Pods-SmileID_Tests.release.xcconfig */; + baseConfigurationReference = CEDFCC61E89691A1B378145A /* Pods-SmileID_Tests.release.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Distribution"; diff --git a/Example/SmileID/Home/HomeView.swift b/Example/SmileID/Home/HomeView.swift index 430291899..86cc62d57 100644 --- a/Example/SmileID/Home/HomeView.swift +++ b/Example/SmileID/Home/HomeView.swift @@ -54,7 +54,7 @@ struct HomeView: View { ) ProductCell( image: "smart_selfie_enroll", - name: "SmartSelfie™ Enrollment (Strict Mode)", + name: "SmartSelfie™ Enrollment (Enhanced)", onClick: { viewModel.onProductClicked() }, @@ -74,7 +74,7 @@ struct HomeView: View { ) ProductCell( image: "smart_selfie_authentication", - name: "SmartSelfie™ Authentication (Strict Mode)", + name: "SmartSelfie™ Authentication (Enhanced)", onClick: { viewModel.onProductClicked() }, diff --git a/Example/SmileID/Home/ProductCell.swift b/Example/SmileID/Home/ProductCell.swift index a25967ce2..d8283b8f9 100644 --- a/Example/SmileID/Home/ProductCell.swift +++ b/Example/SmileID/Home/ProductCell.swift @@ -46,6 +46,16 @@ struct ProductCell: View { content: { NavigationView { content() + .toolbar { + ToolbarItem(placement: .cancellationAction) { + Button { + isPresented = false + } label: { + Text(SmileIDResourcesHelper.localizedString(for: "Action.Cancel")) + .foregroundColor(SmileID.theme.accent) + } + } + } } .environment(\.modalMode, $isPresented) } diff --git a/Example/SmileID/WelcomeScreen.swift b/Example/SmileID/WelcomeScreen.swift index 0fa83dd0c..d4ae0e37a 100644 --- a/Example/SmileID/WelcomeScreen.swift +++ b/Example/SmileID/WelcomeScreen.swift @@ -24,7 +24,7 @@ struct WelcomeScreen: View { .padding(.vertical) Text("To begin testing, you need to add a configuration from the Smile Portal") - .font(EpilogueFont.regular(with: 16)) + .font(DMSansFont.regular(with: 16)) .foregroundColor(SmileID.theme.onLight) .padding(.vertical) diff --git a/Example/Tests/FaceValidatorTests.swift b/Example/Tests/FaceValidatorTests.swift index a345a42f6..bde035c08 100644 --- a/Example/Tests/FaceValidatorTests.swift +++ b/Example/Tests/FaceValidatorTests.swift @@ -24,7 +24,7 @@ class FaceValidatorTests: XCTestCase { func testValidateWithValidFace() { let result = performValidation( faceBoundingBox: CGRect(x: 65, y: 164, width: 190, height: 190), - selfieQualityData: SelfieQualityData(failed: 0.1, passed: 0.9), + faceQuality: 0.5, brighness: 100 ) @@ -36,7 +36,7 @@ class FaceValidatorTests: XCTestCase { func testValidateWithFaceTooSmall() { let result = performValidation( faceBoundingBox: CGRect(x: 65, y: 164, width: 100, height: 100), - selfieQualityData: SelfieQualityData(failed: 0.1, passed: 0.9), + faceQuality: 0.5, brighness: 100 ) @@ -48,7 +48,7 @@ class FaceValidatorTests: XCTestCase { func testValidateWithFaceTooLarge() { let result = performValidation( faceBoundingBox: CGRect(x: 65, y: 164, width: 250, height: 250), - selfieQualityData: SelfieQualityData(failed: 0.1, passed: 0.9), + faceQuality: 0.5, brighness: 100 ) @@ -60,7 +60,7 @@ class FaceValidatorTests: XCTestCase { func testValidWithFaceOffCentre() { let result = performValidation( faceBoundingBox: CGRect(x: 125, y: 164, width: 190, height: 190), - selfieQualityData: SelfieQualityData(failed: 0.1, passed: 0.9), + faceQuality: 0.5, brighness: 100 ) @@ -72,8 +72,8 @@ class FaceValidatorTests: XCTestCase { func testValidateWithPoorBrightness() { let result = performValidation( faceBoundingBox: CGRect(x: 65, y: 164, width: 190, height: 190), - selfieQualityData: SelfieQualityData(failed: 0.1, passed: 0.9), - brighness: 70 + faceQuality: 0.5, + brighness: 35 ) XCTAssertTrue(result.faceInBounds) @@ -81,10 +81,10 @@ class FaceValidatorTests: XCTestCase { XCTAssertEqual(result.userInstruction, .goodLight) } - func testValidateWithPoorSelfieQuality() { + func testValidateWithPoorFaceQuality() { let result = performValidation( faceBoundingBox: CGRect(x: 65, y: 164, width: 190, height: 190), - selfieQualityData: SelfieQualityData(failed: 0.6, passed: 0.4), + faceQuality: 0.2, brighness: 70 ) @@ -96,7 +96,7 @@ class FaceValidatorTests: XCTestCase { func testValidateWithLivenessTask() { let result = performValidation( faceBoundingBox: CGRect(x: 65, y: 164, width: 190, height: 190), - selfieQualityData: SelfieQualityData(failed: 0.3, passed: 0.7), + faceQuality: 0.3, brighness: 100, livenessTask: .lookLeft ) @@ -111,7 +111,7 @@ class FaceValidatorTests: XCTestCase { extension FaceValidatorTests { func performValidation( faceBoundingBox: CGRect, - selfieQualityData: SelfieQualityData, + faceQuality: Float, brighness: Int, livenessTask: LivenessTask? = nil ) -> FaceValidationResult { @@ -124,7 +124,7 @@ extension FaceValidatorTests { ) faceValidator.validate( faceGeometry: faceGeometry, - selfieQuality: selfieQualityData, + faceQuality: faceQuality, brightness: brighness, currentLivenessTask: livenessTask ) diff --git a/Sources/SmileID/Classes/Camera/CameraManager.swift b/Sources/SmileID/Classes/Camera/CameraManager.swift index 439f31d95..f57cee050 100644 --- a/Sources/SmileID/Classes/Camera/CameraManager.swift +++ b/Sources/SmileID/Classes/Camera/CameraManager.swift @@ -35,6 +35,8 @@ class CameraManager: NSObject, ObservableObject { (session.inputs.first as? AVCaptureDeviceInput)?.device.position } + private(set) var cameraName: String? + // Used to queue and then resume tasks while waiting for Camera permissions private let sessionQueue = DispatchQueue(label: "com.smileidentity.ios") private let videoOutput = AVCaptureVideoDataOutput() @@ -90,6 +92,7 @@ class CameraManager: NSObject, ObservableObject { status = .failed return } + cameraName = camera.uniqueID do { let cameraInput = try AVCaptureDeviceInput(device: camera) diff --git a/Sources/SmileID/Classes/Camera/CameraViewController.swift b/Sources/SmileID/Classes/Camera/CameraViewController.swift index 26f2797dd..d96b773d7 100644 --- a/Sources/SmileID/Classes/Camera/CameraViewController.swift +++ b/Sources/SmileID/Classes/Camera/CameraViewController.swift @@ -3,7 +3,7 @@ import Vision import AVFoundation class CameraViewController: UIViewController { - var faceDetector: FaceDetectorV2? + var faceDetector: EnhancedFaceDetector? var previewLayer: AVCaptureVideoPreviewLayer? private weak var cameraManager: CameraManager? diff --git a/Sources/SmileID/Classes/FaceDetector/FaceDetectorV2.swift b/Sources/SmileID/Classes/FaceDetector/EnhancedFaceDetector.swift similarity index 85% rename from Sources/SmileID/Classes/FaceDetector/FaceDetectorV2.swift rename to Sources/SmileID/Classes/FaceDetector/EnhancedFaceDetector.swift index 8a9ba94f6..d00eee4a8 100644 --- a/Sources/SmileID/Classes/FaceDetector/FaceDetectorV2.swift +++ b/Sources/SmileID/Classes/FaceDetector/EnhancedFaceDetector.swift @@ -16,16 +16,15 @@ protocol FaceDetectorViewDelegate: NSObjectProtocol { protocol FaceDetectorResultDelegate: AnyObject { func faceDetector( - _ detector: FaceDetectorV2, + _ detector: EnhancedFaceDetector, didDetectFace faceGeometry: FaceGeometryData, withFaceQuality faceQuality: Float, - selfieQuality: SelfieQualityData, brightness: Int ) - func faceDetector(_ detector: FaceDetectorV2, didFailWithError error: Error) + func faceDetector(_ detector: EnhancedFaceDetector, didFailWithError error: Error) } -class FaceDetectorV2: NSObject { +class EnhancedFaceDetector: NSObject { private var selfieQualityModel: SelfieQualityDetector? private let cropSize = (width: 120, height: 120) @@ -78,29 +77,32 @@ class FaceDetectorV2: NSObject { let uiImage = UIImage(pixelBuffer: imageBuffer) let brightness = self.calculateBrightness(uiImage) - let croppedImage = try self.cropImageToFace(uiImage) - - let selfieQualityData = try self.selfieQualityRequest(imageBuffer: croppedImage) + let faceGeometryData: FaceGeometryData if #available(iOS 15.0, *) { - let faceGeometryData = FaceGeometryData( + faceGeometryData = FaceGeometryData( boundingBox: convertedBoundingBox, roll: faceObservation.roll ?? 0.0, yaw: faceObservation.yaw ?? 0.0, pitch: faceObservation.pitch ?? 0.0, direction: faceDirection(faceObservation: faceObservation) ) - self.resultDelegate? - .faceDetector( - self, - didDetectFace: faceGeometryData, - withFaceQuality: faceQualityObservation.faceCaptureQuality ?? 0.0, - selfieQuality: selfieQualityData, - brightness: brightness - ) - } else { - // Fallback on earlier versions + } else { // Fallback on earlier versions + faceGeometryData = FaceGeometryData( + boundingBox: convertedBoundingBox, + roll: faceObservation.roll ?? 0.0, + yaw: faceObservation.yaw ?? 0.0, + pitch: 0.0, + direction: faceDirection(faceObservation: faceObservation) + ) } + self.resultDelegate? + .faceDetector( + self, + didDetectFace: faceGeometryData, + withFaceQuality: faceQualityObservation.faceCaptureQuality ?? 0.0, + brightness: brightness + ) } catch { self.resultDelegate?.faceDetector(self, didFailWithError: error) } @@ -180,8 +182,8 @@ class FaceDetectorV2: NSObject { private func calculateBrightness(_ image: UIImage?) -> Int { guard let image, let cgImage = image.cgImage, - let imageData = cgImage.dataProvider?.data, - let dataPointer = CFDataGetBytePtr(imageData) + let imageData = cgImage.dataProvider?.data, + let dataPointer = CFDataGetBytePtr(imageData) else { return 0 } diff --git a/Sources/SmileID/Classes/FaceDetector/FaceValidator.swift b/Sources/SmileID/Classes/FaceDetector/FaceValidator.swift index bee6b2ece..80f54e312 100644 --- a/Sources/SmileID/Classes/FaceDetector/FaceValidator.swift +++ b/Sources/SmileID/Classes/FaceDetector/FaceValidator.swift @@ -15,9 +15,10 @@ final class FaceValidator { private var faceLayoutGuideFrame: CGRect = .zero // MARK: Constants - private let selfieQualityThreshold: Float = 0.5 - private let luminanceThreshold: ClosedRange = 80...200 - private let faceBoundsMultiplier: CGFloat = 1.5 + private let faceQualityThreshold: Float = 0.25 + private let luminanceThreshold: ClosedRange = 40...200 + private let selfiefaceBoundsMultiplier: CGFloat = 1.5 + private let livenessfaceBoundsMultiplier: CGFloat = 2.2 private let faceBoundsThreshold: CGFloat = 50 init() {} @@ -28,7 +29,7 @@ final class FaceValidator { func validate( faceGeometry: FaceGeometryData, - selfieQuality: SelfieQualityData, + faceQuality: Float, brightness: Int, currentLivenessTask: LivenessTask? ) { @@ -42,14 +43,14 @@ final class FaceValidator { // check brightness let isAcceptableBrightness = luminanceThreshold.contains(brightness) - // check selfie quality - let isAcceptableSelfieQuality = checkSelfieQuality(selfieQuality) + // check face quality + let isAcceptableFaceQuality = checkFaceQuality(faceQuality) // check that face is ready for capture let hasDetectedValidFace = checkValidFace( isAcceptableBounds, isAcceptableBrightness, - isAcceptableSelfieQuality + isAcceptableFaceQuality ) // determine what instruction/animation to display to users @@ -57,7 +58,7 @@ final class FaceValidator { from: faceBoundsState, detectedValidFace: hasDetectedValidFace, isAcceptableBrightness: isAcceptableBrightness, - isAcceptableSelfieQuality: isAcceptableSelfieQuality, + isAcceptableFaceQuality: isAcceptableFaceQuality, livenessTask: currentLivenessTask ) @@ -73,7 +74,7 @@ final class FaceValidator { from faceBoundsState: FaceBoundsState, detectedValidFace: Bool, isAcceptableBrightness: Bool, - isAcceptableSelfieQuality: Bool, + isAcceptableFaceQuality: Bool, livenessTask: LivenessTask? ) -> SelfieCaptureInstruction? { if detectedValidFace { @@ -88,29 +89,36 @@ final class FaceValidator { } } return nil - } else if faceBoundsState == .detectedFaceOffCentre { + } else if faceBoundsState == .detectedFaceOffCentre + || faceBoundsState == .detectedFaceNotWithinFrame { return .headInFrame } else if faceBoundsState == .detectedFaceTooSmall { return .moveCloser } else if faceBoundsState == .detectedFaceTooLarge { return .moveBack - } else if !isAcceptableSelfieQuality || !isAcceptableBrightness { + } else if !isAcceptableFaceQuality || !isAcceptableBrightness { return .goodLight } return nil } // MARK: Validation Checks - private func checkFaceSizeAndPosition(using boundingBox: CGRect, shouldCheckCentering: Bool) -> FaceBoundsState { + private func checkFaceSizeAndPosition( + using boundingBox: CGRect, + shouldCheckCentering: Bool + ) -> FaceBoundsState { let maxFaceWidth = faceLayoutGuideFrame.width - 20 + let faceBoundsMultiplier = shouldCheckCentering ? selfiefaceBoundsMultiplier : livenessfaceBoundsMultiplier let minFaceWidth = faceLayoutGuideFrame.width / faceBoundsMultiplier + // check how far/close face is if boundingBox.width > maxFaceWidth { return .detectedFaceTooLarge } else if boundingBox.width < minFaceWidth { return .detectedFaceTooSmall } + // check that face is centered for selfie capture only if shouldCheckCentering { let horizontalOffset = abs(boundingBox.midX - faceLayoutGuideFrame.midX) let verticalOffset = abs(boundingBox.midY - faceLayoutGuideFrame.midY) @@ -123,15 +131,15 @@ final class FaceValidator { return .detectedFaceAppropriateSizeAndPosition } - private func checkSelfieQuality(_ value: SelfieQualityData) -> Bool { - return value.passed >= selfieQualityThreshold + private func checkFaceQuality(_ value: Float) -> Bool { + return value >= faceQualityThreshold } private func checkValidFace( _ isAcceptableBounds: Bool, _ isAcceptableBrightness: Bool, - _ isAcceptableSelfieQuality: Bool + _ isAcceptableFaceQuality: Bool ) -> Bool { - return isAcceptableBounds && isAcceptableBrightness && isAcceptableSelfieQuality + return isAcceptableBounds && isAcceptableBrightness && isAcceptableFaceQuality } } diff --git a/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift b/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift index 9805aa481..033ed0f35 100644 --- a/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift +++ b/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift @@ -6,6 +6,20 @@ enum LivenessTask { case lookLeft case lookRight case lookUp + + static var numberOfFramesToCapture: Int { + if #available(iOS 15.0, *) { + return 2 + } else { + return 3 + } + } +} + +protocol LivenessCheckManagerDelegate: AnyObject { + func didCompleteLivenessTask() + func didCompleteLivenessChallenge() + func livenessChallengeTimeout() } class LivenessCheckManager: ObservableObject { @@ -13,20 +27,18 @@ class LivenessCheckManager: ObservableObject { private var livenessTaskSequence: [LivenessTask] = [] /// The index pointing to the current task in the sequence. private var currentTaskIndex: Int = 0 - /// The view model associated with the selfie capture process. - weak var selfieViewModel: SelfieViewModelV2? - /// A closure to trigger photo capture during the liveness check. - var captureImage: (() -> Void)? + + weak var delegate: LivenessCheckManagerDelegate? // MARK: Constants /// The minimum threshold for yaw (left-right head movement) private let minYawAngleThreshold: CGFloat = 0.15 /// The maximum threshold for yaw (left-right head movement) - private let maxYawAngleThreshold: CGFloat = 0.3 + private let maxYawAngleThreshold: CGFloat = 0.25 /// The minimum threshold for pitch (up-down head movement) private let minPitchAngleThreshold: CGFloat = 0.15 /// The maximum threshold for pitch (up-down head movement) - private let maxPitchAngleThreshold: CGFloat = 0.3 + private let maxPitchAngleThreshold: CGFloat = 0.25 /// The timeout duration for each task in seconds. private let taskTimeoutDuration: TimeInterval = 120 @@ -51,7 +63,11 @@ class LivenessCheckManager: ObservableObject { /// Initializes the LivenessCheckManager with a shuffled set of tasks. init() { - livenessTaskSequence = [.lookLeft, .lookRight, .lookUp].shuffled() + if #available(iOS 15.0, *) { + livenessTaskSequence = [.lookLeft, .lookRight, .lookUp].shuffled() + } else { + livenessTaskSequence = [.lookLeft, .lookRight].shuffled() + } } /// Cleans up resources when the manager is no longer needed. @@ -65,7 +81,8 @@ class LivenessCheckManager: ObservableObject { DispatchQueue.main.async { self.taskTimer = Timer.scheduledTimer( withTimeInterval: 1.0, - repeats: true) { [weak self] _ in + repeats: true + ) { [weak self] _ in self?.taskTimerFired() } } @@ -88,7 +105,7 @@ class LivenessCheckManager: ObservableObject { /// Handles the timeout event for a task. private func handleTaskTimeout() { stopTaskTimer() - selfieViewModel?.perform(action: .activeLivenessTimeout) + delegate?.livenessChallengeTimeout() } /// Advances to the next task in the sequence @@ -160,12 +177,11 @@ class LivenessCheckManager: ObservableObject { /// Completes the current task and moves to the next one. /// If all tasks are completed, it signals the completion of the liveness challenge. private func completeCurrentTask() { - captureImage?() - captureImage?() + delegate?.didCompleteLivenessTask() if !advanceToNextTask() { // Liveness challenge complete - selfieViewModel?.perform(action: .activeLivenessCompleted) + delegate?.didCompleteLivenessChallenge() self.currentTask = nil } } diff --git a/Sources/SmileID/Classes/FaceDetector/Models.swift b/Sources/SmileID/Classes/FaceDetector/Models.swift index 0d0bdd2ac..6566942c1 100644 --- a/Sources/SmileID/Classes/FaceDetector/Models.swift +++ b/Sources/SmileID/Classes/FaceDetector/Models.swift @@ -17,6 +17,7 @@ enum FaceBoundsState { case detectedFaceTooSmall case detectedFaceTooLarge case detectedFaceOffCentre + case detectedFaceNotWithinFrame case detectedFaceAppropriateSizeAndPosition } diff --git a/Sources/SmileID/Classes/Helpers/Backport.swift b/Sources/SmileID/Classes/Helpers/Backport.swift new file mode 100644 index 000000000..118f4b594 --- /dev/null +++ b/Sources/SmileID/Classes/Helpers/Backport.swift @@ -0,0 +1,52 @@ +// swiftlint:disable all +import SwiftUI +import ObjectiveC + +/// Provides a convenient method for backporting API, +/// including types, functions, properties, property wrappers and more. +/// +/// To backport a SwiftUI Label for example, you could apply the +/// following extension: +/// +/// extension Backport where Content == Any { +/// public struct Label { } +/// } +/// +/// Now if we want to provide further extensions to our backport type, +/// we need to ensure we retain the `Content == Any` generic requirement: +/// +/// extension Backport.Label where Content == Any, Title == Text, Icon == Image { +/// public init(_ title: S, systemName: String) { } +/// } +/// +/// In addition to types, we can also provide backports for properties +/// and methods: +/// +/// extension Backport.Label where Content: View { +/// func onChange(of value: Value, perform action: (Value) -> Void) -> some View { +/// // `content` provides access to the extended type +/// content.modifier(OnChangeModifier(value, action)) +/// } +/// } +/// +public struct Backport { + /// The underlying content this backport represents. + public let wrapped: Wrapped + + /// Initializes a new Backport for the specified content. + /// - Parameter content: The content (type) that's being backported + public init(_ wrapped: Wrapped) { + self.wrapped = wrapped + } +} + +public extension Backport where Wrapped == Any { + init(_ wrapped: Wrapped) { + self.wrapped = wrapped + } +} + +public extension NSObjectProtocol { + /// Wraps an `NSObject` that can be extended to provide backport functionality. + var backport: Backport { .init(self) } +} diff --git a/Sources/SmileID/Classes/Helpers/DMSansFont.swift b/Sources/SmileID/Classes/Helpers/DMSansFont.swift new file mode 100644 index 000000000..e4ea80da5 --- /dev/null +++ b/Sources/SmileID/Classes/Helpers/DMSansFont.swift @@ -0,0 +1,36 @@ +import SwiftUI + +enum DMSans: String, CaseIterable { + case regular = "DMSans-Regular" + case medium = "DMSans-Medium" + case bold = "DMSans-Bold" +} + +public struct DMSansFont: FontType { + public static var medium: Font { + medium(with: SmileIDResourcesHelper.pointSize) + } + + public static var bold: Font { + bold(with: SmileIDResourcesHelper.pointSize) + } + + public static var pointSize: CGFloat { + SmileIDResourcesHelper.pointSize + } + + public static func regular(with size: CGFloat) -> Font { + SmileIDResourcesHelper.loadFontIfNeeded(name: DMSans.regular.rawValue) + return Font.custom(DMSans.regular.rawValue, size: size) + } + + public static func medium(with size: CGFloat) -> Font { + SmileIDResourcesHelper.loadFontIfNeeded(name: DMSans.medium.rawValue) + return Font.custom(DMSans.medium.rawValue, size: size) + } + + public static func bold(with size: CGFloat) -> Font { + SmileIDResourcesHelper.loadFontIfNeeded(name: DMSans.bold.rawValue) + return Font.custom(DMSans.bold.rawValue, size: size) + } +} diff --git a/Sources/SmileID/Classes/Helpers/DeviceRotationViewModifier.swift b/Sources/SmileID/Classes/Helpers/DeviceRotationViewModifier.swift new file mode 100644 index 000000000..4ca0cc07c --- /dev/null +++ b/Sources/SmileID/Classes/Helpers/DeviceRotationViewModifier.swift @@ -0,0 +1,19 @@ +import SwiftUI + +struct DeviceRotationViewModifier: ViewModifier { + let action: (UIDeviceOrientation) -> Void + + func body(content: Content) -> some View { + content + .onAppear() + .onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { _ in + action(UIDevice.current.orientation) + } + } +} + +extension View { + func onRotate(perform action: @escaping (UIDeviceOrientation) -> Void) -> some View { + self.modifier(DeviceRotationViewModifier(action: action)) + } +} diff --git a/Sources/SmileID/Classes/Helpers/HapticManager.swift b/Sources/SmileID/Classes/Helpers/HapticManager.swift new file mode 100644 index 000000000..fd1cf28b3 --- /dev/null +++ b/Sources/SmileID/Classes/Helpers/HapticManager.swift @@ -0,0 +1,23 @@ +import UIKit + +class HapticManager { + static let shared = HapticManager() + + private init() {} + + // MARK: Notification Feedback + + /// Triggers a notification haptic feedback + /// - Parameter type: The notification type (success, warning, error) + func notification(type: UINotificationFeedbackGenerator.FeedbackType) { + let generator = UINotificationFeedbackGenerator() + generator.notificationOccurred(type) + } + + // MARK: Impact Feedback + + func impact(style: UIImpactFeedbackGenerator.FeedbackStyle) { + let generator = UIImpactFeedbackGenerator(style: style) + generator.impactOccurred() + } +} diff --git a/Sources/SmileID/Classes/Helpers/StateObject.swift b/Sources/SmileID/Classes/Helpers/StateObject.swift new file mode 100644 index 000000000..098f2392f --- /dev/null +++ b/Sources/SmileID/Classes/Helpers/StateObject.swift @@ -0,0 +1,151 @@ +// swiftlint:disable all +import Combine +import SwiftUI + +@available(iOS, deprecated: 14.0) +@available(macOS, deprecated: 11.0) +@available(tvOS, deprecated: 14.0) +@available(watchOS, deprecated: 7.0) +public extension Backport where Wrapped: ObservableObject { + + /// A property wrapper type that instantiates an observable object. + /// + /// Create a state object in a ``SwiftUI/View``, ``SwiftUI/App``, or + /// ``SwiftUI/Scene`` by applying the `@Backport.StateObject` attribute to a property + /// declaration and providing an initial value that conforms to the + /// + /// protocol: + /// + /// @Backport.StateObject var model = DataModel() + /// + /// SwiftUI creates a new instance of the object only once for each instance of + /// the structure that declares the object. When published properties of the + /// observable object change, SwiftUI updates the parts of any view that depend + /// on those properties: + /// + /// Text(model.title) // Updates the view any time `title` changes. + /// + /// You can pass the state object into a property that has the + /// ``SwiftUI/ObservedObject`` attribute. You can alternatively add the object + /// to the environment of a view hierarchy by applying the + /// ``SwiftUI/View/environmentObject(_:)`` modifier: + /// + /// ContentView() + /// .environmentObject(model) + /// + /// If you create an environment object as shown in the code above, you can + /// read the object inside `ContentView` or any of its descendants + /// using the ``SwiftUI/EnvironmentObject`` attribute: + /// + /// @EnvironmentObject var model: DataModel + /// + /// Get a ``SwiftUI/Binding`` to one of the state object's properties using the + /// `$` operator. Use a binding when you want to create a two-way connection to + /// one of the object's properties. For example, you can let a + /// ``SwiftUI/Toggle`` control a Boolean value called `isEnabled` stored in the + /// model: + /// + /// Toggle("Enabled", isOn: $model.isEnabled) + @propertyWrapper struct StateObject: DynamicProperty { + private final class Wrapper: ObservableObject { + private var subject = PassthroughSubject() + + var value: Wrapped? { + didSet { + cancellable = nil + cancellable = value?.objectWillChange + .sink { [subject] _ in subject.send() } + } + } + + private var cancellable: AnyCancellable? + + var objectWillChange: AnyPublisher { + subject.eraseToAnyPublisher() + } + } + + @State private var state = Wrapper() + + @ObservedObject private var observedObject = Wrapper() + + private var thunk: () -> Wrapped + + /// The underlying value referenced by the state object. + /// + /// The wrapped value property provides primary access to the value's data. + /// However, you don't access `wrappedValue` directly. Instead, use the + /// property variable created with the `@Backport.StateObject` attribute: + /// + /// @Backport.StateObject var contact = Contact() + /// + /// var body: some View { + /// Text(contact.name) // Accesses contact's wrapped value. + /// } + /// + /// When you change a property of the wrapped value, you can access the new + /// value immediately. However, SwiftUI updates views displaying the value + /// asynchronously, so the user interface might not update immediately. + public var wrappedValue: Wrapped { + if let object = state.value { + return object + } else { + let object = thunk() + state.value = object + return object + } + } + + /// A projection of the state object that creates bindings to its + /// properties. + /// + /// Use the projected value to pass a binding value down a view hierarchy. + /// To get the projected value, prefix the property variable with `$`. For + /// example, you can get a binding to a model's `isEnabled` Boolean so that + /// a ``SwiftUI/Toggle`` view can control the value: + /// + /// struct MyView: View { + /// @Backport.StateObject var model = DataModel() + /// + /// var body: some View { + /// Toggle("Enabled", isOn: $model.isEnabled) + /// } + /// } + public var projectedValue: ObservedObject.Wrapper { + ObservedObject(wrappedValue: wrappedValue).projectedValue + } + + /// Creates a new state object with an initial wrapped value. + /// + /// You don’t call this initializer directly. Instead, declare a property + /// with the `@Backport.StateObject` attribute in a ``SwiftUI/View``, + /// ``SwiftUI/App``, or ``SwiftUI/Scene``, and provide an initial value: + /// + /// struct MyView: View { + /// @Backport.StateObject var model = DataModel() + /// + /// // ... + /// } + /// + /// SwiftUI creates only one instance of the state object for each + /// container instance that you declare. In the code above, SwiftUI + /// creates `model` only the first time it initializes a particular instance + /// of `MyView`. On the other hand, each different instance of `MyView` + /// receives a distinct copy of the data model. + /// + /// - Parameter thunk: An initial value for the state object. + public init(wrappedValue thunk: @autoclosure @escaping () -> Wrapped) { + self.thunk = thunk + } + + public mutating func update() { + if state.value == nil { + state.value = thunk() + } + if observedObject.value !== state.value { + observedObject.value = state.value + } + } + } + +} diff --git a/Sources/SmileID/Classes/Helpers/Theme.swift b/Sources/SmileID/Classes/Helpers/Theme.swift index e3a73b020..40ba54432 100644 --- a/Sources/SmileID/Classes/Helpers/Theme.swift +++ b/Sources/SmileID/Classes/Helpers/Theme.swift @@ -68,19 +68,23 @@ public extension SmileIdTheme { // TO-DO: Rename fonts when Kwame comes up with a naming convention var header1: Font { - EpilogueFont.bold(with: 32) + DMSansFont.bold(with: 24) } var header2: Font { - EpilogueFont.bold(with: 20) + DMSansFont.bold(with: 20) + } + + var header3: Font { + DMSansFont.medium(with: 20) } var header4: Font { - EpilogueFont.bold(with: 16) + DMSansFont.medium(with: 16) } var header5: Font { - EpilogueFont.medium(with: 12) + DMSansFont.medium(with: 12) } var button: Font { @@ -88,7 +92,7 @@ public extension SmileIdTheme { } var body: Font { - EpilogueFont.medium(with: 14) + DMSansFont.regular(with: 16) } } diff --git a/Sources/SmileID/Classes/Networking/Models/FailureReason.swift b/Sources/SmileID/Classes/Networking/Models/FailureReason.swift index 8d901a64c..f68bcd028 100644 --- a/Sources/SmileID/Classes/Networking/Models/FailureReason.swift +++ b/Sources/SmileID/Classes/Networking/Models/FailureReason.swift @@ -1,11 +1,17 @@ import Foundation -public enum FailureReason { - case activeLivenessTimedOut +public enum FailureReason: Encodable { + case mobileActiveLivenessTimeout - var key: String { + private enum CodingKeys: String, CodingKey { + case mobileActiveLivenessTimeout = "mobile_active_liveness_timed_out" + } + + public func encode(to encoder: any Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) switch self { - case .activeLivenessTimedOut: return "mobile_active_liveness_timed_out" + case .mobileActiveLivenessTimeout: + try container.encode(true, forKey: .mobileActiveLivenessTimeout) } } } diff --git a/Sources/SmileID/Classes/Networking/ServiceRunnable.swift b/Sources/SmileID/Classes/Networking/ServiceRunnable.swift index 16a944630..567e92f7a 100644 --- a/Sources/SmileID/Classes/Networking/ServiceRunnable.swift +++ b/Sources/SmileID/Classes/Networking/ServiceRunnable.swift @@ -337,15 +337,13 @@ extension ServiceRunnable { body.append(lineBreak.data(using: .utf8)!) // Append failure reason if available - if let failureReason { - let activeLivenessTimedOutString = "\(failureReason == .activeLivenessTimedOut)" - if let valueData = "\(activeLivenessTimedOutString)\(lineBreak)".data(using: .utf8) { - body.append("--\(boundary)\(lineBreak)".data(using: .utf8)!) - body.append( - "Content-Disposition: form-data; name=\"\(failureReason.key)\"\(lineBreak + lineBreak)".data( - using: .utf8)!) - body.append(valueData) - } + if let failureReason, + let failureReasonData = try? encoder.encode(failureReason) { + body.append("--\(boundary)\(lineBreak)".data(using: .utf8)!) + body.append("Content-Disposition: form-data; name=\"failure_reason\"\(lineBreak)".data(using: .utf8)!) + body.append("Content-Type: application/json\(lineBreak + lineBreak)".data(using: .utf8)!) + body.append(failureReasonData) + body.append(lineBreak.data(using: .utf8)!) } // Append final boundary diff --git a/Sources/SmileID/Classes/SelfieCapture/CaptureGuideAnimation.swift b/Sources/SmileID/Classes/SelfieCapture/CaptureGuideAnimation.swift index 13d274ba0..b9c3f26a8 100644 --- a/Sources/SmileID/Classes/SelfieCapture/CaptureGuideAnimation.swift +++ b/Sources/SmileID/Classes/SelfieCapture/CaptureGuideAnimation.swift @@ -8,11 +8,12 @@ enum CaptureGuideAnimation: Equatable { case lookRight case lookLeft case lookUp + case turnPhoneUp var fileName: String { switch self { case .goodLight: - return "light_animation" + return "light_animation_with_bg" case .headInFrame: return "positioning" case .moveBack: @@ -20,11 +21,13 @@ enum CaptureGuideAnimation: Equatable { case .moveCloser: return "positioning" case .lookRight: - return "liveness_guides" + return "liveness_guides_with_bg" case .lookLeft: - return "liveness_guides" + return "liveness_guides_with_bg" case .lookUp: - return "liveness_guides" + return "liveness_guides_with_bg" + case .turnPhoneUp: + return "device_orientation" } } diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift b/Sources/SmileID/Classes/SelfieCapture/EnhancedSmartSelfieViewModel.swift similarity index 68% rename from Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift rename to Sources/SmileID/Classes/SelfieCapture/EnhancedSmartSelfieViewModel.swift index 8057d48f7..b0cf63d08 100644 --- a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelV2.swift +++ b/Sources/SmileID/Classes/SelfieCapture/EnhancedSmartSelfieViewModel.swift @@ -2,10 +2,10 @@ import ARKit import Combine import SwiftUI -public class SelfieViewModelV2: ObservableObject { +public class EnhancedSmartSelfieViewModel: ObservableObject { // MARK: Dependencies let cameraManager = CameraManager.shared - let faceDetector = FaceDetectorV2() + let faceDetector = EnhancedFaceDetector() private let faceValidator = FaceValidator() var livenessCheckManager = LivenessCheckManager() private var subscribers = Set() @@ -13,25 +13,31 @@ public class SelfieViewModelV2: ObservableObject { private let metadataTimerStart = MonotonicTime() // MARK: Private Properties + private var deviceOrientation: UIDeviceOrientation { + return UIDevice.current.orientation + } private var faceLayoutGuideFrame = CGRect(x: 0, y: 0, width: 250, height: 350) private var elapsedGuideAnimationDelay: TimeInterval = 0 + private var currentFrameBuffer: CVPixelBuffer? var selfieImage: UIImage? - var selfieImageURL: URL? { + private var selfieImageURL: URL? { didSet { DispatchQueue.main.async { self.selfieCaptured = self.selfieImage != nil } } } - var livenessImages: [URL] = [] + private var livenessImages: [URL] = [] private var hasDetectedValidFace: Bool = false + private var isCapturingLivenessImages = false private var shouldBeginLivenessChallenge: Bool { hasDetectedValidFace && selfieImage != nil && livenessCheckManager.currentTask != nil } private var shouldSubmitJob: Bool { selfieImage != nil && livenessImages.count == numLivenessImages } - private var forcedFailure: Bool = false + private var submissionTask: Task? + private var failureReason: FailureReason? private var apiResponse: SmartSelfieResponse? private var error: Error? @Published public var errorMessageRes: String? @@ -100,13 +106,15 @@ public class SelfieViewModelV2: ObservableObject { } deinit { + subscribers.removeAll() stopGuideAnimationDelayTimer() + invalidateSubmissionTask() } private func initialSetup() { self.faceValidator.delegate = self self.faceDetector.resultDelegate = self - self.livenessCheckManager.selfieViewModel = self + self.livenessCheckManager.delegate = self self.faceValidator.setLayoutGuideFrame(with: faceLayoutGuideFrame) self.userInstruction = .headInFrame @@ -116,6 +124,7 @@ public class SelfieViewModelV2: ObservableObject { with: livenessCheckManager.$lookRightProgress, livenessCheckManager.$lookUpProgress ) + .receive(on: DispatchQueue.main) .sink { [weak self] _ in DispatchQueue.main.async { self?.resetGuideAnimationDelayTimer() @@ -127,46 +136,48 @@ public class SelfieViewModelV2: ObservableObject { .receive(on: DispatchQueue.main) .filter { $0 == .unauthorized } .map { _ in AlertState.cameraUnauthorized } - .sink { alert in self.unauthorizedAlert = alert } + .sink { [weak self] alert in self?.unauthorizedAlert = alert } .store(in: &subscribers) cameraManager.sampleBufferPublisher + .receive(on: DispatchQueue.main) .throttle( for: 0.35, scheduler: DispatchQueue.global(qos: .userInitiated), latest: true ) // Drop the first ~2 seconds to allow the user to settle in - .dropFirst(5) + .dropFirst(5) .compactMap { $0 } - .sink(receiveValue: analyzeFrame) + .sink { [weak self] imageBuffer in + self?.handleCameraImageBuffer(imageBuffer) + } .store(in: &subscribers) } + private func handleCameraImageBuffer(_ imageBuffer: CVPixelBuffer) { + if deviceOrientation == .portrait { + analyzeFrame(imageBuffer: imageBuffer) + } else { + publishUserInstruction(.turnPhoneUp) + } + } + private func analyzeFrame(imageBuffer: CVPixelBuffer) { + currentFrameBuffer = imageBuffer faceDetector.processImageBuffer(imageBuffer) if hasDetectedValidFace && selfieImage == nil { captureSelfieImage(imageBuffer) + HapticManager.shared.notification(type: .success) livenessCheckManager.initiateLivenessCheck() } - - livenessCheckManager.captureImage = { [weak self] in - self?.captureLivenessImage(imageBuffer) - } } // MARK: Actions func perform(action: SelfieViewModelAction) { switch action { case let .windowSizeDetected(windowRect, safeAreaInsets): - handleWindowSizeChanged(toRect: windowRect, edgeInsets: safeAreaInsets) - case .activeLivenessCompleted: - self.cameraManager.pauseSession() - handleSubmission() - case .activeLivenessTimeout: - self.forcedFailure = true - self.cameraManager.pauseSession() - handleSubmission() + handleWindowSizeChanged(to: windowRect, edgeInsets: safeAreaInsets) case .onViewAppear: handleViewAppeared() case .jobProcessingDone: @@ -189,7 +200,7 @@ public class SelfieViewModelV2: ObservableObject { } // MARK: Action Handlers -extension SelfieViewModelV2 { +extension EnhancedSmartSelfieViewModel { private func resetGuideAnimationDelayTimer() { elapsedGuideAnimationDelay = 0 showGuideAnimation = false @@ -219,14 +230,13 @@ extension SelfieViewModelV2 { selfieImage = nil livenessImages = [] selfieCaptureState = .capturingSelfie - forcedFailure = false + failureReason = nil } - private func handleWindowSizeChanged(toRect: CGSize, edgeInsets: EdgeInsets) { + private func handleWindowSizeChanged(to rect: CGSize, edgeInsets: EdgeInsets) { let topPadding: CGFloat = edgeInsets.top + 100 - print(edgeInsets.top) faceLayoutGuideFrame = CGRect( - x: (toRect.width / 2) - faceLayoutGuideFrame.width / 2, + x: (rect.width / 2) - faceLayoutGuideFrame.width / 2, y: topPadding, width: faceLayoutGuideFrame.width, height: faceLayoutGuideFrame.height @@ -241,17 +251,49 @@ extension SelfieViewModelV2 { pixelBuffer, height: selfieImageSize, orientation: .up - ) + ), + let uiImage = UIImage(data: imageData) else { throw SmileIDError.unknown("Error resizing selfie image") } - self.selfieImage = UIImage(data: imageData) + self.selfieImage = flipImageForPreview(uiImage) self.selfieImageURL = try LocalStorage.createSelfieFile(jobId: jobId, selfieFile: imageData) } catch { handleError(error) } } + private func flipImageForPreview(_ image: UIImage) -> UIImage? { + guard let cgImage = image.cgImage else { return nil } + + let contextSize = CGSize(width: image.size.width, height: image.size.height) + UIGraphicsBeginImageContextWithOptions(contextSize, false, 1.0) + defer { + UIGraphicsEndImageContext() + } + guard let context = UIGraphicsGetCurrentContext() else { + return nil + } + + // Apply a 180° counterclockwise rotation + // Translate the context to the center before rotating + // to ensure the image rotates around its center + context.translateBy(x: contextSize.width / 2, y: contextSize.height / 2) + context.rotate(by: -.pi) + + // Draw the image + context.draw( + cgImage, + in: CGRect( + x: -image.size.width / 2, y: -image.size.height / 2, width: image.size.width, height: image.size.height) + ) + + // Get the new UIImage from the context + let correctedImage = UIGraphicsGetImageFromCurrentImageContext() + + return correctedImage + } + private func captureLivenessImage(_ pixelBuffer: CVPixelBuffer) { do { guard @@ -271,14 +313,15 @@ extension SelfieViewModelV2 { } private func handleError(_ error: Error) { - print(error.localizedDescription) + debugPrint(error.localizedDescription) } private func handleSubmission() { DispatchQueue.main.async { self.selfieCaptureState = .processing(.inProgress) } - Task { + guard submissionTask == nil else { return } + submissionTask = Task { try await submitJob() } } @@ -290,36 +333,34 @@ extension SelfieViewModelV2 { } // MARK: FaceDetectorResultDelegate Methods -extension SelfieViewModelV2: FaceDetectorResultDelegate { +extension EnhancedSmartSelfieViewModel: FaceDetectorResultDelegate { func faceDetector( - _ detector: FaceDetectorV2, + _ detector: EnhancedFaceDetector, didDetectFace faceGeometry: FaceGeometryData, withFaceQuality faceQuality: Float, - selfieQuality: SelfieQualityData, brightness: Int ) { faceValidator .validate( faceGeometry: faceGeometry, - selfieQuality: selfieQuality, + faceQuality: faceQuality, brightness: brightness, currentLivenessTask: self.livenessCheckManager.currentTask ) - if shouldBeginLivenessChallenge { + if shouldBeginLivenessChallenge && !isCapturingLivenessImages { livenessCheckManager.processFaceGeometry(faceGeometry) } } - func faceDetector(_ detector: FaceDetectorV2, didFailWithError error: Error) { + func faceDetector(_ detector: EnhancedFaceDetector, didFailWithError error: Error) { DispatchQueue.main.async { self.publishUserInstruction(.headInFrame) } - print(error.localizedDescription) } } // MARK: FaceValidatorDelegate Methods -extension SelfieViewModelV2: FaceValidatorDelegate { +extension EnhancedSmartSelfieViewModel: FaceValidatorDelegate { func updateValidationResult(_ result: FaceValidationResult) { DispatchQueue.main.async { self.faceInBounds = result.faceInBounds @@ -329,8 +370,57 @@ extension SelfieViewModelV2: FaceValidatorDelegate { } } +// MARK: LivenessCheckManagerDelegate Methods +extension EnhancedSmartSelfieViewModel: LivenessCheckManagerDelegate { + func didCompleteLivenessTask() { + isCapturingLivenessImages = true + let capturedFrames = 0 + captureNextFrame(capturedFrames: capturedFrames) + } + + private func captureNextFrame(capturedFrames: Int) { + let maxFrames = LivenessTask.numberOfFramesToCapture + guard capturedFrames < maxFrames, + let currentFrame = currentFrameBuffer else { + return + } + + captureLivenessImage(currentFrame) + let nextCapturedFrames = capturedFrames + 1 + if nextCapturedFrames < maxFrames { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) { [weak self] in + self?.captureNextFrame(capturedFrames: nextCapturedFrames) + } + } else { + isCapturingLivenessImages = false + HapticManager.shared.notification(type: .success) + } + } + + func didCompleteLivenessChallenge() { + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { + self.cameraManager.pauseSession() + self.handleSubmission() + } + } + + func livenessChallengeTimeout() { + let remainingImages = numLivenessImages - livenessImages.count + let count = remainingImages > 0 ? remainingImages : 0 + for _ in 0.. (MultipartBody, [MultipartBody]) { - guard let smartSelfieImage = createMultipartBody(from: selfieImage) else { - throw SmileIDError.unknown("Failed to process selfie image") + guard let smartSelfieImage = createMultipartBody(from: selfieImageUrl) else { + throw SmileIDError.fileNotFound("Could not create multipart body for file") } let smartSelfieLivenessImages = livenessImages.compactMap { @@ -136,7 +131,9 @@ final class SelfieSubmissionManager { private func createMultipartBody(from fileURL: URL?) -> MultipartBody? { guard let fileURL = fileURL, let imageData = try? Data(contentsOf: fileURL) - else { return nil } + else { + return nil + } return MultipartBody( withImage: imageData, forKey: fileURL.lastPathComponent, @@ -148,7 +145,7 @@ final class SelfieSubmissionManager { authResponse: AuthenticationResponse, smartSelfieImage: MultipartBody, smartSelfieLivenessImages: [MultipartBody], - forcedFailure: Bool + failureReason: FailureReason? ) async throws -> SmartSelfieResponse { if isEnroll { return try await SmileID.api @@ -162,7 +159,7 @@ final class SelfieSubmissionManager { callbackUrl: SmileID.callbackUrl, sandboxResult: nil, allowNewEnroll: allowNewEnroll, - failureReason: forcedFailure ? .activeLivenessTimedOut : nil, + failureReason: failureReason, metadata: localMetadata.metadata ) } else { @@ -176,7 +173,7 @@ final class SelfieSubmissionManager { partnerParams: extraPartnerParams, callbackUrl: SmileID.callbackUrl, sandboxResult: nil, - failureReason: forcedFailure ? .activeLivenessTimedOut : nil, + failureReason: failureReason, metadata: localMetadata.metadata ) } @@ -187,7 +184,7 @@ final class SelfieSubmissionManager { try LocalStorage.moveToSubmittedJobs(jobId: self.jobId) // Update the references to the submitted selfie and liveness images - self.selfieImage = try LocalStorage.getFileByType( + self.selfieImageUrl = try LocalStorage.getFileByType( jobId: jobId, fileType: FileType.selfie, submitted: true @@ -204,7 +201,7 @@ final class SelfieSubmissionManager { do { let didMove = try LocalStorage.handleOfflineJobFailure(jobId: self.jobId, error: smileIDError) if didMove { - self.selfieImage = try LocalStorage.getFileByType(jobId: jobId, fileType: .selfie, submitted: true) + self.selfieImageUrl = try LocalStorage.getFileByType(jobId: jobId, fileType: .selfie, submitted: true) self.livenessImages = try LocalStorage.getFilesByType(jobId: jobId, fileType: .liveness, submitted: true) ?? [] } diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift index c41e1270f..a3097ca03 100644 --- a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift @@ -82,7 +82,7 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { .receive(on: DispatchQueue.main) .filter { $0 == .unauthorized } .map { _ in AlertState.cameraUnauthorized } - .sink { alert in self.unauthorizedAlert = alert } + .sink { [weak self] alert in self?.unauthorizedAlert = alert } .store(in: &subscribers) cameraManager.sampleBufferPublisher @@ -91,7 +91,9 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { // Drop the first ~2 seconds to allow the user to settle in .dropFirst(5) .compactMap { $0 } - .sink(receiveValue: analyzeImage) + .sink { [weak self] imageBuffer in + self?.analyzeImage(image: imageBuffer) + } .store(in: &subscribers) localMetadata.addMetadata( @@ -116,7 +118,8 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { } do { - try faceDetector.detect(imageBuffer: image) { [self] request, error in + try faceDetector.detect(imageBuffer: image) { [weak self] request, error in + guard let self else { return } if let error { print("Error analyzing image: \(error.localizedDescription)") self.error = error @@ -190,8 +193,8 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { let userNeedsToSmile = livenessImages.count > numLivenessImages / 2 - DispatchQueue.main.async { [self] in - directive = userNeedsToSmile ? "Instructions.Smile" : "Instructions.Capturing" + DispatchQueue.main.async { + self.directive = userNeedsToSmile ? "Instructions.Smile" : "Instructions.Capturing" } // TODO: Use mouth deformation as an alternate signal for non-ARKit capture diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift index 579803a9f..7b9c1c159 100644 --- a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift @@ -5,10 +5,7 @@ enum SelfieViewModelAction { case onViewAppear case windowSizeDetected(CGSize, EdgeInsets) - // Face Detection Actions - case activeLivenessCompleted - case activeLivenessTimeout - + // Job Submission Actions case jobProcessingDone case retryJobSubmission diff --git a/Sources/SmileID/Classes/SelfieCapture/SmartSelfieResultDelegate.swift b/Sources/SmileID/Classes/SelfieCapture/SmartSelfieResultDelegate.swift index afaeadbea..3e0680daa 100644 --- a/Sources/SmileID/Classes/SelfieCapture/SmartSelfieResultDelegate.swift +++ b/Sources/SmileID/Classes/SelfieCapture/SmartSelfieResultDelegate.swift @@ -19,3 +19,8 @@ public protocol SmartSelfieResultDelegate { /// - Parameter error: The error returned from a failed selfie capture func didError(error: Error) } + +extension SmartSelfieResultDelegate { + /// The selfie capture operation was canceled. + func didCancel() {} +} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/CameraView.swift b/Sources/SmileID/Classes/SelfieCapture/View/CameraView.swift index aa04685b2..98da6d547 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/CameraView.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/CameraView.swift @@ -8,7 +8,7 @@ struct CameraView: UIViewControllerRepresentable { init( cameraManager: CameraManager, - selfieViewModel: SelfieViewModelV2? = nil + selfieViewModel: EnhancedSmartSelfieViewModel? = nil ) { let controller = CameraViewController(cameraManager: cameraManager) controller.faceDetector = selfieViewModel?.faceDetector diff --git a/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift b/Sources/SmileID/Classes/SelfieCapture/View/EnhancedSelfieCaptureScreen.swift similarity index 90% rename from Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift rename to Sources/SmileID/Classes/SelfieCapture/View/EnhancedSelfieCaptureScreen.swift index 3822a43c1..734fe0968 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/SelfieCaptureScreenV2.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/EnhancedSelfieCaptureScreen.swift @@ -1,12 +1,14 @@ import SwiftUI -public struct SelfieCaptureScreenV2: View { - @ObservedObject var viewModel: SelfieViewModelV2 +public struct EnhancedSelfieCaptureScreen: View { + @Backport.StateObject var viewModel: EnhancedSmartSelfieViewModel let showAttribution: Bool private let faceShape = FaceShape() @Environment(\.modalMode) private var modalMode + private(set) var originalBrightness = UIScreen.main.brightness + public var body: some View { GeometryReader { proxy in VStack(spacing: 10) { @@ -34,7 +36,8 @@ public struct SelfieCaptureScreenV2: View { showGuideAnimation: viewModel.showGuideAnimation, guideAnimation: viewModel.userInstruction?.guideAnimation ) - if let currentLivenessTask = viewModel.livenessCheckManager.currentTask { + if let currentLivenessTask = viewModel.livenessCheckManager.currentTask, + viewModel.faceInBounds { LivenessGuidesView( currentLivenessTask: currentLivenessTask, topArcProgress: $viewModel.livenessCheckManager.lookUpProgress, @@ -72,10 +75,10 @@ public struct SelfieCaptureScreenV2: View { Spacer() UserInstructionsView( instruction: processingState.title, - message: getErrorSubtitle( + message: processingState == .error ? getErrorSubtitle( errorMessageRes: viewModel.errorMessageRes, errorMessage: viewModel.errorMessage - ) + ) : nil ) } SubmissionStatusView(processState: processingState) @@ -110,10 +113,14 @@ public struct SelfieCaptureScreenV2: View { } .navigationBarHidden(true) .onAppear { + UIScreen.main.brightness = 1 + UIApplication.shared.isIdleTimerDisabled = true viewModel.perform(action: .windowSizeDetected(proxy.size, proxy.safeAreaInsets)) viewModel.perform(action: .onViewAppear) } .onDisappear { + UIScreen.main.brightness = originalBrightness + UIApplication.shared.isIdleTimerDisabled = false viewModel.cameraManager.pauseSession() } .alert(item: $viewModel.unauthorizedAlert) { alert in diff --git a/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift b/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift index 440e255fd..cac02325b 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift @@ -22,24 +22,18 @@ struct FaceBoundingArea: View { if let guideAnimation = guideAnimation, showGuideAnimation { - faceShape - .fill(.black.opacity(0.5)) - .frame(width: 270, height: 370) - .overlay( - LottieView { - try await DotLottieFile - .named( - guideAnimation.fileName, - bundle: SmileIDResourcesHelper.bundle - ) - } - .playbackMode(playbackMode) - .frame(width: 224, height: 224) - ) - .clipShape(faceShape) - .onAppear { - playbackMode = getPlaybackMode(guideAnimation) - } + LottieView { + try await DotLottieFile + .named( + guideAnimation.fileName, + bundle: SmileIDResourcesHelper.bundle + ) + } + .playbackMode(playbackMode) + .frame(width: 224, height: 224) + .onAppear { + playbackMode = getPlaybackMode(guideAnimation) + } } } } diff --git a/Sources/SmileID/Classes/SelfieCapture/View/FaceShapedProgressIndicator.swift b/Sources/SmileID/Classes/SelfieCapture/View/FaceShapedProgressIndicator.swift index f139dda96..6c2aa9e96 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/FaceShapedProgressIndicator.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/FaceShapedProgressIndicator.swift @@ -4,7 +4,7 @@ import SwiftUI struct FaceShapedProgressIndicator: View { let progress: Double private let strokeWidth = 10 - private let faceShape = FaceShape().scale(x: 0.8, y: 0.6).offset(y: -50) + private let faceShape = FaceShape().scale(x: 0.8, y: 0.55).offset(y: -50) private let bgColor = Color.white.opacity(0.8) var body: some View { bgColor diff --git a/Sources/SmileID/Classes/SelfieCapture/View/LivenessCaptureInstructionsView.swift b/Sources/SmileID/Classes/SelfieCapture/View/LivenessCaptureInstructionsView.swift index 153c4a50b..81dccba45 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/LivenessCaptureInstructionsView.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/LivenessCaptureInstructionsView.swift @@ -2,32 +2,25 @@ import Lottie import SwiftUI public struct LivenessCaptureInstructionsView: View { - @Environment(\.modalMode) private var modalMode @State private var showSelfieCaptureView: Bool = false private let showAttribution: Bool - private let viewModel: SelfieViewModelV2 + private let viewModel: EnhancedSmartSelfieViewModel - public init(showAttribution: Bool, viewModel: SelfieViewModelV2) { + public init(showAttribution: Bool, viewModel: EnhancedSmartSelfieViewModel) { self.showAttribution = showAttribution self.viewModel = viewModel } public var body: some View { VStack { - HStack { - Button { - self.modalMode.wrappedValue = false - } label: { - Text(SmileIDResourcesHelper.localizedString(for: "Action.Cancel")) - .foregroundColor(SmileID.theme.accent) - } - Spacer() - } - ZStack { LottieView { - try await DotLottieFile.named("instructions_no_progress", bundle: SmileIDResourcesHelper.bundle) + try await DotLottieFile + .named( + "instruction_screen_with_side_bar", + bundle: SmileIDResourcesHelper.bundle + ) } .playing(loopMode: .loop) .frame(width: 235, height: 235) @@ -37,13 +30,14 @@ public struct LivenessCaptureInstructionsView: View { Text(SmileIDResourcesHelper.localizedString(for: "Instructions.SelfieCapture")) .multilineTextAlignment(.center) .font(SmileID.theme.header4) + .lineSpacing(4) .foregroundColor(SmileID.theme.tertiary) Spacer() VStack(spacing: 20) { NavigationLink( - destination: SelfieCaptureScreenV2( + destination: EnhancedSelfieCaptureScreen( viewModel: viewModel, showAttribution: showAttribution ), diff --git a/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift b/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedEnhancedSelfieCaptureScreen.swift similarity index 86% rename from Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift rename to Sources/SmileID/Classes/SelfieCapture/View/OrchestratedEnhancedSelfieCaptureScreen.swift index d78716078..6cd1b67cd 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedSelfieCaptureScreenV2.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/OrchestratedEnhancedSelfieCaptureScreen.swift @@ -3,14 +3,12 @@ import SwiftUI /// Orchestrates the selfie capture flow - navigates between instructions, requesting permissions, /// showing camera view, and displaying processing screen -public struct OrchestratedSelfieCaptureScreenV2: View { +public struct OrchestratedEnhancedSelfieCaptureScreen: View { public let allowAgentMode: Bool public let showAttribution: Bool public let showInstructions: Bool public let onResult: SmartSelfieResultDelegate - private let viewModel: SelfieViewModelV2 - - private var originalBrightness = UIScreen.main.brightness + private let viewModel: EnhancedSmartSelfieViewModel public init( userId: String, @@ -29,7 +27,7 @@ public struct OrchestratedSelfieCaptureScreenV2: View { self.showAttribution = showAttribution self.showInstructions = showInstructions self.onResult = onResult - self.viewModel = SelfieViewModelV2( + self.viewModel = EnhancedSmartSelfieViewModel( isEnroll: isEnroll, userId: userId, jobId: jobId, @@ -49,7 +47,7 @@ public struct OrchestratedSelfieCaptureScreenV2: View { viewModel: viewModel ) } else { - SelfieCaptureScreenV2( + EnhancedSelfieCaptureScreen( viewModel: viewModel, showAttribution: showAttribution ) diff --git a/Sources/SmileID/Classes/SmileID.swift b/Sources/SmileID/Classes/SmileID.swift index 07aaa38c0..3572650f2 100644 --- a/Sources/SmileID/Classes/SmileID.swift +++ b/Sources/SmileID/Classes/SmileID.swift @@ -309,7 +309,7 @@ public class SmileID { delegate: SmartSelfieResultDelegate ) -> some View { if useStrictMode { - OrchestratedSelfieCaptureScreenV2( + OrchestratedEnhancedSelfieCaptureScreen( userId: userId, jobId: jobId, isEnroll: true, @@ -371,7 +371,7 @@ public class SmileID { delegate: SmartSelfieResultDelegate ) -> some View { if useStrictMode { - OrchestratedSelfieCaptureScreenV2( + OrchestratedEnhancedSelfieCaptureScreen( userId: userId, jobId: jobId, isEnroll: true, diff --git a/Sources/SmileID/Classes/Util.swift b/Sources/SmileID/Classes/Util.swift index 64563c110..bb2c23b3a 100644 --- a/Sources/SmileID/Classes/Util.swift +++ b/Sources/SmileID/Classes/Util.swift @@ -79,6 +79,10 @@ func toErrorMessage(error: SmileIDError) -> (String, String?) { return (error.localizedDescription, nil) case let .httpError(_, message): return ("", message) + case let .fileNotFound(message): + return (message, nil) + case let .unknown(message): + return (message, nil) default: return ("Confirmation.FailureReason", nil) } diff --git a/Sources/SmileID/Resources/Fonts/DMSans-Bold.ttf b/Sources/SmileID/Resources/Fonts/DMSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4f5412dc8bb339e3a608597df2c4670d83dacc12 GIT binary patch literal 56268 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 Tk8=9|rSuuKq7Jm4R|ozdoXwx6 literal 0 HcmV?d00001 diff --git a/Sources/SmileID/Resources/Fonts/DMSans-Regular.ttf b/Sources/SmileID/Resources/Fonts/DMSans-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..07266ae18b44ea06b673b8abed76fc056864585f GIT binary patch literal 56348 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 literal 0 HcmV?d00001 diff --git a/Sources/SmileID/Resources/LottieFiles/instruction_screen_with_side_bar.lottie b/Sources/SmileID/Resources/LottieFiles/instruction_screen_with_side_bar.lottie new file mode 100644 index 0000000000000000000000000000000000000000..792d9345e3f2324565530d6fbe41913d8cdb5bc6 GIT binary patch literal 3318 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 QwT1FB3ofe;!(Y=s0W>-u^8f$< literal 0 HcmV?d00001 diff --git a/Sources/SmileID/Resources/LottieFiles/instructions_no_progress.lottie b/Sources/SmileID/Resources/LottieFiles/instructions_no_progress.lottie deleted file mode 100644 index 3207aaa70ce1fe8201f4faaf8e937c22245d99a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2808 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 diff --git a/Sources/SmileID/Resources/LottieFiles/light_animation_with_bg.lottie b/Sources/SmileID/Resources/LottieFiles/light_animation_with_bg.lottie new file mode 100644 index 0000000000000000000000000000000000000000..56784698cc7ad9a725d7bfb312e293b853312459 GIT binary patch literal 2061 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 literal 0 HcmV?d00001 From 304fe7fd8c8a8d9dcfcd3762281aaf50fb16e981 Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Wed, 11 Dec 2024 14:00:10 +0100 Subject: [PATCH 19/23] Fix UserID Refresh for New Jobs (#262) * set the right flag for isEnroll in orchestrated enhanced selfie capture screen. update the location of selfie and livenessimages when submission fails. * grab last selfie enrollment userid from pasteboard, use new generated user id for selfie authentication * fix the layout issues with biometric kyc and enhanced kyc country picker. * bump version number. remove comments. * add encryption compliance key and value for non exempt encryption --- Example/SmileID.xcodeproj/project.pbxproj | 12 +++--- .../BiometricKycWithIdInputScreen.swift | 40 ++++++++++--------- .../EnhancedKycWithIdInputScreen.swift | 38 +++++++++--------- Example/SmileID/Home/HomeView.swift | 12 +++--- Example/SmileID/Home/HomeViewModel.swift | 5 ++- Example/SmileID/Info.plist | 2 + .../Consent/OrchestratedConsentScreen.swift | 38 +++++++++--------- .../EnhancedSmartSelfieViewModel.swift | 6 ++- .../SelfieSubmissionManager.swift | 25 ++++++++++-- .../OrchestratedSelfieCaptureScreen.swift | 8 ++-- .../View/SelfieCaptureScreen.swift | 7 +--- Sources/SmileID/Classes/SmileID.swift | 2 +- .../Views/SearchableDropdownSelector.swift | 3 +- 13 files changed, 113 insertions(+), 85 deletions(-) diff --git a/Example/SmileID.xcodeproj/project.pbxproj b/Example/SmileID.xcodeproj/project.pbxproj index 01757d569..8f4c6dec4 100644 --- a/Example/SmileID.xcodeproj/project.pbxproj +++ b/Example/SmileID.xcodeproj/project.pbxproj @@ -39,7 +39,7 @@ 20B6D5EC2C21CE660023D51C /* DataStoreError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20B6D5EB2C21CE660023D51C /* DataStoreError.swift */; }; 20C360C82C454C130008DBDE /* RootViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20C360C72C454C130008DBDE /* RootViewModel.swift */; }; 20DFA0EC2C21917100AC2AE7 /* View+TextSelection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20DFA0EB2C21917100AC2AE7 /* View+TextSelection.swift */; }; - 20F3D6F32C25F4D700B32751 /* BuildFile in Sources */ = {isa = PBXBuildFile; }; + 20F3D6F32C25F4D700B32751 /* (null) in Sources */ = {isa = PBXBuildFile; }; 20F3D6F62C25F5C100B32751 /* SmileID.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 20F3D6F42C25F5C100B32751 /* SmileID.xcdatamodeld */; }; 5829A8C02BC7429A001C1E7E /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 5829A8BF2BC7429A001C1E7E /* PrivacyInfo.xcprivacy */; }; 585BE4882AC7748E0091DDD8 /* RestartableTimerTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 585BE4872AC7748E0091DDD8 /* RestartableTimerTest.swift */; }; @@ -48,7 +48,7 @@ 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 620F1E982B69194900185CD2 /* AlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 620F1E972B69194900185CD2 /* AlertView.swift */; }; - 620F1E9A2B691ABB00185CD2 /* BuildFile in Resources */ = {isa = PBXBuildFile; }; + 620F1E9A2B691ABB00185CD2 /* (null) in Resources */ = {isa = PBXBuildFile; }; 624777D02B0CDC9F00952842 /* EnhancedKycWithIdInputScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 624777CF2B0CDC9F00952842 /* EnhancedKycWithIdInputScreen.swift */; }; 62F6766F2B0D173600417419 /* EnhancedKycWithIdInputScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62F6766E2B0D173600417419 /* EnhancedKycWithIdInputScreenViewModel.swift */; }; 62F676712B0E00E800417419 /* EnhancedKycResultDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62F676702B0E00E800417419 /* EnhancedKycResultDelegate.swift */; }; @@ -549,7 +549,7 @@ buildActionMask = 2147483647; files = ( 1EFAB3172A375265008E3C13 /* Images.xcassets in Resources */, - 620F1E9A2B691ABB00185CD2 /* BuildFile in Resources */, + 620F1E9A2B691ABB00185CD2 /* (null) in Resources */, 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, 5829A8C02BC7429A001C1E7E /* PrivacyInfo.xcprivacy in Resources */, 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, @@ -698,7 +698,7 @@ 1ED53F6D2A2F28590020BEFB /* SmileTextField.swift in Sources */, 91CB21A52AC10C61005AEBF5 /* NavigationBar.swift in Sources */, 1ED53F6B2A2F28590020BEFB /* ProductCell.swift in Sources */, - 20F3D6F32C25F4D700B32751 /* BuildFile in Sources */, + 20F3D6F32C25F4D700B32751 /* (null) in Sources */, 1E60ED382A29C306002695FF /* Constants.swift in Sources */, 624777D02B0CDC9F00952842 /* EnhancedKycWithIdInputScreen.swift in Sources */, 1ED53F712A2F28590020BEFB /* EnterUserIDView.swift in Sources */, @@ -891,7 +891,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Development"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 39; + CURRENT_PROJECT_VERSION = 40; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 99P7YGX9Q6; @@ -924,7 +924,7 @@ CODE_SIGN_IDENTITY = "Apple Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 39; + CURRENT_PROJECT_VERSION = 40; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 99P7YGX9Q6; diff --git a/Example/SmileID/BiometricKYC/BiometricKycWithIdInputScreen.swift b/Example/SmileID/BiometricKYC/BiometricKycWithIdInputScreen.swift index 2e52e4892..ecdf4ab24 100644 --- a/Example/SmileID/BiometricKYC/BiometricKycWithIdInputScreen.swift +++ b/Example/SmileID/BiometricKYC/BiometricKycWithIdInputScreen.swift @@ -6,7 +6,7 @@ struct BiometricKycWithIdInputScreen: View { let delegate: BiometricKycResultDelegate @State private var selectedCountry: CountryInfo? - @ObservedObject var viewModel: BiometricKycWithIdInputScreenViewModel + @StateObject var viewModel: BiometricKycWithIdInputScreenViewModel var body: some View { switch viewModel.step { @@ -19,25 +19,27 @@ struct BiometricKycWithIdInputScreen: View { } .frame(maxWidth: .infinity) case .idTypeSelection(let countryList): - SearchableDropdownSelector( - items: countryList, - selectedItem: selectedCountry, - itemDisplayName: { $0.name }, - onItemSelected: { selectedCountry = $0 } - ) - if let selectedCountry = selectedCountry { - RadioGroupSelector( - title: "Select ID Type", - items: selectedCountry.availableIdTypes, - itemDisplayName: { $0.label }, - onItemSelected: { idType in - viewModel.onIdTypeSelected( - country: selectedCountry.countryCode, - idType: idType.idTypeKey, - requiredFields: idType.requiredFields ?? [] - ) - } + VStack { + SearchableDropdownSelector( + items: countryList, + selectedItem: selectedCountry, + itemDisplayName: { $0.name }, + onItemSelected: { selectedCountry = $0 } ) + if let selectedCountry = selectedCountry { + RadioGroupSelector( + title: "Select ID Type", + items: selectedCountry.availableIdTypes, + itemDisplayName: { $0.label }, + onItemSelected: { idType in + viewModel.onIdTypeSelected( + country: selectedCountry.countryCode, + idType: idType.idTypeKey, + requiredFields: idType.requiredFields ?? [] + ) + } + ) + } } case .consent(let country, let idType, let requiredFields): SmileID.consentScreen( diff --git a/Example/SmileID/EnhancedKYC/EnhancedKycWithIdInputScreen.swift b/Example/SmileID/EnhancedKYC/EnhancedKycWithIdInputScreen.swift index b72daadfc..c0f1ff2db 100644 --- a/Example/SmileID/EnhancedKYC/EnhancedKycWithIdInputScreen.swift +++ b/Example/SmileID/EnhancedKYC/EnhancedKycWithIdInputScreen.swift @@ -18,25 +18,27 @@ struct EnhancedKycWithIdInputScreen: View { } .frame(maxWidth: .infinity) case .idTypeSelection(let countryList): - SearchableDropdownSelector( - items: countryList, - selectedItem: selectedCountry, - itemDisplayName: { $0.name }, - onItemSelected: { selectedCountry = $0 } - ) - if let selectedCountry = selectedCountry { - RadioGroupSelector( - title: "Select ID Type", - items: selectedCountry.availableIdTypes, - itemDisplayName: { $0.label }, - onItemSelected: { idType in - viewModel.onIdTypeSelected( - country: selectedCountry.countryCode, - idType: idType.idTypeKey, - requiredFields: idType.requiredFields ?? [] - ) - } + VStack { + SearchableDropdownSelector( + items: countryList, + selectedItem: selectedCountry, + itemDisplayName: { $0.name }, + onItemSelected: { selectedCountry = $0 } ) + if let selectedCountry = selectedCountry { + RadioGroupSelector( + title: "Select ID Type", + items: selectedCountry.availableIdTypes, + itemDisplayName: { $0.label }, + onItemSelected: { idType in + viewModel.onIdTypeSelected( + country: selectedCountry.countryCode, + idType: idType.idTypeKey, + requiredFields: idType.requiredFields ?? [] + ) + } + ) + } } case .consent(let country, let idType, let requiredFields): SmileID.consentScreen( diff --git a/Example/SmileID/Home/HomeView.swift b/Example/SmileID/Home/HomeView.swift index 86cc62d57..086b7fb42 100644 --- a/Example/SmileID/Home/HomeView.swift +++ b/Example/SmileID/Home/HomeView.swift @@ -28,11 +28,11 @@ struct HomeView: View { }, content: { SmileID.smartSelfieEnrollmentScreen( - userId: viewModel.smartSelfieEnrollmentUserId, + userId: viewModel.newUserId, jobId: viewModel.newJobId, allowAgentMode: true, delegate: SmartSelfieEnrollmentDelegate( - userId: viewModel.smartSelfieEnrollmentUserId, + userId: viewModel.newUserId, onEnrollmentSuccess: viewModel.onSmartSelfieEnrollment, onError: viewModel.didError ) @@ -47,7 +47,7 @@ struct HomeView: View { }, content: { SmartSelfieAuthWithUserIdEntry( - initialUserId: viewModel.smartSelfieEnrollmentUserId, + initialUserId: viewModel.lastSelfieEnrollmentUserId ?? "", delegate: viewModel ) } @@ -60,12 +60,12 @@ struct HomeView: View { }, content: { SmileID.smartSelfieEnrollmentScreen( - userId: viewModel.smartSelfieEnrollmentUserId, + userId: viewModel.newUserId, jobId: viewModel.newJobId, allowAgentMode: true, useStrictMode: true, delegate: SmartSelfieEnrollmentDelegate( - userId: viewModel.smartSelfieEnrollmentUserId, + userId: viewModel.newUserId, onEnrollmentSuccess: viewModel.onSmartSelfieEnrollment, onError: viewModel.didError ) @@ -80,7 +80,7 @@ struct HomeView: View { }, content: { SmartSelfieAuthWithUserIdEntry( - initialUserId: viewModel.smartSelfieEnrollmentUserId, + initialUserId: viewModel.lastSelfieEnrollmentUserId ?? "", useStrictMode: true, delegate: viewModel ) diff --git a/Example/SmileID/Home/HomeViewModel.swift b/Example/SmileID/Home/HomeViewModel.swift index 709b464cf..6828faf80 100644 --- a/Example/SmileID/Home/HomeViewModel.swift +++ b/Example/SmileID/Home/HomeViewModel.swift @@ -19,7 +19,10 @@ class HomeViewModel: ObservableObject, @Published var partnerId: String var networkMonitor = NetworkMonitor.shared - @Published private(set) var smartSelfieEnrollmentUserId = generateUserId() + var lastSelfieEnrollmentUserId: String? { + guard let value = UIPasteboard.general.string else { return nil } + return value.hasPrefix("user-") ? value : nil + } @Published private(set) var newUserId: String = generateUserId() @Published private(set) var newJobId: String = generateJobId() diff --git a/Example/SmileID/Info.plist b/Example/SmileID/Info.plist index 09bc02c40..b42aec4ca 100644 --- a/Example/SmileID/Info.plist +++ b/Example/SmileID/Info.plist @@ -2,6 +2,8 @@ + ITSAppUsesNonExemptEncryption + CFBundleDevelopmentRegion en CFBundleExecutable diff --git a/Sources/SmileID/Classes/Consent/OrchestratedConsentScreen.swift b/Sources/SmileID/Classes/Consent/OrchestratedConsentScreen.swift index 9224c27d9..430276f79 100644 --- a/Sources/SmileID/Classes/Consent/OrchestratedConsentScreen.swift +++ b/Sources/SmileID/Classes/Consent/OrchestratedConsentScreen.swift @@ -74,7 +74,7 @@ public struct ConsentScreen: View { .padding(16) VStack(spacing: 16) { - ForEach(0..: View { Spacer() Text(itemDisplayName(selectedItem)) .foregroundColor(SmileID.theme.accent) - .onTapGesture { onItemSelected(nil) } Spacer() Image(systemName: "arrowtriangle.down.circle.fill") .foregroundColor(SmileID.theme.accent) } + .contentShape(.rect) + .onTapGesture { onItemSelected(nil) } } else { ZStack(alignment: .leading) { Image(systemName: "magnifyingglass") From 8b7279ed4e7cde82c2b017919b5bdab7b9870170 Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Thu, 12 Dec 2024 11:55:01 +0100 Subject: [PATCH 20/23] Device Motion Orientation (#263) * code formatting. * revert max pitch threshold * correct instructions copy * use device motion to determine device orientation and fall back to unlocked device orientation if device motion is not available. * code formatting * update to new lottie animation designs. --- Example/SmileID.xcodeproj/project.pbxproj | 94 +++++++++--------- .../FaceDetector/LivenessCheckManager.swift | 2 +- .../Networking/Models/v2/Metadata.swift | 8 +- .../SelfieCapture/CaptureGuideAnimation.swift | 12 +-- .../EnhancedSmartSelfieViewModel.swift | 33 +++++- Sources/SmileID/Classes/SmileID.swift | 2 +- .../Localization/en.lproj/Localizable.strings | 2 +- ...bg.lottie => headdirection_with_bg.lottie} | Bin .../LottieFiles/light_animation.lottie | Bin 2094 -> 0 bytes .../LottieFiles/liveness_guides.lottie | Bin 2461 -> 0 bytes .../Resources/LottieFiles/positioning.lottie | Bin 2664 -> 0 bytes .../LottieFiles/positioning_with_bg.lottie | Bin 0 -> 2381 bytes 12 files changed, 87 insertions(+), 66 deletions(-) rename Sources/SmileID/Resources/LottieFiles/{liveness_guides_with_bg.lottie => headdirection_with_bg.lottie} (100%) delete mode 100644 Sources/SmileID/Resources/LottieFiles/light_animation.lottie delete mode 100644 Sources/SmileID/Resources/LottieFiles/liveness_guides.lottie delete mode 100644 Sources/SmileID/Resources/LottieFiles/positioning.lottie create mode 100644 Sources/SmileID/Resources/LottieFiles/positioning_with_bg.lottie diff --git a/Example/SmileID.xcodeproj/project.pbxproj b/Example/SmileID.xcodeproj/project.pbxproj index 8f4c6dec4..dc75cae2d 100644 --- a/Example/SmileID.xcodeproj/project.pbxproj +++ b/Example/SmileID.xcodeproj/project.pbxproj @@ -39,7 +39,7 @@ 20B6D5EC2C21CE660023D51C /* DataStoreError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20B6D5EB2C21CE660023D51C /* DataStoreError.swift */; }; 20C360C82C454C130008DBDE /* RootViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20C360C72C454C130008DBDE /* RootViewModel.swift */; }; 20DFA0EC2C21917100AC2AE7 /* View+TextSelection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20DFA0EB2C21917100AC2AE7 /* View+TextSelection.swift */; }; - 20F3D6F32C25F4D700B32751 /* (null) in Sources */ = {isa = PBXBuildFile; }; + 20F3D6F32C25F4D700B32751 /* BuildFile in Sources */ = {isa = PBXBuildFile; }; 20F3D6F62C25F5C100B32751 /* SmileID.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 20F3D6F42C25F5C100B32751 /* SmileID.xcdatamodeld */; }; 5829A8C02BC7429A001C1E7E /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 5829A8BF2BC7429A001C1E7E /* PrivacyInfo.xcprivacy */; }; 585BE4882AC7748E0091DDD8 /* RestartableTimerTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 585BE4872AC7748E0091DDD8 /* RestartableTimerTest.swift */; }; @@ -48,11 +48,10 @@ 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 620F1E982B69194900185CD2 /* AlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 620F1E972B69194900185CD2 /* AlertView.swift */; }; - 620F1E9A2B691ABB00185CD2 /* (null) in Resources */ = {isa = PBXBuildFile; }; + 620F1E9A2B691ABB00185CD2 /* BuildFile in Resources */ = {isa = PBXBuildFile; }; 624777D02B0CDC9F00952842 /* EnhancedKycWithIdInputScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 624777CF2B0CDC9F00952842 /* EnhancedKycWithIdInputScreen.swift */; }; 62F6766F2B0D173600417419 /* EnhancedKycWithIdInputScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62F6766E2B0D173600417419 /* EnhancedKycWithIdInputScreenViewModel.swift */; }; 62F676712B0E00E800417419 /* EnhancedKycResultDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62F676702B0E00E800417419 /* EnhancedKycResultDelegate.swift */; }; - 682911036C447B7771BFFECF /* Pods_SmileID_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00CD865E9409021F98A68FCB /* Pods_SmileID_Tests.framework */; }; 6AC9802B9D1A630961B5454B /* CodeScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC98436935FFEA40E632182 /* CodeScanner.swift */; }; 6AC983F056A8F9088D6CF3F7 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC982147640002B81F72DEC /* SettingsView.swift */; }; 6AC984526F49F4E8F52C7494 /* ScannerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC98BA00298258573CBCBD4 /* ScannerViewController.swift */; }; @@ -65,6 +64,7 @@ 6AC98B6FFA753C5463F7216F /* SmileConfigEntryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC984E484EEF69069C705C7 /* SmileConfigEntryView.swift */; }; 6AC98C0E9305B4B3EB66ED35 /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC980584C522B17A099E098 /* Util.swift */; }; 6AC98F5682012E19C815AE70 /* DocumentSelectorViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC9893915EBA33F6984A6D9 /* DocumentSelectorViewModel.swift */; }; + 6CD90C5E078F661252CEA1E7 /* Pods_SmileID_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7E8D6FA74D72803CA654BE8 /* Pods_SmileID_Tests.framework */; }; 918321EA2A52E36A00D6FB7F /* URLSessionRestServiceClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 918321E02A52E36A00D6FB7F /* URLSessionRestServiceClientTests.swift */; }; 918321EB2A52E36A00D6FB7F /* XCTestExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 918321E12A52E36A00D6FB7F /* XCTestExtension.swift */; }; 918321EC2A52E36A00D6FB7F /* DependencyContainerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 918321E32A52E36A00D6FB7F /* DependencyContainerTests.swift */; }; @@ -73,7 +73,7 @@ 91CB21A52AC10C61005AEBF5 /* NavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CB21A42AC10C61005AEBF5 /* NavigationBar.swift */; }; 91D9FBC42AB481FE00A8D36B /* PollingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D9FBC32AB481FE00A8D36B /* PollingTests.swift */; }; 91D9FBD52AB8AB4700A8D36B /* CalculateSignatureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D9FBD42AB8AB4700A8D36B /* CalculateSignatureTests.swift */; }; - A6888C0B92766926550DD3A8 /* Pods_SmileID_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C99338201884FF93283419C /* Pods_SmileID_Example.framework */; }; + F4581E5752199E232AA7876E /* Pods_SmileID_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CFB9F504DFC73EC007239DF /* Pods_SmileID_Example.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -87,8 +87,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 00CD865E9409021F98A68FCB /* Pods_SmileID_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 08F30BD5CB20E5AB9E6E211E /* Pods-SmileID_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.debug.xcconfig"; sourceTree = ""; }; 1E59E33D2BA1E64C00D2BAD2 /* PartnerParamsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PartnerParamsTests.swift; sourceTree = ""; }; 1E60ED322A29C306002695FF /* HomeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; 1E60ED332A29C306002695FF /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; @@ -121,7 +119,7 @@ 20C360C72C454C130008DBDE /* RootViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewModel.swift; sourceTree = ""; }; 20DFA0EB2C21917100AC2AE7 /* View+TextSelection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+TextSelection.swift"; sourceTree = ""; }; 20F3D6F52C25F5C100B32751 /* SmileID.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SmileID.xcdatamodel; sourceTree = ""; }; - 573532D688419D93192B1FA9 /* Pods-SmileID_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.release.xcconfig"; sourceTree = ""; }; + 52A42996691DF0E59A2D2FA8 /* Pods-SmileID_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.release.xcconfig"; sourceTree = ""; }; 5829A8BF2BC7429A001C1E7E /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 585BE4872AC7748E0091DDD8 /* RestartableTimerTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestartableTimerTest.swift; sourceTree = ""; }; 58C5F1D72B05925800A6080C /* BiometricKycWithIdInputScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BiometricKycWithIdInputScreen.swift; sourceTree = ""; }; @@ -149,7 +147,7 @@ 6AC9893915EBA33F6984A6D9 /* DocumentSelectorViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DocumentSelectorViewModel.swift; sourceTree = ""; }; 6AC98BA00298258573CBCBD4 /* ScannerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScannerViewController.swift; sourceTree = ""; }; 6AC98BC49871655D87C7DEE3 /* SettingsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewModel.swift; sourceTree = ""; }; - 7C99338201884FF93283419C /* Pods_SmileID_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 85FA486B80497097116C39A5 /* Pods-SmileID_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.release.xcconfig"; sourceTree = ""; }; 918321E02A52E36A00D6FB7F /* URLSessionRestServiceClientTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLSessionRestServiceClientTests.swift; sourceTree = ""; }; 918321E12A52E36A00D6FB7F /* XCTestExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = XCTestExtension.swift; path = ../../Tests/XCTestExtension.swift; sourceTree = ""; }; 918321E32A52E36A00D6FB7F /* DependencyContainerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DependencyContainerTests.swift; sourceTree = ""; }; @@ -160,9 +158,11 @@ 91D9FBD42AB8AB4700A8D36B /* CalculateSignatureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculateSignatureTests.swift; sourceTree = ""; }; 94E7560A47E255DD8215C183 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 9755B6A19CF28DE212F24C83 /* SmileID.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = SmileID.podspec; path = ../SmileID.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9CFB9F504DFC73EC007239DF /* Pods_SmileID_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A55DCB8BFFF66B290B1883E6 /* Pods-SmileID_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.debug.xcconfig"; sourceTree = ""; }; C8CD2E3DB817D8C6334E9240 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; - CEDFCC61E89691A1B378145A /* Pods-SmileID_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Tests.release.xcconfig"; path = "Target Support Files/Pods-SmileID_Tests/Pods-SmileID_Tests.release.xcconfig"; sourceTree = ""; }; - F346EF1ED1DF5227E7973AF9 /* Pods-SmileID_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.debug.xcconfig"; sourceTree = ""; }; + D7E8D6FA74D72803CA654BE8 /* Pods_SmileID_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SmileID_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ED17F9F64A5C52AE70E8BC55 /* Pods-SmileID_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SmileID_Example.debug.xcconfig"; path = "Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -170,7 +170,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A6888C0B92766926550DD3A8 /* Pods_SmileID_Example.framework in Frameworks */, + F4581E5752199E232AA7876E /* Pods_SmileID_Example.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -178,7 +178,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 682911036C447B7771BFFECF /* Pods_SmileID_Tests.framework in Frameworks */, + 6CD90C5E078F661252CEA1E7 /* Pods_SmileID_Tests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -299,7 +299,7 @@ 607FACE81AFB9204008FA782 /* Tests */, 607FACD11AFB9204008FA782 /* Products */, 828BF541E068101B2E6ED55F /* Pods */, - F16927B498A45E522FEB3C95 /* Frameworks */, + EC80851519D319A69037C387 /* Frameworks */, ); sourceTree = ""; }; @@ -406,10 +406,10 @@ 828BF541E068101B2E6ED55F /* Pods */ = { isa = PBXGroup; children = ( - F346EF1ED1DF5227E7973AF9 /* Pods-SmileID_Example.debug.xcconfig */, - 573532D688419D93192B1FA9 /* Pods-SmileID_Example.release.xcconfig */, - 08F30BD5CB20E5AB9E6E211E /* Pods-SmileID_Tests.debug.xcconfig */, - CEDFCC61E89691A1B378145A /* Pods-SmileID_Tests.release.xcconfig */, + ED17F9F64A5C52AE70E8BC55 /* Pods-SmileID_Example.debug.xcconfig */, + 85FA486B80497097116C39A5 /* Pods-SmileID_Example.release.xcconfig */, + A55DCB8BFFF66B290B1883E6 /* Pods-SmileID_Tests.debug.xcconfig */, + 52A42996691DF0E59A2D2FA8 /* Pods-SmileID_Tests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -446,11 +446,11 @@ path = ../../Tests/Mocks; sourceTree = ""; }; - F16927B498A45E522FEB3C95 /* Frameworks */ = { + EC80851519D319A69037C387 /* Frameworks */ = { isa = PBXGroup; children = ( - 7C99338201884FF93283419C /* Pods_SmileID_Example.framework */, - 00CD865E9409021F98A68FCB /* Pods_SmileID_Tests.framework */, + 9CFB9F504DFC73EC007239DF /* Pods_SmileID_Example.framework */, + D7E8D6FA74D72803CA654BE8 /* Pods_SmileID_Tests.framework */, ); name = Frameworks; sourceTree = ""; @@ -462,13 +462,13 @@ isa = PBXNativeTarget; buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SmileID_Example" */; buildPhases = ( - 8512F34E77FF72CD8905BE42 /* [CP] Check Pods Manifest.lock */, + 3F18CA39137BF686F4A7D046 /* [CP] Check Pods Manifest.lock */, 607FACCC1AFB9204008FA782 /* Sources */, 917D79282AA8024400FA6624 /* SwiftLint */, 607FACCD1AFB9204008FA782 /* Frameworks */, 607FACCE1AFB9204008FA782 /* Resources */, C0BE335FFECD4DF6892309F3 /* Upload Debug Symbols to Sentry */, - B4E6B9DF4045B6E197C117D0 /* [CP] Embed Pods Frameworks */, + A24D0B35FBC0DF1AECE43CC6 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -483,7 +483,7 @@ isa = PBXNativeTarget; buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SmileID_Tests" */; buildPhases = ( - C3515D148A433E1DCDCE17DF /* [CP] Check Pods Manifest.lock */, + ABA257918BF63D6014CDE6F4 /* [CP] Check Pods Manifest.lock */, 607FACE11AFB9204008FA782 /* Sources */, 607FACE21AFB9204008FA782 /* Frameworks */, 607FACE31AFB9204008FA782 /* Resources */, @@ -549,7 +549,7 @@ buildActionMask = 2147483647; files = ( 1EFAB3172A375265008E3C13 /* Images.xcassets in Resources */, - 620F1E9A2B691ABB00185CD2 /* (null) in Resources */, + 620F1E9A2B691ABB00185CD2 /* BuildFile in Resources */, 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, 5829A8C02BC7429A001C1E7E /* PrivacyInfo.xcprivacy in Resources */, 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, @@ -566,7 +566,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 8512F34E77FF72CD8905BE42 /* [CP] Check Pods Manifest.lock */ = { + 3F18CA39137BF686F4A7D046 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -606,7 +606,7 @@ shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\ncd ../Sources\n\"${PODS_ROOT}/SwiftLint/swiftlint\"\n"; }; - B4E6B9DF4045B6E197C117D0 /* [CP] Embed Pods Frameworks */ = { + A24D0B35FBC0DF1AECE43CC6 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -638,22 +638,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SmileID_Example/Pods-SmileID_Example-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - C0BE335FFECD4DF6892309F3 /* Upload Debug Symbols to Sentry */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}", - ); - name = "Upload Debug Symbols to Sentry"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 1; - shellPath = /bin/sh; - shellScript = "# This script is responsable to upload debug symbols and source context for Sentry.\nif which sentry-cli >/dev/null; then\nexport SENTRY_ORG=smile-identity\nexport SENTRY_PROJECT=ios\nERROR=$(sentry-cli debug-files upload --include-sources \"$DWARF_DSYM_FOLDER_PATH\" 2>&1 >/dev/null)\nif [ ! $? -eq 0 ]; then\necho \"warning: sentry-cli - $ERROR\"\nfi\nelse\necho \"warning: sentry-cli not installed, download from https://github.com/getsentry/sentry-cli/releases\"\nfi\n"; - }; - C3515D148A433E1DCDCE17DF /* [CP] Check Pods Manifest.lock */ = { + ABA257918BF63D6014CDE6F4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -675,6 +660,21 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + C0BE335FFECD4DF6892309F3 /* Upload Debug Symbols to Sentry */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}", + ); + name = "Upload Debug Symbols to Sentry"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 1; + shellPath = /bin/sh; + shellScript = "# This script is responsable to upload debug symbols and source context for Sentry.\nif which sentry-cli >/dev/null; then\nexport SENTRY_ORG=smile-identity\nexport SENTRY_PROJECT=ios\nERROR=$(sentry-cli debug-files upload --include-sources \"$DWARF_DSYM_FOLDER_PATH\" 2>&1 >/dev/null)\nif [ ! $? -eq 0 ]; then\necho \"warning: sentry-cli - $ERROR\"\nfi\nelse\necho \"warning: sentry-cli not installed, download from https://github.com/getsentry/sentry-cli/releases\"\nfi\n"; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -698,7 +698,7 @@ 1ED53F6D2A2F28590020BEFB /* SmileTextField.swift in Sources */, 91CB21A52AC10C61005AEBF5 /* NavigationBar.swift in Sources */, 1ED53F6B2A2F28590020BEFB /* ProductCell.swift in Sources */, - 20F3D6F32C25F4D700B32751 /* (null) in Sources */, + 20F3D6F32C25F4D700B32751 /* BuildFile in Sources */, 1E60ED382A29C306002695FF /* Constants.swift in Sources */, 624777D02B0CDC9F00952842 /* EnhancedKycWithIdInputScreen.swift in Sources */, 1ED53F712A2F28590020BEFB /* EnterUserIDView.swift in Sources */, @@ -885,7 +885,7 @@ }; 607FACF01AFB9204008FA782 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F346EF1ED1DF5227E7973AF9 /* Pods-SmileID_Example.debug.xcconfig */; + baseConfigurationReference = ED17F9F64A5C52AE70E8BC55 /* Pods-SmileID_Example.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "Apple Development"; @@ -918,7 +918,7 @@ }; 607FACF11AFB9204008FA782 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 573532D688419D93192B1FA9 /* Pods-SmileID_Example.release.xcconfig */; + baseConfigurationReference = 85FA486B80497097116C39A5 /* Pods-SmileID_Example.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "Apple Distribution"; @@ -950,7 +950,7 @@ }; 607FACF31AFB9204008FA782 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 08F30BD5CB20E5AB9E6E211E /* Pods-SmileID_Tests.debug.xcconfig */; + baseConfigurationReference = A55DCB8BFFF66B290B1883E6 /* Pods-SmileID_Tests.debug.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; @@ -983,7 +983,7 @@ }; 607FACF41AFB9204008FA782 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CEDFCC61E89691A1B378145A /* Pods-SmileID_Tests.release.xcconfig */; + baseConfigurationReference = 52A42996691DF0E59A2D2FA8 /* Pods-SmileID_Tests.release.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Distribution"; diff --git a/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift b/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift index 033ed0f35..0c5e22a7a 100644 --- a/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift +++ b/Sources/SmileID/Classes/FaceDetector/LivenessCheckManager.swift @@ -38,7 +38,7 @@ class LivenessCheckManager: ObservableObject { /// The minimum threshold for pitch (up-down head movement) private let minPitchAngleThreshold: CGFloat = 0.15 /// The maximum threshold for pitch (up-down head movement) - private let maxPitchAngleThreshold: CGFloat = 0.25 + private let maxPitchAngleThreshold: CGFloat = 0.30 /// The timeout duration for each task in seconds. private let taskTimeoutDuration: TimeInterval = 120 diff --git a/Sources/SmileID/Classes/Networking/Models/v2/Metadata.swift b/Sources/SmileID/Classes/Networking/Models/v2/Metadata.swift index 06ff2d7c1..a051148db 100644 --- a/Sources/SmileID/Classes/Networking/Models/v2/Metadata.swift +++ b/Sources/SmileID/Classes/Networking/Models/v2/Metadata.swift @@ -14,7 +14,7 @@ public struct Metadata: Codable { .clientIP, .fingerprint, .deviceModel, - .deviceOS, + .deviceOS ]) } @@ -170,8 +170,7 @@ func getIPAddress(useIPv4: Bool) -> String { if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) { let name = String(cString: interface.ifa_name) if name == "en0" || name == "en1" || name == "pdp_ip0" - || name == "pdp_ip1" || name == "pdp_ip2" || name == "pdp_ip3" - { + || name == "pdp_ip1" || name == "pdp_ip2" || name == "pdp_ip3" { var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST)) getnameinfo(interface.ifa_addr, socklen_t(interface.ifa_addr.pointee.sa_len), &hostname, socklen_t(hostname.count), @@ -179,8 +178,7 @@ func getIPAddress(useIPv4: Bool) -> String { address = String(cString: hostname) if (useIPv4 && addrFamily == UInt8(AF_INET)) || - (!useIPv4 && addrFamily == UInt8(AF_INET6)) - { + (!useIPv4 && addrFamily == UInt8(AF_INET6)) { if !useIPv4 { if let percentIndex = address.firstIndex(of: "%") { address = String(address[.. 0 ? .landscapeRight : .landscapeLeft + } else { + self?.motionDeviceOrientation = gravity.y > 0 ? .portraitUpsideDown : .portrait + } + } + } } private func handleCameraImageBuffer(_ imageBuffer: CVPixelBuffer) { - if deviceOrientation == .portrait { + let currentOrientation: UIDeviceOrientation = motionManager.isDeviceMotionAvailable + ? motionDeviceOrientation : unlockedDeviceOrientation + if currentOrientation == .portrait { analyzeFrame(imageBuffer: imageBuffer) } else { - publishUserInstruction(.turnPhoneUp) + DispatchQueue.main.async { + self.faceInBounds = false + self.publishUserInstruction(.turnPhoneUp) + } } } @@ -205,7 +225,10 @@ extension EnhancedSmartSelfieViewModel { elapsedGuideAnimationDelay = 0 showGuideAnimation = false guard guideAnimationDelayTimer == nil else { return } - guideAnimationDelayTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in + guideAnimationDelayTimer = Timer.scheduledTimer( + withTimeInterval: 1, + repeats: true + ) { _ in self.elapsedGuideAnimationDelay += 1 if self.elapsedGuideAnimationDelay == self.guideAnimationDelayTime { self.showGuideAnimation = true diff --git a/Sources/SmileID/Classes/SmileID.swift b/Sources/SmileID/Classes/SmileID.swift index 074b826b4..50497fafd 100644 --- a/Sources/SmileID/Classes/SmileID.swift +++ b/Sources/SmileID/Classes/SmileID.swift @@ -211,7 +211,7 @@ public class SmileID { LocalStorage.getFileByType(jobId: jobId, fileType: .selfie), LocalStorage.getFileByType(jobId: jobId, fileType: .documentFront), LocalStorage.getFileByType(jobId: jobId, fileType: .documentBack), - LocalStorage.getInfoJsonFile(jobId: jobId), + LocalStorage.getInfoJsonFile(jobId: jobId) ].compactMap { $0 } allFiles = livenessFiles + additionalFiles } catch { diff --git a/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings b/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings index 5ae2b1b7f..029fed617 100644 --- a/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings +++ b/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings @@ -24,7 +24,7 @@ "Instructions.Quality" = "Move to well lit area and clear face of obstructions"; "Instructions.Brightness" = "Move to a well lit room"; "Instructions.Start" = "Put your face inside the oval frame and wait until it turns green"; -"Instructions.SelfieCapture" = "Position your head in camera frame. \nThen move in the direction that is indicated."; +"Instructions.SelfieCapture" = "Position your head in the camera view. Then move in the direction that is indicated."; "Instructions.PositionHeadInView" = "Position your head in view"; "Instructions.TurnHeadLeft" = "Turn your head to the left"; "Instructions.TurnHeadRight" = "Turn your head to the right"; diff --git a/Sources/SmileID/Resources/LottieFiles/liveness_guides_with_bg.lottie b/Sources/SmileID/Resources/LottieFiles/headdirection_with_bg.lottie similarity index 100% rename from Sources/SmileID/Resources/LottieFiles/liveness_guides_with_bg.lottie rename to Sources/SmileID/Resources/LottieFiles/headdirection_with_bg.lottie diff --git a/Sources/SmileID/Resources/LottieFiles/light_animation.lottie b/Sources/SmileID/Resources/LottieFiles/light_animation.lottie deleted file mode 100644 index 2640b2d52e0d43b697861d1bf7aeded422dccd9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2094 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 F`v-d*tQ7zN diff --git a/Sources/SmileID/Resources/LottieFiles/positioning_with_bg.lottie b/Sources/SmileID/Resources/LottieFiles/positioning_with_bg.lottie new file mode 100644 index 0000000000000000000000000000000000000000..3097c92c3b2424efdde0bc21de361aae50c3495f GIT binary patch literal 2381 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 literal 0 HcmV?d00001 From 819d2ff78d979dccadad3889bbbdcaedf751ef7a Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Fri, 13 Dec 2024 15:31:46 +0100 Subject: [PATCH 21/23] Fix Selfie and Liveness Image Sizes, Fix Layout for Small Screen Devices (#266) * Fixed Missing Document Type (#264) * added missing document type in document jobs * Update CHANGELOG.md * add new submission status icons for success and failed states. * remove setting initial value for user instruction. * handle multiple faces detected and throw an error * change order of face validator so that luminance is checked before head position. * reduce the stroke size of the face in bounds indicator. * remove done button and hide cancel button if submission was successful. * use new status icons in status view. * add a placeholder for api error 2214 * update selfie actions view parameters * restore camera manager to have accessible initializer. add camera session size preset for selfie capture image * code formatting and set line limit of 2 to user instructions title. * change capture screen layout to accommodate small screen devices. remove cancel delegate method from selfie result. * dismiss the selfie capture when submission is successful. --------- Co-authored-by: Juma Allan --- CHANGELOG.md | 8 ++- Example/SmileID/Home/ProductCell.swift | 1 - .../Classes/Camera/CameraManager.swift | 4 +- .../Model/DocumentCaptureViewModel.swift | 2 +- ...stratedDocumentVerificationViewModel.swift | 2 +- .../FaceDetector/EnhancedFaceDetector.swift | 6 +++ .../Classes/FaceDetector/FaceValidator.swift | 4 +- .../Helpers/SmileIDResourcesHelper.swift | 2 + .../EnhancedSmartSelfieViewModel.swift | 31 +++++++++--- .../SelfieCapture/SelfieViewModel.swift | 5 +- .../SelfieCapture/SelfieViewModelAction.swift | 2 +- .../SmartSelfieResultDelegate.swift | 5 -- .../View/EnhancedSelfieCaptureScreen.swift | 47 +++++++----------- .../SelfieCapture/View/FaceBoundingArea.swift | 4 +- .../View/SelfieActionsView.swift | 39 ++++++++++----- .../View/SelfiePreviewView.swift | 2 +- .../View/SubmissionStatusView.swift | 9 ++-- .../View/UserInstructionsView.swift | 2 +- .../Localization/en.lproj/Localizable.strings | 1 + .../Checkmark.imageset/Checkmark.png | Bin 0 -> 1093 bytes .../Checkmark.imageset/Checkmark@2x.png | Bin 0 -> 2039 bytes .../Checkmark.imageset/Checkmark@3x.png | Bin 0 -> 2991 bytes .../Checkmark.imageset/Contents.json | 23 +++++++++ .../Xmark.imageset/Contents.json | 23 +++++++++ .../Media.xcassets/Xmark.imageset/Xmark.png | Bin 0 -> 1131 bytes .../Xmark.imageset/Xmark@2x.png | Bin 0 -> 2044 bytes .../Xmark.imageset/Xmark@3x.png | Bin 0 -> 3023 bytes 27 files changed, 149 insertions(+), 73 deletions(-) create mode 100644 Sources/SmileID/Resources/Media.xcassets/Checkmark.imageset/Checkmark.png create mode 100644 Sources/SmileID/Resources/Media.xcassets/Checkmark.imageset/Checkmark@2x.png create mode 100644 Sources/SmileID/Resources/Media.xcassets/Checkmark.imageset/Checkmark@3x.png create mode 100644 Sources/SmileID/Resources/Media.xcassets/Checkmark.imageset/Contents.json create mode 100644 Sources/SmileID/Resources/Media.xcassets/Xmark.imageset/Contents.json create mode 100644 Sources/SmileID/Resources/Media.xcassets/Xmark.imageset/Xmark.png create mode 100644 Sources/SmileID/Resources/Media.xcassets/Xmark.imageset/Xmark@2x.png create mode 100644 Sources/SmileID/Resources/Media.xcassets/Xmark.imageset/Xmark@3x.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 126fb7368..a91f037f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,15 @@ # Release Notes +## Unreleased + +* Fixed missing idType on Document Verification Jobs + ## 10.2.17 -### Added skipApiSubmission: Whether to skip api submission to SmileID and return only captured images on SmartSelfie enrollment, SmartSelfie authentic , Document verification and Enhanced DocV + +* Added skipApiSubmission: Whether to skip api submission to SmileID and return only captured images on SmartSelfie enrollment, SmartSelfie authentic , Document verification and Enhanced DocV ## 10.2.16 + ### Fixed * Clear images on retry or start capture with the same jobId diff --git a/Example/SmileID/Home/ProductCell.swift b/Example/SmileID/Home/ProductCell.swift index d8283b8f9..6e6da271b 100644 --- a/Example/SmileID/Home/ProductCell.swift +++ b/Example/SmileID/Home/ProductCell.swift @@ -57,7 +57,6 @@ struct ProductCell: View { } } } - .environment(\.modalMode, $isPresented) } ) } diff --git a/Sources/SmileID/Classes/Camera/CameraManager.swift b/Sources/SmileID/Classes/Camera/CameraManager.swift index f57cee050..fd5239d73 100644 --- a/Sources/SmileID/Classes/Camera/CameraManager.swift +++ b/Sources/SmileID/Classes/Camera/CameraManager.swift @@ -44,9 +44,7 @@ class CameraManager: NSObject, ObservableObject { @Published private(set) var status = Status.unconfigured private var orientation: Orientation - static let shared: CameraManager = CameraManager(orientation: .portrait) - - private init(orientation: Orientation) { + init(orientation: Orientation) { self.orientation = orientation super.init() sessionQueue.async { diff --git a/Sources/SmileID/Classes/DocumentVerification/Model/DocumentCaptureViewModel.swift b/Sources/SmileID/Classes/DocumentVerification/Model/DocumentCaptureViewModel.swift index d859d9ed5..9ac7489a6 100644 --- a/Sources/SmileID/Classes/DocumentVerification/Model/DocumentCaptureViewModel.swift +++ b/Sources/SmileID/Classes/DocumentVerification/Model/DocumentCaptureViewModel.swift @@ -39,7 +39,7 @@ class DocumentCaptureViewModel: ObservableObject { @Published var documentImageToConfirm: Data? @Published var captureError: Error? @Published var isCapturing = false - var cameraManager = CameraManager.shared + @Published var cameraManager = CameraManager(orientation: .portrait) init( knownAspectRatio: Double? = nil, diff --git a/Sources/SmileID/Classes/DocumentVerification/Model/OrchestratedDocumentVerificationViewModel.swift b/Sources/SmileID/Classes/DocumentVerification/Model/OrchestratedDocumentVerificationViewModel.swift index 75425e7a1..cdf576d5a 100644 --- a/Sources/SmileID/Classes/DocumentVerification/Model/OrchestratedDocumentVerificationViewModel.swift +++ b/Sources/SmileID/Classes/DocumentVerification/Model/OrchestratedDocumentVerificationViewModel.swift @@ -165,7 +165,7 @@ class IOrchestratedDocumentVerificationViewModel: ObservableObj } let info = try LocalStorage.createInfoJsonFile( jobId: jobId, - idInfo: IdInfo(country: countryCode), + idInfo: IdInfo(country: countryCode, idType: documentType), documentFront: frontDocumentUrl, documentBack: backDocumentUrl, selfie: selfieFile, diff --git a/Sources/SmileID/Classes/FaceDetector/EnhancedFaceDetector.swift b/Sources/SmileID/Classes/FaceDetector/EnhancedFaceDetector.swift index d00eee4a8..2806a250d 100644 --- a/Sources/SmileID/Classes/FaceDetector/EnhancedFaceDetector.swift +++ b/Sources/SmileID/Classes/FaceDetector/EnhancedFaceDetector.swift @@ -7,6 +7,7 @@ enum FaceDetectorError: Error { case unableToLoadSelfieModel case invalidSelfieModelOutput case noFaceDetected + case multipleFacesDetected case unableToCropImage } @@ -71,6 +72,11 @@ class EnhancedFaceDetector: NSObject { return } + guard faceDetections.count == 1 else { + self.resultDelegate?.faceDetector(self, didFailWithError: FaceDetectorError.multipleFacesDetected) + return + } + let convertedBoundingBox = self.viewDelegate?.convertFromMetadataToPreviewRect( rect: faceObservation.boundingBox) ?? .zero diff --git a/Sources/SmileID/Classes/FaceDetector/FaceValidator.swift b/Sources/SmileID/Classes/FaceDetector/FaceValidator.swift index 80f54e312..1721bfcaa 100644 --- a/Sources/SmileID/Classes/FaceDetector/FaceValidator.swift +++ b/Sources/SmileID/Classes/FaceDetector/FaceValidator.swift @@ -89,6 +89,8 @@ final class FaceValidator { } } return nil + } else if !isAcceptableFaceQuality || !isAcceptableBrightness { + return .goodLight } else if faceBoundsState == .detectedFaceOffCentre || faceBoundsState == .detectedFaceNotWithinFrame { return .headInFrame @@ -96,8 +98,6 @@ final class FaceValidator { return .moveCloser } else if faceBoundsState == .detectedFaceTooLarge { return .moveBack - } else if !isAcceptableFaceQuality || !isAcceptableBrightness { - return .goodLight } return nil } diff --git a/Sources/SmileID/Classes/Helpers/SmileIDResourcesHelper.swift b/Sources/SmileID/Classes/Helpers/SmileIDResourcesHelper.swift index 38a40a681..9d6597e8c 100644 --- a/Sources/SmileID/Classes/Helpers/SmileIDResourcesHelper.swift +++ b/Sources/SmileID/Classes/Helpers/SmileIDResourcesHelper.swift @@ -77,6 +77,8 @@ public class SmileIDResourcesHelper { public static var ConsentDocumentInfo = SmileIDResourcesHelper.image("ConsentDocumentInfo")! public static var ConsentPersonalInfo = SmileIDResourcesHelper.image("ConsentPersonalInfo")! public static var Loader = SmileIDResourcesHelper.image("Loader")! + public static var Checkmark = SmileIDResourcesHelper.image("Checkmark")! + public static var Xmark = SmileIDResourcesHelper.image("Xmark")! /// Size of font. public static let pointSize: CGFloat = 16 diff --git a/Sources/SmileID/Classes/SelfieCapture/EnhancedSmartSelfieViewModel.swift b/Sources/SmileID/Classes/SelfieCapture/EnhancedSmartSelfieViewModel.swift index b575a3b94..9c81f3dc9 100644 --- a/Sources/SmileID/Classes/SelfieCapture/EnhancedSmartSelfieViewModel.swift +++ b/Sources/SmileID/Classes/SelfieCapture/EnhancedSmartSelfieViewModel.swift @@ -6,7 +6,7 @@ import SwiftUI public class EnhancedSmartSelfieViewModel: ObservableObject { // MARK: Dependencies private let motionManager = CMMotionManager() - let cameraManager = CameraManager.shared + let cameraManager = CameraManager(orientation: .portrait) let faceDetector = EnhancedFaceDetector() private let faceValidator = FaceValidator() var livenessCheckManager = LivenessCheckManager() @@ -121,7 +121,6 @@ public class EnhancedSmartSelfieViewModel: ObservableObject { self.livenessCheckManager.delegate = self self.faceValidator.setLayoutGuideFrame(with: faceLayoutGuideFrame) - self.userInstruction = .headInFrame livenessCheckManager.$lookLeftProgress .merge( @@ -136,6 +135,9 @@ public class EnhancedSmartSelfieViewModel: ObservableObject { } .store(in: &subscribers) + if cameraManager.session.canSetSessionPreset(.vga640x480) { + cameraManager.session.sessionPreset = .vga640x480 + } cameraManager.$status .receive(on: DispatchQueue.main) .filter { $0 == .unauthorized } @@ -200,8 +202,8 @@ public class EnhancedSmartSelfieViewModel: ObservableObject { handleWindowSizeChanged(to: windowRect, edgeInsets: safeAreaInsets) case .onViewAppear: handleViewAppeared() - case .jobProcessingDone: - onFinished(callback: onResult) + case .cancelSelfieCapture: + handleCancelSelfieCapture() case .retryJobSubmission: handleSubmission() case .openApplicationSettings: @@ -353,6 +355,21 @@ extension EnhancedSmartSelfieViewModel { guard let settingsURL = URL(string: UIApplication.openSettingsURLString) else { return } UIApplication.shared.open(settingsURL) } + + private func handleCancelSelfieCapture() { + invalidateSubmissionTask() + UIApplication.shared.windows.first?.rootViewController?.dismiss(animated: true) + } + + private func dismissSelfieCapture() { + UIApplication.shared.windows.first?.rootViewController?.dismiss( + animated: true, + completion: { [weak self] in + guard let self else { return } + self.onFinished(callback: self.onResult) + } + ) + } } // MARK: FaceDetectorResultDelegate Methods @@ -488,8 +505,6 @@ extension EnhancedSmartSelfieViewModel: SelfieSubmissionDelegate { ) } else if let error = error { callback.didError(error: error) - } else { - callback.didCancel() } } @@ -502,6 +517,10 @@ extension EnhancedSmartSelfieViewModel: SelfieSubmissionDelegate { self.apiResponse = apiResponse self.selfieCaptureState = .processing(.success) } + + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { + self.dismissSelfieCapture() + } } func submissionDidFail( diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift index a3097ca03..984212df3 100644 --- a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift @@ -28,7 +28,7 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { private var localMetadata: LocalMetadata private let faceDetector = FaceDetector() - var cameraManager = CameraManager.shared + var cameraManager = CameraManager(orientation: .portrait) var shouldAnalyzeImages = true var lastAutoCaptureTime = Date() var previousHeadRoll = Double.infinity @@ -78,6 +78,9 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { self.extraPartnerParams = extraPartnerParams self.localMetadata = localMetadata + if cameraManager.session.canSetSessionPreset(.vga640x480) { + cameraManager.session.sessionPreset = .vga640x480 + } cameraManager.$status .receive(on: DispatchQueue.main) .filter { $0 == .unauthorized } diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift index 7b9c1c159..2bec66da1 100644 --- a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModelAction.swift @@ -6,7 +6,7 @@ enum SelfieViewModelAction { case windowSizeDetected(CGSize, EdgeInsets) // Job Submission Actions - case jobProcessingDone + case cancelSelfieCapture case retryJobSubmission // Others diff --git a/Sources/SmileID/Classes/SelfieCapture/SmartSelfieResultDelegate.swift b/Sources/SmileID/Classes/SelfieCapture/SmartSelfieResultDelegate.swift index 3e0680daa..afaeadbea 100644 --- a/Sources/SmileID/Classes/SelfieCapture/SmartSelfieResultDelegate.swift +++ b/Sources/SmileID/Classes/SelfieCapture/SmartSelfieResultDelegate.swift @@ -19,8 +19,3 @@ public protocol SmartSelfieResultDelegate { /// - Parameter error: The error returned from a failed selfie capture func didError(error: Error) } - -extension SmartSelfieResultDelegate { - /// The selfie capture operation was canceled. - func didCancel() {} -} diff --git a/Sources/SmileID/Classes/SelfieCapture/View/EnhancedSelfieCaptureScreen.swift b/Sources/SmileID/Classes/SelfieCapture/View/EnhancedSelfieCaptureScreen.swift index 734fe0968..f79d7ebb9 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/EnhancedSelfieCaptureScreen.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/EnhancedSelfieCaptureScreen.swift @@ -5,9 +5,8 @@ public struct EnhancedSelfieCaptureScreen: View { let showAttribution: Bool private let faceShape = FaceShape() - @Environment(\.modalMode) private var modalMode - private(set) var originalBrightness = UIScreen.main.brightness + private let cameraContainerHeight: CGFloat = 480 public var body: some View { GeometryReader { proxy in @@ -20,14 +19,16 @@ public struct EnhancedSelfieCaptureScreen: View { selfieViewModel: viewModel ) .cornerRadius(40) + .frame(height: cameraContainerHeight) RoundedRectangle(cornerRadius: 40) .fill(SmileID.theme.tertiary.opacity(0.8)) .reverseMask(alignment: .top) { faceShape .frame(width: 250, height: 350) - .padding(.top, 60) + .padding(.top, 50) } + .frame(height: cameraContainerHeight) VStack { ZStack { FaceBoundingArea( @@ -55,7 +56,7 @@ public struct EnhancedSelfieCaptureScreen: View { } } } - .selfieCaptureFrameBackground() + .selfieCaptureFrameBackground(cameraContainerHeight) if showAttribution { Image(uiImage: SmileIDResourcesHelper.SmileEmblem) } @@ -69,8 +70,9 @@ public struct EnhancedSelfieCaptureScreen: View { .reverseMask(alignment: .top) { faceShape .frame(width: 250, height: 350) - .padding(.top, 60) + .padding(.top, 50) } + .frame(height: cameraContainerHeight) VStack { Spacer() UserInstructionsView( @@ -84,33 +86,21 @@ public struct EnhancedSelfieCaptureScreen: View { SubmissionStatusView(processState: processingState) .padding(.bottom, 40) } - .selfieCaptureFrameBackground() + .selfieCaptureFrameBackground(cameraContainerHeight) if showAttribution { Image(uiImage: SmileIDResourcesHelper.SmileEmblem) } - - Spacer() - SelfieActionsView( - processingState: processingState, - retryAction: { viewModel.perform(action: .retryJobSubmission) }, - doneAction: { - modalMode.wrappedValue = false - viewModel.perform(action: .jobProcessingDone) - } - ) } - Spacer() - - Button { - modalMode.wrappedValue = false - viewModel.perform(action: .jobProcessingDone) - } label: { - Text(SmileIDResourcesHelper.localizedString(for: "Action.Cancel")) - .font(SmileID.theme.button) - .foregroundColor(SmileID.theme.error) - } + SelfieActionsView( + captureState: viewModel.selfieCaptureState, + retryAction: { viewModel.perform(action: .retryJobSubmission) }, + cancelAction: { + viewModel.perform(action: .cancelSelfieCapture) + } + ) } + .padding(.vertical, 20) .navigationBarHidden(true) .onAppear { UIScreen.main.brightness = 1 @@ -143,11 +133,10 @@ public struct EnhancedSelfieCaptureScreen: View { } extension View { - func selfieCaptureFrameBackground() -> some View { + func selfieCaptureFrameBackground(_ containerHeight: CGFloat) -> some View { self .shadow(color: .black.opacity(0.25), radius: 4, x: 0, y: 4) - .frame(height: 520) + .frame(height: containerHeight) .padding(.horizontal) - .padding(.top, 40) } } diff --git a/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift b/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift index cac02325b..5e0b1cbd6 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/FaceBoundingArea.swift @@ -16,9 +16,9 @@ struct FaceBoundingArea: View { faceShape .stroke( faceInBounds ? selfieCaptured ? .clear : SmileID.theme.success : SmileID.theme.error, - style: StrokeStyle(lineWidth: 10) + style: StrokeStyle(lineWidth: 8) ) - .frame(width: 270, height: 370) + .frame(width: 260, height: 360) if let guideAnimation = guideAnimation, showGuideAnimation { diff --git a/Sources/SmileID/Classes/SelfieCapture/View/SelfieActionsView.swift b/Sources/SmileID/Classes/SelfieCapture/View/SelfieActionsView.swift index 789f19792..0d3374bd6 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/SelfieActionsView.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/SelfieActionsView.swift @@ -1,26 +1,39 @@ import SwiftUI struct SelfieActionsView: View { - var processingState: ProcessingState + var captureState: EnhancedSmartSelfieViewModel.SelfieCaptureState var retryAction: () -> Void - var doneAction: () -> Void + var cancelAction: () -> Void var body: some View { VStack { - Spacer() - switch processingState { - case .inProgress: - EmptyView() - case .success: - SmileButton(title: "Action.Done") { - doneAction() - } - case .error: - SmileButton(title: "Confirmation.Retry") { - retryAction() + switch captureState { + case .capturingSelfie: + cancelButton + case .processing(let processingState): + switch processingState { + case .inProgress: + cancelButton + case .success: + EmptyView() + case .error: + SmileButton(title: "Confirmation.Retry") { + retryAction() + } + cancelButton } } } .padding(.horizontal, 65) } + + var cancelButton: some View { + Button { + cancelAction() + } label: { + Text(SmileIDResourcesHelper.localizedString(for: "Action.Cancel")) + .font(SmileID.theme.button) + .foregroundColor(SmileID.theme.error) + } + } } diff --git a/Sources/SmileID/Classes/SelfieCapture/View/SelfiePreviewView.swift b/Sources/SmileID/Classes/SelfieCapture/View/SelfiePreviewView.swift index 7687fc9f6..fe824010d 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/SelfiePreviewView.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/SelfiePreviewView.swift @@ -7,7 +7,7 @@ struct SelfiePreviewView: View { Image(uiImage: image) .resizable() .aspectRatio(contentMode: .fill) - .frame(height: 520) + .frame(height: 480) .clipShape(.rect(cornerRadius: 40)) } } diff --git a/Sources/SmileID/Classes/SelfieCapture/View/SubmissionStatusView.swift b/Sources/SmileID/Classes/SelfieCapture/View/SubmissionStatusView.swift index faab587e0..e590d85a8 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/SubmissionStatusView.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/SubmissionStatusView.swift @@ -9,18 +9,17 @@ struct SubmissionStatusView: View { CircularProgressView() .frame(width: 48, height: 48) case .success: - StatusImage("checkmark.circle.fill", color: SmileID.theme.success) + StatusImage(SmileIDResourcesHelper.Checkmark) case .error: - StatusImage("xmark.circle.fill", color: SmileID.theme.error) + StatusImage(SmileIDResourcesHelper.Xmark) } } // swiftlint:disable identifier_name - @ViewBuilder func StatusImage(_ image: String, color: Color) -> some View { - Image(systemName: image) + @ViewBuilder func StatusImage(_ uiImage: UIImage) -> some View { + Image(uiImage: uiImage) .resizable() .aspectRatio(contentMode: .fill) .frame(width: 48, height: 48) - .foregroundColor(color) } } diff --git a/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift b/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift index a70b77106..79836a437 100644 --- a/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift +++ b/Sources/SmileID/Classes/SelfieCapture/View/UserInstructionsView.swift @@ -11,7 +11,7 @@ struct UserInstructionsView: View { .font(SmileID.theme.header2) .foregroundColor(SmileID.theme.onDark) .multilineTextAlignment(.center) - .lineLimit(3) + .lineLimit(2) .minimumScaleFactor(0.8) if let message = message { Text(message) diff --git a/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings b/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings index 029fed617..252dfa138 100644 --- a/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings +++ b/Sources/SmileID/Resources/Localization/en.lproj/Localizable.strings @@ -126,6 +126,7 @@ "Si.Error.Message.2211" = ""; "Si.Error.Message.2212" = ""; "Si.Error.Message.2213" = ""; +"Si.Error.Message.2214" = ""; "Si.Error.Message.2413" = ""; "Si.Error.Message.2215" = ""; "Si.Error.Message.2216" = ""; diff --git a/Sources/SmileID/Resources/Media.xcassets/Checkmark.imageset/Checkmark.png b/Sources/SmileID/Resources/Media.xcassets/Checkmark.imageset/Checkmark.png new file mode 100644 index 0000000000000000000000000000000000000000..3aaf7483ec7e6e11a01ff18682d3704a49dac350 GIT binary patch literal 1093 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 literal 0 HcmV?d00001 diff --git a/Sources/SmileID/Resources/Media.xcassets/Checkmark.imageset/Checkmark@3x.png b/Sources/SmileID/Resources/Media.xcassets/Checkmark.imageset/Checkmark@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ca06bbb8a9babb81231788ff7f40e022267fbe93 GIT binary patch literal 2991 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 literal 0 HcmV?d00001 diff --git a/Sources/SmileID/Resources/Media.xcassets/Checkmark.imageset/Contents.json b/Sources/SmileID/Resources/Media.xcassets/Checkmark.imageset/Contents.json new file mode 100644 index 000000000..91ff57529 --- /dev/null +++ b/Sources/SmileID/Resources/Media.xcassets/Checkmark.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Checkmark.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Checkmark@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Checkmark@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Sources/SmileID/Resources/Media.xcassets/Xmark.imageset/Contents.json b/Sources/SmileID/Resources/Media.xcassets/Xmark.imageset/Contents.json new file mode 100644 index 000000000..4d1aa468c --- /dev/null +++ b/Sources/SmileID/Resources/Media.xcassets/Xmark.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Xmark.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Xmark@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Xmark@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Sources/SmileID/Resources/Media.xcassets/Xmark.imageset/Xmark.png b/Sources/SmileID/Resources/Media.xcassets/Xmark.imageset/Xmark.png new file mode 100644 index 0000000000000000000000000000000000000000..9f1fe162a36b947ac295554864d5327039fe2536 GIT binary patch literal 1131 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 R|84*P002ovPDHLkV1j%)b!7km literal 0 HcmV?d00001 From 9806243320adf7a3efc1b160f56f10279733d915 Mon Sep 17 00:00:00 2001 From: Juma Allan Date: Fri, 13 Dec 2024 18:22:44 +0300 Subject: [PATCH 22/23] Adding Active Liveness Metadata (#265) * added active liveness metadata * added headpose metadata * updated camera name metadata * updated liveness type * fix the camera info collection. * code formatting --------- Co-authored-by: Tobi Omotayo --- .../Classes/Camera/CameraManager.swift | 95 ++++--- .../Networking/Models/v2/Metadata.swift | 97 +++++-- .../EnhancedSmartSelfieViewModel.swift | 89 ++++-- .../SelfieCapture/SelfieViewModel.swift | 261 +++++++++++------- 4 files changed, 362 insertions(+), 180 deletions(-) diff --git a/Sources/SmileID/Classes/Camera/CameraManager.swift b/Sources/SmileID/Classes/Camera/CameraManager.swift index fd5239d73..8a5407e1e 100644 --- a/Sources/SmileID/Classes/Camera/CameraManager.swift +++ b/Sources/SmileID/Classes/Camera/CameraManager.swift @@ -1,5 +1,5 @@ -import Foundation import AVFoundation +import Foundation import SwiftUI class CameraManager: NSObject, ObservableObject { @@ -21,7 +21,9 @@ class CameraManager: NSObject, ObservableObject { @Published var sampleBuffer: CVPixelBuffer? @Published var capturedImage: Data? - var sampleBufferPublisher: Published.Publisher { $sampleBuffer } + var sampleBufferPublisher: Published.Publisher { + $sampleBuffer + } var capturedImagePublisher: Published.Publisher { $capturedImage } let videoOutputQueue = DispatchQueue( label: "com.smileidentity.videooutput", @@ -48,7 +50,8 @@ class CameraManager: NSObject, ObservableObject { self.orientation = orientation super.init() sessionQueue.async { - self.videoOutput.setSampleBufferDelegate(self, queue: self.videoOutputQueue) + self.videoOutput.setSampleBufferDelegate( + self, queue: self.videoOutputQueue) } checkPermissions() } @@ -60,28 +63,28 @@ class CameraManager: NSObject, ObservableObject { } private func checkPermissions() { - switch AVCaptureDevice.authorizationStatus(for: .video) { - case .notDetermined: - sessionQueue.suspend() - AVCaptureDevice.requestAccess(for: .video) { authorized in - if !authorized { - self.status = .unauthorized - self.set(error: .deniedAuthorization) - } - self.sessionQueue.resume() + switch AVCaptureDevice.authorizationStatus(for: .video) { + case .notDetermined: + sessionQueue.suspend() + AVCaptureDevice.requestAccess(for: .video) { authorized in + if !authorized { + self.status = .unauthorized + self.set(error: .deniedAuthorization) + } + self.sessionQueue.resume() + } + case .restricted: + status = .unauthorized + set(error: .restrictedAuthorization) + case .denied: + status = .unauthorized + set(error: .deniedAuthorization) + case .authorized: + break + @unknown default: + status = .unauthorized + set(error: .unknownAuthorization) } - case .restricted: - status = .unauthorized - set(error: .restrictedAuthorization) - case .denied: - status = .unauthorized - set(error: .deniedAuthorization) - case .authorized: - break - @unknown default: - status = .unauthorized - set(error: .unknownAuthorization) - } } private func addCameraInput(position: AVCaptureDevice.Position) { @@ -90,7 +93,8 @@ class CameraManager: NSObject, ObservableObject { status = .failed return } - cameraName = camera.uniqueID + + getCameraName(for: camera) do { let cameraInput = try AVCaptureDeviceInput(device: camera) @@ -106,14 +110,29 @@ class CameraManager: NSObject, ObservableObject { } } - private func getCameraForPosition(_ position: AVCaptureDevice.Position) -> AVCaptureDevice? { + private func getCameraName(for camera: AVCaptureDevice) { + var manufacturer: String + if #available(iOS 14.0, *) { + manufacturer = camera.manufacturer + } else { + manufacturer = "Apple Inc." + } + cameraName = + "\(manufacturer) \(camera.localizedName) \(camera.deviceType.rawValue)" + } + + private func getCameraForPosition(_ position: AVCaptureDevice.Position) + -> AVCaptureDevice? { switch position { case .front: - return AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .front) + return AVCaptureDevice.default( + .builtInWideAngleCamera, for: .video, position: .front) case .back: - return AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) + return AVCaptureDevice.default( + .builtInWideAngleCamera, for: .video, position: .back) default: - return AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .front) + return AVCaptureDevice.default( + .builtInWideAngleCamera, for: .video, position: .front) } } @@ -124,7 +143,10 @@ class CameraManager: NSObject, ObservableObject { session.addOutput(photoOutput) session.addOutput(videoOutput) videoOutput.videoSettings = - [kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA] + [ + kCVPixelBufferPixelFormatTypeKey as String: + kCVPixelFormatType_32BGRA + ] if orientation == .portrait { let videoConnection = videoOutput.connection(with: .video) videoConnection?.videoOrientation = .portrait @@ -139,7 +161,8 @@ class CameraManager: NSObject, ObservableObject { checkPermissions() sessionQueue.async { [self] in if !session.isRunning { - if let currentInput = session.inputs.first as? AVCaptureDeviceInput { + if let currentInput = session.inputs.first + as? AVCaptureDeviceInput { session.removeInput(currentInput) } addCameraInput(position: position) @@ -147,7 +170,8 @@ class CameraManager: NSObject, ObservableObject { session.startRunning() } else { session.beginConfiguration() - if let currentInput = session.inputs.first as? AVCaptureDeviceInput { + if let currentInput = session.inputs.first + as? AVCaptureDeviceInput { session.removeInput(currentInput) } addCameraInput(position: position) @@ -172,7 +196,9 @@ class CameraManager: NSObject, ObservableObject { } internal func capturePhoto() { - guard let connection = photoOutput.connection(with: .video), connection.isEnabled, connection.isActive else { + guard let connection = photoOutput.connection(with: .video), + connection.isEnabled, connection.isActive + else { set(error: .cameraUnavailable) print("Camera unavailable") return @@ -189,7 +215,8 @@ extension CameraManager: AVCaptureVideoDataOutputSampleBufferDelegate { didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection ) { - guard let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return } + guard let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) + else { return } self.sampleBuffer = imageBuffer } } diff --git a/Sources/SmileID/Classes/Networking/Models/v2/Metadata.swift b/Sources/SmileID/Classes/Networking/Models/v2/Metadata.swift index a051148db..5ad912cad 100644 --- a/Sources/SmileID/Classes/Networking/Models/v2/Metadata.swift +++ b/Sources/SmileID/Classes/Networking/Models/v2/Metadata.swift @@ -11,6 +11,7 @@ public struct Metadata: Codable { Metadata(items: [ .sdk, .sdkVersion, + .activeLivenessVersion, .clientIP, .fingerprint, .deviceModel, @@ -49,15 +50,34 @@ public class Metadatum: Codable { } public static let sdk = Metadatum(name: "sdk", value: "iOS") - public static let sdkVersion = Metadatum(name: "sdk_version", value: SmileID.version) - public static let clientIP = Metadatum(name: "client_ip", value: getIPAddress(useIPv4: true)) - public static let fingerprint = Metadatum(name: "fingerprint", value: SmileID.deviceId) - public static let deviceModel = Metadatum(name: "device_model", value: UIDevice.current.modelName) - public static let deviceOS = Metadatum(name: "device_os", value: UIDevice.current.systemVersion) + public static let sdkVersion = Metadatum( + name: "sdk_version", value: SmileID.version) + public static let activeLivenessVersion = Metadatum( + name: "active_liveness_version", value: "1.0.0") + public static let clientIP = Metadatum( + name: "client_ip", value: getIPAddress(useIPv4: true)) + public static let fingerprint = Metadatum( + name: "fingerprint", value: SmileID.deviceId) + public static let deviceModel = Metadatum( + name: "device_model", value: UIDevice.current.modelName) + public static let deviceOS = Metadatum( + name: "device_os", value: UIDevice.current.systemVersion) + + public class ActiveLivenessType: Metadatum { + public init(livenessType: LivenessType) { + super.init( + name: "active_liveness_type", value: livenessType.rawValue) + } + + public required init(from decoder: Decoder) throws { + try super.init(from: decoder) + } + } public class SelfieImageOrigin: Metadatum { public init(cameraFacing: CameraFacingValue) { - super.init(name: "selfie_image_origin", value: cameraFacing.rawValue) + super.init( + name: "selfie_image_origin", value: cameraFacing.rawValue) } public required init(from decoder: Decoder) throws { @@ -67,7 +87,9 @@ public class Metadatum: Codable { public class SelfieCaptureDuration: Metadatum { public init(duration: TimeInterval) { - super.init(name: "selfie_capture_duration_ms", value: String(Int(duration * 1000))) + super.init( + name: "selfie_capture_duration_ms", + value: String(Int(duration * 1000))) } public required init(from decoder: Decoder) throws { @@ -77,7 +99,8 @@ public class Metadatum: Codable { public class DocumentFrontImageOrigin: Metadatum { public init(origin: DocumentImageOriginValue) { - super.init(name: "document_front_image_origin", value: origin.rawValue) + super.init( + name: "document_front_image_origin", value: origin.rawValue) } public required init(from decoder: Decoder) throws { @@ -87,7 +110,8 @@ public class Metadatum: Codable { public class DocumentBackImageOrigin: Metadatum { public init(origin: DocumentImageOriginValue) { - super.init(name: "document_back_image_origin", value: origin.rawValue) + super.init( + name: "document_back_image_origin", value: origin.rawValue) } public required init(from decoder: Decoder) throws { @@ -97,7 +121,8 @@ public class Metadatum: Codable { public class DocumentFrontCaptureRetries: Metadatum { public init(retries: Int) { - super.init(name: "document_front_capture_retries", value: String(retries)) + super.init( + name: "document_front_capture_retries", value: String(retries)) } public required init(from decoder: Decoder) throws { @@ -107,7 +132,8 @@ public class Metadatum: Codable { public class DocumentBackCaptureRetries: Metadatum { public init(retries: Int) { - super.init(name: "document_back_capture_retries", value: String(retries)) + super.init( + name: "document_back_capture_retries", value: String(retries)) } public required init(from decoder: Decoder) throws { @@ -117,7 +143,9 @@ public class Metadatum: Codable { public class DocumentFrontCaptureDuration: Metadatum { public init(duration: TimeInterval) { - super.init(name: "document_front_capture_duration_ms", value: String(Int(duration * 1000))) + super.init( + name: "document_front_capture_duration_ms", + value: String(Int(duration * 1000))) } public required init(from decoder: Decoder) throws { @@ -127,7 +155,9 @@ public class Metadatum: Codable { public class DocumentBackCaptureDuration: Metadatum { public init(duration: TimeInterval) { - super.init(name: "document_back_capture_duration_ms", value: String(Int(duration * 1000))) + super.init( + name: "document_back_capture_duration_ms", + value: String(Int(duration * 1000))) } public required init(from decoder: Decoder) throws { @@ -136,6 +166,11 @@ public class Metadatum: Codable { } } +public enum LivenessType: String, Codable { + case headPose = "head_pose" + case smile = "smile" +} + public enum DocumentImageOriginValue: String { case gallery case cameraAutoCapture = "camera_auto_capture" @@ -172,16 +207,19 @@ func getIPAddress(useIPv4: Bool) -> String { if name == "en0" || name == "en1" || name == "pdp_ip0" || name == "pdp_ip1" || name == "pdp_ip2" || name == "pdp_ip3" { var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST)) - getnameinfo(interface.ifa_addr, socklen_t(interface.ifa_addr.pointee.sa_len), - &hostname, socklen_t(hostname.count), - nil, socklen_t(0), NI_NUMERICHOST) + getnameinfo( + interface.ifa_addr, + socklen_t(interface.ifa_addr.pointee.sa_len), + &hostname, socklen_t(hostname.count), + nil, socklen_t(0), NI_NUMERICHOST) address = String(cString: hostname) - if (useIPv4 && addrFamily == UInt8(AF_INET)) || - (!useIPv4 && addrFamily == UInt8(AF_INET6)) { + if (useIPv4 && addrFamily == UInt8(AF_INET)) + || (!useIPv4 && addrFamily == UInt8(AF_INET6)) { if !useIPv4 { if let percentIndex = address.firstIndex(of: "%") { - address = String(address[.. 0 ? .landscapeRight : .landscapeLeft + self?.motionDeviceOrientation = + gravity.x > 0 ? .landscapeRight : .landscapeLeft } else { - self?.motionDeviceOrientation = gravity.y > 0 ? .portraitUpsideDown : .portrait + self?.motionDeviceOrientation = + gravity.y > 0 ? .portraitUpsideDown : .portrait } } } } private func handleCameraImageBuffer(_ imageBuffer: CVPixelBuffer) { - let currentOrientation: UIDeviceOrientation = motionManager.isDeviceMotionAvailable - ? motionDeviceOrientation : unlockedDeviceOrientation + let currentOrientation: UIDeviceOrientation = + motionManager.isDeviceMotionAvailable + ? motionDeviceOrientation : unlockedDeviceOrientation if currentOrientation == .portrait { analyzeFrame(imageBuffer: imageBuffer) } else { @@ -213,7 +220,9 @@ public class EnhancedSmartSelfieViewModel: ObservableObject { } } - private func publishUserInstruction(_ instruction: SelfieCaptureInstruction?) { + private func publishUserInstruction( + _ instruction: SelfieCaptureInstruction? + ) { if self.userInstruction != instruction { self.userInstruction = instruction self.resetGuideAnimationDelayTimer() @@ -256,9 +265,12 @@ extension EnhancedSmartSelfieViewModel { livenessImages = [] selfieCaptureState = .capturingSelfie failureReason = nil + resetSelfieCaptureMetadata() } - private func handleWindowSizeChanged(to rect: CGSize, edgeInsets: EdgeInsets) { + private func handleWindowSizeChanged( + to rect: CGSize, edgeInsets: EdgeInsets + ) { let topPadding: CGFloat = edgeInsets.top + 100 faceLayoutGuideFrame = CGRect( x: (rect.width / 2) - faceLayoutGuideFrame.width / 2, @@ -282,7 +294,8 @@ extension EnhancedSmartSelfieViewModel { throw SmileIDError.unknown("Error resizing selfie image") } self.selfieImage = flipImageForPreview(uiImage) - self.selfieImageURL = try LocalStorage.createSelfieFile(jobId: jobId, selfieFile: imageData) + self.selfieImageURL = try LocalStorage.createSelfieFile( + jobId: jobId, selfieFile: imageData) } catch { handleError(error) } @@ -291,7 +304,8 @@ extension EnhancedSmartSelfieViewModel { private func flipImageForPreview(_ image: UIImage) -> UIImage? { guard let cgImage = image.cgImage else { return nil } - let contextSize = CGSize(width: image.size.width, height: image.size.height) + let contextSize = CGSize( + width: image.size.width, height: image.size.height) UIGraphicsBeginImageContextWithOptions(contextSize, false, 1.0) defer { UIGraphicsEndImageContext() @@ -310,7 +324,8 @@ extension EnhancedSmartSelfieViewModel { context.draw( cgImage, in: CGRect( - x: -image.size.width / 2, y: -image.size.height / 2, width: image.size.width, height: image.size.height) + x: -image.size.width / 2, y: -image.size.height / 2, + width: image.size.width, height: image.size.height) ) // Get the new UIImage from the context @@ -330,7 +345,8 @@ extension EnhancedSmartSelfieViewModel { else { throw SmileIDError.unknown("Error resizing liveness image") } - let imageUrl = try LocalStorage.createLivenessFile(jobId: jobId, livenessFile: imageData) + let imageUrl = try LocalStorage.createLivenessFile( + jobId: jobId, livenessFile: imageData) livenessImages.append(imageUrl) } catch { handleError(error) @@ -352,7 +368,8 @@ extension EnhancedSmartSelfieViewModel { } private func openSettings() { - guard let settingsURL = URL(string: UIApplication.openSettingsURLString) else { return } + guard let settingsURL = URL(string: UIApplication.openSettingsURLString) + else { return } UIApplication.shared.open(settingsURL) } @@ -392,7 +409,9 @@ extension EnhancedSmartSelfieViewModel: FaceDetectorResultDelegate { } } - func faceDetector(_ detector: EnhancedFaceDetector, didFailWithError error: Error) { + func faceDetector( + _ detector: EnhancedFaceDetector, didFailWithError error: Error + ) { DispatchQueue.main.async { self.publishUserInstruction(.headInFrame) } @@ -421,7 +440,8 @@ extension EnhancedSmartSelfieViewModel: LivenessCheckManagerDelegate { private func captureNextFrame(capturedFrames: Int) { let maxFrames = LivenessTask.numberOfFramesToCapture guard capturedFrames < maxFrames, - let currentFrame = currentFrameBuffer else { + let currentFrame = currentFrameBuffer + else { return } @@ -463,7 +483,7 @@ extension EnhancedSmartSelfieViewModel: LivenessCheckManagerDelegate { extension EnhancedSmartSelfieViewModel: SelfieSubmissionDelegate { public func submitJob() async throws { // Add metadata before submission - addSelfieCaptureDurationMetaData() + addSelfieCaptureMetaData() if skipApiSubmission { // Skip API submission and update processing state to success @@ -486,17 +506,38 @@ extension EnhancedSmartSelfieViewModel: SelfieSubmissionDelegate { try await submissionManager.submitJob(failureReason: self.failureReason) } - private func addSelfieCaptureDurationMetaData() { + private func addSelfieCaptureMetaData() { + localMetadata.addMetadata( + Metadatum.SelfieCaptureDuration( + duration: metadataTimerStart.elapsedTime()) + ) localMetadata.addMetadata( - Metadatum.SelfieCaptureDuration(duration: metadataTimerStart.elapsedTime())) + Metadatum.ActiveLivenessType(livenessType: LivenessType.headPose) + ) + localMetadata.addMetadata( + Metadatum( + name: "camera_name", + value: cameraManager.cameraName ?? "Unknown Camera Name" + ) + ) + } + + private func resetSelfieCaptureMetadata() { + localMetadata.metadata.removeAllOfType( + Metadatum.SelfieCaptureDuration.self) + localMetadata.metadata.removeAllOfType( + Metadatum.ActiveLivenessType.self) } public func onFinished(callback: SmartSelfieResultDelegate) { if let selfieImageURL = selfieImageURL, let selfiePath = getRelativePath(from: selfieImageURL), livenessImages.count == numLivenessImages, - !livenessImages.contains(where: { getRelativePath(from: $0) == nil }) { - let livenessImagesPaths = livenessImages.compactMap { getRelativePath(from: $0) } + !livenessImages.contains(where: { getRelativePath(from: $0) == nil } + ) { + let livenessImagesPaths = livenessImages.compactMap { + getRelativePath(from: $0) + } callback.didSucceed( selfieImage: selfiePath, diff --git a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift index 984212df3..cd2451694 100644 --- a/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift +++ b/Sources/SmileID/Classes/SelfieCapture/SelfieViewModel.swift @@ -13,9 +13,9 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { private let minFaceAreaThreshold = 0.125 private let maxFaceAreaThreshold = 0.25 private let faceRotationThreshold = 0.03 - private let faceRollThreshold = 0.025 // roll has a smaller range than yaw + private let faceRollThreshold = 0.025 // roll has a smaller range than yaw private let numLivenessImages = 7 - private let numTotalSteps = 8 // numLivenessImages + 1 selfie image + private let numTotalSteps = 8 // numLivenessImages + 1 selfie image private let livenessImageSize = 320 private let selfieImageSize = 640 @@ -35,14 +35,18 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { var previousHeadPitch = Double.infinity var previousHeadYaw = Double.infinity var isSmiling = false - var currentlyUsingArKit: Bool { ARFaceTrackingConfiguration.isSupported && !useBackCamera } + var currentlyUsingArKit: Bool { + ARFaceTrackingConfiguration.isSupported && !useBackCamera + } var selfieImage: URL? var livenessImages: [URL] = [] var apiResponse: SmartSelfieResponse? var error: Error? - private let arKitFramePublisher = PassthroughSubject() + private let arKitFramePublisher = PassthroughSubject< + CVPixelBuffer?, Never + >() private var subscribers = Set() // UI Properties @@ -90,7 +94,10 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { cameraManager.sampleBufferPublisher .merge(with: arKitFramePublisher) - .throttle(for: 0.35, scheduler: DispatchQueue.global(qos: .userInitiated), latest: true) + .throttle( + for: 0.35, scheduler: DispatchQueue.global(qos: .userInitiated), + latest: true + ) // Drop the first ~2 seconds to allow the user to settle in .dropFirst(5) .compactMap { $0 } @@ -101,8 +108,8 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { localMetadata.addMetadata( useBackCamera - ? Metadatum.SelfieImageOrigin(cameraFacing: .backCamera) - : Metadatum.SelfieImageOrigin(cameraFacing: .frontCamera) + ? Metadatum.SelfieImageOrigin(cameraFacing: .backCamera) + : Metadatum.SelfieImageOrigin(cameraFacing: .frontCamera) ) } @@ -124,18 +131,22 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { try faceDetector.detect(imageBuffer: image) { [weak self] request, error in guard let self else { return } if let error { - print("Error analyzing image: \(error.localizedDescription)") + print( + "Error analyzing image: \(error.localizedDescription)") self.error = error return } - guard let results = request.results as? [VNFaceObservation] else { + guard let results = request.results as? [VNFaceObservation] + else { print("Did not receive the expected [VNFaceObservation]") return } if results.count == 0 { - DispatchQueue.main.async { self.directive = "Instructions.UnableToDetectFace" } + DispatchQueue.main.async { + self.directive = "Instructions.UnableToDetectFace" + } // If no faces are detected for a while, reset the state if elapsedtime > noFaceResetDelay { DispatchQueue.main.async { @@ -152,7 +163,9 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { // Ensure only 1 face is in frame if results.count > 1 { - DispatchQueue.main.async { self.directive = "Instructions.MultipleFaces" } + DispatchQueue.main.async { + self.directive = "Instructions.MultipleFaces" + } return } @@ -173,31 +186,44 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { || boundingBox.maxX > maxFaceCenteredThreshold || boundingBox.maxY > maxFaceCenteredThreshold { - DispatchQueue.main.async { self.directive = "Instructions.PutFaceInOval" } + DispatchQueue.main.async { + self.directive = "Instructions.PutFaceInOval" + } return } // image's area is equal to 1. so (bbox area / image area) == bbox area let faceFillRatio = boundingBox.width * boundingBox.height if faceFillRatio < minFaceAreaThreshold { - DispatchQueue.main.async { self.directive = "Instructions.MoveCloser" } + DispatchQueue.main.async { + self.directive = "Instructions.MoveCloser" + } return } if faceFillRatio > maxFaceAreaThreshold { - DispatchQueue.main.async { self.directive = "Instructions.MoveFarther" } + DispatchQueue.main.async { + self.directive = "Instructions.MoveFarther" + } return } - if let quality = face.faceCaptureQuality, quality < faceCaptureQualityThreshold { - DispatchQueue.main.async { self.directive = "Instructions.Quality" } + if let quality = face.faceCaptureQuality, + quality < faceCaptureQualityThreshold + { + DispatchQueue.main.async { + self.directive = "Instructions.Quality" + } return } - let userNeedsToSmile = livenessImages.count > numLivenessImages / 2 + let userNeedsToSmile = + livenessImages.count > numLivenessImages / 2 DispatchQueue.main.async { - self.directive = userNeedsToSmile ? "Instructions.Smile" : "Instructions.Capturing" + self.directive = + userNeedsToSmile + ? "Instructions.Smile" : "Instructions.Capturing" } // TODO: Use mouth deformation as an alternate signal for non-ARKit capture @@ -208,36 +234,50 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { // Perform the rotation checks *after* changing directive to Capturing -- we don't // want to explicitly tell the user to move their head if !hasFaceRotatedEnough(face: face) { - print("Not enough face rotation between captures. Waiting...") + print( + "Not enough face rotation between captures. Waiting...") return } - let orientation = currentlyUsingArKit ? CGImagePropertyOrientation.right : .up + let orientation = + currentlyUsingArKit ? CGImagePropertyOrientation.right : .up lastAutoCaptureTime = Date() do { if livenessImages.count < numLivenessImages { - guard let imageData = ImageUtils.resizePixelBufferToHeight( - image, - height: livenessImageSize, - orientation: orientation - ) else { - throw SmileIDError.unknown("Error resizing liveness image") + guard + let imageData = + ImageUtils.resizePixelBufferToHeight( + image, + height: livenessImageSize, + orientation: orientation + ) + else { + throw SmileIDError.unknown( + "Error resizing liveness image") } - let imageUrl = try LocalStorage.createLivenessFile(jobId: jobId, livenessFile: imageData) + let imageUrl = try LocalStorage.createLivenessFile( + jobId: jobId, livenessFile: imageData) livenessImages.append(imageUrl) DispatchQueue.main.async { - self.captureProgress = Double(self.livenessImages.count) / Double(self.numTotalSteps) + self.captureProgress = + Double(self.livenessImages.count) + / Double(self.numTotalSteps) } } else { shouldAnalyzeImages = false - guard let imageData = ImageUtils.resizePixelBufferToHeight( - image, - height: selfieImageSize, - orientation: orientation - ) else { - throw SmileIDError.unknown("Error resizing selfie image") + guard + let imageData = + ImageUtils.resizePixelBufferToHeight( + image, + height: selfieImageSize, + orientation: orientation + ) + else { + throw SmileIDError.unknown( + "Error resizing selfie image") } - let selfieImage = try LocalStorage.createSelfieFile(jobId: jobId, selfieFile: imageData) + let selfieImage = try LocalStorage.createSelfieFile( + jobId: jobId, selfieFile: imageData) self.selfieImage = selfieImage DispatchQueue.main.async { self.captureProgress = 1 @@ -258,14 +298,16 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { } func hasFaceRotatedEnough(face: VNFaceObservation) -> Bool { - guard let roll = face.roll?.doubleValue, let yaw = face.yaw?.doubleValue else { + guard let roll = face.roll?.doubleValue, let yaw = face.yaw?.doubleValue + else { print("Roll and yaw unexpectedly nil") return true } var didPitchChange = false if #available(iOS 15, *) { if let pitch = face.pitch?.doubleValue { - didPitchChange = abs(pitch - previousHeadPitch) > faceRotationThreshold + didPitchChange = + abs(pitch - previousHeadPitch) > faceRotationThreshold } } let rollDelta = abs(roll - previousHeadRoll) @@ -277,7 +319,8 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { self.previousHeadPitch = face.pitch?.doubleValue ?? Double.infinity } - return didPitchChange || rollDelta > faceRollThreshold || yawDelta > faceRotationThreshold + return didPitchChange || rollDelta > faceRollThreshold + || yawDelta > faceRotationThreshold } func onSmiling(isSmiling: Bool) { @@ -292,7 +335,8 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { cameraManager.switchCamera(to: useBackCamera ? .back : .front) localMetadata.metadata.removeAllOfType(Metadatum.SelfieImageOrigin.self) localMetadata.addMetadata( - useBackCamera ? Metadatum.SelfieImageOrigin(cameraFacing: .backCamera) + useBackCamera + ? Metadatum.SelfieImageOrigin(cameraFacing: .backCamera) : Metadatum.SelfieImageOrigin(cameraFacing: .frontCamera)) } @@ -307,7 +351,10 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { shouldAnalyzeImages = true cleanUpSelfieCapture() localMetadata.metadata.removeAllOfType(Metadatum.SelfieImageOrigin.self) - localMetadata.metadata.removeAllOfType(Metadatum.SelfieCaptureDuration.self) + localMetadata.metadata.removeAllOfType( + Metadatum.ActiveLivenessType.self) + localMetadata.metadata.removeAllOfType( + Metadatum.SelfieCaptureDuration.self) } func cleanUpSelfieCapture() { @@ -329,7 +376,11 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { } public func submitJob() { - localMetadata.addMetadata(Metadatum.SelfieCaptureDuration(duration: metadataTimerStart.elapsedTime())) + localMetadata.addMetadata( + Metadatum.SelfieCaptureDuration( + duration: metadataTimerStart.elapsedTime())) + localMetadata.addMetadata( + Metadatum.ActiveLivenessType(livenessType: LivenessType.smile)) if skipApiSubmission { DispatchQueue.main.async { self.processingState = .success } return @@ -337,10 +388,14 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { DispatchQueue.main.async { self.processingState = .inProgress } Task { do { - guard let selfieImage, livenessImages.count == numLivenessImages else { + guard let selfieImage, livenessImages.count == numLivenessImages + else { throw SmileIDError.unknown("Selfie capture failed") } - let jobType = isEnroll ? JobType.smartSelfieEnrollment : JobType.smartSelfieAuthentication + let jobType = + isEnroll + ? JobType.smartSelfieEnrollment + : JobType.smartSelfieAuthentication let authRequest = AuthenticationRequest( jobType: jobType, enrollment: isEnroll, @@ -358,15 +413,18 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { partnerParams: extraPartnerParams ) } - let authResponse = try await SmileID.api.authenticate(request: authRequest) + let authResponse = try await SmileID.api.authenticate( + request: authRequest) var smartSelfieLivenessImages = [MultipartBody]() var smartSelfieImage: MultipartBody? - if let selfie = try? Data(contentsOf: selfieImage), let media = MultipartBody( - withImage: selfie, - forKey: selfieImage.lastPathComponent, - forName: selfieImage.lastPathComponent - ) { + if let selfie = try? Data(contentsOf: selfieImage), + let media = MultipartBody( + withImage: selfie, + forKey: selfieImage.lastPathComponent, + forName: selfieImage.lastPathComponent + ) + { smartSelfieImage = media } if !livenessImages.isEmpty { @@ -381,42 +439,44 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { return nil } - smartSelfieLivenessImages.append(contentsOf: livenessImageInfos.compactMap { $0 }) + smartSelfieLivenessImages.append( + contentsOf: livenessImageInfos.compactMap { $0 }) } guard let smartSelfieImage = smartSelfieImage, - smartSelfieLivenessImages.count == numLivenessImages + smartSelfieLivenessImages.count == numLivenessImages else { throw SmileIDError.unknown("Selfie capture failed") } - let response = if isEnroll { - try await SmileID.api.doSmartSelfieEnrollment( - signature: authResponse.signature, - timestamp: authResponse.timestamp, - selfieImage: smartSelfieImage, - livenessImages: smartSelfieLivenessImages, - userId: userId, - partnerParams: extraPartnerParams, - callbackUrl: SmileID.callbackUrl, - sandboxResult: nil, - allowNewEnroll: allowNewEnroll, - failureReason: nil, - metadata: localMetadata.metadata - ) - } else { - try await SmileID.api.doSmartSelfieAuthentication( - signature: authResponse.signature, - timestamp: authResponse.timestamp, - userId: userId, - selfieImage: smartSelfieImage, - livenessImages: smartSelfieLivenessImages, - partnerParams: extraPartnerParams, - callbackUrl: SmileID.callbackUrl, - sandboxResult: nil, - failureReason: nil, - metadata: localMetadata.metadata - ) - } + let response = + if isEnroll { + try await SmileID.api.doSmartSelfieEnrollment( + signature: authResponse.signature, + timestamp: authResponse.timestamp, + selfieImage: smartSelfieImage, + livenessImages: smartSelfieLivenessImages, + userId: userId, + partnerParams: extraPartnerParams, + callbackUrl: SmileID.callbackUrl, + sandboxResult: nil, + allowNewEnroll: allowNewEnroll, + failureReason: nil, + metadata: localMetadata.metadata + ) + } else { + try await SmileID.api.doSmartSelfieAuthentication( + signature: authResponse.signature, + timestamp: authResponse.timestamp, + userId: userId, + selfieImage: smartSelfieImage, + livenessImages: smartSelfieLivenessImages, + partnerParams: extraPartnerParams, + callbackUrl: SmileID.callbackUrl, + sandboxResult: nil, + failureReason: nil, + metadata: localMetadata.metadata + ) + } apiResponse = response do { try LocalStorage.moveToSubmittedJobs(jobId: self.jobId) @@ -425,11 +485,12 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { fileType: FileType.selfie, submitted: true ) - self.livenessImages = try LocalStorage.getFilesByType( - jobId: jobId, - fileType: FileType.liveness, - submitted: true - ) ?? [] + self.livenessImages = + try LocalStorage.getFilesByType( + jobId: jobId, + fileType: FileType.liveness, + submitted: true + ) ?? [] } catch { print("Error moving job to submitted directory: \(error)") self.error = error @@ -447,25 +508,29 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { fileType: FileType.selfie, submitted: true ) - self.livenessImages = try LocalStorage.getFilesByType( - jobId: jobId, - fileType: FileType.liveness, - submitted: true - ) ?? [] + self.livenessImages = + try LocalStorage.getFilesByType( + jobId: jobId, + fileType: FileType.liveness, + submitted: true + ) ?? [] } } catch { print("Error moving job to submitted directory: \(error)") self.error = error return } - if SmileID.allowOfflineMode, SmileIDError.isNetworkFailure(error: error) { + if SmileID.allowOfflineMode, + SmileIDError.isNetworkFailure(error: error) + { DispatchQueue.main.async { self.errorMessageRes = "Offline.Message" self.processingState = .success } } else { print("Error submitting job: \(error)") - let (errorMessageRes, errorMessage) = toErrorMessage(error: error) + let (errorMessageRes, errorMessage) = toErrorMessage( + error: error) self.error = error self.errorMessageRes = errorMessageRes self.errorMessage = errorMessage @@ -481,11 +546,14 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { public func onFinished(callback: SmartSelfieResultDelegate) { if let selfieImage = selfieImage, - let selfiePath = getRelativePath(from: selfieImage), - livenessImages.count == numLivenessImages, - !livenessImages.contains(where: { getRelativePath(from: $0) == nil }) + let selfiePath = getRelativePath(from: selfieImage), + livenessImages.count == numLivenessImages, + !livenessImages.contains(where: { getRelativePath(from: $0) == nil } + ) { - let livenessImagesPaths = livenessImages.compactMap { getRelativePath(from: $0) } + let livenessImagesPaths = livenessImages.compactMap { + getRelativePath(from: $0) + } callback.didSucceed( selfieImage: selfiePath, @@ -500,7 +568,8 @@ public class SelfieViewModel: ObservableObject, ARKitSmileDelegate { } func openSettings() { - guard let settingsURL = URL(string: UIApplication.openSettingsURLString) else { return } + guard let settingsURL = URL(string: UIApplication.openSettingsURLString) + else { return } UIApplication.shared.open(settingsURL) } } From 2f1268dfb75292a803def59d1f066e3b7b534930 Mon Sep 17 00:00:00 2001 From: Tobi Omotayo Date: Fri, 13 Dec 2024 16:29:32 +0100 Subject: [PATCH 23/23] update changelog. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a91f037f1..e156661d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Unreleased * Fixed missing idType on Document Verification Jobs +* Introduce screens for the new Enhanced Selfie Capture Enrollment and Authentication Products. ## 10.2.17