18
18
import com .appliedrec .verid .core .DetectedFace ;
19
19
import com .microblink .entities .recognizers .Recognizer ;
20
20
import com .microblink .entities .recognizers .RecognizerBundle ;
21
+ import com .microblink .entities .recognizers .blinkid .DataMatchResult ;
21
22
import com .microblink .entities .recognizers .blinkid .generic .BlinkIdCombinedRecognizer ;
22
- import com .microblink .entities .recognizers .blinkid .usdl .UsdlCombinedRecognizer ;
23
- import com .microblink .entities .recognizers .successframe .SuccessFrameGrabberRecognizer ;
24
23
import com .microblink .uisettings .ActivityRunner ;
25
24
import com .microblink .uisettings .BlinkIdUISettings ;
26
25
@@ -45,7 +44,7 @@ public class MainActivity extends RxVerIDActivity {
45
44
protected void onCreate (Bundle savedInstanceState ) {
46
45
super .onCreate (savedInstanceState );
47
46
setContentView (R .layout .activity_main );
48
- findViewById (R .id .button ).setOnClickListener (v -> selectDocumentType ());
47
+ findViewById (R .id .button ).setOnClickListener (v -> scanIDCard ());
49
48
progressBar = findViewById (R .id .progressBar );
50
49
mainUIGroup = findViewById (R .id .mainUI );
51
50
progressBar .setVisibility (View .VISIBLE );
@@ -86,102 +85,89 @@ public boolean onCreateOptionsMenu(Menu menu) {
86
85
87
86
@ Override
88
87
public boolean onOptionsItemSelected (@ NonNull MenuItem item ) {
89
- if (item .getItemId () == R .id .about ) {
90
- showAbout ();
91
- return true ;
92
- }
93
- if (item .getItemId () == R .id .settings ) {
94
- showSettings ();
95
- return true ;
88
+ switch (item .getItemId ()) {
89
+ case R .id .about :
90
+ showAbout ();
91
+ return true ;
92
+ case R .id .settings :
93
+ showSettings ();
94
+ return true ;
95
+ case R .id .supported_documents :
96
+ showSupportedDocuments ();
97
+ return true ;
96
98
}
97
99
return super .onOptionsItemSelected (item );
98
100
}
99
101
102
+ private void showCardFromResult (BlinkIdCombinedRecognizer .Result result ) {
103
+ byte [] frontImage = result .getEncodedFrontFullDocumentImage ();
104
+ documentData = new DocumentData (result );
105
+ addDisposable (Single .create (single -> {
106
+ try {
107
+ File imageFile = new File (getFilesDir (), "cardFront.jpg" );
108
+ FileOutputStream outputStream = new FileOutputStream (imageFile );
109
+ ByteArrayInputStream inputStream = new ByteArrayInputStream (frontImage );
110
+ int read ;
111
+ byte [] buffer = new byte [512 ];
112
+ while ((read = inputStream .read (buffer , 0 , buffer .length )) > 0 ) {
113
+ outputStream .write (buffer , 0 , read );
114
+ }
115
+ outputStream .close ();
116
+ inputStream .close ();
117
+ single .onSuccess (Uri .fromFile (imageFile ));
118
+ } catch (Exception e ) {
119
+ single .onError (e );
120
+ }
121
+ }).cast (Uri .class )
122
+ .flatMapObservable (imageUri -> getRxVerID ().detectRecognizableFacesInImage (imageUri , 1 ).map (face -> new DetectedFace (face , Bearing .STRAIGHT , imageUri )))
123
+ .singleOrError ()
124
+ .subscribeOn (Schedulers .io ())
125
+ .observeOn (AndroidSchedulers .mainThread ())
126
+ .subscribe (
127
+ this ::showCard ,
128
+ this ::showError
129
+ ));
130
+ }
131
+
100
132
@ Override
101
133
protected void onActivityResult (int requestCode , int resultCode , @ Nullable Intent data ) {
102
134
super .onActivityResult (requestCode , resultCode , data );
103
135
if (requestCode == REQUEST_CODE_SCAN_ID_CARD && resultCode == RESULT_OK && data != null ) {
104
136
progressBar .setVisibility (View .VISIBLE );
105
137
mainUIGroup .setVisibility (View .INVISIBLE );
106
-
107
138
recognizerBundle .loadFromIntent (data );
108
-
109
139
Recognizer firstRecognizer = recognizerBundle .getRecognizers ()[0 ];
110
- SuccessFrameGrabberRecognizer successFrameGrabberRecognizer = (SuccessFrameGrabberRecognizer ) firstRecognizer ;
111
-
112
- byte [] frontImage ;
113
140
documentData = null ;
114
- if (successFrameGrabberRecognizer .getSlaveRecognizer () instanceof UsdlCombinedRecognizer ) {
115
- UsdlCombinedRecognizer .Result result = ((UsdlCombinedRecognizer ) successFrameGrabberRecognizer .getSlaveRecognizer ()).getResult ();
116
- frontImage = result .getEncodedFullDocumentImage ();
117
- documentData = new DocumentData (result );
118
- } else if (successFrameGrabberRecognizer .getSlaveRecognizer () instanceof BlinkIdCombinedRecognizer ) {
119
- BlinkIdCombinedRecognizer .Result result = ((BlinkIdCombinedRecognizer ) successFrameGrabberRecognizer .getSlaveRecognizer ()).getResult ();
120
- frontImage = result .getEncodedFrontFullDocumentImage ();
121
- documentData = new DocumentData (result );
122
- } else {
123
- return ;
124
- }
125
-
126
- addDisposable (Single .create (single -> {
127
- try {
128
- File imageFile = new File (getFilesDir (), "cardFront.jpg" );
129
- FileOutputStream outputStream = new FileOutputStream (imageFile );
130
- ByteArrayInputStream inputStream = new ByteArrayInputStream (frontImage );
131
- int read ;
132
- byte [] buffer = new byte [512 ];
133
- while ((read = inputStream .read (buffer , 0 , buffer .length )) > 0 ) {
134
- outputStream .write (buffer , 0 , read );
135
- }
136
- outputStream .close ();
137
- inputStream .close ();
138
- single .onSuccess (Uri .fromFile (imageFile ));
139
- } catch (Exception e ) {
140
- single .onError (e );
141
+ if (firstRecognizer instanceof BlinkIdCombinedRecognizer ) {
142
+ BlinkIdCombinedRecognizer .Result result = ((BlinkIdCombinedRecognizer )firstRecognizer ).getResult ();
143
+ if (result .getDocumentDataMatch () == DataMatchResult .Failed ) {
144
+ new AlertDialog .Builder (this )
145
+ .setTitle (R .string .invalid_licence )
146
+ .setMessage (R .string .front_and_back_dont_match )
147
+ .setNegativeButton (android .R .string .cancel , null )
148
+ .setPositiveButton (R .string .proceed_anyway , (dialogInterface , i ) -> showCardFromResult (result ))
149
+ .create ()
150
+ .show ();
151
+ } else {
152
+ showCardFromResult (result );
141
153
}
142
- }).cast (Uri .class )
143
- .flatMapObservable (imageUri -> getRxVerID ().detectRecognizableFacesInImage (imageUri , 1 ).map (face -> new DetectedFace (face , Bearing .STRAIGHT , imageUri )))
144
- .singleOrError ()
145
- .subscribeOn (Schedulers .io ())
146
- .observeOn (AndroidSchedulers .mainThread ())
147
- .subscribe (
148
- this ::showCard ,
149
- this ::showError
150
- ));
154
+ }
151
155
} else if (requestCode == REQUEST_CODE_SHOW_SUPPORTED_DOCUMENTS ) {
152
- selectDocumentType ();
156
+ scanIDCard ();
153
157
}
154
158
}
155
159
156
- private void selectDocumentType () {
157
- new AlertDialog .Builder (this )
158
- .setTitle (R .string .select_region )
159
- .setItems (new String []{getString (R .string .north_america ), getString (R .string .other )}, (dialogInterface , i ) -> {
160
- Recognizer recognizer ;
161
- if (i == 0 ) {
162
- recognizer = new UsdlCombinedRecognizer ();
163
- ((UsdlCombinedRecognizer )recognizer ).setEncodeFullDocumentImage (true );
164
- } else {
165
- recognizer = new BlinkIdCombinedRecognizer ();
166
- ((BlinkIdCombinedRecognizer )recognizer ).setEncodeFullDocumentImage (true );
167
- }
168
- SuccessFrameGrabberRecognizer successFrameGrabberRecognizer = new SuccessFrameGrabberRecognizer (recognizer );
169
- recognizerBundle = new RecognizerBundle (successFrameGrabberRecognizer );
170
- scanIDCard ();
171
- })
172
- .setNegativeButton (android .R .string .cancel , null )
173
- .setPositiveButton (R .string .supported_documents , (dialogInterface , i ) -> showSupportedDocuments ())
174
- .create ()
175
- .show ();
176
- }
177
-
178
160
private void showSupportedDocuments () {
179
161
Intent intent = new Intent (this , WebViewActivity .class );
180
- intent .putExtra (Intent .EXTRA_TEXT , "https://github.com/BlinkID/blinkid-android/blob/master/documentation/BlinkIDRecognizer.md" );
162
+ intent .putExtra (Intent .EXTRA_TEXT , BuildConfig . BLINK_SUPPORTED_DOCUMENTS_URL );
181
163
startActivityForResult (intent , REQUEST_CODE_SHOW_SUPPORTED_DOCUMENTS );
182
164
}
183
165
184
166
private void scanIDCard () {
167
+ BlinkIdCombinedRecognizer recognizer = new BlinkIdCombinedRecognizer ();
168
+ recognizer .setReturnFullDocumentImage (true );
169
+ recognizer .setEncodeFullDocumentImage (true );
170
+ recognizerBundle = new RecognizerBundle (recognizer );
185
171
BlinkIdUISettings uiSettings = new BlinkIdUISettings (recognizerBundle );
186
172
uiSettings .enableHighResSuccessFrameCapture (true );
187
173
ActivityRunner .startActivityForResult (this , REQUEST_CODE_SCAN_ID_CARD , uiSettings );
0 commit comments