From 914def7ce69286d361fdd3a4df0221f7d5df0d7a Mon Sep 17 00:00:00 2001 From: mparadina Date: Wed, 3 Apr 2024 13:05:32 +0200 Subject: [PATCH 01/16] 6.6 release --- BlinkID/index.js | 42 ++ BlinkID/overlays/blinkidOverlays.js | 48 +- .../recognizers/blinkIdMultiSideRecognizer.js | 18 + .../blinkIdSingleSideRecognizer.js | 10 + .../blinkid/reactnative/MicroblinkModule.java | 136 ++++++ .../BlinkIdOverlaySettingsSerialization.java | 10 + ...inkIdMultiSideRecognizerSerialization.java | 2 + ...nkIdSingleSideRecognizerSerialization.java | 2 + .../project.pbxproj | 414 +++++++++--------- .../MicroblinkModule/MBBlinkIDModule.m | 186 +++++++- .../MBBlinkIDSerializationUtils.h | 6 +- .../MBBlinkIDSerializationUtils.m | 131 ++++-- .../MicroblinkModule/MBSerializationUtils.h | 5 +- .../MicroblinkModule/MBSerializationUtils.m | 52 +-- .../MBBlinkIdOverlaySettingsSerialization.m | 14 + .../MBBlinkIdMultiSideRecognizerWrapper.m | 56 +-- .../MBBlinkIdSingleSideRecognizerWrapper.m | 56 +-- .../Wrappers/MBIdBarcodeRecognizerWrapper.m | 6 +- .../MBUsdlCombinedRecognizerWrapper.m | 6 +- .../Wrappers/MBUsdlRecognizerWrapper.m | 6 +- BlinkID/types.js | 15 +- 21 files changed, 815 insertions(+), 406 deletions(-) diff --git a/BlinkID/index.js b/BlinkID/index.js index ef769e5..03d5f73 100644 --- a/BlinkID/index.js +++ b/BlinkID/index.js @@ -66,6 +66,48 @@ class BlinkIDWrapper { return []; } } + + async scanWithDirectApi(recognizerCollection, frontImage, backImage, license) { + try { + var licenseObject = license; + if (typeof license === 'string' || license instanceof String) { + licenseObject = { licenseKey: license }; + } + + var frontImageObject = frontImage; + if (typeof frontImage === 'string' || frontImage instanceof String) { + frontImageObject = { frontImage: frontImage }; + } + + var backImageObject = backImage; + if (typeof backImage === 'string' || backImage instanceof String) { + backImageObject = { backImage: backImage }; + } + + const nativeResults = await BlinkIDNative.scanWithDirectApi(recognizerCollection, frontImageObject, backImageObject, licenseObject); + if (nativeResults.length != recognizerCollection.recognizerArray.length) { + console.log("INTERNAL ERROR: native plugin returned wrong number of results!"); + return []; + } else { + let results = []; + for (let i = 0; i < nativeResults.length; ++i) { + // native plugin must ensure types match + // recognizerCollection.recognizerArray[i].result = recognizerCollection.recognizerArray[i].createResultFromNative(nativeResults[i]); + + // unlike Cordova, ReactNative does not allow mutation of user-provided recognizers, so we need to + // return results and let user handle them manually. + let result = recognizerCollection.recognizerArray[i].createResultFromNative(nativeResults[i]); + if (result.resultState != RecognizerResultState.empty) { + results.push(result); + } + } + return results; + } + } catch (error) { + console.log(error); + return []; + } + } } export var BlinkID = new BlinkIDWrapper(); diff --git a/BlinkID/overlays/blinkidOverlays.js b/BlinkID/overlays/blinkidOverlays.js index d5a4be1..22c4689 100644 --- a/BlinkID/overlays/blinkidOverlays.js +++ b/BlinkID/overlays/blinkidOverlays.js @@ -80,11 +80,20 @@ export class BlinkIdOverlaySettings extends OverlaySettings { */ this.requireDocumentSidesDataMatch = true; - /** - * Language of UI. + /** + * If default overlay contains textual information, text will be localized to this language. Otherwise device langauge will be used + * + * example: "en" */ this.language = null; + /** + * Used with language variable, it defines the country locale + * + * example: "US" to use "en_US" on Android and en-US on iOS + */ + this.country = null; + /** * Defines whether Document Not Supported dialog will be displayed in UI. * @@ -102,30 +111,31 @@ export class BlinkIdOverlaySettings extends OverlaySettings { /** * Option to configure missing mandatory fields feedback during scanning. If disabled, general message is presented. * - * Default: true + * Default: true */ this.showMandatoryFieldsMissing = true; + /** - * Option to configure back side scanning timeout. - * - * Default: 17000 + * Option to configure back side scanning timeout. + * + * Default: 17000 */ this.backSideScanningTimeoutMilliseconds = 17000; - /** + /** * Message that is shown while scanning the barcode. * If null, default value will be used. - */ - this.scanBarcodeText = null; + */ + this.scanBarcodeText = null; /** - * Instructions for the user to move the document from the edge. - * If null, default value will be used. + * Instructions for the user to move the document from the edge. + * If null, default value will be used. */ this.errorDocumentTooCloseToEdge = null; /** - * String: title of the dialog which is shown when the data on the document is not matching. + * String: title of the dialog which is shown when the data on the document is not matching. * If null, default value will be used. */ this.showOnboardingInfo = true; @@ -143,6 +153,20 @@ export class BlinkIdOverlaySettings extends OverlaySettings { * Default: 12000 */ this.onboardingButtonTooltipDelay = 12000; + + /** + * Defines whether torch button used for turning the flashlight on and off is shown on the screen during the scanning session. + * + * Default: true + */ + this.showTorchButton = true; + + /** + * Defines whether exit (cancel) button used for cancelling the scan is shown on the screen during the scanning session. + * + * Default: true + */ + this.showCancelButton = true; } } diff --git a/BlinkID/recognizers/blinkIdMultiSideRecognizer.js b/BlinkID/recognizers/blinkIdMultiSideRecognizer.js index 168b335..ebd81a7 100644 --- a/BlinkID/recognizers/blinkIdMultiSideRecognizer.js +++ b/BlinkID/recognizers/blinkIdMultiSideRecognizer.js @@ -88,6 +88,11 @@ export class BlinkIdMultiSideRecognizerResult extends RecognizerResult { */ this.barcodeResult = nativeResult.barcodeResult; + /** + * The blood type of the document owner. + */ + this.bloodType = nativeResult.bloodType; + /** * The classification information. */ @@ -123,6 +128,14 @@ export class BlinkIdMultiSideRecognizerResult extends RecognizerResult { */ this.documentAdditionalNumber = nativeResult.documentAdditionalNumber; + /** + * Returns DataMatchStateSuccess if data from scanned parts/sides of the document match, + * DataMatchStateFailed otherwise. For example if date of expiry is scanned from the front and back side + * of the document and values do not match, this method will return DataMatchStateFailed. Result will + * be DataMatchStateSuccess only if scanned values for all fields that are compared are the same. + */ + this.documentDataMatch = nativeResult.documentDataMatch; + /** * The document number. */ @@ -310,6 +323,11 @@ export class BlinkIdMultiSideRecognizerResult extends RecognizerResult { */ this.signatureImage = nativeResult.signatureImage; + /** + * The sponsor of the document owner. + */ + this.sponsor = nativeResult.sponsor; + } } diff --git a/BlinkID/recognizers/blinkIdSingleSideRecognizer.js b/BlinkID/recognizers/blinkIdSingleSideRecognizer.js index 6e6ea74..1ca0fd3 100644 --- a/BlinkID/recognizers/blinkIdSingleSideRecognizer.js +++ b/BlinkID/recognizers/blinkIdSingleSideRecognizer.js @@ -68,6 +68,11 @@ export class BlinkIdSingleSideRecognizerResult extends RecognizerResult { */ this.barcodeResult = nativeResult.barcodeResult; + /** + * The blood type of the document owner. + */ + this.bloodType = nativeResult.bloodType; + /** * The raw camera frame. */ @@ -259,6 +264,11 @@ export class BlinkIdSingleSideRecognizerResult extends RecognizerResult { */ this.signatureImage = nativeResult.signatureImage; + /** + * The sponsor of the document owner. + */ + this.sponsor = nativeResult.sponsor; + /** * Defines the data extracted from the visual inspection zone */ diff --git a/BlinkID/src/android/src/main/java/com/microblink/blinkid/reactnative/MicroblinkModule.java b/BlinkID/src/android/src/main/java/com/microblink/blinkid/reactnative/MicroblinkModule.java index c2b0658..e0dc09b 100644 --- a/BlinkID/src/android/src/main/java/com/microblink/blinkid/reactnative/MicroblinkModule.java +++ b/BlinkID/src/android/src/main/java/com/microblink/blinkid/reactnative/MicroblinkModule.java @@ -2,6 +2,10 @@ import android.app.Activity; import android.content.Intent; +import androidx.annotation.NonNull; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.util.Base64; import com.facebook.react.bridge.ActivityEventListener; import com.facebook.react.bridge.BaseActivityEventListener; @@ -20,6 +24,13 @@ import com.microblink.blinkid.reactnative.overlays.OverlaySettingsSerializers; import com.microblink.blinkid.uisettings.ActivityRunner; import com.microblink.blinkid.locale.LanguageUtils; +import com.microblink.blinkid.directApi.DirectApiErrorListener; +import com.microblink.blinkid.directApi.RecognizerRunner; +import com.microblink.blinkid.hardware.orientation.Orientation; +import com.microblink.blinkid.metadata.MetadataCallbacks; +import com.microblink.blinkid.metadata.recognition.FirstSideRecognitionCallback; +import com.microblink.blinkid.recognition.RecognitionSuccessType; +import com.microblink.blinkid.view.recognition.ScanResultListener; import com.microblink.blinkid.uisettings.UISettings; import com.microblink.blinkid.reactnative.recognizers.RecognizerSerializers; @@ -37,6 +48,8 @@ public class MicroblinkModule extends ReactContextBaseJavaModule { private static final String PARAM_LICENSE_KEY = "licenseKey"; private static final String PARAM_LICENSEE = "licensee"; private static final String PARAM_SHOW_TRIAL_LICENSE_WARNING = "showTrialLicenseKeyWarning"; + private static final String PARAM_FRONT_IMAGE = "frontImage"; + private static final String PARAM_BACK_IMAGE = "backImage"; /** * Request code for scan activity @@ -45,6 +58,8 @@ public class MicroblinkModule extends ReactContextBaseJavaModule { private Promise mScanPromise; private RecognizerBundle mRecognizerBundle; + private RecognizerRunner mRecognizerRunner; + private boolean mFirstSideScanned = false; public MicroblinkModule(ReactApplicationContext reactContext) { super(reactContext); @@ -71,6 +86,70 @@ public void scanWithCamera(ReadableMap jsonOverlaySettings, ReadableMap jsonReco ActivityRunner.startActivityForResult(getCurrentActivity(), REQUEST_CODE, overlaySettings); } + @ReactMethod + private void scanWithDirectApi(ReadableMap jsonRecognizerCollection, ReadableMap frontImage, ReadableMap backImage, ReadableMap license, Promise promise) { + //DirectAPI processing + mScanPromise = promise; + prepareScanning(license, promise); + + ScanResultListener mScanResultListenerBackSide = new ScanResultListener() { + @Override + public void onScanningDone(@NonNull RecognitionSuccessType recognitionSuccessType) { + mFirstSideScanned = false; + handleDirectApiResult(recognitionSuccessType); + } + @Override + public void onUnrecoverableError(@NonNull Throwable throwable) { + promise.reject(throwable); + } + }; + + FirstSideRecognitionCallback mFirstSideRecognitionCallback = new FirstSideRecognitionCallback() { + @Override + public void onFirstSideRecognitionFinished() { + mFirstSideScanned = true; + } + }; + + ScanResultListener mScanResultListenerFrontSide = new ScanResultListener() { + @Override + public void onScanningDone(@NonNull RecognitionSuccessType recognitionSuccessType) { + if (mFirstSideScanned == true) { + //multiside recognizer used + try { + if (backImage != null) { + processImage(backImage.getString(PARAM_BACK_IMAGE), mScanResultListenerBackSide); + } else if (recognitionSuccessType != RecognitionSuccessType.UNSUCCESSFUL) { + handleDirectApiResult(recognitionSuccessType); + } else { + handleDirectApiError("Backside image is empty and could not read the information from the front side!", promise); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } else if (mFirstSideScanned == false && recognitionSuccessType != RecognitionSuccessType.UNSUCCESSFUL){ + //singleside recognizer used + handleDirectApiResult(recognitionSuccessType); + } else { + mFirstSideScanned = false; + handleDirectApiError("Could not extract the data with DirectAPI!", promise); + } + } + @Override + public void onUnrecoverableError(@NonNull Throwable throwable) { + promise.reject(throwable); + } + }; + + setupRecognizerRunner(jsonRecognizerCollection, mFirstSideRecognitionCallback, promise); + + if (frontImage != null) { + processImage(frontImage.getString(PARAM_FRONT_IMAGE), mScanResultListenerFrontSide); + } else { + handleDirectApiError("First side image is empty!", promise); + } + } + private void prepareScanning(ReadableMap license, Promise promise) { Activity currentActivity = getCurrentActivity(); if (currentActivity == null) { @@ -96,6 +175,63 @@ private void prepareScanning(ReadableMap license, Promise promise) { setLicense(licenseKey, licensee, showTrialLicenseKeyWarning); } + private void setupRecognizerRunner(ReadableMap jsonRecognizerCollection, FirstSideRecognitionCallback mFirstSideRecognitionCallback, Promise promise) { + if (mRecognizerRunner != null) { + mRecognizerRunner.resetRecognitionState(true); + } else { + mRecognizerBundle = RecognizerSerializers.INSTANCE.deserializeRecognizerCollection(jsonRecognizerCollection); + try { + mRecognizerRunner = RecognizerRunner.getSingletonInstance(); + } catch (Exception e) { + handleDirectApiError("DirectAPI not support: " + e.getMessage(), promise); + } + + MetadataCallbacks metadataCallbacks = new MetadataCallbacks(); + metadataCallbacks.setFirstSideRecognitionCallback(mFirstSideRecognitionCallback); + mRecognizerRunner.setMetadataCallbacks(metadataCallbacks); + mRecognizerRunner.initialize(getCurrentActivity(), mRecognizerBundle, new DirectApiErrorListener() { + @Override + public void onRecognizerError(@NonNull Throwable throwable) { + handleDirectApiError("Failed to initialize recognizer with DirectAPI: " + throwable.getMessage(), promise); + } + }); + } + } + + private void processImage(String base64Image, ScanResultListener scanResultListener) { + Bitmap image = base64ToBitmap(base64Image); + if (image != null) { + mRecognizerRunner.recognizeBitmap( + base64ToBitmap(base64Image), + Orientation.ORIENTATION_LANDSCAPE_RIGHT, + scanResultListener + ); + } else { + handleDirectApiError("Could not decode the Base64 image!", mScanPromise); + } + } + + private void handleDirectApiResult(RecognitionSuccessType recognitionSuccessType) { + if (recognitionSuccessType != RecognitionSuccessType.UNSUCCESSFUL) { + WritableArray resultList = RecognizerSerializers.INSTANCE.serializeRecognizerResults(mRecognizerBundle.getRecognizers()); + mScanPromise.resolve(resultList); + } else { + handleDirectApiError("Unexpected error with DirectAPI scanning", mScanPromise); + } + } + + private void handleDirectApiError(String errorMessage, Promise promise) { + promise.reject(errorMessage); + if (mRecognizerRunner != null) { + mRecognizerRunner.resetRecognitionState(true); + } + } + + private Bitmap base64ToBitmap(String base64String) { + byte[] decodedBytes = Base64.decode(base64String, Base64.DEFAULT); + return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length); + } + private void setLicense( String licenseKey, String licensee, Boolean showTrialLicenseKeyWarning ) { if (showTrialLicenseKeyWarning != null) { MicroblinkSDK.setShowTrialLicenseWarning(showTrialLicenseKeyWarning); diff --git a/BlinkID/src/android/src/main/java/com/microblink/blinkid/reactnative/overlays/serialization/BlinkIdOverlaySettingsSerialization.java b/BlinkID/src/android/src/main/java/com/microblink/blinkid/reactnative/overlays/serialization/BlinkIdOverlaySettingsSerialization.java index 937276c..1a1a8bd 100644 --- a/BlinkID/src/android/src/main/java/com/microblink/blinkid/reactnative/overlays/serialization/BlinkIdOverlaySettingsSerialization.java +++ b/BlinkID/src/android/src/main/java/com/microblink/blinkid/reactnative/overlays/serialization/BlinkIdOverlaySettingsSerialization.java @@ -55,6 +55,16 @@ public UISettings createUISettings(Context context, ReadableMap jsonUISettings, settings.setShowIntroductionDialog(showIntroductionDialog); } + Boolean showTorchButton = getBooleanFromMap(jsonUISettings, "showTorchButton"); + if (showTorchButton != null) { + settings.setShowTorchButton(showTorchButton); + } + + Boolean showCancelButton = getBooleanFromMap(jsonUISettings, "showCancelButton"); + if (showCancelButton != null) { + settings.setShowCancelButton(showCancelButton); + } + if (jsonUISettings.hasKey("onboardingButtonTooltipDelay")) { settings.setShowTooltipTimeIntervalMs(jsonUISettings.getInt("onboardingButtonTooltipDelay")); } diff --git a/BlinkID/src/android/src/main/java/com/microblink/blinkid/reactnative/recognizers/serialization/BlinkIdMultiSideRecognizerSerialization.java b/BlinkID/src/android/src/main/java/com/microblink/blinkid/reactnative/recognizers/serialization/BlinkIdMultiSideRecognizerSerialization.java index 23a2705..38a82c2 100644 --- a/BlinkID/src/android/src/main/java/com/microblink/blinkid/reactnative/recognizers/serialization/BlinkIdMultiSideRecognizerSerialization.java +++ b/BlinkID/src/android/src/main/java/com/microblink/blinkid/reactnative/recognizers/serialization/BlinkIdMultiSideRecognizerSerialization.java @@ -91,6 +91,7 @@ public WritableMap serializeResult(Recognizer recognizer) { jsonResult.putMap("backVizResult", BlinkIDSerializationUtils.serializeVizResult(result.getBackVizResult())); jsonResult.putString("barcodeCameraFrame", SerializationUtils.encodeImageBase64(result.getBarcodeCameraFrame())); jsonResult.putMap("barcodeResult", BlinkIDSerializationUtils.serializeBarcodeResult(result.getBarcodeResult())); + jsonResult.putMap("bloodType", BlinkIDSerializationUtils.serializeStringResult(result.getBloodType())); jsonResult.putMap("classInfo", BlinkIDSerializationUtils.serializeClassInfo(result.getClassInfo())); jsonResult.putMap("dataMatch", BlinkIDSerializationUtils.serializeDataMatchResult(result.getDataMatch())); jsonResult.putMap("dateOfBirth", BlinkIDSerializationUtils.serializeDateResult(result.getDateOfBirth())); @@ -134,6 +135,7 @@ public WritableMap serializeResult(Recognizer recognizer) { jsonResult.putBoolean("scanningFirstSideDone", result.isScanningFirstSideDone()); jsonResult.putMap("sex", BlinkIDSerializationUtils.serializeStringResult(result.getSex())); jsonResult.putString("signatureImage", SerializationUtils.encodeImageBase64(result.getSignatureImage())); + jsonResult.putMap("sponsor", BlinkIDSerializationUtils.serializeStringResult(result.getSponsor())); return jsonResult; } diff --git a/BlinkID/src/android/src/main/java/com/microblink/blinkid/reactnative/recognizers/serialization/BlinkIdSingleSideRecognizerSerialization.java b/BlinkID/src/android/src/main/java/com/microblink/blinkid/reactnative/recognizers/serialization/BlinkIdSingleSideRecognizerSerialization.java index 0ea5199..8f2b26a 100644 --- a/BlinkID/src/android/src/main/java/com/microblink/blinkid/reactnative/recognizers/serialization/BlinkIdSingleSideRecognizerSerialization.java +++ b/BlinkID/src/android/src/main/java/com/microblink/blinkid/reactnative/recognizers/serialization/BlinkIdSingleSideRecognizerSerialization.java @@ -78,6 +78,7 @@ public WritableMap serializeResult(Recognizer recognizer) { jsonResult.putInt("age", result.getAge()); jsonResult.putString("barcodeCameraFrame", SerializationUtils.encodeImageBase64(result.getBarcodeCameraFrame())); jsonResult.putMap("barcodeResult", BlinkIDSerializationUtils.serializeBarcodeResult(result.getBarcodeResult())); + jsonResult.putMap("bloodType", BlinkIDSerializationUtils.serializeStringResult(result.getBloodType())); jsonResult.putString("cameraFrame", SerializationUtils.encodeImageBase64(result.getCameraFrame())); jsonResult.putMap("classInfo", BlinkIDSerializationUtils.serializeClassInfo(result.getClassInfo())); jsonResult.putMap("dateOfBirth", BlinkIDSerializationUtils.serializeDateResult(result.getDateOfBirth())); @@ -115,6 +116,7 @@ public WritableMap serializeResult(Recognizer recognizer) { jsonResult.putMap("residentialStatus", BlinkIDSerializationUtils.serializeStringResult(result.getResidentialStatus())); jsonResult.putMap("sex", BlinkIDSerializationUtils.serializeStringResult(result.getSex())); jsonResult.putString("signatureImage", SerializationUtils.encodeImageBase64(result.getSignatureImage())); + jsonResult.putMap("sponsor", BlinkIDSerializationUtils.serializeStringResult(result.getSponsor())); jsonResult.putMap("vizResult", BlinkIDSerializationUtils.serializeVizResult(result.getVizResult())); return jsonResult; } diff --git a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule.xcodeproj/project.pbxproj b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule.xcodeproj/project.pbxproj index c5f9287..a4fc695 100644 --- a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule.xcodeproj/project.pbxproj +++ b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule.xcodeproj/project.pbxproj @@ -7,56 +7,56 @@ objects = { /* Begin PBXBuildFile section */ - 048A409E8A605D420974E19B /* MBBlinkIDModule.h in Headers */ = {isa = PBXBuildFile; fileRef = D930451FA02EC5813CC0D175 /* MBBlinkIDModule.h */; }; - 05B74780B6737DB12AFDB3FF /* MBDocumentOverlaySettingsSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = C90E47B6B466CA3CE156C379 /* MBDocumentOverlaySettingsSerialization.h */; }; - 06AB4C3D8E55F650AA1094BC /* MBSuccessFrameGrabberRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = A5754D568643018665C2782D /* MBSuccessFrameGrabberRecognizerWrapper.m */; }; - 0B06486E936846D6329264FC /* MBPassportRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = A5C24D63B05AEB08ADC43FFA /* MBPassportRecognizerWrapper.m */; }; - 17604F6C90E6C20BEEC4A3BA /* MBBlinkIdOverlaySettingsSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = FDBA46549C8B9BB23B30D302 /* MBBlinkIdOverlaySettingsSerialization.h */; }; - 18334860BA9B2E49178E24E8 /* MBBlinkIdOverlaySettingsSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F94C5D894E685FA3B70D67 /* MBBlinkIdOverlaySettingsSerialization.m */; }; - 1EEC47FAB461DA8C6D357ADB /* MBIdBarcodeRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 45214122BECD1DA4BB26D08F /* MBIdBarcodeRecognizerWrapper.m */; }; - 24E14349B108D1BA66D4BFAD /* MBOverlaySerializationUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C33346ADA5996939329AAF7E /* MBOverlaySerializationUtils.h */; }; - 29454BCFBE90E765BB949C83 /* MBVisaRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = D28441BC9337242B586EACA4 /* MBVisaRecognizerWrapper.m */; }; - 2C5F4F158A03BD1D1F4E302E /* MBRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 76174BD69AC1EE5EF22DC917 /* MBRecognizerWrapper.m */; }; - 3E4B4221BF527A6D74A2432C /* MBOverlaySettingsSerializers.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BA747CCBECC90ECFDB43AF8 /* MBOverlaySettingsSerializers.h */; }; - 42E446879D6DEF923779703C /* MBUsdlCombinedRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = EAFF4F44BE07BB63D7D3FEF0 /* MBUsdlCombinedRecognizerWrapper.m */; }; - 480D423180B1893A57892846 /* MBPassportRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 66964889867C90EDF7CFA89E /* MBPassportRecognizerWrapper.h */; }; - 560A42D78456D63B83167BE2 /* MBVisaRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B664BF3BABA8EC3FD69177A /* MBVisaRecognizerWrapper.h */; }; - 5652492BBC574503CFCBE3D2 /* MBIdBarcodeRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 66B54D4A8FDDCBFA4C82CA03 /* MBIdBarcodeRecognizerWrapper.h */; }; - 60F74F73812E3C383672F4E2 /* MBUsdlCombinedRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 82C245DBAA5F05FE5869E5C3 /* MBUsdlCombinedRecognizerWrapper.h */; }; - 706C4F4CA5AFA3298A441FF6 /* MBBlinkIdMultiSideRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = C0204B4EAD535D57DDE731FD /* MBBlinkIdMultiSideRecognizerWrapper.m */; }; - 71814CEABAFA16151F82C1A5 /* MBCommonSerializationUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A304DF1AE6AEEEBB795FE2C /* MBCommonSerializationUtils.h */; }; - 755F4A37B442D6CFA7A1551C /* MBDocumentVerificationOverlaySettingsSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B674679AFE33DAB1E15F4EB /* MBDocumentVerificationOverlaySettingsSerialization.m */; }; - 78AF434F9444519D330E8038 /* MBRecognizerSerializers.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E9B48D78AC9CE04BA7231B5 /* MBRecognizerSerializers.m */; }; - 87A0424E8524AD6D5660C17B /* MBBlinkIDModule.m in Sources */ = {isa = PBXBuildFile; fileRef = A0084558A8AC2E4DF810FE2F /* MBBlinkIDModule.m */; }; - 8AF145D8809DB8365FF317F1 /* MBMrtdCombinedRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 64EA4E3687D7CC38EDFA7622 /* MBMrtdCombinedRecognizerWrapper.m */; }; - 8DC049989AB55ADA94155B3D /* MBMrtdRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F8674AE8A916F04DF40F39D7 /* MBMrtdRecognizerWrapper.h */; }; - 96E74583AE6D35FEF1E87F1F /* MBBlinkIDSerializationUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CC499FB074CB5465B14884 /* MBBlinkIDSerializationUtils.h */; }; - 9A3B4B05944337F6ED69A4A6 /* MBBlinkIdSingleSideRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F8434A09A64A6E6B482CE9B7 /* MBBlinkIdSingleSideRecognizerWrapper.h */; }; - 9D5943F28B4AB42FEEC75372 /* MBSerializationUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B164A48B4739735099C623C /* MBSerializationUtils.h */; }; - 9F9842DFAC134B6E48138CF9 /* MBDocumentFaceRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A2547C7B02E7BBC79270EE6 /* MBDocumentFaceRecognizerWrapper.h */; }; - A1864103913949BC38E6F446 /* MBCommonSerializationUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 84184E10A2CE6565686141CE /* MBCommonSerializationUtils.m */; }; + 0E5348189BE684A574E0BE10 /* MBBlinkIdMultiSideRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = B0464013A24AB1A8D81B84EA /* MBBlinkIdMultiSideRecognizerWrapper.h */; }; + 101E4AB086FF35CDE418F26D /* MBPassportRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = E50F4397BFCADC86BF7E5961 /* MBPassportRecognizerWrapper.m */; }; + 160B43C39FB196F05A191330 /* MBDocumentOverlaySettingsSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = E8504E10AC004B6248C04161 /* MBDocumentOverlaySettingsSerialization.m */; }; + 1B624C30B324609E4802EFBC /* MBBlinkIdSingleSideRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D034491842612AF8118660A /* MBBlinkIdSingleSideRecognizerWrapper.h */; }; + 1C004F9C8FB8C2F6A9ACAF2F /* MBCommonSerializationUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = F0C342D1826C9C61C356AB65 /* MBCommonSerializationUtils.h */; }; + 1C7A4DBB963E344365292C7F /* MBMrtdCombinedRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 36A2467F9080FBF88D4749E9 /* MBMrtdCombinedRecognizerWrapper.h */; }; + 1E0A481CA5DCD658085EE955 /* MBBlinkIDModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BF44907A5036BDD6C1412EA /* MBBlinkIDModule.m */; }; + 1E5D4CE7B366C5663240F212 /* MBMrtdRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 93C34ACF8DD9D06D76899DB9 /* MBMrtdRecognizerWrapper.m */; }; + 1FAF4FC28FF9EFD1B876395A /* MBDocumentFaceRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 94C7419297F22A9FB93A3B49 /* MBDocumentFaceRecognizerWrapper.m */; }; + 23E4483D9D91E2E7B31E8D49 /* MBDocumentFaceRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = ADFA43A38932A89E38D4AB63 /* MBDocumentFaceRecognizerWrapper.h */; }; + 24D044A58BD367D7C77772B0 /* MBUsdlCombinedRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C4F4E97919C55F8BDAE4561 /* MBUsdlCombinedRecognizerWrapper.m */; }; + 26A44EC2AFCA05AB4187C29E /* MBMrtdRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = C8F14223913C2F6B90869DA1 /* MBMrtdRecognizerWrapper.h */; }; + 2F8B4C9C8D4722B80513EAE8 /* MBBlinkIdOverlaySettingsSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = A2664B67BE6DB87A9FA3D6D4 /* MBBlinkIdOverlaySettingsSerialization.h */; }; + 3906445899CC8EF49B03E657 /* MBDocumentVerificationOverlaySettingsSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 83644A56B3F542BF3CA7EAB6 /* MBDocumentVerificationOverlaySettingsSerialization.m */; }; + 4B484A43BFB6DB766187D5E1 /* MBOverlaySettingsSerializers.h in Headers */ = {isa = PBXBuildFile; fileRef = 52034283AABBFBB82E19A608 /* MBOverlaySettingsSerializers.h */; }; + 513446688AF83003FD9621B6 /* MBDocumentOverlaySettingsSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 54644D578EE4E8E4B49E58B3 /* MBDocumentOverlaySettingsSerialization.h */; }; + 52464F3295407D1571C15B73 /* MBUsdlCombinedRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = C2E34599953465E8034FA15D /* MBUsdlCombinedRecognizerWrapper.h */; }; + 536743AAB5C2C77D11A6E695 /* MBUsdlRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0543D78B1ECB3BA8F38EE8 /* MBUsdlRecognizerWrapper.m */; }; + 53E14F4DBD85E21DFEC95783 /* MBIdBarcodeRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BBF4DDDBF1A36ACBB568160 /* MBIdBarcodeRecognizerWrapper.h */; }; + 5B3F4D8DA53A40D270F1E3A9 /* MBSerializationUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 40FC484BA891A211B28BC41B /* MBSerializationUtils.m */; }; + 5EBF4DE58F294EE1F6C7A07A /* MBVisaRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A0DF4606A4D39EF58FBECDF5 /* MBVisaRecognizerWrapper.h */; }; + 5FC345C3A99631498295C8C1 /* MBOverlaySerializationUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6438984F41BC96CE8C3CB /* MBOverlaySerializationUtils.m */; }; + 6CE04487ACB1DE3A1D5D9B1F /* MBRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = D8D1483E95F4DAB0D17E27BD /* MBRecognizerWrapper.h */; }; + 6D83401DA16D575D4925FA36 /* MBOverlayViewControllerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A4E4A52A85FEA5E1404C3D5 /* MBOverlayViewControllerDelegate.h */; }; + 7F3F48ADBAB09944812DAB3B /* MBBlinkIdSingleSideRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 710F4D769B2C68570094B4E2 /* MBBlinkIdSingleSideRecognizerWrapper.m */; }; + 8B4D4270991DE462118D9300 /* MBRecognizerSerializers.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AFC4F14A0B9642FEDD615BF /* MBRecognizerSerializers.m */; }; + 9D3A441C96000C12F5036E90 /* MBSuccessFrameGrabberRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = D35D45648913DF56877421C5 /* MBSuccessFrameGrabberRecognizerWrapper.h */; }; A27CCA401E9E5D8D00BED675 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A27CCA3A1E9E57CF00BED675 /* Accelerate.framework */; }; A27CCA421E9E5D9400BED675 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A27CCA411E9E5D9400BED675 /* CoreFoundation.framework */; }; A27CCA431E9E5D9900BED675 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A27CCA381E9E57C900BED675 /* AudioToolbox.framework */; }; A27CCA441E9E5DAE00BED675 /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A27CCA3E1E9E57DA00BED675 /* CoreMedia.framework */; }; - A66F4C4BB8B2C941DE3B2C78 /* MBOverlayViewControllerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 733A465BB6D302A8A686A871 /* MBOverlayViewControllerDelegate.h */; }; - A6E447578E057D4AF8BEE34A /* MBSerializationUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = ACF54C75A7D995BE55DE6AAC /* MBSerializationUtils.m */; }; - AE3C400CBEC317A29A6BAB05 /* MBRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F2488296CF93CC70F4DE34 /* MBRecognizerWrapper.h */; }; - B8054FD88394B04AF4547567 /* MBDocumentOverlaySettingsSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 406A4F1A8AFBEE4121C50969 /* MBDocumentOverlaySettingsSerialization.m */; }; - BCFC4B57964DE2D164C66171 /* MBSuccessFrameGrabberRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A7F04110924A96CC533C1454 /* MBSuccessFrameGrabberRecognizerWrapper.h */; }; - BDD14A1D8F740B6F60CB5D6D /* MBBlinkIdMultiSideRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B194F80B77E96BFF0C3F4BE /* MBBlinkIdMultiSideRecognizerWrapper.h */; }; - C02E44309007AD23540BD319 /* MBBlinkIdSingleSideRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = DB5848C0B10573064CA6C342 /* MBBlinkIdSingleSideRecognizerWrapper.m */; }; - C450415FA0FA29B35B8DED2D /* MBUsdlRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = AC584892A333542C7B41FBEB /* MBUsdlRecognizerWrapper.m */; }; - C82F46A8BA3559C1EFC03120 /* MBOverlaySettingsSerializers.m in Sources */ = {isa = PBXBuildFile; fileRef = E9FE4D149697A9FC5CA171C8 /* MBOverlaySettingsSerializers.m */; }; - D9F34D1188B25A53515FF836 /* MBBlinkIDSerializationUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 31AC49E387085625D8BD4964 /* MBBlinkIDSerializationUtils.m */; }; - DCB640AD91496712018FA65D /* MBDocumentFaceRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 70614708BF7AE2925EFE3C8B /* MBDocumentFaceRecognizerWrapper.m */; }; - E9A8418DB8729AB8DAE4FD7E /* MBUsdlRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A2C84750A0AF6B941E773F96 /* MBUsdlRecognizerWrapper.h */; }; - EBF046CDAED926303E35C506 /* MBMrtdRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 87074E808F2C1FDAC8009852 /* MBMrtdRecognizerWrapper.m */; }; - EE574EF787D5671AA0ACAB96 /* MBOverlayVCCreator.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FE47AAAA025003EF82C71E /* MBOverlayVCCreator.h */; }; - F09C4FFBADDB78F15088F1C1 /* MBOverlaySerializationUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 66894324B5FB95170774A6DE /* MBOverlaySerializationUtils.m */; }; - FA0B494DAE8D9833302056C6 /* MBMrtdCombinedRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = C59E4555BBB334A9042EA755 /* MBMrtdCombinedRecognizerWrapper.h */; }; - FEA14A8C8BCEF365BFD96D8F /* MBRecognizerSerializers.h in Headers */ = {isa = PBXBuildFile; fileRef = F557446290C773C80A72492D /* MBRecognizerSerializers.h */; }; - FEDF44D3B2528E38707632E1 /* MBDocumentVerificationOverlaySettingsSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 73F04DDAB5D0ED3A58B56A6A /* MBDocumentVerificationOverlaySettingsSerialization.h */; }; + A33C4A4886502DE3512DAA96 /* MBBlinkIDSerializationUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = DFF64BA89FF3B7F950471104 /* MBBlinkIDSerializationUtils.m */; }; + A95F41E4BAEF194EDFF8F5D4 /* MBBlinkIdOverlaySettingsSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 719B41D4A583324F50212DF2 /* MBBlinkIdOverlaySettingsSerialization.m */; }; + B70C4C718F57EFF61564CD09 /* MBOverlayVCCreator.h in Headers */ = {isa = PBXBuildFile; fileRef = 10384CE392252C78B8480B73 /* MBOverlayVCCreator.h */; }; + BDA348F2872BE59DAE3C5B90 /* MBOverlaySettingsSerializers.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D23440DA138B87377B4067F /* MBOverlaySettingsSerializers.m */; }; + BE95421886C8A5BD54634EB4 /* MBVisaRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E3347AEB446964D02179135 /* MBVisaRecognizerWrapper.m */; }; + CAAB45FDAD2892A4895A0468 /* MBRecognizerSerializers.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A3B417CB4FB6C46F82791E0 /* MBRecognizerSerializers.h */; }; + D0F648739E4B451726070894 /* MBBlinkIDSerializationUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D5E4B00AB24C8F2B48F99D1 /* MBBlinkIDSerializationUtils.h */; }; + D2ED49D6A6D336DF06203C37 /* MBBlinkIdMultiSideRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 868F4B6EB859D25B76159E91 /* MBBlinkIdMultiSideRecognizerWrapper.m */; }; + D57F46D1A2EF7DFE7574EB5C /* MBMrtdCombinedRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = F82C4AB3A948C0843D966539 /* MBMrtdCombinedRecognizerWrapper.m */; }; + DC414032ACB6843879410B76 /* MBIdBarcodeRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 44E34E15A810C37A79272FB6 /* MBIdBarcodeRecognizerWrapper.m */; }; + E5B442E79DA664526122C9EF /* MBRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = E1934C038DFA4B1C8849D377 /* MBRecognizerWrapper.m */; }; + E8DD4EF3A9930BDF47C1F337 /* MBSerializationUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = BCDA45CAAEF43891A797BE5B /* MBSerializationUtils.h */; }; + EF8E48ECBD65EDAD6DF7CE98 /* MBSuccessFrameGrabberRecognizerWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = D6E049B7AA32CFB5F9276935 /* MBSuccessFrameGrabberRecognizerWrapper.m */; }; + F2C8428A9FCAC91D2EA0921C /* MBDocumentVerificationOverlaySettingsSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 53114849BDA9CCDD09AEDF9E /* MBDocumentVerificationOverlaySettingsSerialization.h */; }; + F6354E9AB2D2C233C041794D /* MBUsdlRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 06DF4DD9AFA49E4F89886F3E /* MBUsdlRecognizerWrapper.h */; }; + F8B141C791525AEC4C3120E1 /* MBCommonSerializationUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FC148C58EFD08B7198A27BE /* MBCommonSerializationUtils.m */; }; + FB2F40718D89520BBD906B49 /* MBPassportRecognizerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = DB104637B0A659DFE2968977 /* MBPassportRecognizerWrapper.h */; }; + FBEA4DC294FA555FBAEBB469 /* MBOverlaySerializationUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 89FB40B2AFF9A8A367534F29 /* MBOverlaySerializationUtils.h */; }; + FDDA45ADA47DF272EDCDD962 /* MBBlinkIDModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AE44BDC9ACFEC0DBDD543C1 /* MBBlinkIDModule.h */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -72,58 +72,58 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 14F94C5D894E685FA3B70D67 /* MBBlinkIdOverlaySettingsSerialization.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBBlinkIdOverlaySettingsSerialization.m; path = MicroblinkModule/Overlays/Serialization/MBBlinkIdOverlaySettingsSerialization.m; sourceTree = ""; }; - 1A304DF1AE6AEEEBB795FE2C /* MBCommonSerializationUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBCommonSerializationUtils.h; path = MicroblinkModule/MBCommonSerializationUtils.h; sourceTree = ""; }; - 2A2547C7B02E7BBC79270EE6 /* MBDocumentFaceRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBDocumentFaceRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBDocumentFaceRecognizerWrapper.h; sourceTree = ""; }; - 31AC49E387085625D8BD4964 /* MBBlinkIDSerializationUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBBlinkIDSerializationUtils.m; path = MicroblinkModule/MBBlinkIDSerializationUtils.m; sourceTree = ""; }; - 3B664BF3BABA8EC3FD69177A /* MBVisaRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBVisaRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBVisaRecognizerWrapper.h; sourceTree = ""; }; - 406A4F1A8AFBEE4121C50969 /* MBDocumentOverlaySettingsSerialization.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBDocumentOverlaySettingsSerialization.m; path = MicroblinkModule/Overlays/Serialization/MBDocumentOverlaySettingsSerialization.m; sourceTree = ""; }; - 45214122BECD1DA4BB26D08F /* MBIdBarcodeRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBIdBarcodeRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBIdBarcodeRecognizerWrapper.m; sourceTree = ""; }; - 4B164A48B4739735099C623C /* MBSerializationUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBSerializationUtils.h; path = MicroblinkModule/MBSerializationUtils.h; sourceTree = ""; }; - 5B674679AFE33DAB1E15F4EB /* MBDocumentVerificationOverlaySettingsSerialization.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBDocumentVerificationOverlaySettingsSerialization.m; path = MicroblinkModule/Overlays/Serialization/MBDocumentVerificationOverlaySettingsSerialization.m; sourceTree = ""; }; - 64EA4E3687D7CC38EDFA7622 /* MBMrtdCombinedRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBMrtdCombinedRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBMrtdCombinedRecognizerWrapper.m; sourceTree = ""; }; - 66894324B5FB95170774A6DE /* MBOverlaySerializationUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBOverlaySerializationUtils.m; path = MicroblinkModule/Overlays/MBOverlaySerializationUtils.m; sourceTree = ""; }; - 66964889867C90EDF7CFA89E /* MBPassportRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBPassportRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBPassportRecognizerWrapper.h; sourceTree = ""; }; - 66B54D4A8FDDCBFA4C82CA03 /* MBIdBarcodeRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBIdBarcodeRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBIdBarcodeRecognizerWrapper.h; sourceTree = ""; }; - 6BA747CCBECC90ECFDB43AF8 /* MBOverlaySettingsSerializers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBOverlaySettingsSerializers.h; path = MicroblinkModule/Overlays/MBOverlaySettingsSerializers.h; sourceTree = ""; }; - 70614708BF7AE2925EFE3C8B /* MBDocumentFaceRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBDocumentFaceRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBDocumentFaceRecognizerWrapper.m; sourceTree = ""; }; - 733A465BB6D302A8A686A871 /* MBOverlayViewControllerDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBOverlayViewControllerDelegate.h; path = MicroblinkModule/Overlays/MBOverlayViewControllerDelegate.h; sourceTree = ""; }; - 73F04DDAB5D0ED3A58B56A6A /* MBDocumentVerificationOverlaySettingsSerialization.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBDocumentVerificationOverlaySettingsSerialization.h; path = MicroblinkModule/Overlays/Serialization/MBDocumentVerificationOverlaySettingsSerialization.h; sourceTree = ""; }; - 76174BD69AC1EE5EF22DC917 /* MBRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBRecognizerWrapper.m; path = MicroblinkModule/Recognizers/MBRecognizerWrapper.m; sourceTree = ""; }; - 82C245DBAA5F05FE5869E5C3 /* MBUsdlCombinedRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBUsdlCombinedRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBUsdlCombinedRecognizerWrapper.h; sourceTree = ""; }; - 83F2488296CF93CC70F4DE34 /* MBRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBRecognizerWrapper.h; path = MicroblinkModule/Recognizers/MBRecognizerWrapper.h; sourceTree = ""; }; - 84184E10A2CE6565686141CE /* MBCommonSerializationUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBCommonSerializationUtils.m; path = MicroblinkModule/MBCommonSerializationUtils.m; sourceTree = ""; }; - 87074E808F2C1FDAC8009852 /* MBMrtdRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBMrtdRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBMrtdRecognizerWrapper.m; sourceTree = ""; }; - 8B194F80B77E96BFF0C3F4BE /* MBBlinkIdMultiSideRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBBlinkIdMultiSideRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBBlinkIdMultiSideRecognizerWrapper.h; sourceTree = ""; }; - 96FE47AAAA025003EF82C71E /* MBOverlayVCCreator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBOverlayVCCreator.h; path = MicroblinkModule/Overlays/MBOverlayVCCreator.h; sourceTree = ""; }; - 9E9B48D78AC9CE04BA7231B5 /* MBRecognizerSerializers.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBRecognizerSerializers.m; path = MicroblinkModule/Recognizers/MBRecognizerSerializers.m; sourceTree = ""; }; - A0084558A8AC2E4DF810FE2F /* MBBlinkIDModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBBlinkIDModule.m; path = MicroblinkModule/MBBlinkIDModule.m; sourceTree = ""; }; + 06DF4DD9AFA49E4F89886F3E /* MBUsdlRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBUsdlRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBUsdlRecognizerWrapper.h; sourceTree = ""; }; + 0D034491842612AF8118660A /* MBBlinkIdSingleSideRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBBlinkIdSingleSideRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBBlinkIdSingleSideRecognizerWrapper.h; sourceTree = ""; }; + 0D5E4B00AB24C8F2B48F99D1 /* MBBlinkIDSerializationUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBBlinkIDSerializationUtils.h; path = MicroblinkModule/MBBlinkIDSerializationUtils.h; sourceTree = ""; }; + 0E3347AEB446964D02179135 /* MBVisaRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBVisaRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBVisaRecognizerWrapper.m; sourceTree = ""; }; + 10384CE392252C78B8480B73 /* MBOverlayVCCreator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBOverlayVCCreator.h; path = MicroblinkModule/Overlays/MBOverlayVCCreator.h; sourceTree = ""; }; + 2AFC4F14A0B9642FEDD615BF /* MBRecognizerSerializers.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBRecognizerSerializers.m; path = MicroblinkModule/Recognizers/MBRecognizerSerializers.m; sourceTree = ""; }; + 2BF44907A5036BDD6C1412EA /* MBBlinkIDModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBBlinkIDModule.m; path = MicroblinkModule/MBBlinkIDModule.m; sourceTree = ""; }; + 2C4F4E97919C55F8BDAE4561 /* MBUsdlCombinedRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBUsdlCombinedRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBUsdlCombinedRecognizerWrapper.m; sourceTree = ""; }; + 36A2467F9080FBF88D4749E9 /* MBMrtdCombinedRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBMrtdCombinedRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBMrtdCombinedRecognizerWrapper.h; sourceTree = ""; }; + 3BBF4DDDBF1A36ACBB568160 /* MBIdBarcodeRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBIdBarcodeRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBIdBarcodeRecognizerWrapper.h; sourceTree = ""; }; + 40FC484BA891A211B28BC41B /* MBSerializationUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBSerializationUtils.m; path = MicroblinkModule/MBSerializationUtils.m; sourceTree = ""; }; + 44E34E15A810C37A79272FB6 /* MBIdBarcodeRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBIdBarcodeRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBIdBarcodeRecognizerWrapper.m; sourceTree = ""; }; + 4AE44BDC9ACFEC0DBDD543C1 /* MBBlinkIDModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBBlinkIDModule.h; path = MicroblinkModule/MBBlinkIDModule.h; sourceTree = ""; }; + 4FC148C58EFD08B7198A27BE /* MBCommonSerializationUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBCommonSerializationUtils.m; path = MicroblinkModule/MBCommonSerializationUtils.m; sourceTree = ""; }; + 52034283AABBFBB82E19A608 /* MBOverlaySettingsSerializers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBOverlaySettingsSerializers.h; path = MicroblinkModule/Overlays/MBOverlaySettingsSerializers.h; sourceTree = ""; }; + 53114849BDA9CCDD09AEDF9E /* MBDocumentVerificationOverlaySettingsSerialization.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBDocumentVerificationOverlaySettingsSerialization.h; path = MicroblinkModule/Overlays/Serialization/MBDocumentVerificationOverlaySettingsSerialization.h; sourceTree = ""; }; + 54644D578EE4E8E4B49E58B3 /* MBDocumentOverlaySettingsSerialization.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBDocumentOverlaySettingsSerialization.h; path = MicroblinkModule/Overlays/Serialization/MBDocumentOverlaySettingsSerialization.h; sourceTree = ""; }; + 5A4E4A52A85FEA5E1404C3D5 /* MBOverlayViewControllerDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBOverlayViewControllerDelegate.h; path = MicroblinkModule/Overlays/MBOverlayViewControllerDelegate.h; sourceTree = ""; }; + 710F4D769B2C68570094B4E2 /* MBBlinkIdSingleSideRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBBlinkIdSingleSideRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBBlinkIdSingleSideRecognizerWrapper.m; sourceTree = ""; }; + 719B41D4A583324F50212DF2 /* MBBlinkIdOverlaySettingsSerialization.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBBlinkIdOverlaySettingsSerialization.m; path = MicroblinkModule/Overlays/Serialization/MBBlinkIdOverlaySettingsSerialization.m; sourceTree = ""; }; + 83644A56B3F542BF3CA7EAB6 /* MBDocumentVerificationOverlaySettingsSerialization.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBDocumentVerificationOverlaySettingsSerialization.m; path = MicroblinkModule/Overlays/Serialization/MBDocumentVerificationOverlaySettingsSerialization.m; sourceTree = ""; }; + 868F4B6EB859D25B76159E91 /* MBBlinkIdMultiSideRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBBlinkIdMultiSideRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBBlinkIdMultiSideRecognizerWrapper.m; sourceTree = ""; }; + 89FB40B2AFF9A8A367534F29 /* MBOverlaySerializationUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBOverlaySerializationUtils.h; path = MicroblinkModule/Overlays/MBOverlaySerializationUtils.h; sourceTree = ""; }; + 8A3B417CB4FB6C46F82791E0 /* MBRecognizerSerializers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBRecognizerSerializers.h; path = MicroblinkModule/Recognizers/MBRecognizerSerializers.h; sourceTree = ""; }; + 93C34ACF8DD9D06D76899DB9 /* MBMrtdRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBMrtdRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBMrtdRecognizerWrapper.m; sourceTree = ""; }; + 94C7419297F22A9FB93A3B49 /* MBDocumentFaceRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBDocumentFaceRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBDocumentFaceRecognizerWrapper.m; sourceTree = ""; }; + 9B0543D78B1ECB3BA8F38EE8 /* MBUsdlRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBUsdlRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBUsdlRecognizerWrapper.m; sourceTree = ""; }; + 9D23440DA138B87377B4067F /* MBOverlaySettingsSerializers.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBOverlaySettingsSerializers.m; path = MicroblinkModule/Overlays/MBOverlaySettingsSerializers.m; sourceTree = ""; }; + A0DF4606A4D39EF58FBECDF5 /* MBVisaRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBVisaRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBVisaRecognizerWrapper.h; sourceTree = ""; }; + A2664B67BE6DB87A9FA3D6D4 /* MBBlinkIdOverlaySettingsSerialization.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBBlinkIdOverlaySettingsSerialization.h; path = MicroblinkModule/Overlays/Serialization/MBBlinkIdOverlaySettingsSerialization.h; sourceTree = ""; }; A27CCA2B1E9E57A500BED675 /* libMicroblinkModule.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMicroblinkModule.a; sourceTree = BUILT_PRODUCTS_DIR; }; A27CCA381E9E57C900BED675 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; A27CCA3A1E9E57CF00BED675 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; A27CCA3C1E9E57D600BED675 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; A27CCA3E1E9E57DA00BED675 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; A27CCA411E9E5D9400BED675 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; - A2C84750A0AF6B941E773F96 /* MBUsdlRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBUsdlRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBUsdlRecognizerWrapper.h; sourceTree = ""; }; - A3CC499FB074CB5465B14884 /* MBBlinkIDSerializationUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBBlinkIDSerializationUtils.h; path = MicroblinkModule/MBBlinkIDSerializationUtils.h; sourceTree = ""; }; - A5754D568643018665C2782D /* MBSuccessFrameGrabberRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBSuccessFrameGrabberRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBSuccessFrameGrabberRecognizerWrapper.m; sourceTree = ""; }; - A5C24D63B05AEB08ADC43FFA /* MBPassportRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBPassportRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBPassportRecognizerWrapper.m; sourceTree = ""; }; - A7F04110924A96CC533C1454 /* MBSuccessFrameGrabberRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBSuccessFrameGrabberRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBSuccessFrameGrabberRecognizerWrapper.h; sourceTree = ""; }; - AC584892A333542C7B41FBEB /* MBUsdlRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBUsdlRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBUsdlRecognizerWrapper.m; sourceTree = ""; }; - ACF54C75A7D995BE55DE6AAC /* MBSerializationUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBSerializationUtils.m; path = MicroblinkModule/MBSerializationUtils.m; sourceTree = ""; }; - C0204B4EAD535D57DDE731FD /* MBBlinkIdMultiSideRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBBlinkIdMultiSideRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBBlinkIdMultiSideRecognizerWrapper.m; sourceTree = ""; }; - C33346ADA5996939329AAF7E /* MBOverlaySerializationUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBOverlaySerializationUtils.h; path = MicroblinkModule/Overlays/MBOverlaySerializationUtils.h; sourceTree = ""; }; - C59E4555BBB334A9042EA755 /* MBMrtdCombinedRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBMrtdCombinedRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBMrtdCombinedRecognizerWrapper.h; sourceTree = ""; }; - C90E47B6B466CA3CE156C379 /* MBDocumentOverlaySettingsSerialization.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBDocumentOverlaySettingsSerialization.h; path = MicroblinkModule/Overlays/Serialization/MBDocumentOverlaySettingsSerialization.h; sourceTree = ""; }; - D28441BC9337242B586EACA4 /* MBVisaRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBVisaRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBVisaRecognizerWrapper.m; sourceTree = ""; }; - D930451FA02EC5813CC0D175 /* MBBlinkIDModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBBlinkIDModule.h; path = MicroblinkModule/MBBlinkIDModule.h; sourceTree = ""; }; - DB5848C0B10573064CA6C342 /* MBBlinkIdSingleSideRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBBlinkIdSingleSideRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBBlinkIdSingleSideRecognizerWrapper.m; sourceTree = ""; }; - E9FE4D149697A9FC5CA171C8 /* MBOverlaySettingsSerializers.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBOverlaySettingsSerializers.m; path = MicroblinkModule/Overlays/MBOverlaySettingsSerializers.m; sourceTree = ""; }; - EAFF4F44BE07BB63D7D3FEF0 /* MBUsdlCombinedRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBUsdlCombinedRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBUsdlCombinedRecognizerWrapper.m; sourceTree = ""; }; - F557446290C773C80A72492D /* MBRecognizerSerializers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBRecognizerSerializers.h; path = MicroblinkModule/Recognizers/MBRecognizerSerializers.h; sourceTree = ""; }; - F8434A09A64A6E6B482CE9B7 /* MBBlinkIdSingleSideRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBBlinkIdSingleSideRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBBlinkIdSingleSideRecognizerWrapper.h; sourceTree = ""; }; - F8674AE8A916F04DF40F39D7 /* MBMrtdRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBMrtdRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBMrtdRecognizerWrapper.h; sourceTree = ""; }; - FDBA46549C8B9BB23B30D302 /* MBBlinkIdOverlaySettingsSerialization.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBBlinkIdOverlaySettingsSerialization.h; path = MicroblinkModule/Overlays/Serialization/MBBlinkIdOverlaySettingsSerialization.h; sourceTree = ""; }; + ADFA43A38932A89E38D4AB63 /* MBDocumentFaceRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBDocumentFaceRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBDocumentFaceRecognizerWrapper.h; sourceTree = ""; }; + B0464013A24AB1A8D81B84EA /* MBBlinkIdMultiSideRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBBlinkIdMultiSideRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBBlinkIdMultiSideRecognizerWrapper.h; sourceTree = ""; }; + B6E6438984F41BC96CE8C3CB /* MBOverlaySerializationUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBOverlaySerializationUtils.m; path = MicroblinkModule/Overlays/MBOverlaySerializationUtils.m; sourceTree = ""; }; + BCDA45CAAEF43891A797BE5B /* MBSerializationUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBSerializationUtils.h; path = MicroblinkModule/MBSerializationUtils.h; sourceTree = ""; }; + C2E34599953465E8034FA15D /* MBUsdlCombinedRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBUsdlCombinedRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBUsdlCombinedRecognizerWrapper.h; sourceTree = ""; }; + C8F14223913C2F6B90869DA1 /* MBMrtdRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBMrtdRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBMrtdRecognizerWrapper.h; sourceTree = ""; }; + D35D45648913DF56877421C5 /* MBSuccessFrameGrabberRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBSuccessFrameGrabberRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBSuccessFrameGrabberRecognizerWrapper.h; sourceTree = ""; }; + D6E049B7AA32CFB5F9276935 /* MBSuccessFrameGrabberRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBSuccessFrameGrabberRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBSuccessFrameGrabberRecognizerWrapper.m; sourceTree = ""; }; + D8D1483E95F4DAB0D17E27BD /* MBRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBRecognizerWrapper.h; path = MicroblinkModule/Recognizers/MBRecognizerWrapper.h; sourceTree = ""; }; + DB104637B0A659DFE2968977 /* MBPassportRecognizerWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBPassportRecognizerWrapper.h; path = MicroblinkModule/Recognizers/Wrappers/MBPassportRecognizerWrapper.h; sourceTree = ""; }; + DFF64BA89FF3B7F950471104 /* MBBlinkIDSerializationUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBBlinkIDSerializationUtils.m; path = MicroblinkModule/MBBlinkIDSerializationUtils.m; sourceTree = ""; }; + E1934C038DFA4B1C8849D377 /* MBRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBRecognizerWrapper.m; path = MicroblinkModule/Recognizers/MBRecognizerWrapper.m; sourceTree = ""; }; + E50F4397BFCADC86BF7E5961 /* MBPassportRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBPassportRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBPassportRecognizerWrapper.m; sourceTree = ""; }; + E8504E10AC004B6248C04161 /* MBDocumentOverlaySettingsSerialization.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBDocumentOverlaySettingsSerialization.m; path = MicroblinkModule/Overlays/Serialization/MBDocumentOverlaySettingsSerialization.m; sourceTree = ""; }; + F0C342D1826C9C61C356AB65 /* MBCommonSerializationUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MBCommonSerializationUtils.h; path = MicroblinkModule/MBCommonSerializationUtils.h; sourceTree = ""; }; + F82C4AB3A948C0843D966539 /* MBMrtdCombinedRecognizerWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MBMrtdCombinedRecognizerWrapper.m; path = MicroblinkModule/Recognizers/Wrappers/MBMrtdCombinedRecognizerWrapper.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -141,78 +141,43 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0B454A529CCF8850680CCD44 /* Wrappers */ = { + 02144FBEA862846B2B1AA398 /* Recognizers */ = { isa = PBXGroup; children = ( - 70614708BF7AE2925EFE3C8B /* MBDocumentFaceRecognizerWrapper.m */, - D28441BC9337242B586EACA4 /* MBVisaRecognizerWrapper.m */, - C0204B4EAD535D57DDE731FD /* MBBlinkIdMultiSideRecognizerWrapper.m */, - A7F04110924A96CC533C1454 /* MBSuccessFrameGrabberRecognizerWrapper.h */, - 87074E808F2C1FDAC8009852 /* MBMrtdRecognizerWrapper.m */, - A2C84750A0AF6B941E773F96 /* MBUsdlRecognizerWrapper.h */, - F8434A09A64A6E6B482CE9B7 /* MBBlinkIdSingleSideRecognizerWrapper.h */, - 64EA4E3687D7CC38EDFA7622 /* MBMrtdCombinedRecognizerWrapper.m */, - A5C24D63B05AEB08ADC43FFA /* MBPassportRecognizerWrapper.m */, - EAFF4F44BE07BB63D7D3FEF0 /* MBUsdlCombinedRecognizerWrapper.m */, - 45214122BECD1DA4BB26D08F /* MBIdBarcodeRecognizerWrapper.m */, - 3B664BF3BABA8EC3FD69177A /* MBVisaRecognizerWrapper.h */, - 2A2547C7B02E7BBC79270EE6 /* MBDocumentFaceRecognizerWrapper.h */, - C59E4555BBB334A9042EA755 /* MBMrtdCombinedRecognizerWrapper.h */, - DB5848C0B10573064CA6C342 /* MBBlinkIdSingleSideRecognizerWrapper.m */, - AC584892A333542C7B41FBEB /* MBUsdlRecognizerWrapper.m */, - 8B194F80B77E96BFF0C3F4BE /* MBBlinkIdMultiSideRecognizerWrapper.h */, - A5754D568643018665C2782D /* MBSuccessFrameGrabberRecognizerWrapper.m */, - F8674AE8A916F04DF40F39D7 /* MBMrtdRecognizerWrapper.h */, - 66B54D4A8FDDCBFA4C82CA03 /* MBIdBarcodeRecognizerWrapper.h */, - 82C245DBAA5F05FE5869E5C3 /* MBUsdlCombinedRecognizerWrapper.h */, - 66964889867C90EDF7CFA89E /* MBPassportRecognizerWrapper.h */, + D8D1483E95F4DAB0D17E27BD /* MBRecognizerWrapper.h */, + E4D3404CAC1DE44D2B9C7DE5 /* Wrappers */, + 8A3B417CB4FB6C46F82791E0 /* MBRecognizerSerializers.h */, + E1934C038DFA4B1C8849D377 /* MBRecognizerWrapper.m */, + 2AFC4F14A0B9642FEDD615BF /* MBRecognizerSerializers.m */, ); - name = Wrappers; - path = MicroblinkModule/Recognizers/Wrappers; - sourceTree = ""; - }; - 610043E9B31DEEA0EEC07094 /* MicroblinkModule */ = { - isa = PBXGroup; - children = ( - 31AC49E387085625D8BD4964 /* MBBlinkIDSerializationUtils.m */, - 84184E10A2CE6565686141CE /* MBCommonSerializationUtils.m */, - 677B4E0E81962413C6E92683 /* Overlays */, - ACF54C75A7D995BE55DE6AAC /* MBSerializationUtils.m */, - A0084558A8AC2E4DF810FE2F /* MBBlinkIDModule.m */, - A3CC499FB074CB5465B14884 /* MBBlinkIDSerializationUtils.h */, - DD6C4F4B9FD0290A6212441D /* Recognizers */, - 1A304DF1AE6AEEEBB795FE2C /* MBCommonSerializationUtils.h */, - D930451FA02EC5813CC0D175 /* MBBlinkIDModule.h */, - 4B164A48B4739735099C623C /* MBSerializationUtils.h */, - ); - name = MicroblinkModule; - path = MicroblinkModule; + name = Recognizers; + path = MicroblinkModule/Recognizers; sourceTree = ""; }; - 677B4E0E81962413C6E92683 /* Overlays */ = { + 1FAE4D6BBCAEE194D62EC885 /* Overlays */ = { isa = PBXGroup; children = ( - 66894324B5FB95170774A6DE /* MBOverlaySerializationUtils.m */, - 6BF94D73A5E7E979DE3B7AA0 /* Serialization */, - 96FE47AAAA025003EF82C71E /* MBOverlayVCCreator.h */, - E9FE4D149697A9FC5CA171C8 /* MBOverlaySettingsSerializers.m */, - C33346ADA5996939329AAF7E /* MBOverlaySerializationUtils.h */, - 733A465BB6D302A8A686A871 /* MBOverlayViewControllerDelegate.h */, - 6BA747CCBECC90ECFDB43AF8 /* MBOverlaySettingsSerializers.h */, + B6E6438984F41BC96CE8C3CB /* MBOverlaySerializationUtils.m */, + 363A4B0BA826D38CCD752D05 /* Serialization */, + 10384CE392252C78B8480B73 /* MBOverlayVCCreator.h */, + 9D23440DA138B87377B4067F /* MBOverlaySettingsSerializers.m */, + 89FB40B2AFF9A8A367534F29 /* MBOverlaySerializationUtils.h */, + 5A4E4A52A85FEA5E1404C3D5 /* MBOverlayViewControllerDelegate.h */, + 52034283AABBFBB82E19A608 /* MBOverlaySettingsSerializers.h */, ); name = Overlays; path = MicroblinkModule/Overlays; sourceTree = ""; }; - 6BF94D73A5E7E979DE3B7AA0 /* Serialization */ = { + 363A4B0BA826D38CCD752D05 /* Serialization */ = { isa = PBXGroup; children = ( - C90E47B6B466CA3CE156C379 /* MBDocumentOverlaySettingsSerialization.h */, - 5B674679AFE33DAB1E15F4EB /* MBDocumentVerificationOverlaySettingsSerialization.m */, - 14F94C5D894E685FA3B70D67 /* MBBlinkIdOverlaySettingsSerialization.m */, - 406A4F1A8AFBEE4121C50969 /* MBDocumentOverlaySettingsSerialization.m */, - 73F04DDAB5D0ED3A58B56A6A /* MBDocumentVerificationOverlaySettingsSerialization.h */, - FDBA46549C8B9BB23B30D302 /* MBBlinkIdOverlaySettingsSerialization.h */, + 54644D578EE4E8E4B49E58B3 /* MBDocumentOverlaySettingsSerialization.h */, + 83644A56B3F542BF3CA7EAB6 /* MBDocumentVerificationOverlaySettingsSerialization.m */, + 719B41D4A583324F50212DF2 /* MBBlinkIdOverlaySettingsSerialization.m */, + E8504E10AC004B6248C04161 /* MBDocumentOverlaySettingsSerialization.m */, + 53114849BDA9CCDD09AEDF9E /* MBDocumentVerificationOverlaySettingsSerialization.h */, + A2664B67BE6DB87A9FA3D6D4 /* MBBlinkIdOverlaySettingsSerialization.h */, ); name = Serialization; path = MicroblinkModule/Overlays/Serialization; @@ -223,7 +188,7 @@ children = ( A27CCA2C1E9E57A500BED675 /* Products */, A27CCA371E9E57C900BED675 /* Frameworks */, - 610043E9B31DEEA0EEC07094 /* MicroblinkModule */, + A81543ADA32027B42EE4ACCD /* MicroblinkModule */, ); sourceTree = ""; }; @@ -247,50 +212,85 @@ name = Frameworks; sourceTree = ""; }; - DD6C4F4B9FD0290A6212441D /* Recognizers */ = { + A81543ADA32027B42EE4ACCD /* MicroblinkModule */ = { isa = PBXGroup; children = ( - 83F2488296CF93CC70F4DE34 /* MBRecognizerWrapper.h */, - 0B454A529CCF8850680CCD44 /* Wrappers */, - F557446290C773C80A72492D /* MBRecognizerSerializers.h */, - 76174BD69AC1EE5EF22DC917 /* MBRecognizerWrapper.m */, - 9E9B48D78AC9CE04BA7231B5 /* MBRecognizerSerializers.m */, + DFF64BA89FF3B7F950471104 /* MBBlinkIDSerializationUtils.m */, + 4FC148C58EFD08B7198A27BE /* MBCommonSerializationUtils.m */, + 1FAE4D6BBCAEE194D62EC885 /* Overlays */, + 40FC484BA891A211B28BC41B /* MBSerializationUtils.m */, + 2BF44907A5036BDD6C1412EA /* MBBlinkIDModule.m */, + 0D5E4B00AB24C8F2B48F99D1 /* MBBlinkIDSerializationUtils.h */, + 02144FBEA862846B2B1AA398 /* Recognizers */, + F0C342D1826C9C61C356AB65 /* MBCommonSerializationUtils.h */, + 4AE44BDC9ACFEC0DBDD543C1 /* MBBlinkIDModule.h */, + BCDA45CAAEF43891A797BE5B /* MBSerializationUtils.h */, ); - name = Recognizers; - path = MicroblinkModule/Recognizers; + name = MicroblinkModule; + path = MicroblinkModule; + sourceTree = ""; + }; + E4D3404CAC1DE44D2B9C7DE5 /* Wrappers */ = { + isa = PBXGroup; + children = ( + 94C7419297F22A9FB93A3B49 /* MBDocumentFaceRecognizerWrapper.m */, + 0E3347AEB446964D02179135 /* MBVisaRecognizerWrapper.m */, + 868F4B6EB859D25B76159E91 /* MBBlinkIdMultiSideRecognizerWrapper.m */, + D35D45648913DF56877421C5 /* MBSuccessFrameGrabberRecognizerWrapper.h */, + 93C34ACF8DD9D06D76899DB9 /* MBMrtdRecognizerWrapper.m */, + 06DF4DD9AFA49E4F89886F3E /* MBUsdlRecognizerWrapper.h */, + 0D034491842612AF8118660A /* MBBlinkIdSingleSideRecognizerWrapper.h */, + F82C4AB3A948C0843D966539 /* MBMrtdCombinedRecognizerWrapper.m */, + E50F4397BFCADC86BF7E5961 /* MBPassportRecognizerWrapper.m */, + 2C4F4E97919C55F8BDAE4561 /* MBUsdlCombinedRecognizerWrapper.m */, + 44E34E15A810C37A79272FB6 /* MBIdBarcodeRecognizerWrapper.m */, + A0DF4606A4D39EF58FBECDF5 /* MBVisaRecognizerWrapper.h */, + ADFA43A38932A89E38D4AB63 /* MBDocumentFaceRecognizerWrapper.h */, + 36A2467F9080FBF88D4749E9 /* MBMrtdCombinedRecognizerWrapper.h */, + 710F4D769B2C68570094B4E2 /* MBBlinkIdSingleSideRecognizerWrapper.m */, + 9B0543D78B1ECB3BA8F38EE8 /* MBUsdlRecognizerWrapper.m */, + B0464013A24AB1A8D81B84EA /* MBBlinkIdMultiSideRecognizerWrapper.h */, + D6E049B7AA32CFB5F9276935 /* MBSuccessFrameGrabberRecognizerWrapper.m */, + C8F14223913C2F6B90869DA1 /* MBMrtdRecognizerWrapper.h */, + 3BBF4DDDBF1A36ACBB568160 /* MBIdBarcodeRecognizerWrapper.h */, + C2E34599953465E8034FA15D /* MBUsdlCombinedRecognizerWrapper.h */, + DB104637B0A659DFE2968977 /* MBPassportRecognizerWrapper.h */, + ); + name = Wrappers; + path = MicroblinkModule/Recognizers/Wrappers; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 88264A8EAE0060FCBA7D1779 /* Headers */ = { + 5D71436A98C71807B56433A5 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 05B74780B6737DB12AFDB3FF /* MBDocumentOverlaySettingsSerialization.h in Headers */, - FEDF44D3B2528E38707632E1 /* MBDocumentVerificationOverlaySettingsSerialization.h in Headers */, - 17604F6C90E6C20BEEC4A3BA /* MBBlinkIdOverlaySettingsSerialization.h in Headers */, - EE574EF787D5671AA0ACAB96 /* MBOverlayVCCreator.h in Headers */, - 24E14349B108D1BA66D4BFAD /* MBOverlaySerializationUtils.h in Headers */, - A66F4C4BB8B2C941DE3B2C78 /* MBOverlayViewControllerDelegate.h in Headers */, - 3E4B4221BF527A6D74A2432C /* MBOverlaySettingsSerializers.h in Headers */, - 96E74583AE6D35FEF1E87F1F /* MBBlinkIDSerializationUtils.h in Headers */, - AE3C400CBEC317A29A6BAB05 /* MBRecognizerWrapper.h in Headers */, - BCFC4B57964DE2D164C66171 /* MBSuccessFrameGrabberRecognizerWrapper.h in Headers */, - E9A8418DB8729AB8DAE4FD7E /* MBUsdlRecognizerWrapper.h in Headers */, - 9A3B4B05944337F6ED69A4A6 /* MBBlinkIdSingleSideRecognizerWrapper.h in Headers */, - 560A42D78456D63B83167BE2 /* MBVisaRecognizerWrapper.h in Headers */, - 9F9842DFAC134B6E48138CF9 /* MBDocumentFaceRecognizerWrapper.h in Headers */, - FA0B494DAE8D9833302056C6 /* MBMrtdCombinedRecognizerWrapper.h in Headers */, - BDD14A1D8F740B6F60CB5D6D /* MBBlinkIdMultiSideRecognizerWrapper.h in Headers */, - 8DC049989AB55ADA94155B3D /* MBMrtdRecognizerWrapper.h in Headers */, - 5652492BBC574503CFCBE3D2 /* MBIdBarcodeRecognizerWrapper.h in Headers */, - 60F74F73812E3C383672F4E2 /* MBUsdlCombinedRecognizerWrapper.h in Headers */, - 480D423180B1893A57892846 /* MBPassportRecognizerWrapper.h in Headers */, - FEA14A8C8BCEF365BFD96D8F /* MBRecognizerSerializers.h in Headers */, - 71814CEABAFA16151F82C1A5 /* MBCommonSerializationUtils.h in Headers */, - 048A409E8A605D420974E19B /* MBBlinkIDModule.h in Headers */, - 9D5943F28B4AB42FEEC75372 /* MBSerializationUtils.h in Headers */, + 513446688AF83003FD9621B6 /* MBDocumentOverlaySettingsSerialization.h in Headers */, + F2C8428A9FCAC91D2EA0921C /* MBDocumentVerificationOverlaySettingsSerialization.h in Headers */, + 2F8B4C9C8D4722B80513EAE8 /* MBBlinkIdOverlaySettingsSerialization.h in Headers */, + B70C4C718F57EFF61564CD09 /* MBOverlayVCCreator.h in Headers */, + FBEA4DC294FA555FBAEBB469 /* MBOverlaySerializationUtils.h in Headers */, + 6D83401DA16D575D4925FA36 /* MBOverlayViewControllerDelegate.h in Headers */, + 4B484A43BFB6DB766187D5E1 /* MBOverlaySettingsSerializers.h in Headers */, + D0F648739E4B451726070894 /* MBBlinkIDSerializationUtils.h in Headers */, + 6CE04487ACB1DE3A1D5D9B1F /* MBRecognizerWrapper.h in Headers */, + 9D3A441C96000C12F5036E90 /* MBSuccessFrameGrabberRecognizerWrapper.h in Headers */, + F6354E9AB2D2C233C041794D /* MBUsdlRecognizerWrapper.h in Headers */, + 1B624C30B324609E4802EFBC /* MBBlinkIdSingleSideRecognizerWrapper.h in Headers */, + 5EBF4DE58F294EE1F6C7A07A /* MBVisaRecognizerWrapper.h in Headers */, + 23E4483D9D91E2E7B31E8D49 /* MBDocumentFaceRecognizerWrapper.h in Headers */, + 1C7A4DBB963E344365292C7F /* MBMrtdCombinedRecognizerWrapper.h in Headers */, + 0E5348189BE684A574E0BE10 /* MBBlinkIdMultiSideRecognizerWrapper.h in Headers */, + 26A44EC2AFCA05AB4187C29E /* MBMrtdRecognizerWrapper.h in Headers */, + 53E14F4DBD85E21DFEC95783 /* MBIdBarcodeRecognizerWrapper.h in Headers */, + 52464F3295407D1571C15B73 /* MBUsdlCombinedRecognizerWrapper.h in Headers */, + FB2F40718D89520BBD906B49 /* MBPassportRecognizerWrapper.h in Headers */, + CAAB45FDAD2892A4895A0468 /* MBRecognizerSerializers.h in Headers */, + 1C004F9C8FB8C2F6A9ACAF2F /* MBCommonSerializationUtils.h in Headers */, + FDDA45ADA47DF272EDCDD962 /* MBBlinkIDModule.h in Headers */, + E8DD4EF3A9930BDF47C1F337 /* MBSerializationUtils.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -304,7 +304,7 @@ A27CCA271E9E57A500BED675 /* Sources */, A27CCA281E9E57A500BED675 /* Frameworks */, A27CCA291E9E57A500BED675 /* CopyFiles */, - 88264A8EAE0060FCBA7D1779 /* Headers */, + 5D71436A98C71807B56433A5 /* Headers */, ); buildRules = ( ); @@ -354,28 +354,28 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D9F34D1188B25A53515FF836 /* MBBlinkIDSerializationUtils.m in Sources */, - A1864103913949BC38E6F446 /* MBCommonSerializationUtils.m in Sources */, - F09C4FFBADDB78F15088F1C1 /* MBOverlaySerializationUtils.m in Sources */, - 755F4A37B442D6CFA7A1551C /* MBDocumentVerificationOverlaySettingsSerialization.m in Sources */, - 18334860BA9B2E49178E24E8 /* MBBlinkIdOverlaySettingsSerialization.m in Sources */, - B8054FD88394B04AF4547567 /* MBDocumentOverlaySettingsSerialization.m in Sources */, - C82F46A8BA3559C1EFC03120 /* MBOverlaySettingsSerializers.m in Sources */, - A6E447578E057D4AF8BEE34A /* MBSerializationUtils.m in Sources */, - 87A0424E8524AD6D5660C17B /* MBBlinkIDModule.m in Sources */, - DCB640AD91496712018FA65D /* MBDocumentFaceRecognizerWrapper.m in Sources */, - 29454BCFBE90E765BB949C83 /* MBVisaRecognizerWrapper.m in Sources */, - 706C4F4CA5AFA3298A441FF6 /* MBBlinkIdMultiSideRecognizerWrapper.m in Sources */, - EBF046CDAED926303E35C506 /* MBMrtdRecognizerWrapper.m in Sources */, - 8AF145D8809DB8365FF317F1 /* MBMrtdCombinedRecognizerWrapper.m in Sources */, - 0B06486E936846D6329264FC /* MBPassportRecognizerWrapper.m in Sources */, - 42E446879D6DEF923779703C /* MBUsdlCombinedRecognizerWrapper.m in Sources */, - 1EEC47FAB461DA8C6D357ADB /* MBIdBarcodeRecognizerWrapper.m in Sources */, - C02E44309007AD23540BD319 /* MBBlinkIdSingleSideRecognizerWrapper.m in Sources */, - C450415FA0FA29B35B8DED2D /* MBUsdlRecognizerWrapper.m in Sources */, - 06AB4C3D8E55F650AA1094BC /* MBSuccessFrameGrabberRecognizerWrapper.m in Sources */, - 2C5F4F158A03BD1D1F4E302E /* MBRecognizerWrapper.m in Sources */, - 78AF434F9444519D330E8038 /* MBRecognizerSerializers.m in Sources */, + A33C4A4886502DE3512DAA96 /* MBBlinkIDSerializationUtils.m in Sources */, + F8B141C791525AEC4C3120E1 /* MBCommonSerializationUtils.m in Sources */, + 5FC345C3A99631498295C8C1 /* MBOverlaySerializationUtils.m in Sources */, + 3906445899CC8EF49B03E657 /* MBDocumentVerificationOverlaySettingsSerialization.m in Sources */, + A95F41E4BAEF194EDFF8F5D4 /* MBBlinkIdOverlaySettingsSerialization.m in Sources */, + 160B43C39FB196F05A191330 /* MBDocumentOverlaySettingsSerialization.m in Sources */, + BDA348F2872BE59DAE3C5B90 /* MBOverlaySettingsSerializers.m in Sources */, + 5B3F4D8DA53A40D270F1E3A9 /* MBSerializationUtils.m in Sources */, + 1E0A481CA5DCD658085EE955 /* MBBlinkIDModule.m in Sources */, + 1FAF4FC28FF9EFD1B876395A /* MBDocumentFaceRecognizerWrapper.m in Sources */, + BE95421886C8A5BD54634EB4 /* MBVisaRecognizerWrapper.m in Sources */, + D2ED49D6A6D336DF06203C37 /* MBBlinkIdMultiSideRecognizerWrapper.m in Sources */, + 1E5D4CE7B366C5663240F212 /* MBMrtdRecognizerWrapper.m in Sources */, + D57F46D1A2EF7DFE7574EB5C /* MBMrtdCombinedRecognizerWrapper.m in Sources */, + 101E4AB086FF35CDE418F26D /* MBPassportRecognizerWrapper.m in Sources */, + 24D044A58BD367D7C77772B0 /* MBUsdlCombinedRecognizerWrapper.m in Sources */, + DC414032ACB6843879410B76 /* MBIdBarcodeRecognizerWrapper.m in Sources */, + 7F3F48ADBAB09944812DAB3B /* MBBlinkIdSingleSideRecognizerWrapper.m in Sources */, + 536743AAB5C2C77D11A6E695 /* MBUsdlRecognizerWrapper.m in Sources */, + EF8E48ECBD65EDAD6DF7CE98 /* MBSuccessFrameGrabberRecognizerWrapper.m in Sources */, + E5B442E79DA664526122C9EF /* MBRecognizerWrapper.m in Sources */, + 8B4D4270991DE462118D9300 /* MBRecognizerSerializers.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBBlinkIDModule.m b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBBlinkIDModule.m index 93490dc..bd5147d 100644 --- a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBBlinkIDModule.m +++ b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBBlinkIDModule.m @@ -20,12 +20,17 @@ typedef NS_ENUM(NSUInteger, PPImageType) { static NSString* const RESULT_CAPTURED_FULL_IMAGE = @"capturedFullImage"; static NSString* const RESULT_DOCUMENT_CAPTURE_RECOGNIZER_RESULT = @"documentCaptureRecognizerResult"; -@interface MBBlinkIDModule () +@interface MBBlinkIDModule () @property (nonatomic, strong) MBRecognizerCollection *recognizerCollection; @property (nonatomic) id scanningViewController; +@property (nonatomic, strong) MBRecognizerRunner *recognizerRunner; +@property (nonatomic, strong) NSDictionary *backImageBase64Image; @property (class, nonatomic, readonly) NSString *STATUS_SCAN_CANCELED; +@property (class, nonatomic, readonly) NSString *STATUS_FRONTSIDE_EMPTY; +@property (class, nonatomic, readonly) NSString *STATUS_BASE64_ERROR; +@property (class, nonatomic, readonly) NSString *STATUS_NO_DATA; @property (nonatomic, strong) RCTPromiseResolveBlock promiseResolve; @property (nonatomic, strong) RCTPromiseRejectBlock promiseReject; @@ -68,32 +73,12 @@ - (NSDictionary *)sanitizeDictionary:(NSDictionary *)dictionary { jsonOverlaySettings = [self sanitizeDictionary:jsonOverlaySettings]; jsonRecognizerCollection = [self sanitizeDictionary:jsonRecognizerCollection]; jsonLicense = [self sanitizeDictionary:jsonLicense]; - + self.promiseResolve = resolve; self.promiseReject = reject; - - if ([jsonLicense objectForKey:@"showTrialLicenseWarning"] != nil) { - BOOL showTrialLicenseWarning = [[jsonLicense objectForKey:@"showTrialLicenseWarning"] boolValue]; - [MBMicroblinkSDK sharedInstance].showTrialLicenseWarning = showTrialLicenseWarning; - } - NSString* iosLicense = [jsonLicense objectForKey:@"licenseKey"]; - if ([jsonLicense objectForKey:@"licensee"] != nil) { - NSString *licensee = [jsonLicense objectForKey:@"licensee"]; - [[MBMicroblinkSDK sharedInstance] setLicenseKey:iosLicense andLicensee:licensee errorCallback:^(MBLicenseError licenseError) { - }]; - } - else { - [[MBMicroblinkSDK sharedInstance] setLicenseKey:iosLicense errorCallback:^(MBLicenseError licenseError) { - }]; - } - if (jsonOverlaySettings[@"language"] != nil) { - if (jsonOverlaySettings[@"country"] != nil && ![jsonOverlaySettings[@"country"] isEqual: @""]) { - MBMicroblinkApp.sharedInstance.language = [[(NSString *)jsonOverlaySettings[@"language"] stringByAppendingString:@"-" ] stringByAppendingString:(NSString *)jsonOverlaySettings[@"country"]]; - } else { - MBMicroblinkApp.sharedInstance.language = jsonOverlaySettings[@"language"]; - } - } + [self setupLicense:jsonLicense]; + [self setupLanguage:jsonOverlaySettings]; self.recognizerCollection = [[MBRecognizerSerializers sharedInstance] deserializeRecognizerCollection:jsonRecognizerCollection]; @@ -108,6 +93,32 @@ - (NSDictionary *)sanitizeDictionary:(NSDictionary *)dictionary { }); } +RCT_REMAP_METHOD(scanWithDirectApi, recognizerCollection:(NSDictionary *)jsonRecognizerCollection frontImage:(NSDictionary *)jsonFrontImage backImage:(NSDictionary*)jsonBackImage license:(NSDictionary *)jsonLicense resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { + // Sanitize the dictionaries + jsonRecognizerCollection = [self sanitizeDictionary:jsonRecognizerCollection]; + jsonLicense = [self sanitizeDictionary:jsonLicense]; + jsonFrontImage = [self sanitizeDictionary: jsonFrontImage]; + self.backImageBase64Image = [self sanitizeDictionary:jsonBackImage]; + + self.promiseResolve = resolve; + self.promiseReject = reject; + + [self setupLicense:jsonLicense]; + [self setupRecognizerRunner:jsonRecognizerCollection]; + + [self setupRecognizerRunner:jsonRecognizerCollection]; + if (jsonFrontImage[@"frontImage"] != nil) { + UIImage *frontImage = [self convertbase64ToImage:jsonFrontImage[@"frontImage"]]; + if (!CGSizeEqualToSize(frontImage.size, CGSizeZero)) { + [self processImage:frontImage]; + } else { + [self handleDirectApiError:MBBlinkIDModule.STATUS_BASE64_ERROR errorMessaege:@"Could not decode Base64 image!"]; + } + } else { + [self handleDirectApiError:MBBlinkIDModule.STATUS_FRONTSIDE_EMPTY errorMessaege:@"First side image is empty!"]; + } +} + - (void)overlayViewControllerDidFinishScanning:(MBOverlayViewController *)overlayViewController state:(MBRecognizerResultState)state { if (state != MBRecognizerResultStateEmpty) { [overlayViewController.recognizerRunnerViewController pauseScanning]; @@ -150,6 +161,133 @@ - (void)overlayDidTapClose:(MBOverlayViewController *)overlayViewController { self.promiseReject = nil; } +- (void)recognizerRunnerDidFinishRecognitionOfFirstSide:(MBRecognizerRunner *)recognizerRunner { + if (self.backImageBase64Image[@"backImage"] != nil) { + UIImage *backImage = [self convertbase64ToImage:self.backImageBase64Image[@"backImage"]]; + if (!CGSizeEqualToSize(backImage.size, CGSizeZero)) { + [self processImage:backImage]; + } else { + [self handleJsonResult]; + self.recognizerCollection = nil; + self.recognizerRunner = nil; + } + } else { + [self handleJsonResult]; + self.recognizerCollection = nil; + self.recognizerRunner = nil; + } +} + +- (void)recognizerRunner:(nonnull MBRecognizerRunner *)recognizerRunner didFinishScanningWithState:(MBRecognizerResultState)state { + dispatch_async(dispatch_get_main_queue(), ^{ + if (state == MBRecognizerResultStateValid || state == MBRecognizerResultStateUncertain) { + [self handleJsonResult]; + self.recognizerCollection = nil; + self.recognizerRunner = nil; + } else if (state == MBRecognizerResultStateEmpty) { + [self handleDirectApiError:MBBlinkIDModule.STATUS_NO_DATA errorMessaege:@"Could not extract the data with DirectAPI!"]; + self.recognizerCollection = nil; + self.recognizerRunner = nil; + } + }); +} + +//setup the recognizer runner +- (void) setupRecognizerRunner:(NSDictionary *)jsonRecognizerCollection { + self.recognizerCollection = [[MBRecognizerSerializers sharedInstance] deserializeRecognizerCollection:jsonRecognizerCollection]; + self.recognizerRunner = [[MBRecognizerRunner alloc] initWithRecognizerCollection:self.recognizerCollection]; + self.recognizerRunner.scanningRecognizerRunnerDelegate = self; + self.recognizerRunner.metadataDelegates.firstSideFinishedRecognizerRunnerDelegate = self; +} + +//convert the image to MBImage and process it +- (void)processImage:(UIImage *)originalImage { + MBImage *image = [MBImage imageWithUIImage:originalImage]; + image.cameraFrame = NO; + image.orientation = MBProcessingOrientationLeft; + dispatch_queue_t _serialQueue = dispatch_queue_create("com.microblink.DirectAPI", DISPATCH_QUEUE_SERIAL); + dispatch_async(_serialQueue, ^{ + [self.recognizerRunner processImage:image]; + }); +} + +//convert image from base64 to UIImage +-(UIImage*)convertbase64ToImage:(NSString *)base64Image { + NSData *imageData = [[NSData alloc] initWithBase64EncodedString:base64Image options:NSDataBase64DecodingIgnoreUnknownCharacters]; + if (imageData) { + UIImage *image = [UIImage imageWithData:imageData]; + return image; + } else { + return [UIImage new]; + } +} + +//Handle JSON results +- (void) handleJsonResult { + BOOL isDocumentCaptureRecognizer = NO; + + NSMutableArray *jsonResults = [[NSMutableArray alloc] initWithCapacity:self.recognizerCollection.recognizerList.count]; + + for (NSUInteger i = 0; i < self.recognizerCollection.recognizerList.count; ++i) { + [jsonResults addObject:[[self.recognizerCollection.recognizerList objectAtIndex:i] serializeResult]]; + + if (!isDocumentCaptureRecognizer) { + self.promiseResolve(jsonResults); + } + } +} + +- (void) handleDirectApiError:(NSString*)status errorMessaege:(NSString *)errorMessage { + self.recognizerCollection = nil; + self.recognizerRunner = nil; + NSError *error = [NSError errorWithDomain:MBErrorDomain + code:-58 + userInfo:nil]; + self.promiseReject(status, errorMessage, error); + self.promiseResolve = nil; + self.promiseReject = nil; +} + +- (void) setupLicense:(NSDictionary *)jsonLicense { + if ([jsonLicense objectForKey:@"showTrialLicenseWarning"] != nil) { + BOOL showTrialLicenseWarning = [[jsonLicense objectForKey:@"showTrialLicenseWarning"] boolValue]; + [MBMicroblinkSDK sharedInstance].showTrialLicenseWarning = showTrialLicenseWarning; + } + + NSString* iosLicense = [jsonLicense objectForKey:@"licenseKey"]; + if ([jsonLicense objectForKey:@"licensee"] != nil) { + NSString *licensee = [jsonLicense objectForKey:@"licensee"]; + [[MBMicroblinkSDK sharedInstance] setLicenseKey:iosLicense andLicensee:licensee errorCallback:^(MBLicenseError licenseError) { + }]; + } + else { + [[MBMicroblinkSDK sharedInstance] setLicenseKey:iosLicense errorCallback:^(MBLicenseError licenseError) { + }]; + } +} + +- (void) setupLanguage:(NSDictionary *)jsonOverlaySettings { + if (jsonOverlaySettings[@"language"] != nil) { + if (jsonOverlaySettings[@"country"] != nil && ![jsonOverlaySettings[@"country"] isEqual: @""]) { + MBMicroblinkApp.sharedInstance.language = [[(NSString *)jsonOverlaySettings[@"language"] stringByAppendingString:@"-" ] stringByAppendingString:(NSString *)jsonOverlaySettings[@"country"]]; + } else { + MBMicroblinkApp.sharedInstance.language = jsonOverlaySettings[@"language"]; + } + } +} + ++ (NSString *)STATUS_FRONTSIDE_EMPTY { + return @"STATUS_FRONTSIDE_EMPTY"; +} + ++ (NSString *)STATUS_BASE64_ERROR { + return @"STATUS_BASE64_ERROR"; +} + ++ (NSString *)STATUS_NO_DATA { + return @"STATUS_NO_DATA"; +} + + (NSString *)STATUS_SCAN_CANCELED { return @"STATUS_SCAN_CANCELED"; } diff --git a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBBlinkIDSerializationUtils.h b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBBlinkIDSerializationUtils.h index 12fe757..739c24f 100644 --- a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBBlinkIDSerializationUtils.h +++ b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBBlinkIDSerializationUtils.h @@ -26,6 +26,8 @@ +(NSDictionary * _Nonnull) serializeBarcodeElements:(MBBarcodeElements * _Nonnull)extendedElements; +(NSArray * _Nonnull) serializeBarcodeElementsValues:(MBBarcodeElements * _Nonnull)extendedElements; + (NSDictionary * _Nonnull)serializeAdditionalProcessingInfo:(MBAdditionalProcessingInfo * _Nullable)additionalProcessingInfo; -+ (NSDictionary * _Nonnull)serializeMBDate:(MBDate * _Nonnull)date; - ++ (NSDictionary * _Nonnull)serializeMBDateResult:(MBDateResult * _Nullable) value; ++(NSDictionary * _Nonnull) serializeMBStringResult:(MBStringResult * _Nullable) value; ++(NSNumber * _Nullable)serializeMBSide:(MBSide) value; ++(NSDictionary * _Nonnull) serializeNSDate:(NSDate * _Nullable) value; @end \ No newline at end of file diff --git a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBBlinkIDSerializationUtils.m b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBBlinkIDSerializationUtils.m index f26ee68..7500b5a 100644 --- a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBBlinkIDSerializationUtils.m +++ b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBBlinkIDSerializationUtils.m @@ -16,12 +16,12 @@ +(NSDictionary *) serializeMrzResult:(MBMrzResult *)mrzResult { @"primaryId" : mrzResult.primaryID, @"secondaryId" : mrzResult.secondaryID, @"issuer" : mrzResult.issuer, - @"dateOfBirth" : [MBBlinkIDSerializationUtils serializeMBDate:mrzResult.dateOfBirth], + @"dateOfBirth" : [MBSerializationUtils serializeMBDate:mrzResult.dateOfBirth], @"documentNumber" : mrzResult.documentNumber, @"nationality" : mrzResult.nationality, @"gender" : mrzResult.gender, @"documentCode" : mrzResult.documentCode, - @"dateOfExpiry" : [MBBlinkIDSerializationUtils serializeMBDate:mrzResult.dateOfExpiry], + @"dateOfExpiry" : [MBSerializationUtils serializeMBDate:mrzResult.dateOfExpiry], @"opt1" : mrzResult.opt1, @"opt2" : mrzResult.opt2, @"alienNumber" : mrzResult.alienNumber, @@ -61,10 +61,10 @@ +(NSDictionary *) serializeDriverLicenseDetailedInfo:(MBDriverLicenseDetailedInf } return @{ - @"restrictions" : [MBSerializationUtils serializeMBStringResult:driverLicenseDetailedInfo.restrictions], - @"endorsements" : [MBSerializationUtils serializeMBStringResult:driverLicenseDetailedInfo.endorsements], - @"vehicleClass" : [MBSerializationUtils serializeMBStringResult:driverLicenseDetailedInfo.vehicleClass], - @"conditions" : [MBSerializationUtils serializeMBStringResult:driverLicenseDetailedInfo.conditions], + @"restrictions" : [MBBlinkIDSerializationUtils serializeMBStringResult:driverLicenseDetailedInfo.restrictions], + @"endorsements" : [MBBlinkIDSerializationUtils serializeMBStringResult:driverLicenseDetailedInfo.endorsements], + @"vehicleClass" : [MBBlinkIDSerializationUtils serializeMBStringResult:driverLicenseDetailedInfo.vehicleClass], + @"conditions" : [MBBlinkIDSerializationUtils serializeMBStringResult:driverLicenseDetailedInfo.conditions], @"vehicleClassesInfo" : vehicleClassesInfo }; } @@ -87,10 +87,10 @@ + (NSDictionary *)serializeBarcodeDriverLicenseDetailedInfo:(MBBarcodeDriverLice +(NSDictionary *) serializeVehicleClassInfo:(MBVehicleClassInfo *)vehicleClassInfo { return @{ - @"vehicleClass" : [MBSerializationUtils serializeMBStringResult:vehicleClassInfo.vehicleClass], - @"licenceType" : [MBSerializationUtils serializeMBStringResult:vehicleClassInfo.licenceType], - @"effectiveDate" : [MBSerializationUtils serializeMBDateResult:vehicleClassInfo.effectiveDate], - @"expiryDate" : [MBSerializationUtils serializeMBDateResult:vehicleClassInfo.expiryDate] + @"vehicleClass" : [MBBlinkIDSerializationUtils serializeMBStringResult:vehicleClassInfo.vehicleClass], + @"licenceType" : [MBBlinkIDSerializationUtils serializeMBStringResult:vehicleClassInfo.licenceType], + @"effectiveDate" : [MBBlinkIDSerializationUtils serializeMBDateResult:vehicleClassInfo.effectiveDate], + @"expiryDate" : [MBBlinkIDSerializationUtils serializeMBDateResult:vehicleClassInfo.expiryDate] }; } @@ -98,8 +98,8 @@ + (NSDictionary *)serializeBarcodeVehicleClassInfo:(MBBarcodeVehicleClassInfo *) return @{ @"vehicleClass" : vehicleClassInfo.vehicleClass, @"licenceType" : vehicleClassInfo.licenceType, - @"effectiveDate" : [MBBlinkIDSerializationUtils serializeMBDate:vehicleClassInfo.effectiveDate], - @"expiryDate" : [MBBlinkIDSerializationUtils serializeMBDate:vehicleClassInfo.expiryDate] + @"effectiveDate" : [MBSerializationUtils serializeMBDate :vehicleClassInfo.effectiveDate], + @"expiryDate" : [MBSerializationUtils serializeMBDate:vehicleClassInfo.expiryDate] }; } @@ -138,31 +138,31 @@ +(NSDictionary *) serializeClassInfo:(MBClassInfo *)classInfo { +(NSDictionary *) serializeVizResult:(MBVizResult *)vizResult { return @{ - @"firstName" : [MBSerializationUtils serializeMBStringResult:vizResult.firstName], - @"lastName" : [MBSerializationUtils serializeMBStringResult:vizResult.lastName], - @"fullName" : [MBSerializationUtils serializeMBStringResult:vizResult.fullName], - @"additionalNameInformation" : [MBSerializationUtils serializeMBStringResult:vizResult.additionalNameInformation], - @"localizedName" : [MBSerializationUtils serializeMBStringResult:vizResult.localizedName], - @"address" : [MBSerializationUtils serializeMBStringResult:vizResult.address], - @"additionalAddressInformation" : [MBSerializationUtils serializeMBStringResult:vizResult.additionalAddressInformation], - @"additionalOptionalAddressInformation" : [MBSerializationUtils serializeMBStringResult:vizResult.additionalOptionalAddressInformation], - @"placeOfBirth" : [MBSerializationUtils serializeMBStringResult:vizResult.placeOfBirth], - @"nationality" : [MBSerializationUtils serializeMBStringResult:vizResult.nationality], - @"race" : [MBSerializationUtils serializeMBStringResult:vizResult.race], - @"religion" : [MBSerializationUtils serializeMBStringResult:vizResult.religion], - @"profession" : [MBSerializationUtils serializeMBStringResult:vizResult.profession], - @"maritalStatus" : [MBSerializationUtils serializeMBStringResult:vizResult.maritalStatus], - @"residentialStatus" : [MBSerializationUtils serializeMBStringResult:vizResult.residentialStatus], - @"employer" : [MBSerializationUtils serializeMBStringResult:vizResult.employer], - @"sex" : [MBSerializationUtils serializeMBStringResult:vizResult.sex], - @"dateOfBirth" : [MBSerializationUtils serializeMBDateResult:vizResult.dateOfBirth], - @"dateOfIssue" : [MBSerializationUtils serializeMBDateResult:vizResult.dateOfIssue], - @"dateOfExpiry" : [MBSerializationUtils serializeMBDateResult:vizResult.dateOfExpiry], - @"documentNumber" : [MBSerializationUtils serializeMBStringResult:vizResult.documentNumber], - @"personalIdNumber" : [MBSerializationUtils serializeMBStringResult:vizResult.personalIdNumber], - @"documentAdditionalNumber" : [MBSerializationUtils serializeMBStringResult:vizResult.documentAdditionalNumber], - @"additionalPersonalIdNumber" : [MBSerializationUtils serializeMBStringResult:vizResult.additionalPersonalIdNumber], - @"issuingAuthority" : [MBSerializationUtils serializeMBStringResult:vizResult.issuingAuthority], + @"firstName" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.firstName], + @"lastName" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.lastName], + @"fullName" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.fullName], + @"additionalNameInformation" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.additionalNameInformation], + @"localizedName" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.localizedName], + @"address" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.address], + @"additionalAddressInformation" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.additionalAddressInformation], + @"additionalOptionalAddressInformation" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.additionalOptionalAddressInformation], + @"placeOfBirth" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.placeOfBirth], + @"nationality" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.nationality], + @"race" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.race], + @"religion" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.religion], + @"profession" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.profession], + @"maritalStatus" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.maritalStatus], + @"residentialStatus" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.residentialStatus], + @"employer" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.employer], + @"sex" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.sex], + @"dateOfBirth" : [MBBlinkIDSerializationUtils serializeMBDateResult:vizResult.dateOfBirth], + @"dateOfIssue" : [MBBlinkIDSerializationUtils serializeMBDateResult:vizResult.dateOfIssue], + @"dateOfExpiry" : [MBBlinkIDSerializationUtils serializeMBDateResult:vizResult.dateOfExpiry], + @"documentNumber" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.documentNumber], + @"personalIdNumber" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.personalIdNumber], + @"documentAdditionalNumber" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.documentAdditionalNumber], + @"additionalPersonalIdNumber" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.additionalPersonalIdNumber], + @"issuingAuthority" : [MBBlinkIDSerializationUtils serializeMBStringResult:vizResult.issuingAuthority], @"driverLicenseDetailedInfo" : [MBBlinkIDSerializationUtils serializeDriverLicenseDetailedInfo:vizResult.driverLicenseDetailedInfo], @"empty" : [NSNumber numberWithBool:vizResult.empty] }; @@ -189,9 +189,9 @@ +(NSDictionary *) serializeBarcodeResult:(MBBarcodeResult *)barcodeResult { @"residentialStatus" : barcodeResult.residentialStatus, @"employer" : barcodeResult.employer, @"sex" : barcodeResult.sex, - @"dateOfBirth" : [MBBlinkIDSerializationUtils serializeMBDate:barcodeResult.dateOfBirth], - @"dateOfIssue" : [MBBlinkIDSerializationUtils serializeMBDate:barcodeResult.dateOfIssue], - @"dateOfExpiry" : [MBBlinkIDSerializationUtils serializeMBDate:barcodeResult.dateOfExpiry], + @"dateOfBirth" : [MBSerializationUtils serializeMBDate:barcodeResult.dateOfBirth], + @"dateOfIssue" : [MBSerializationUtils serializeMBDate:barcodeResult.dateOfIssue], + @"dateOfExpiry" : [MBSerializationUtils serializeMBDate:barcodeResult.dateOfExpiry], @"documentNumber" : barcodeResult.documentNumber, @"personalIdNumber" : barcodeResult.personalIdNumber, @"documentAdditionalNumber" : barcodeResult.documentAdditionalNumber, @@ -293,14 +293,53 @@ +(NSDictionary *)serializeAdditionalProcessingInfo:(MBAdditionalProcessingInfo * }; } -+ (NSDictionary *)serializeMBDate:(MBDate *)date { ++ (NSDictionary *)serializeMBDateResult:(MBDateResult *) value { + NSMutableDictionary *dict = [MBBlinkIDSerializationUtils serializeDay:value.day month:value.month year:value.year].mutableCopy; + [dict setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:value.originalDateStringResult] forKey:@"originalDateStringResult"]; + [dict setValue:[NSNumber numberWithBool:value.isFilledByDomainKnowledge] forKey:@"isFilledByDomainKnowledge"]; + return dict; +} + ++(NSDictionary *) serializeDay:(NSInteger)day month:(NSInteger)month year:(NSInteger)year { return @{ - @"day" : @(date.day), - @"month" : @(date.month), - @"year" : @(date.year), - @"originalDateString" : date.originalDateString, - @"isFilledByDomainKnowledge" : [NSNumber numberWithBool:date.isFilledByDomainKnowledge], + @"day" : [NSNumber numberWithInteger:day], + @"month" : [NSNumber numberWithInteger:month], + @"year" : [NSNumber numberWithInteger:year] }; } ++(NSDictionary *) serializeNSDate:(NSDate*) value { + NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:value]; + return [MBBlinkIDSerializationUtils serializeDay:components.day month:components.month year:components.year]; +} + ++ (NSDictionary *)serializeMBStringResult:(MBStringResult *) value { + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + [dict setValue:[value valueForAlphabetType:MBAlphabetTypeLatin] forKey:@"latin"]; + [dict setValue:[value valueForAlphabetType:MBAlphabetTypeArabic] forKey:@"arabic"]; + [dict setValue:[value valueForAlphabetType:MBAlphabetTypeCyrillic] forKey:@"cyrillic"]; + [dict setValue:value.description forKey:@"description"]; + + NSMutableDictionary *location = [NSMutableDictionary dictionary]; + [location setValue:[MBSerializationUtils serializeCGRect:[value locationForAlphabetType:MBAlphabetTypeLatin]] forKey:@"latin"]; + [location setValue:[MBSerializationUtils serializeCGRect:[value locationForAlphabetType:MBAlphabetTypeArabic]] forKey:@"arabic"]; + [location setValue:[MBSerializationUtils serializeCGRect:[value locationForAlphabetType:MBAlphabetTypeCyrillic]] forKey:@"cyrillic"]; + [dict setValue:location forKey:@"location"]; + + NSMutableDictionary *side = [NSMutableDictionary dictionary]; + [side setValue:[NSNumber numberWithInteger:[value sideForAlphabetType:MBAlphabetTypeLatin]] forKey:@"latin"]; + [side setValue:[NSNumber numberWithInteger:[value sideForAlphabetType:MBAlphabetTypeArabic]] forKey:@"arabic"]; + [side setValue:[NSNumber numberWithInteger:[value sideForAlphabetType:MBAlphabetTypeCyrillic]] forKey:@"cyrillic"]; + [dict setValue:side forKey:@"side"]; + + return dict; +} + ++(NSNumber *)serializeMBSide:(MBSide) value { + if (value == MBSideNone) { + return nil; + } + return [NSNumber numberWithLong:value - 1]; +} + @end \ No newline at end of file diff --git a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBSerializationUtils.h b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBSerializationUtils.h index 8626853..acfe145 100644 --- a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBSerializationUtils.h +++ b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBSerializationUtils.h @@ -10,10 +10,7 @@ @interface MBSerializationUtils : NSObject -+(NSDictionary * _Nonnull) serializeNSDate:(NSDate * _Nullable) value; -+(NSDictionary * _Nonnull) serializeMBDateResult:(MBDateResult * _Nullable) value; -+(NSDictionary * _Nonnull) serializeMBStringResult:(MBStringResult * _Nullable) value; -+(NSNumber * _Nullable)serializeMBSide:(MBSide) value; ++(NSDictionary * _Nonnull) serializeMBDate:(MBDate * _Nonnull) date; +(NSString * _Nullable) encodeMBImage:(MBImage * _Nullable) image; +(NSDictionary * _Nonnull)serializeCGPoint:(CGPoint) point; +(NSDictionary * _Nonnull) serializeMBQuadrangle:(MBQuadrangle * _Nonnull) quad; diff --git a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBSerializationUtils.m b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBSerializationUtils.m index 765d3b8..68b21fe 100644 --- a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBSerializationUtils.m +++ b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/MBSerializationUtils.m @@ -9,56 +9,16 @@ @implementation MBSerializationUtils -+(NSDictionary *) serializeDay:(NSInteger)day month:(NSInteger)month year:(NSInteger)year { ++ (NSDictionary *)serializeMBDate:(MBDate *) date { return @{ - @"day" : [NSNumber numberWithInteger:day], - @"month" : [NSNumber numberWithInteger:month], - @"year" : [NSNumber numberWithInteger:year] + @"day" : @(date.day), + @"month" : @(date.month), + @"year" : @(date.year), + @"originalDateString" : date.originalDateString, + @"isFilledByDomainKnowledge" : [NSNumber numberWithBool:date.isFilledByDomainKnowledge], }; } -+(NSDictionary *) serializeNSDate:(NSDate*) value { - NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:value]; - return [MBSerializationUtils serializeDay:components.day month:components.month year:components.year]; -} - -+ (NSDictionary *)serializeMBDateResult:(MBDateResult *) value { - NSMutableDictionary *dict = [MBSerializationUtils serializeDay:value.day month:value.month year:value.year].mutableCopy; - [dict setValue:[MBSerializationUtils serializeMBStringResult:value.originalDateStringResult] forKey:@"originalDateStringResult"]; - [dict setValue:[NSNumber numberWithBool:value.isFilledByDomainKnowledge] forKey:@"isFilledByDomainKnowledge"]; - - return dict; -} - -+ (NSDictionary *)serializeMBStringResult:(MBStringResult *) value { - NSMutableDictionary *dict = [NSMutableDictionary dictionary]; - [dict setValue:[value valueForAlphabetType:MBAlphabetTypeLatin] forKey:@"latin"]; - [dict setValue:[value valueForAlphabetType:MBAlphabetTypeArabic] forKey:@"arabic"]; - [dict setValue:[value valueForAlphabetType:MBAlphabetTypeCyrillic] forKey:@"cyrillic"]; - [dict setValue:value.description forKey:@"description"]; - - NSMutableDictionary *location = [NSMutableDictionary dictionary]; - [location setValue:[MBSerializationUtils serializeCGRect:[value locationForAlphabetType:MBAlphabetTypeLatin]] forKey:@"latin"]; - [location setValue:[MBSerializationUtils serializeCGRect:[value locationForAlphabetType:MBAlphabetTypeArabic]] forKey:@"arabic"]; - [location setValue:[MBSerializationUtils serializeCGRect:[value locationForAlphabetType:MBAlphabetTypeCyrillic]] forKey:@"cyrillic"]; - [dict setValue:location forKey:@"location"]; - - NSMutableDictionary *side = [NSMutableDictionary dictionary]; - [side setValue:[NSNumber numberWithInteger:[value sideForAlphabetType:MBAlphabetTypeLatin]] forKey:@"latin"]; - [side setValue:[NSNumber numberWithInteger:[value sideForAlphabetType:MBAlphabetTypeArabic]] forKey:@"arabic"]; - [side setValue:[NSNumber numberWithInteger:[value sideForAlphabetType:MBAlphabetTypeCyrillic]] forKey:@"cyrillic"]; - [dict setValue:side forKey:@"side"]; - - return dict; -} - -+(NSNumber *)serializeMBSide:(MBSide) value { - if (value == MBSideNone) { - return nil; - } - return [NSNumber numberWithLong:value - 1]; -} - +(NSString *) encodeMBImage:(MBImage * _Nullable) image { const int COMPRESSED_IMAGE_QUALITY = 90; diff --git a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Overlays/Serialization/MBBlinkIdOverlaySettingsSerialization.m b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Overlays/Serialization/MBBlinkIdOverlaySettingsSerialization.m index 6c24aea..ca88f99 100644 --- a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Overlays/Serialization/MBBlinkIdOverlaySettingsSerialization.m +++ b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Overlays/Serialization/MBBlinkIdOverlaySettingsSerialization.m @@ -199,6 +199,20 @@ -(MBOverlayViewController *) createOverlayViewController:(NSDictionary *)jsonOve sett.defineSpecificMissingMandatoryFields = [showMandatoryFieldsMissing boolValue]; } } + + { + id showTorchButton = [jsonOverlaySettings valueForKey: @"showTorchButton"]; + if (showTorchButton != nil) { + sett.displayTorchButton = [showTorchButton boolValue]; + } + } + + { + id showCancelButton = [jsonOverlaySettings valueForKey: @"showCancelButton"]; + if (showCancelButton != nil) { + sett.displayCancelButton = [showCancelButton boolValue]; + } + } return [[MBBlinkIdOverlayViewController alloc] initWithSettings:sett recognizerCollection:recognizerCollection delegate:self]; } diff --git a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBBlinkIdMultiSideRecognizerWrapper.m b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBBlinkIdMultiSideRecognizerWrapper.m index 238560e..924bdca 100644 --- a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBBlinkIdMultiSideRecognizerWrapper.m +++ b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBBlinkIdMultiSideRecognizerWrapper.m @@ -154,10 +154,10 @@ @implementation MBBlinkIdMultiSideRecognizer (JsonSerialization) -(NSDictionary *) serializeResult { NSMutableDictionary* jsonResult = (NSMutableDictionary*)[super serializeResult]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.additionalAddressInformation] forKey:@"additionalAddressInformation"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.additionalNameInformation] forKey:@"additionalNameInformation"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.additionalOptionalAddressInformation] forKey:@"additionalOptionalAddressInformation"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.address] forKey:@"address"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.additionalAddressInformation] forKey:@"additionalAddressInformation"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.additionalNameInformation] forKey:@"additionalNameInformation"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.additionalOptionalAddressInformation] forKey:@"additionalOptionalAddressInformation"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.address] forKey:@"address"]; [jsonResult setValue:[NSNumber numberWithInteger:self.result.age] forKey:@"age"]; [jsonResult setValue:[MBBlinkIDSerializationUtils serializeAdditionalProcessingInfo:self.result.backAdditionalProcessingInfo] forKey:@"backAdditionalProcessingInfo"]; [jsonResult setValue:[MBSerializationUtils encodeMBImage:self.result.backCameraFrame] forKey:@"backCameraFrame"]; @@ -166,24 +166,25 @@ -(NSDictionary *) serializeResult { [jsonResult setValue:[MBBlinkIDSerializationUtils serializeVizResult:self.result.backVizResult] forKey:@"backVizResult"]; [jsonResult setValue:[MBSerializationUtils encodeMBImage:self.result.barcodeCameraFrame] forKey:@"barcodeCameraFrame"]; [jsonResult setValue:[MBBlinkIDSerializationUtils serializeBarcodeResult:self.result.barcodeResult] forKey:@"barcodeResult"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.bloodType] forKey:@"bloodType"]; [jsonResult setValue:[MBBlinkIDSerializationUtils serializeClassInfo:self.result.classInfo] forKey:@"classInfo"]; [jsonResult setValue:[MBBlinkIDSerializationUtils serializeDataMatchResult:self.result.dataMatchResult] forKey:@"dataMatch"]; - [jsonResult setValue:[MBSerializationUtils serializeMBDateResult:self.result.dateOfBirth] forKey:@"dateOfBirth"]; - [jsonResult setValue:[MBSerializationUtils serializeMBDateResult:self.result.dateOfExpiry] forKey:@"dateOfExpiry"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBDateResult:self.result.dateOfBirth] forKey:@"dateOfBirth"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBDateResult:self.result.dateOfExpiry] forKey:@"dateOfExpiry"]; [jsonResult setValue:[NSNumber numberWithBool:self.result.dateOfExpiryPermanent] forKey:@"dateOfExpiryPermanent"]; - [jsonResult setValue:[MBSerializationUtils serializeMBDateResult:self.result.dateOfIssue] forKey:@"dateOfIssue"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.documentAdditionalNumber] forKey:@"documentAdditionalNumber"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBDateResult:self.result.dateOfIssue] forKey:@"dateOfIssue"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.documentAdditionalNumber] forKey:@"documentAdditionalNumber"]; [jsonResult setValue:[NSNumber numberWithInteger:self.result.documentDataMatch] forKey:@"documentDataMatch"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.documentNumber] forKey:@"documentNumber"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.documentOptionalAdditionalNumber] forKey:@"documentOptionalAdditionalNumber"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.documentNumber] forKey:@"documentNumber"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.documentOptionalAdditionalNumber] forKey:@"documentOptionalAdditionalNumber"]; [jsonResult setValue:[MBBlinkIDSerializationUtils serializeDriverLicenseDetailedInfo:self.result.driverLicenseDetailedInfo] forKey:@"driverLicenseDetailedInfo"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.employer] forKey:@"employer"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.employer] forKey:@"employer"]; [jsonResult setValue:[NSNumber numberWithBool:self.result.expired] forKey:@"expired"]; [jsonResult setValue:[MBSerializationUtils encodeMBImage:self.result.faceImage] forKey:@"faceImage"]; [jsonResult setValue:[MBSerializationUtils serializeCGRect:self.result.faceImageLocation] forKey:@"faceImageLocation"]; [jsonResult setValue:[NSNumber numberWithInteger:self.result.faceImageSide] forKey:@"faceImageSide"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.fathersName] forKey:@"fathersName"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.firstName] forKey:@"firstName"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.fathersName] forKey:@"fathersName"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.firstName] forKey:@"firstName"]; [jsonResult setValue:[MBBlinkIDSerializationUtils serializeAdditionalProcessingInfo:self.result.frontAdditionalProcessingInfo] forKey:@"frontAdditionalProcessingInfo"]; [jsonResult setValue:[MBSerializationUtils encodeMBImage:self.result.frontCameraFrame] forKey:@"frontCameraFrame"]; [jsonResult setValue:[MBBlinkIDSerializationUtils serializeImageAnalysisResult:self.result.frontImageAnalysisResult] forKey:@"frontImageAnalysisResult"]; @@ -191,25 +192,26 @@ -(NSDictionary *) serializeResult { [jsonResult setValue:[MBBlinkIDSerializationUtils serializeVizResult:self.result.frontVizResult] forKey:@"frontVizResult"]; [jsonResult setValue:[MBSerializationUtils encodeMBImage:self.result.fullDocumentBackImage] forKey:@"fullDocumentBackImage"]; [jsonResult setValue:[MBSerializationUtils encodeMBImage:self.result.fullDocumentFrontImage] forKey:@"fullDocumentFrontImage"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.fullName] forKey:@"fullName"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.issuingAuthority] forKey:@"issuingAuthority"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.lastName] forKey:@"lastName"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.localizedName] forKey:@"localizedName"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.maritalStatus] forKey:@"maritalStatus"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.mothersName] forKey:@"mothersName"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.fullName] forKey:@"fullName"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.issuingAuthority] forKey:@"issuingAuthority"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.lastName] forKey:@"lastName"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.localizedName] forKey:@"localizedName"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.maritalStatus] forKey:@"maritalStatus"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.mothersName] forKey:@"mothersName"]; [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMrzResult:self.result.mrzResult] forKey:@"mrzResult"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.nationality] forKey:@"nationality"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.personalIdNumber] forKey:@"personalIdNumber"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.placeOfBirth] forKey:@"placeOfBirth"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.nationality] forKey:@"nationality"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.personalIdNumber] forKey:@"personalIdNumber"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.placeOfBirth] forKey:@"placeOfBirth"]; [jsonResult setValue:[NSNumber numberWithInteger:self.result.processingStatus] forKey:@"processingStatus"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.profession] forKey:@"profession"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.race] forKey:@"race"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.profession] forKey:@"profession"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.race] forKey:@"race"]; [jsonResult setValue:[NSNumber numberWithInteger:self.result.recognitionMode] forKey:@"recognitionMode"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.religion] forKey:@"religion"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.residentialStatus] forKey:@"residentialStatus"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.religion] forKey:@"religion"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.residentialStatus] forKey:@"residentialStatus"]; [jsonResult setValue:[NSNumber numberWithBool:self.result.scanningFirstSideDone] forKey:@"scanningFirstSideDone"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.sex] forKey:@"sex"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.sex] forKey:@"sex"]; [jsonResult setValue:[MBSerializationUtils encodeMBImage:self.result.signatureImage] forKey:@"signatureImage"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.sponsor] forKey:@"sponsor"]; return jsonResult; } diff --git a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBBlinkIdSingleSideRecognizerWrapper.m b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBBlinkIdSingleSideRecognizerWrapper.m index 5620cdf..ab6151b 100644 --- a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBBlinkIdSingleSideRecognizerWrapper.m +++ b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBBlinkIdSingleSideRecognizerWrapper.m @@ -136,51 +136,53 @@ @implementation MBBlinkIdSingleSideRecognizer (JsonSerialization) -(NSDictionary *) serializeResult { NSMutableDictionary* jsonResult = (NSMutableDictionary*)[super serializeResult]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.additionalAddressInformation] forKey:@"additionalAddressInformation"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.additionalNameInformation] forKey:@"additionalNameInformation"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.additionalOptionalAddressInformation] forKey:@"additionalOptionalAddressInformation"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.additionalAddressInformation] forKey:@"additionalAddressInformation"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.additionalNameInformation] forKey:@"additionalNameInformation"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.additionalOptionalAddressInformation] forKey:@"additionalOptionalAddressInformation"]; [jsonResult setValue:[MBBlinkIDSerializationUtils serializeAdditionalProcessingInfo:self.result.additionalProcessingInfo] forKey:@"additionalProcessingInfo"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.address] forKey:@"address"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.address] forKey:@"address"]; [jsonResult setValue:[NSNumber numberWithInteger:self.result.age] forKey:@"age"]; [jsonResult setValue:[MBSerializationUtils encodeMBImage:self.result.barcodeCameraFrame] forKey:@"barcodeCameraFrame"]; [jsonResult setValue:[MBBlinkIDSerializationUtils serializeBarcodeResult:self.result.barcodeResult] forKey:@"barcodeResult"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.bloodType] forKey:@"bloodType"]; [jsonResult setValue:[MBSerializationUtils encodeMBImage:self.result.cameraFrame] forKey:@"cameraFrame"]; [jsonResult setValue:[MBBlinkIDSerializationUtils serializeClassInfo:self.result.classInfo] forKey:@"classInfo"]; - [jsonResult setValue:[MBSerializationUtils serializeMBDateResult:self.result.dateOfBirth] forKey:@"dateOfBirth"]; - [jsonResult setValue:[MBSerializationUtils serializeMBDateResult:self.result.dateOfExpiry] forKey:@"dateOfExpiry"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBDateResult:self.result.dateOfBirth] forKey:@"dateOfBirth"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBDateResult:self.result.dateOfExpiry] forKey:@"dateOfExpiry"]; [jsonResult setValue:[NSNumber numberWithBool:self.result.dateOfExpiryPermanent] forKey:@"dateOfExpiryPermanent"]; - [jsonResult setValue:[MBSerializationUtils serializeMBDateResult:self.result.dateOfIssue] forKey:@"dateOfIssue"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.documentAdditionalNumber] forKey:@"documentAdditionalNumber"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.documentNumber] forKey:@"documentNumber"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.documentOptionalAdditionalNumber] forKey:@"documentOptionalAdditionalNumber"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBDateResult:self.result.dateOfIssue] forKey:@"dateOfIssue"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.documentAdditionalNumber] forKey:@"documentAdditionalNumber"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.documentNumber] forKey:@"documentNumber"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.documentOptionalAdditionalNumber] forKey:@"documentOptionalAdditionalNumber"]; [jsonResult setValue:[MBBlinkIDSerializationUtils serializeDriverLicenseDetailedInfo:self.result.driverLicenseDetailedInfo] forKey:@"driverLicenseDetailedInfo"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.employer] forKey:@"employer"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.employer] forKey:@"employer"]; [jsonResult setValue:[NSNumber numberWithBool:self.result.expired] forKey:@"expired"]; [jsonResult setValue:[MBSerializationUtils encodeMBImage:self.result.faceImage] forKey:@"faceImage"]; [jsonResult setValue:[MBSerializationUtils serializeCGRect:self.result.faceImageLocation] forKey:@"faceImageLocation"]; [jsonResult setValue:[NSNumber numberWithInteger:self.result.faceImageSide] forKey:@"faceImageSide"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.fathersName] forKey:@"fathersName"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.firstName] forKey:@"firstName"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.fathersName] forKey:@"fathersName"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.firstName] forKey:@"firstName"]; [jsonResult setValue:[MBSerializationUtils encodeMBImage:self.result.fullDocumentImage] forKey:@"fullDocumentImage"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.fullName] forKey:@"fullName"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.fullName] forKey:@"fullName"]; [jsonResult setValue:[MBBlinkIDSerializationUtils serializeImageAnalysisResult:self.result.imageAnalysisResult] forKey:@"imageAnalysisResult"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.issuingAuthority] forKey:@"issuingAuthority"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.lastName] forKey:@"lastName"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.localizedName] forKey:@"localizedName"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.maritalStatus] forKey:@"maritalStatus"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.mothersName] forKey:@"mothersName"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.issuingAuthority] forKey:@"issuingAuthority"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.lastName] forKey:@"lastName"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.localizedName] forKey:@"localizedName"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.maritalStatus] forKey:@"maritalStatus"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.mothersName] forKey:@"mothersName"]; [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMrzResult:self.result.mrzResult] forKey:@"mrzResult"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.nationality] forKey:@"nationality"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.personalIdNumber] forKey:@"personalIdNumber"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.placeOfBirth] forKey:@"placeOfBirth"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.nationality] forKey:@"nationality"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.personalIdNumber] forKey:@"personalIdNumber"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.placeOfBirth] forKey:@"placeOfBirth"]; [jsonResult setValue:[NSNumber numberWithInteger:self.result.processingStatus] forKey:@"processingStatus"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.profession] forKey:@"profession"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.race] forKey:@"race"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.profession] forKey:@"profession"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.race] forKey:@"race"]; [jsonResult setValue:[NSNumber numberWithInteger:self.result.recognitionMode] forKey:@"recognitionMode"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.religion] forKey:@"religion"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.residentialStatus] forKey:@"residentialStatus"]; - [jsonResult setValue:[MBSerializationUtils serializeMBStringResult:self.result.sex] forKey:@"sex"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.religion] forKey:@"religion"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.residentialStatus] forKey:@"residentialStatus"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.sex] forKey:@"sex"]; [jsonResult setValue:[MBSerializationUtils encodeMBImage:self.result.signatureImage] forKey:@"signatureImage"]; + [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBStringResult:self.result.sponsor] forKey:@"sponsor"]; [jsonResult setValue:[MBBlinkIDSerializationUtils serializeVizResult:self.result.vizResult] forKey:@"vizResult"]; return jsonResult; diff --git a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBIdBarcodeRecognizerWrapper.m b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBIdBarcodeRecognizerWrapper.m index 01ca810..df4aed8 100644 --- a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBIdBarcodeRecognizerWrapper.m +++ b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBIdBarcodeRecognizerWrapper.m @@ -35,9 +35,9 @@ -(NSDictionary *) serializeResult { [jsonResult setValue:[NSNumber numberWithInteger:self.result.age] forKey:@"age"]; [jsonResult setValue:[NSNumber numberWithInteger:self.result.barcodeType] forKey:@"barcodeType"]; [jsonResult setValue:self.result.city forKey:@"city"]; - [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBDate:self.result.dateOfBirth] forKey:@"dateOfBirth"]; - [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBDate:self.result.dateOfExpiry] forKey:@"dateOfExpiry"]; - [jsonResult setValue:[MBBlinkIDSerializationUtils serializeMBDate:self.result.dateOfIssue] forKey:@"dateOfIssue"]; + [jsonResult setValue:[MBSerializationUtils serializeMBDate:self.result.dateOfBirth] forKey:@"dateOfBirth"]; + [jsonResult setValue:[MBSerializationUtils serializeMBDate:self.result.dateOfExpiry] forKey:@"dateOfExpiry"]; + [jsonResult setValue:[MBSerializationUtils serializeMBDate:self.result.dateOfIssue] forKey:@"dateOfIssue"]; [jsonResult setValue:self.result.documentAdditionalNumber forKey:@"documentAdditionalNumber"]; [jsonResult setValue:self.result.documentNumber forKey:@"documentNumber"]; [jsonResult setValue:[NSNumber numberWithInteger:self.result.documentType] forKey:@"documentType"]; diff --git a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBUsdlCombinedRecognizerWrapper.m b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBUsdlCombinedRecognizerWrapper.m index cc03a0c..0d44f7d 100644 --- a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBUsdlCombinedRecognizerWrapper.m +++ b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBUsdlCombinedRecognizerWrapper.m @@ -81,9 +81,9 @@ -(NSDictionary *) serializeResult { [jsonResult setValue:self.result.restrictions forKey:@"restrictions"]; [jsonResult setValue:self.result.endorsements forKey:@"endorsements"]; [jsonResult setValue:self.result.vehicleClass forKey:@"vehicleClass"]; - [jsonResult setValue:[MBSerializationUtils serializeMBDateResult:self.result.dateOfBirth] forKey:@"dateOfBirth"]; - [jsonResult setValue:[MBSerializationUtils serializeMBDateResult:self.result.dateOfIssue] forKey:@"dateOfIssue"]; - [jsonResult setValue:[MBSerializationUtils serializeMBDateResult:self.result.dateOfExpiry] forKey:@"dateOfExpiry"]; + [jsonResult setValue:[MBSerializationUtils serializeMBDate:self.result.dateOfBirth] forKey:@"dateOfBirth"]; + [jsonResult setValue:[MBSerializationUtils serializeMBDate:self.result.dateOfIssue] forKey:@"dateOfIssue"]; + [jsonResult setValue:[MBSerializationUtils serializeMBDate:self.result.dateOfExpiry] forKey:@"dateOfExpiry"]; [jsonResult setValue:[NSNumber numberWithInteger:self.result.age] forKey:@"age"]; [jsonResult setValue:[self.result optionalElements] forKey:@"optionalElements"]; diff --git a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBUsdlRecognizerWrapper.m b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBUsdlRecognizerWrapper.m index dba28a8..d636f59 100644 --- a/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBUsdlRecognizerWrapper.m +++ b/BlinkID/src/ios/MicroblinkModule/MicroblinkModule/Recognizers/Wrappers/MBUsdlRecognizerWrapper.m @@ -60,9 +60,9 @@ -(NSDictionary *) serializeResult { [jsonResult setValue:self.result.restrictions forKey:@"restrictions"]; [jsonResult setValue:self.result.endorsements forKey:@"endorsements"]; [jsonResult setValue:self.result.vehicleClass forKey:@"vehicleClass"]; - [jsonResult setValue:[MBSerializationUtils serializeMBDateResult:self.result.dateOfBirth] forKey:@"dateOfBirth"]; - [jsonResult setValue:[MBSerializationUtils serializeMBDateResult:self.result.dateOfIssue] forKey:@"dateOfIssue"]; - [jsonResult setValue:[MBSerializationUtils serializeMBDateResult:self.result.dateOfExpiry] forKey:@"dateOfExpiry"]; + [jsonResult setValue:[MBSerializationUtils serializeMBDate:self.result.dateOfBirth] forKey:@"dateOfBirth"]; + [jsonResult setValue:[MBSerializationUtils serializeMBDate:self.result.dateOfIssue] forKey:@"dateOfIssue"]; + [jsonResult setValue:[MBSerializationUtils serializeMBDate:self.result.dateOfExpiry] forKey:@"dateOfExpiry"]; [jsonResult setValue:[NSNumber numberWithInteger:self.result.age] forKey:@"age"]; [jsonResult setValue:[self.result optionalElements] forKey:@"optionalElements"]; diff --git a/BlinkID/types.js b/BlinkID/types.js index 3ac5af0..83c8505 100644 --- a/BlinkID/types.js +++ b/BlinkID/types.js @@ -698,7 +698,13 @@ export const Region = Object.freeze( Para: 128, Parana: 129, Pernambuco: 130, - SantaCatarina: 131 + SantaCatarina: 131, + AndhraPradesh: 132, + Ceara: 133, + Goias: 134, + GuerreroAcapulcoDeJuarez: 135, + Haryana: 136, + Sergipe: 137, } ); @@ -768,7 +774,12 @@ export const Type = Object.freeze( UniformedServicesId: 58, ImmigrantVisa: 59, ConsularVoterId: 60, - TwicCard: 61 + TwicCard: 61, + ExitEntryPermit: 62, + MainlandTravelPermitTaiwan: 63, + NbiClearance: 64, + ProofOfRegistration: 65, + TemporaryProtectionPermit: 66, } ); From 2a2e3ff7defef29fbba2fac740dbeb1d23f628f7 Mon Sep 17 00:00:00 2001 From: mparadina Date: Wed, 3 Apr 2024 13:07:01 +0200 Subject: [PATCH 02/16] Update SDK version --- BlinkID/blinkid-react-native.podspec | 2 +- BlinkID/package.json | 2 +- BlinkID/src/android/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/BlinkID/blinkid-react-native.podspec b/BlinkID/blinkid-react-native.podspec index ec6a3d6..d52e5c5 100644 --- a/BlinkID/blinkid-react-native.podspec +++ b/BlinkID/blinkid-react-native.podspec @@ -17,7 +17,7 @@ Pod::Spec.new do |s| s.header_dir = "blinkid-react-native" s.dependency 'React' - s.dependency 'PPBlinkID', '~> 6.5.0' + s.dependency 'PPBlinkID', '~> 6.6.0' s.frameworks = 'UIKit' end diff --git a/BlinkID/package.json b/BlinkID/package.json index 80c947b..b217ac8 100644 --- a/BlinkID/package.json +++ b/BlinkID/package.json @@ -1,6 +1,6 @@ { "name": "blinkid-react-native", - "version": "6.5.0", + "version": "6.6.0", "description": "A small and powerful ID card scanning library. Powered by Microblink (www.microblink.com).", "main": "index.js", "repository": { diff --git a/BlinkID/src/android/build.gradle b/BlinkID/src/android/build.gradle index 32b07de..bf06a24 100644 --- a/BlinkID/src/android/build.gradle +++ b/BlinkID/src/android/build.gradle @@ -26,7 +26,7 @@ android { dependencies { implementation 'com.facebook.react:react-native:+' - implementation('com.microblink:blinkid:6.5.0@aar') { + implementation('com.microblink:blinkid:6.6.1@aar') { transitive = true } } From a459aa1e96b8a0930e75d3cae8e83e398c61fa26 Mon Sep 17 00:00:00 2001 From: mparadina Date: Wed, 3 Apr 2024 13:17:45 +0200 Subject: [PATCH 03/16] Update sample app index.js and init script --- initReactNativeSampleApp.sh | 7 +- sample_files/index.js | 273 ++++++++++++++++++++++++++++++++---- 2 files changed, 247 insertions(+), 33 deletions(-) diff --git a/initReactNativeSampleApp.sh b/initReactNativeSampleApp.sh index ba5bd2d..7dfaf0e 100755 --- a/initReactNativeSampleApp.sh +++ b/initReactNativeSampleApp.sh @@ -19,7 +19,7 @@ if [ "$IS_LOCAL_BUILD" = true ]; then # use directly source code from this repo instead of npm package # from RN 0.57 symlink does not work any more npm pack $blink_id_plugin_path - npm install --save blinkid-react-native-6.5.0.tgz + npm install --save blinkid-react-native-6.6.0.tgz #pushd node_modules #ln -s $blink_id_plugin_path blinkid-react-native #popd @@ -29,6 +29,9 @@ else npm install --save blinkid-react-native fi +# react-native-image-picker plugin needed only for sample application with DirectAPI to get the document images +npm install react-native-image-picker + # Auto-linking is done in 0.6 versions # enter into android project folder @@ -105,4 +108,4 @@ popd echo "Go to React Native project folder: cd $appName" echo "To run on Android execute: npx react-native run-android" -echo "To run on iOS: open $appName/ios/$appName.xcworkspace; set your development team and add Privacy - Camera Usage Description key to Your info.plist file and press run" +echo "To run on iOS: open $appName/ios/$appName.xcworkspace; set your development team; add Privacy - Camera Usage Description and Privacy - Photo Library Usage Description keys to your info.plist file and press run" diff --git a/sample_files/index.js b/sample_files/index.js index 12ee967..d363f2c 100644 --- a/sample_files/index.js +++ b/sample_files/index.js @@ -5,6 +5,8 @@ import React, { Component } from 'react'; import * as BlinkIDReactNative from 'blinkid-react-native'; +import * as ImagePicker from 'react-native-image-picker'; + import { AppRegistry, Platform, @@ -18,9 +20,9 @@ import { const licenseKey = Platform.select({ // iOS license key for applicationID: com.microblink.sample - ios: 'sRwCABVjb20ubWljcm9ibGluay5zYW1wbGUBbGV5SkRjbVZoZEdWa1QyNGlPakUzTURnd09EUTFNamM1TnpJc0lrTnlaV0YwWldSR2IzSWlPaUkwT1RabFpEQXpaUzAwT0RBeExUUXpZV1F0WVRrMU5DMDBNemMyWlRObU9UTTVNR1FpZlE9PTYmqMAMVMiFzaNDv15W9/CxDFVRDWRjok+uP0GtswDV4XTVGmhbivKDEb9Gtk2iMzf29qFWF8aUjIES4QSQFJG0xfBXZhluSk7lt4A959aHAZ0+BWgDnqZUPJAF2jZd0Pl2Kt1oDxLtqtf8V/RR+dPYzUV0PEA=', + ios: 'sRwCABVjb20ubWljcm9ibGluay5zYW1wbGUBbGV5SkRjbVZoZEdWa1QyNGlPakUzTVRJeE16YzFPRGN3TWpZc0lrTnlaV0YwWldSR2IzSWlPaUprWkdRd05qWmxaaTAxT0RJekxUUXdNRGd0T1RRNE1DMDFORFU0WWpBeFlUVTJZamdpZlE9PYvwosgRYNp1QRJTln5X2YwfBhxia2Zmcp6EaOwdXfDpW992EyNseFmSASo2Yx1zJEEsyGudDGYXE0g16KZtvJx+kIgS66juVst+kf0n38GlYTVZbmLDANY7reEj8J2GHVHY9Kk/OgD2WXDcbpJE9nZmPMgM5Vr5', // android license key for applicationID: com.microblink.sample - android: 'sRwCABVjb20ubWljcm9ibGluay5zYW1wbGUAbGV5SkRjbVZoZEdWa1QyNGlPakUzTURnd09EUTNNelkxTmprc0lrTnlaV0YwWldSR2IzSWlPaUkwT1RabFpEQXpaUzAwT0RBeExUUXpZV1F0WVRrMU5DMDBNemMyWlRObU9UTTVNR1FpZlE9PRIv5OawGAVdpvmuz+999CsJyIAgtV3h96BJo1Fq+xBZnKDoKhL01jBUrxC0E4+EeWoTuEtPPcDte2KHgjOP7Z4y+Mk9ihWDHTjgANWfFwG2Gd7HYJxgwcYQsTvICqS1CBklIILTfbXahwtD4ZKh0ghaxUJf7gU=' + android: 'sRwCABVjb20ubWljcm9ibGluay5zYW1wbGUAbGV5SkRjbVZoZEdWa1QyNGlPakUzTVRJeE16YzJPVEl5Tmpjc0lrTnlaV0YwWldSR2IzSWlPaUprWkdRd05qWmxaaTAxT0RJekxUUXdNRGd0T1RRNE1DMDFORFU0WWpBeFlUVTJZamdpZlE9PbyzAUXcMwR/Z4tMjDjtuRZzCpHBlMqUGaxDKaBeki4WI/hGXZZ9Ntv+KPCCt3jx2ibipTuGzUV1nbBIunAG6aw5tq+S5aSnQ6xWs5YMtyxeNatDxmvbhtRXYLQ61cICRW0VgY7/Qh/KfyI51kL/I5YiGRnBP1ZJ' }) var renderIf = function(condition, content) { @@ -49,7 +51,7 @@ function buildDateResult(result, key) { export default class Sample extends Component { constructor(props) { super(props); - + this.pickImage = this.pickImage.bind(this); this.state = { showFrontImageDocument: false, resultFrontImageDocument: '', @@ -63,17 +65,10 @@ export default class Sample extends Component { licenseKeyErrorMessage: '' }; } - + /* BlinkID scanning using the camera */ async scan() { try { - // to scan any machine readable travel document (passports, visas and IDs with - // machine readable zone), use MrtdRecognizer - // var mrtdRecognizer = new BlinkIDReactNative.MrtdRecognizer(); - // mrtdRecognizer.returnFullDocumentImage = true; - - // var mrtdSuccessFrameGrabber = new BlinkIDReactNative.SuccessFrameGrabberRecognizer(mrtdRecognizer); - // BlinkIDMultiSideRecognizer automatically classifies different document types and scans the data from // the supported document var blinkIdMultiSideRecognizer = new BlinkIDReactNative.BlinkIdMultiSideRecognizer(); @@ -124,12 +119,203 @@ export default class Sample extends Component { this.setState(newState); } } catch (error) { - console.log(error); this.setState({ showFrontImageDocument: false, resultFrontImageDocument: '', showBackImageDocument: false, resultBackImageDocument: '', showImageFace: false, resultImageFace: '', results: 'Scanning has been cancelled', showSuccessFrame: false, successFrame: ''}); } } + /* BlinkID scanning with DirectAPI and the BlinkIDMultiSide recognizer. + Best used for getting the information from both front and backside information from various documents */ + async directApiMultiSide() { + try { + // Get the front side of the document and return it in the Base64 format + let frontImage = await this.pickImage(); + // Get the back side of the document and return it in the Base64 format + let backImage = await this.pickImage(); + + const recognizer = new BlinkIDReactNative.BlinkIdMultiSideRecognizer(); + recognizer.returnFullDocumentImage = true; + recognizer.returnFaceImage = true; + + /* Uncomment line 143 if you're using DirectAPI and you are sending cropped images for processing. + The processing will most likely not work if cropped images are being sent with the scanCroppedDocumentImage property being set to false */ + + //recognizer.scanCroppedDocumentImage = true; + + // Pass the recogizer along with the license and the Base64 images to the DirectAPI method of processing + const scanningResults = await BlinkIDReactNative.BlinkID.scanWithDirectApi( + new BlinkIDReactNative.RecognizerCollection([recognizer]), + frontImage, + backImage, + licenseKey + ); + + if (scanningResults) { + if (scanningResults.length == 0) { + this.setState({ showFrontImageDocument: false, + resultFrontImageDocument: '', + showBackImageDocument: false, + resultBackImageDocument: '', + showImageFace: false, + resultImageFace: '', + results: "Could not extract the images with DirectAPI!", + showSuccessFrame: false, + successFrame: ''}); + } else { + + let newState = { + showFrontImageDocument: false, + resultFrontImageDocument: '', + showBackImageDocument: false, + resultBackImageDocument: '', + showImageFace: false, + resultImageFace: '', + results: '', + showSuccessFrame: false, + successFrame: '' + }; + + for (let i = 0; i < scanningResults.length; ++i) { + let localState = this.handleResult(scanningResults[i]); + newState.showFrontImageDocument = newState.showFrontImageDocument || localState.showFrontImageDocument; + if (localState.showFrontImageDocument) { + newState.resultFrontImageDocument = localState.resultFrontImageDocument; + } + newState.showBackImageDocument = newState.showBackImageDocument || localState.showBackImageDocument; + if (localState.showBackImageDocument) { + newState.resultBackImageDocument = localState.resultBackImageDocument; + } + newState.showImageFace = newState.showImageFace || localState.showImageFace; + if (localState.resultImageFace) { + newState.resultImageFace = localState.resultImageFace; + } + newState.results += localState.results; + newState.showSuccessFrame = newState.showSuccessFrame || localState.showSuccessFrame; + if (localState.successFrame) { + newState.successFrame = localState.successFrame; + } + + } + newState.results += '\n'; + this.setState(newState); + + } + } + } catch (error) { + this.setState({ showFrontImageDocument: false, resultFrontImageDocument: '', showBackImageDocument: false, resultBackImageDocument: '', showImageFace: false, resultImageFace: '', results: "The images could not be extracted with DirectAPI!", showSuccessFrame: false, + successFrame: ''}); + } + } + + /* BlinkID scanning with DirectAPI and the BlinkIDSingleSide recognizer. + Best used for getting the information from only one side of the various documents */ + async directApiSingleSide() { + try { + // Get the document image (it can be either front or back) and return it in the Base64 format + let image = await this.pickImage(); + + const recognizer = new BlinkIDReactNative.BlinkIdMultiSideRecognizer(); + recognizer.returnFullDocumentImage = true; + recognizer.returnFaceImage = true; + + /* Uncomment line 224 if you're using DirectAPI and you are sending cropped images for processing. + The processing will most likely not work if cropped images are being sent with the scanCroppedDocumentImage property being set to false */ + + //recognizer.scanCroppedDocumentImage = true; + + // Pass the recogizer along with the license and the Base64 image to the DirectAPI method of processing + const scanningResults = await BlinkIDReactNative.BlinkID.scanWithDirectApi( + new BlinkIDReactNative.RecognizerCollection([recognizer]), + image, + null, + licenseKey + ); + + if (scanningResults) { + if (scanningResults.length == 0) { + this.setState({ showFrontImageDocument: false, + resultFrontImageDocument: '', + showBackImageDocument: false, + resultBackImageDocument: '', + showImageFace: false, + resultImageFace: '', + results: "Could not extract the image with DirectAPI!", + showSuccessFrame: false, + successFrame: ''}); + } else { + + let newState = { + showFrontImageDocument: false, + resultFrontImageDocument: '', + showBackImageDocument: false, + resultBackImageDocument: '', + showImageFace: false, + resultImageFace: '', + results: '', + showSuccessFrame: false, + successFrame: '' + }; + + for (let i = 0; i < scanningResults.length; ++i) { + let localState = this.handleResult(scanningResults[i]); + newState.showFrontImageDocument = newState.showFrontImageDocument || localState.showFrontImageDocument; + if (localState.showFrontImageDocument) { + newState.resultFrontImageDocument = localState.resultFrontImageDocument; + } + newState.showBackImageDocument = newState.showBackImageDocument || localState.showBackImageDocument; + if (localState.showBackImageDocument) { + newState.resultBackImageDocument = localState.resultBackImageDocument; + } + newState.showImageFace = newState.showImageFace || localState.showImageFace; + if (localState.resultImageFace) { + newState.resultImageFace = localState.resultImageFace; + } + newState.results += localState.results; + newState.showSuccessFrame = newState.showSuccessFrame || localState.showSuccessFrame; + if (localState.successFrame) { + newState.successFrame = localState.successFrame; + } + + } + newState.results += '\n'; + this.setState(newState); + + } + } + + } catch (error) { + this.setState({ showFrontImageDocument: false, resultFrontImageDocument: '', showBackImageDocument: false, resultBackImageDocument: '', showImageFace: false, resultImageFace: '', results: error, showSuccessFrame: false, + successFrame: ''}); + } + } + + /* A helper method for handling the picked document image */ + async pickImage() { + return new Promise((resolve, reject) => { + ImagePicker.launchImageLibrary({ + mediaType: 'photo', + includeBase64: true, + }, response => { + if (response.didCancel) { + reject('Image selection canceled'); + } else if (response.error) { + reject(response.error); + } else { + if (response.assets && response.assets.length > 0) { + const base64Data = response.assets[0].base64; + if (base64Data) { + resolve(base64Data); + } else { + reject('Base64 data not found in response'); + } + } else { + reject('No assets found in response'); + } + } + }); + }); + } + handleResult(result) { var localState = { showFrontImageDocument: false, @@ -142,7 +328,7 @@ export default class Sample extends Component { successFrame: '' }; - if (result instanceof BlinkIDReactNative.BlinkIdMultiSideRecognizerResult) { + if (result instanceof BlinkIDReactNative.BlinkIdMultiSideRecognizerResult || result instanceof BlinkIDReactNative.BlinkIdSingleSideRecognizerResult) { let blinkIdResult = result; let resultString = @@ -173,14 +359,14 @@ export default class Sample extends Component { buildResult(blinkIdResult.processingStatus.description, "Processing status") + buildResult(blinkIdResult.recognitionMode.description, "Recognition mode") ; - - let dataMatchResult = blinkIdResult.dataMatch; - resultString += - buildResult(dataMatchResult.stateForWholeDocument, "State for the whole document") + - buildResult(dataMatchResult.states[0].state, "dateOfBirth") + - buildResult(dataMatchResult.states[1].state, "dateOfExpiry") + - buildResult(dataMatchResult.states[2].state, "documentNumber"); - + if (result instanceof BlinkIDReactNative.BlinkIdMultiSideRecognizerResult) { + let dataMatchResult = blinkIdResult.dataMatch; + resultString += + buildResult(dataMatchResult.stateForWholeDocument, "State for the whole document") + + buildResult(dataMatchResult.states[0].state, "dateOfBirth") + + buildResult(dataMatchResult.states[1].state, "dateOfExpiry") + + buildResult(dataMatchResult.states[2].state, "documentNumber"); + } let licenceInfo = blinkIdResult.driverLicenseDetailedInfo; if (licenceInfo) { @@ -204,13 +390,22 @@ export default class Sample extends Component { localState.results += resultString; // Document image is returned as Base64 encoded JPEG - if (blinkIdResult.fullDocumentFrontImage) { - localState.showFrontImageDocument = true; - localState.resultFrontImageDocument = 'data:image/jpg;base64,' + blinkIdResult.fullDocumentFrontImage; - } - if (blinkIdResult.fullDocumentBackImage) { - localState.showBackImageDocument = true; - localState.resultBackImageDocument = 'data:image/jpg;base64,' + blinkIdResult.fullDocumentBackImage; + if (result instanceof BlinkIDReactNative.BlinkIdMultiSideRecognizerResult) { + if (blinkIdResult.fullDocumentFrontImage) { + localState.showFrontImageDocument = true; + localState.resultFrontImageDocument = 'data:image/jpg;base64,' + blinkIdResult.fullDocumentFrontImage; + } + if (blinkIdResult.fullDocumentBackImage) { + localState.showBackImageDocument = true; + localState.resultBackImageDocument = 'data:image/jpg;base64,' + blinkIdResult.fullDocumentBackImage; + } + } else { + if (blinkIdResult.fullDocumentImage) { + localState.showFrontImageDocument = true; + localState.resultFrontImageDocument = 'data:image/jpg;base64,' + blinkIdResult.fullDocumentImage; + localState.showBackImageDocument = false; + localState.resultBackImageDocument = ""; + } } // Face image is returned as Base64 encoded JPEG if (blinkIdResult.faceImage) { @@ -236,6 +431,16 @@ export default class Sample extends Component { title="Scan" color="#48B2E8" /> +