/// <summary> /// Button click event handler that will start the scanning procedure. /// </summary> /// <param name="sender">Sender.</param> /// <param name="e">E.</param> void StartScan(object sender, EventArgs e) { // license keys must be set before creating Recognizer, othervise InvalidLicenseKeyException will be thrown // the following code creates and sets up implementation of MrtdRecognizer mrtdRecognizer = DependencyService.Get <IMrtdRecognizer>(DependencyFetchTarget.NewInstance); mrtdRecognizer.ReturnFullDocumentImage = true; // success frame grabber recognizer must be constructed with reference to its slave recognizer, // so we need to use factory to avoid DependencyService's limitations mrtdSuccessFrameGrabberRecognizer = DependencyService.Get <ISuccessFrameGrabberRecognizerFactory>(DependencyFetchTarget.NewInstance).CreateSuccessFrameGrabberRecognizer(mrtdRecognizer); // the following code creates and sets up implementation of UsdlRecognizer usdlRecognizer = DependencyService.Get <IUsdlRecognizer>(DependencyFetchTarget.NewInstance); // success frame grabber recognizer must be constructed with reference to its slave recognizer, // so we need to use factory to avoid DependencyService's limitations usdlSuccessFrameGrabberRecognizer = DependencyService.Get <ISuccessFrameGrabberRecognizerFactory>(DependencyFetchTarget.NewInstance).CreateSuccessFrameGrabberRecognizer(usdlRecognizer); // the following code creates and sets up implementation of EudlRecognizer eudlRecognizer = DependencyService.Get <IEudlRecognizer>(DependencyFetchTarget.NewInstance); eudlRecognizer.ReturnFaceImage = true; eudlRecognizer.ReturnFullDocumentImage = true; // success frame grabber recognizer must be constructed with reference to its slave recognizer, // so we need to use factory to avoid DependencyService's limitations eudlSuccessFrameGrabberRecognizer = DependencyService.Get <ISuccessFrameGrabberRecognizerFactory>(DependencyFetchTarget.NewInstance).CreateSuccessFrameGrabberRecognizer(eudlRecognizer); // first create a recognizer collection from all recognizers that you want to use in recognition // if some recognizer is wrapped with SuccessFrameGrabberRecognizer, then you should use only the wrapped one var recognizerCollection = DependencyService.Get <IRecognizerCollectionFactory>().CreateRecognizerCollection(mrtdSuccessFrameGrabberRecognizer, usdlSuccessFrameGrabberRecognizer, eudlSuccessFrameGrabberRecognizer); // using recognizerCollection, create overlay settings that will define the UI that will be used // there are several available overlay settings classes in Microblink.Forms.Core.Overlays namespace // document overlay settings is best for scanning identity documents var documentOverlaySettings = DependencyService.Get <IDocumentOverlaySettingsFactory>().CreateDocumentOverlaySettings(recognizerCollection); // start scanning blinkID.Scan(documentOverlaySettings); }
public BlinkIDPage() { InitializeComponent(); // before obtaining any of the recognizer's implementations from DependencyService, it is required // to obtain instance of IMicroblinkScanner and set the license key. // Failure to do so will crash your app. var microblinkFactory = DependencyService.Get <IMicroblinkScannerFactory>(); // license keys are different for iOS and Android and depend on iOS bundleID/Android application ID // in your app, you may obtain the correct license key for your platform via DependencyService from // your Droid/iOS projects string licenseKey; // both these license keys are demo license keys for bundleID/applicationID com.microblink.xamarin.blinkid if (Device.RuntimePlatform == Device.iOS) { licenseKey = "sRwAAAEeY29tLm1pY3JvYmxpbmsueGFtYXJpbi5ibGlua2lks3unDF2B9jpa6FeAx5h89osjSFXqQRtWjes0WSEXe3rubgFApHsFdSF2oJZL0MhSL18AgbaLmPiOT3RFu+lqtKtpsjqRfxEVmc9cU98GnjciEeAOC331OUeT5R1p7zKqsenX/3IytQJuMG4ruEaRXc5746y/Kv8ch0XDgv/nRu4siNlvpkjsUjkeyokbUUwi+uzL6t2G4V/sX0SXTMWPjG7zjtW4ovwpGs6fct/dpBJQfzRQNCn9kg=="; } else { licenseKey = "sRwAAAAeY29tLm1pY3JvYmxpbmsueGFtYXJpbi5ibGlua2lke7qv4oIhH4ywlU8/ZIc8ttT74daTKaSlmN1khLj7e+CR+5SB1pjJQuNbEIlPAVl67d85JYqkRXxuWzKbaSWuPI7MzpKrXphakcSuyLYATcHaZMHh2rJvFFfYWXEWz6GZJSRk4TZmdqWBsjdNEJBe2F8hb/CEuKgkZkoESgLsCEYWf6Se+IkRBhRcmmOrcqJAf5YzhNbhlClR7GmNEPZheayI+i784TvIAnHFGloQF52KSF8YFm3dTw=="; } // since DependencyService requires implementations to have default constructor, a factory is needed // to construct implementation of IMicroblinkScanner with given license key blinkID = microblinkFactory.CreateMicroblinkScanner(licenseKey); // license keys must be set before creating Recognizer, othervise InvalidLicenseKeyException will be thrown // the following code creates and sets up implementation of MrtdRecognizer mrtdRecognizer = DependencyService.Get <IMrtdRecognizer>(); mrtdRecognizer.ReturnFullDocumentImage = true; // success frame grabber recognizer must be constructed with reference to its slave recognizer, // so we need to use factory to avoid DependencyService's limitations mrtdSuccessFrameGrabberRecognizer = DependencyService.Get <ISuccessFrameGrabberRecognizerFactory>().CreateSuccessFrameGrabberRecognizer(mrtdRecognizer); // the following code creates and sets up implementation of UsdlRecognizer usdlRecognizer = DependencyService.Get <IUsdlRecognizer>(); // success frame grabber recognizer must be constructed with reference to its slave recognizer, // so we need to use factory to avoid DependencyService's limitations usdlSuccessFrameGrabberRecognizer = DependencyService.Get <ISuccessFrameGrabberRecognizerFactory>().CreateSuccessFrameGrabberRecognizer(usdlRecognizer); // the following code creates and sets up implementation of EudlRecognizer eudlRecognizer = DependencyService.Get <IEudlRecognizer>(); eudlRecognizer.ReturnFaceImage = true; eudlRecognizer.ReturnFullDocumentImage = true; // success frame grabber recognizer must be constructed with reference to its slave recognizer, // so we need to use factory to avoid DependencyService's limitations eudlSuccessFrameGrabberRecognizer = DependencyService.Get <ISuccessFrameGrabberRecognizerFactory>().CreateSuccessFrameGrabberRecognizer(eudlRecognizer); // subscribe to scanning done message MessagingCenter.Subscribe <Messages.ScanningDoneMessage> (this, Messages.ScanningDoneMessageId, (sender) => { ImageSource faceImageSource = null; ImageSource fullDocumentImageSource = null; ImageSource successFrameImageSource = null; string stringResult = "No valid results."; // if user cancelled scanning, sender.ScanningCancelled will be true if (sender.ScanningCancelled) { stringResult = "Scanning cancelled"; } else { // otherwise, one or more recognizers used in RecognizerCollection (see StartScan method below) // will contain result // if specific recognizer's result's state is Valid, then it contains data recognized from image if (mrtdRecognizer.Result.ResultState == RecognizerResultState.Valid) { var result = mrtdRecognizer.Result; stringResult = "PrimaryID: " + result.MrzResult.PrimaryId + "\n" + "SecondaryID: " + result.MrzResult.SecondaryId + "\n" + "Nationality: " + result.MrzResult.Nationality + "\n" + "Gender: " + result.MrzResult.Gender + "\n" + "Date of birth: " + result.MrzResult.DateOfBirth.Day + "." + result.MrzResult.DateOfBirth.Month + "." + result.MrzResult.DateOfBirth.Year + "."; fullDocumentImageSource = result.FullDocumentImage; successFrameImageSource = mrtdSuccessFrameGrabberRecognizer.Result.SuccessFrame; } // similarly, we can check for results of other recognizers if (usdlRecognizer.Result.ResultState == RecognizerResultState.Valid) { var result = usdlRecognizer.Result; stringResult = "USDL version: " + result.GetField(UsdlKeys.StandardVersionNumber) + "\n" + "Family name: " + result.GetField(UsdlKeys.CustomerFamilyName) + "\n" + "First name: " + result.GetField(UsdlKeys.CustomerFirstName) + "\n" + "Date of birth: " + result.GetField(UsdlKeys.DateOfBirth) + "\n" + "Sex: " + result.GetField(UsdlKeys.Sex) + "\n" + "Eye color: " + result.GetField(UsdlKeys.EyeColor) + "\n" + "Height: " + result.GetField(UsdlKeys.Height) + "\n" + "Street: " + result.GetField(UsdlKeys.AddressStreet) + "\n" + "City: " + result.GetField(UsdlKeys.AddressCity) + "\n" + "Jurisdiction: " + result.GetField(UsdlKeys.AddressJurisdictionCode) + "\n" + "Postal code: " + result.GetField(UsdlKeys.AddressPostalCode) + "\n" + // License information "Issue date: " + result.GetField(UsdlKeys.DocumentIssueDate) + "\n" + "Expiration date: " + result.GetField(UsdlKeys.DocumentExpirationDate) + "\n" + "Issuer ID: " + result.GetField(UsdlKeys.IssuerIdentificationNumber) + "\n" + "Jurisdiction version: " + result.GetField(UsdlKeys.JurisdictionVersionNumber) + "\n" + "Vehicle class: " + result.GetField(UsdlKeys.JurisdictionVehicleClass) + "\n" + "Restrictions: " + result.GetField(UsdlKeys.JurisdictionRestrictionCodes) + "\n" + "Endorsments: " + result.GetField(UsdlKeys.JurisdictionEndorsementCodes) + "\n" + "Customer ID: " + result.GetField(UsdlKeys.CustomerIdNumber); successFrameImageSource = usdlSuccessFrameGrabberRecognizer.Result.SuccessFrame; } if (eudlRecognizer.Result.ResultState == RecognizerResultState.Valid) { var result = eudlRecognizer.Result; stringResult = "First name: " + result.FirstName + "\n" + "Last name: " + result.LastName + "\n" + "Address: " + result.Address + "\n" + "Personal number: " + result.PersonalNumber + "\n" + "Driver number: " + result.DriverNumber; successFrameImageSource = eudlSuccessFrameGrabberRecognizer.Result.SuccessFrame; faceImageSource = result.FaceImage; fullDocumentImageSource = result.FullDocumentImage; } } // updating the UI must be performed on main thread Device.BeginInvokeOnMainThread(() => { resultsEditor.Text = stringResult; fullDocumentImage.Source = fullDocumentImageSource; successScanImage.Source = successFrameImageSource; faceImage.Source = faceImageSource; }); }); }
private void InitializeBlinkIdScanner() { var microblinkFactory = DependencyService.Get <IMicroblinkScannerFactory>(); string licenseKey = string.Empty; if (Device.RuntimePlatform == Device.iOS) { licenseKey = "sRwAAAEQY29tLmNobWwuaXQuY2Nmc0iUtoUk/ef1YJ5j3+j5toBM9aJu3EN0SDbB/mPKFx+V0MNFRZwwmNkzl1VU8JhdIYmouNK1poJKQCdOpB6MZ7W1x/pIarGykttt1FFrEHkvAE0NW8NEmidSg8mY+FCvJWVAiQlOHsSXw5YbyjtZv1lGDrU6zai0qefO7+VpwI3w2Q4GwlVybN7SlkSoU1vb8zh0y5Gc2eC5vVDyi7XoSZY/L1lUD1VsBWya5RBti4r7QzPEPy9M/WZp8TNJrw=="; } else { licenseKey = "sRwAAAAeY29tLm1pY3JvYmxpbmsueGFtYXJpbi5ibGlua2lke7qv4oIhH4ywlU8/Zqc2tpXY3x6Jq4MYktFtYaRbzI3x0Qxrr0NeFEjL6qt8Qcz144x2F5LGg1bHXgkRXbt37saoFv1HJUiJ50Y4YHglH8SqhyfSzsT/C/vQEAKXgZBQuNeeCTY6RttMciEbHHHj7nybEz9+aOoBXfx0+XXx3cU4L6Wbmf/5EAXokQXtEkL3mCR8VC/51ohQVyRIgItohusasIcfe8B+UjUMCZU9v1B0bvHcUKZH6g=="; } blinkID = microblinkFactory.CreateMicroblinkScanner(licenseKey); mrtdRecognizer = DependencyService.Get <IMrtdRecognizer>(); mrtdRecognizer.ReturnFullDocumentImage = true; mrtdSuccessFrameGrabberRecognizer = DependencyService.Get <ISuccessFrameGrabberRecognizerFactory>().CreateSuccessFrameGrabberRecognizer(mrtdRecognizer); // subscribe to scanning done message MessagingCenter.Subscribe <Microblink.Forms.Core.Messages.ScanningDoneMessage>(this, Microblink.Forms.Core.Messages.ScanningDoneMessageId, (sender) => { string stringResult = "No valid results."; // if user cancelled scanning, sender.ScanningCancelled will be true if (sender.ScanningCancelled) { stringResult = "Scanning cancelled"; } else { // if specific recognizer's result's state is Valid, then it contains data recognized from image if (mrtdRecognizer.Result.ResultState == RecognizerResultState.Valid) { var result = mrtdRecognizer.Result; ScanResult = result.MrzResult; SelectedIDMethod = Constants.IdentificationMethods.FirstOrDefault(x => x.Code == "2"); if (result.MrzResult.Gender == "F") { SelectedGender = Constants.Genders.FirstOrDefault(x => x.Gender == "Female"); } else { SelectedGender = Constants.Genders.FirstOrDefault(x => x.Gender == "Male"); } IsVisibleGuestInformation = true; IsVisibleHint = false; IsVisiblePage = true; IsVisibleIndicator = false; IsRunningIndicator = false; //FullDocumentImge = result.FullDocumentImage; //FrameImageSource = mrtdSuccessFrameGrabberRecognizer.Result.SuccessFrame; } } }); }
public BlinkIDPage() { InitializeComponent(); // before obtaining any of the recognizer's implementations from DependencyService, it is required // to obtain instance of IMicroblinkScanner and set the license key. // Failure to do so will crash your app. var microblinkFactory = DependencyService.Get <IMicroblinkScannerFactory>(); // license keys are different for iOS and Android and depend on iOS bundleID/Android application ID // in your app, you may obtain the correct license key for your platform via DependencyService from // your Droid/iOS projects string licenseKey; // both these license keys are demo license keys for bundleID/applicationID com.microblink.xamarin.blinkid if (Device.RuntimePlatform == Device.iOS) { licenseKey = "sRwAAAEeY29tLm1pY3JvYmxpbmsueGFtYXJpbi5ibGlua2lks3unDF2B9jpa6FeAxSjaWUg1ROYBfuTUj5ciQyp9KpRtdClsjclAqYTT1BA7QMj6tUv6yIwdGZNSUhiR253O9Zugyv6tsc8hB9XvpMvDAHOiAmgzkj5SacPTjp5C4xZwKCmER2NUf4YSDddznrI7btd5cNnr0Bc5lT0wNHzlN7Z6r04dqoI+jzrCW65IgF8DrA/t4C6O0/lxthm+IfAmobL0kfI0ui6/fy3m8OZ31AacLKO1qb4T0A=="; } else { licenseKey = "sRwAAAAeY29tLm1pY3JvYmxpbmsueGFtYXJpbi5ibGlua2lke7qv4oIhH4ywlU8/Zqc2tpXY3x6Jq4MYktFtYaRbzI3x0Qxrr0NeFEjL6qt8Qcz144x2F5LGg1bHXgkRXbt37saoFv1HJUiJ50Y4YHglH8SqhyfSzsT/C/vQEAKXgZBQuNeeCTY6RttMciEbHHHj7nybEz9+aOoBXfx0+XXx3cU4L6Wbmf/5EAXokQXtEkL3mCR8VC/51ohQVyRIgItohusasIcfe8B+UjUMCZU9v1B0bvHcUKZH6g=="; } // since DependencyService requires implementations to have default constructor, a factory is needed // to construct implementation of IMicroblinkScanner with given license key blinkID = microblinkFactory.CreateMicroblinkScanner(licenseKey); // license keys must be set before creating Recognizer, othervise InvalidLicenseKeyException will be thrown // the following code creates and sets up implementation of MrtdRecognizer mrtdRecognizer = DependencyService.Get <IMrtdRecognizer>(); mrtdRecognizer.ReturnFullDocumentImage = true; // success frame grabber recognizer must be constructed with reference to its slave recognizer, // so we need to use factory to avoid DependencyService's limitations mrtdSuccessFrameGrabberRecognizer = DependencyService.Get <ISuccessFrameGrabberRecognizerFactory>().CreateSuccessFrameGrabberRecognizer(mrtdRecognizer); // the following code creates and sets up implementation of UsdlRecognizer usdlRecognizer = DependencyService.Get <IUsdlRecognizer>(); // success frame grabber recognizer must be constructed with reference to its slave recognizer, // so we need to use factory to avoid DependencyService's limitations usdlSuccessFrameGrabberRecognizer = DependencyService.Get <ISuccessFrameGrabberRecognizerFactory>().CreateSuccessFrameGrabberRecognizer(usdlRecognizer); // the following code creates and sets up implementation of EudlRecognizer eudlRecognizer = DependencyService.Get <IEudlRecognizer>(); eudlRecognizer.ReturnFaceImage = true; eudlRecognizer.ReturnFullDocumentImage = true; // success frame grabber recognizer must be constructed with reference to its slave recognizer, // so we need to use factory to avoid DependencyService's limitations eudlSuccessFrameGrabberRecognizer = DependencyService.Get <ISuccessFrameGrabberRecognizerFactory>().CreateSuccessFrameGrabberRecognizer(eudlRecognizer); // subscribe to scanning done message MessagingCenter.Subscribe <Messages.ScanningDoneMessage> (this, Messages.ScanningDoneMessageId, (sender) => { ImageSource faceImageSource = null; ImageSource fullDocumentImageSource = null; ImageSource successFrameImageSource = null; string stringResult = "No valid results."; // if user cancelled scanning, sender.ScanningCancelled will be true if (sender.ScanningCancelled) { stringResult = "Scanning cancelled"; } else { // otherwise, one or more recognizers used in RecognizerCollection (see StartScan method below) // will contain result // if specific recognizer's result's state is Valid, then it contains data recognized from image if (mrtdRecognizer.Result.ResultState == RecognizerResultState.Valid) { var result = mrtdRecognizer.Result; stringResult = "PrimaryID: " + result.MrzResult.PrimaryId + "\n" + "SecondaryID: " + result.MrzResult.SecondaryId + "\n" + "Nationality: " + result.MrzResult.Nationality + "\n" + "Gender: " + result.MrzResult.Gender + "\n" + "Date of birth: " + result.MrzResult.DateOfBirth.Day + "." + result.MrzResult.DateOfBirth.Month + "." + result.MrzResult.DateOfBirth.Year + "."; fullDocumentImageSource = result.FullDocumentImage; successFrameImageSource = mrtdSuccessFrameGrabberRecognizer.Result.SuccessFrame; } // similarly, we can check for results of other recognizers if (usdlRecognizer.Result.ResultState == RecognizerResultState.Valid) { var result = usdlRecognizer.Result; stringResult = "USDL version: " + result.GetField(UsdlKeys.StandardVersionNumber) + "\n" + "Family name: " + result.GetField(UsdlKeys.CustomerFamilyName) + "\n" + "First name: " + result.GetField(UsdlKeys.CustomerFirstName) + "\n" + "Date of birth: " + result.GetField(UsdlKeys.DateOfBirth) + "\n" + "Sex: " + result.GetField(UsdlKeys.Sex) + "\n" + "Eye color: " + result.GetField(UsdlKeys.EyeColor) + "\n" + "Height: " + result.GetField(UsdlKeys.Height) + "\n" + "Street: " + result.GetField(UsdlKeys.AddressStreet) + "\n" + "City: " + result.GetField(UsdlKeys.AddressCity) + "\n" + "Jurisdiction: " + result.GetField(UsdlKeys.AddressJurisdictionCode) + "\n" + "Postal code: " + result.GetField(UsdlKeys.AddressPostalCode) + "\n" + // License information "Issue date: " + result.GetField(UsdlKeys.DocumentIssueDate) + "\n" + "Expiration date: " + result.GetField(UsdlKeys.DocumentExpirationDate) + "\n" + "Issuer ID: " + result.GetField(UsdlKeys.IssuerIdentificationNumber) + "\n" + "Jurisdiction version: " + result.GetField(UsdlKeys.JurisdictionVersionNumber) + "\n" + "Vehicle class: " + result.GetField(UsdlKeys.JurisdictionVehicleClass) + "\n" + "Restrictions: " + result.GetField(UsdlKeys.JurisdictionRestrictionCodes) + "\n" + "Endorsments: " + result.GetField(UsdlKeys.JurisdictionEndorsementCodes) + "\n" + "Customer ID: " + result.GetField(UsdlKeys.CustomerIdNumber); successFrameImageSource = usdlSuccessFrameGrabberRecognizer.Result.SuccessFrame; } if (eudlRecognizer.Result.ResultState == RecognizerResultState.Valid) { var result = eudlRecognizer.Result; stringResult = "First name: " + result.FirstName + "\n" + "Last name: " + result.LastName + "\n" + "Address: " + result.Address + "\n" + "Personal number: " + result.PersonalNumber + "\n" + "Driver number: " + result.DriverNumber; successFrameImageSource = eudlSuccessFrameGrabberRecognizer.Result.SuccessFrame; faceImageSource = result.FaceImage; fullDocumentImageSource = result.FullDocumentImage; } } // updating the UI must be performed on main thread Device.BeginInvokeOnMainThread(() => { resultsEditor.Text = stringResult; fullDocumentImage.Source = fullDocumentImageSource; successScanImage.Source = successFrameImageSource; faceImage.Source = faceImageSource; }); }); }