accurascan_kyc 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +635 -0
  3. package/accurascan-kyc.podspec +38 -0
  4. package/android/build.gradle +118 -0
  5. package/android/gradle.properties +5 -0
  6. package/android/src/main/AndroidManifest.xml +18 -0
  7. package/android/src/main/java/com/accurascankyc/AccurascanKycModule.java +507 -0
  8. package/android/src/main/java/com/accurascankyc/AccurascanKycPackage.java +28 -0
  9. package/android/src/main/java/com/accurascankyc/ActivityFaceMatch.java +533 -0
  10. package/android/src/main/java/com/accurascankyc/BorderTextView.java +82 -0
  11. package/android/src/main/java/com/accurascankyc/OcrActivity.java +1263 -0
  12. package/android/src/main/java/com/accurascankyc/OcrResultActivity.java +736 -0
  13. package/android/src/main/java/com/accurascankyc/ReactNativeJson.java +123 -0
  14. package/android/src/main/java/com/accurascankyc/UnsafeOkHttpClient.java +57 -0
  15. package/android/src/main/res/drawable/btn_bg_gray.xml +6 -0
  16. package/android/src/main/res/drawable/btn_bg_red.xml +6 -0
  17. package/android/src/main/res/drawable/btn_bg_trasparent_bottom.xml +6 -0
  18. package/android/src/main/res/drawable/flip_camera_icon.png +0 -0
  19. package/android/src/main/res/drawable/ic_close.xml +5 -0
  20. package/android/src/main/res/drawable/round_border_rect.xml +12 -0
  21. package/android/src/main/res/drawable/splash.png +0 -0
  22. package/android/src/main/res/drawable-v24/ic_launcher_foreground.png +0 -0
  23. package/android/src/main/res/drawable-xhdpi/bg_home.png +0 -0
  24. package/android/src/main/res/drawable-xhdpi/ic_barcode.png +0 -0
  25. package/android/src/main/res/drawable-xhdpi/ic_biometric.png +0 -0
  26. package/android/src/main/res/drawable-xhdpi/ic_check.png +0 -0
  27. package/android/src/main/res/drawable-xhdpi/ic_liveness.png +0 -0
  28. package/android/src/main/res/drawable-xhdpi/ic_result.png +0 -0
  29. package/android/src/main/res/drawable-xhdpi/ic_scan.png +0 -0
  30. package/android/src/main/res/drawable-xhdpi/img_button_overlay.png +0 -0
  31. package/android/src/main/res/layout/activity_ocr_result.xml +18 -0
  32. package/android/src/main/res/layout/activity_splash.xml +26 -0
  33. package/android/src/main/res/layout/custom_frame_layout.xml +144 -0
  34. package/android/src/main/res/layout/ocr_activity.xml +28 -0
  35. package/android/src/main/res/layout-land/custom_frame_layout.xml +144 -0
  36. package/android/src/main/res/layout-land/ocr_activity.xml +41 -0
  37. package/android/src/main/res/menu/menu_land_port.xml +7 -0
  38. package/android/src/main/res/mipmap-hdpi/logo_loign.png +0 -0
  39. package/android/src/main/res/mipmap-mdpi/logo_loign.png +0 -0
  40. package/android/src/main/res/mipmap-xhdpi/ic_document_verified.png +0 -0
  41. package/android/src/main/res/mipmap-xhdpi/logo_loign.png +0 -0
  42. package/android/src/main/res/mipmap-xxhdpi/logo_loign.png +0 -0
  43. package/android/src/main/res/values/colors.xml +31 -0
  44. package/android/src/main/res/values/strings.xml +42 -0
  45. package/android/src/main/res/values/styles.xml +191 -0
  46. package/ios/AccurascanKyc-Bridging-Header.h +2 -0
  47. package/ios/AccurascanKyc.m +34 -0
  48. package/ios/AccurascanKyc.swift +649 -0
  49. package/ios/AccurascanKyc.xcodeproj/project.pbxproj +283 -0
  50. package/ios/AccurascanKyc.xcodeproj/project.xcworkspace/contents.xcworkspacedata +4 -0
  51. package/ios/FMController.swift +587 -0
  52. package/ios/LVController.swift +346 -0
  53. package/ios/MainStoryboard_iPhone.storyboard +338 -0
  54. package/ios/ViewController.swift +2686 -0
  55. package/ios/resources/back_icon.png +0 -0
  56. package/ios/resources/flip_camera_icon.png +0 -0
  57. package/ios/resources/flip_document_icon.png +0 -0
  58. package/ios/resources/ic_logo.png +0 -0
  59. package/lib/commonjs/index.js +13 -0
  60. package/lib/commonjs/index.js.map +1 -0
  61. package/lib/module/index.js +6 -0
  62. package/lib/module/index.js.map +1 -0
  63. package/lib/typescript/index.d.ts +3 -0
  64. package/lib/typescript/index.d.ts.map +1 -0
  65. package/package.json +161 -0
  66. package/src/index.tsx +5 -0
@@ -0,0 +1,346 @@
1
+ import UIKit
2
+ import AccuraOCR
3
+ //import AccuraLiveness_fm
4
+
5
+ class LVController: UIViewController,LivenessData,FacematchData
6
+ {
7
+ @IBOutlet var mainView: UIView!
8
+ var callBack: RCTResponseSenderBlock? = nil
9
+ var liveness = Liveness()
10
+ var faceImage: UIImage?
11
+ var faceRegion: NSFaceRegion?
12
+ var reactViewController:UIViewController? = nil
13
+ var isLiveness = false
14
+ var livenessConfig:NSDictionary = [:]
15
+ var win: UIWindow? = nil
16
+
17
+
18
+ var facematch = Facematch()
19
+ var isfacematch = false
20
+ var faceArgs:NSDictionary = [:]
21
+
22
+ func closeMe() {
23
+ self.win!.rootViewController = reactViewController!
24
+ // self.dismiss(animated: true) {}
25
+ }
26
+
27
+ override func viewDidLoad() {
28
+ mainView.isHidden = true
29
+ super.viewDidLoad()
30
+ self.faceRegion = EngineWrapper.detectSourceFaces(self.faceImage)
31
+ }
32
+
33
+ override func viewWillAppear(_ animated: Bool) {
34
+ super.viewWillAppear(animated)
35
+
36
+ if isLiveness{
37
+ liveness.setBackGroundColor(livenessConfig["backGroundColor"] as! String)
38
+ liveness.setCloseIconColor(livenessConfig["closeIconColor"] as! String)
39
+ liveness.setFeedbackBackGroundColor(livenessConfig["feedbackBackGroundColor"] as! String)
40
+ liveness.setFeedbackTextColor(livenessConfig["feedbackTextColor"] as! String)
41
+ if livenessConfig["setLivenessURL"] != nil {
42
+ print("\(livenessConfig["setLivenessURL"])")
43
+ liveness.setLivenessURL(livenessConfig["setLivenessURL"] as! String)
44
+ }
45
+ if livenessConfig["setFeedbackTextSize"] != nil {
46
+ liveness.setFeedbackTextSize((livenessConfig["setFeedbackTextSize"] as? Float)!)
47
+ }else{
48
+ liveness.setFeedbackTextSize(Float(18.0))
49
+ }
50
+ if livenessConfig["setFeedbackTextSize"] != nil {
51
+ liveness.setFeedbackTextSize((livenessConfig["setFeedbackTextSize"] as? Float)!)
52
+ }else{
53
+ liveness.setFeedbackTextSize(Float(18.0))
54
+ }
55
+ if livenessConfig["setFeedBackframeMessage"] != nil {
56
+ liveness.setFeedBackframeMessage(livenessConfig["setFeedBackframeMessage"] as! String)
57
+ }else{
58
+ liveness.setFeedBackframeMessage("Frame Your Face")
59
+ }
60
+ if livenessConfig["setFeedBackAwayMessage"] != nil {
61
+ liveness.setFeedBackAwayMessage(livenessConfig["setFeedBackAwayMessage"] as! String)
62
+ }else{
63
+ liveness.setFeedBackAwayMessage("Move Phone Away")
64
+ }
65
+ if livenessConfig["setFeedBackOpenEyesMessage"] != nil {
66
+ liveness.setFeedBackOpenEyesMessage(livenessConfig["setFeedBackOpenEyesMessage"] as! String)
67
+ }else{
68
+ liveness.setFeedBackOpenEyesMessage("Keep Open Your Eyes")
69
+ }
70
+ if livenessConfig["setFeedBackCloserMessage"] != nil {
71
+ liveness.setFeedBackCloserMessage(livenessConfig["setFeedBackCloserMessage"] as! String)
72
+ }else{
73
+ liveness.setFeedBackCloserMessage("Move Phone Closer")
74
+ }
75
+ if livenessConfig["setFeedBackCenterMessage"] != nil {
76
+ liveness.setFeedBackCenterMessage(livenessConfig["setFeedBackCenterMessage"] as! String)
77
+ }else{
78
+ liveness.setFeedBackCenterMessage("Center Your Face")
79
+ }
80
+ if livenessConfig["setFeedBackFaceSteadymessage"] != nil {
81
+ liveness.setFeedBackFaceSteadymessage(livenessConfig["setFeedBackFaceSteadymessage"] as! String)
82
+ }else{
83
+ liveness.setFeedbackMultipleFaceMessage("Multiple face detected")
84
+ }
85
+ if livenessConfig["setFeedBackFaceSteadymessage"] != nil {
86
+ liveness.setFeedBackFaceSteadymessage(livenessConfig["setFeedBackFaceSteadymessage"] as! String)
87
+ }else{
88
+ liveness.setFeedBackFaceSteadymessage("Keep Your Head Straight")
89
+ }
90
+ if livenessConfig["setFeedBackLowLightMessage"] != nil {
91
+ liveness.setFeedBackLowLightMessage(livenessConfig["setFeedBackLowLightMessage"] as! String)
92
+ }else{
93
+ liveness.setFeedBackLowLightMessage("Low light detected")
94
+ }
95
+ if livenessConfig["setFeedBackBlurFaceMessage"] != nil {
96
+ liveness.setFeedBackBlurFaceMessage(livenessConfig["setFeedBackBlurFaceMessage"] as! String)
97
+ }else{
98
+ liveness.setFeedBackBlurFaceMessage("Blur detected over face")
99
+ }
100
+ if livenessConfig["setFeedBackGlareFaceMessage"] != nil {
101
+ liveness.setFeedBackGlareFaceMessage(livenessConfig["setFeedBackGlareFaceMessage"] as! String)
102
+ }else{
103
+ liveness.setFeedBackGlareFaceMessage("Glare detected")
104
+ }
105
+ if livenessConfig["setBlurPercentage"] != nil {
106
+ liveness.setBlurPercentage(livenessConfig["setBlurPercentage"] as! Int32)
107
+ }else{
108
+ liveness.setBlurPercentage(80) // set blure percentage -1 to remove this filter
109
+ }
110
+ if livenessConfig["setGlarePercentage_0"] != nil && livenessConfig["setGlarePercentage_1"] != nil{
111
+ liveness.setGlarePercentage(livenessConfig["setGlarePercentage_0"] as! Int32,livenessConfig["setGlarePercentage_1"] as! Int32)
112
+ }else{
113
+ liveness.setGlarePercentage(-1, -1) //set glaremin -1 to remove this filter
114
+ }
115
+
116
+
117
+
118
+ // 0 for clean face and 100 for Blurry face
119
+
120
+ // Set min and max percentage for glare
121
+ liveness.evaluateServerTrustWIthSSLPinning(false)
122
+
123
+ if isLiveness{
124
+ isLiveness = false
125
+ liveness.setLiveness(self)
126
+
127
+ }else{
128
+ closeMe()
129
+ }
130
+ }else if isfacematch{
131
+ facematch.setBackGroundColor(faceArgs["backGroundColor"] as! String)
132
+ facematch.setCloseIconColor(faceArgs["closeIconColor"] as! String)
133
+ facematch.setFeedbackBackGroundColor(faceArgs["feedbackBackGroundColor"] as! String)
134
+ facematch.setFeedbackTextColor(faceArgs["feedbackTextColor"] as! String)
135
+
136
+ if faceArgs["setFeedbackTextSize"] != nil {
137
+ facematch.setFeedbackTextSize((faceArgs["setFeedbackTextSize"] as? Float)!)
138
+ }else{
139
+ facematch.setFeedbackTextSize(Float(18.0))
140
+ }
141
+ if faceArgs["setFeedBackframeMessage"] != nil {
142
+ facematch.setFeedBackframeMessage(faceArgs["setFeedBackframeMessage"] as! String)
143
+ }else{
144
+ facematch.setFeedBackframeMessage("Frame Your Face")
145
+ }
146
+ if faceArgs["setFeedBackAwayMessage"] != nil {
147
+ facematch.setFeedBackAwayMessage(faceArgs["setFeedBackAwayMessage"] as! String)
148
+ }else{
149
+ facematch.setFeedBackAwayMessage("Move Phone Away")
150
+ }
151
+ if faceArgs["setFeedBackOpenEyesMessage"] != nil {
152
+ facematch.setFeedBackOpenEyesMessage(faceArgs["setFeedBackOpenEyesMessage"] as! String)
153
+ }else{
154
+ facematch.setFeedBackOpenEyesMessage("Keep Open Your Eyes")
155
+
156
+ }
157
+ if faceArgs["setFeedBackCloserMessage"] != nil {
158
+ facematch.setFeedBackCloserMessage(faceArgs["setFeedBackCloserMessage"] as! String)
159
+ }else{
160
+ facematch.setFeedBackCloserMessage("Move Phone Closer")
161
+ }
162
+ if faceArgs["setFeedBackCenterMessage"] != nil {
163
+ facematch.setFeedBackCenterMessage(faceArgs["setFeedBackCenterMessage"] as! String)
164
+ }else{
165
+ facematch.setFeedBackCenterMessage("Center Your Face")
166
+ }
167
+ if faceArgs["setFeedbackMultipleFaceMessage"] != nil {
168
+ facematch.setFeedbackMultipleFaceMessage(faceArgs["setFeedbackMultipleFaceMessage"] as! String)
169
+ }else{
170
+ facematch.setFeedbackMultipleFaceMessage("Multiple face detected")
171
+ }
172
+ if faceArgs["setFeedBackFaceSteadymessage"] != nil {
173
+ facematch.setFeedBackFaceSteadymessage(faceArgs["setFeedBackFaceSteadymessage"] as! String)
174
+ }else{
175
+ facematch.setFeedBackFaceSteadymessage("Keep Your Head Straight")
176
+ }
177
+ if faceArgs["setFeedBackLowLightMessage"] != nil {
178
+ facematch.setFeedBackFaceSteadymessage(faceArgs["setFeedBackLowLightMessage"] as! String)
179
+ }else{
180
+ facematch.setFeedBackLowLightMessage("Low light detected")
181
+ }
182
+ if faceArgs["setFeedBackBlurFaceMessage"] != nil {
183
+ facematch.setFeedBackBlurFaceMessage(faceArgs["setFeedBackBlurFaceMessage"] as! String)
184
+ }else{
185
+ facematch.setFeedBackBlurFaceMessage("Blur detected over face")
186
+ }
187
+ if faceArgs["setFeedBackGlareFaceMessage"] != nil {
188
+ facematch.setFeedBackGlareFaceMessage(faceArgs["setFeedBackGlareFaceMessage"] as! String)
189
+ }else{
190
+ facematch.setFeedBackGlareFaceMessage("Glare detected")
191
+ }
192
+ if faceArgs["setBlurPercentage"] != nil {
193
+ facematch.setBlurPercentage(faceArgs["setBlurPercentage"] as! Int32)
194
+ }else{
195
+ facematch.setBlurPercentage(80) // set blure percentage -1 to remove this filter
196
+ }
197
+ if faceArgs["setGlarePercentage_0"] != nil && faceArgs["setGlarePercentage_1"] != nil {
198
+ facematch.setGlarePercentage(faceArgs["setGlarePercentage_0"] as! Int32, faceArgs["setGlarePercentage_1"] as! Int32)
199
+ }else{
200
+ facematch.setGlarePercentage(-1, -1)
201
+ }
202
+ // 0 for clean face and 100 for Blurry face
203
+
204
+ // Set min and max percentage for glare
205
+
206
+ if isfacematch{
207
+ isfacematch = false
208
+
209
+ facematch.setFacematch(self)
210
+
211
+ }else{
212
+ closeMe()
213
+ }
214
+ }else{
215
+ closeMe()
216
+ }
217
+ }
218
+
219
+ func resizeImage(image: UIImage, targetSize: CGRect) -> UIImage {
220
+ let contextImage: UIImage = UIImage(cgImage: image.cgImage!)
221
+ var newX = targetSize.origin.x - (targetSize.size.width * 0.4)
222
+ var newY = targetSize.origin.y - (targetSize.size.height * 0.4)
223
+ var newWidth = targetSize.size.width * 1.8
224
+ var newHeight = targetSize.size.height * 1.8
225
+ if newX < 0 {
226
+ newX = 0
227
+ }
228
+ if newY < 0 {
229
+ newY = 0
230
+ }
231
+ if newX + newWidth > image.size.width{
232
+ newWidth = image.size.width - newX
233
+ }
234
+ if newY + newHeight > image.size.height{
235
+ newHeight = image.size.height - newY
236
+ }
237
+ // This is the rect that we've calculated out and this is what is actually used below
238
+ let rect = CGRect(x: newX, y: newY, width: newWidth, height: newHeight)
239
+ let imageRef: CGImage = contextImage.cgImage!.cropping(to: rect)!
240
+ let image1: UIImage = UIImage(cgImage: imageRef)
241
+ return image1
242
+ }
243
+
244
+ func sendError(msg: String) {
245
+
246
+ self.callBack!([msg as Any, NSNull()])
247
+ }
248
+
249
+ @IBAction func baAtn(_ sender: UIButton) {
250
+ closeMe()
251
+ }
252
+ //}
253
+ //
254
+ //
255
+ //
256
+ //extension LVController: LivenessData,FacematchData {
257
+
258
+ func livenessViewDisappear() {
259
+ closeMe()
260
+ }
261
+
262
+ func livenessData(_ stLivenessValue: String!, livenessImage: UIImage!, status: Bool) {
263
+ isLiveness = false
264
+ var results:[String: Any] = [:]
265
+
266
+ if status == false {
267
+ results["status"] = false
268
+ // callBack!(FlutterError.init(code: "101", message: "Failed to get liveness. Please try again", details: nil))
269
+ // closeMe()
270
+ }else{
271
+ results["status"] = true
272
+ }
273
+ // if let frontUri = EngineWrapper.detectSourceFaces(faceImage){
274
+ // self.faceRegion = frontUri
275
+ // }else{
276
+ // self.faceRegion = nil
277
+ // }
278
+
279
+ if (faceRegion != nil)
280
+ {
281
+ let face2 = EngineWrapper.detectTargetFaces(livenessImage, feature1: faceRegion?.feature)
282
+ // let face11 = faceRegion?.image
283
+ let fm_Score = EngineWrapper.identify(faceRegion?.feature, featurebuff2: face2?.feature)
284
+ if(fm_Score != 0.0){
285
+ let data = face2?.bound
286
+ let image = self.resizeImage(image: livenessImage, targetSize: data!)
287
+ results["detect"] = AccurascanKyc.getImageUri(img: image, name: nil)
288
+ results["fm_score"] = AccurascanKyc.getImageUri(img: faceImage!, name: nil)
289
+ let twoDecimalPlaces = String(format: "%.2f", fm_Score*100) //Face Match score convert to float value
290
+ results["score"] = stLivenessValue.replacingOccurrences(of: " %", with: "")
291
+ results["face_score"] = twoDecimalPlaces
292
+ faceImage = nil
293
+ self.callBack!([NSNull(),AccurascanKyc.convertJSONString(results:results)])
294
+ print(twoDecimalPlaces)
295
+ EngineWrapper.faceEngineClose()
296
+ closeMe()
297
+ }
298
+ }else{
299
+ callBack!(["Failed to get liveness. Please try again", NSNull()])
300
+ EngineWrapper.faceEngineClose()
301
+ closeMe()
302
+ }
303
+ }
304
+
305
+
306
+
307
+ // func didChangedLivenessState(_ livenessState: LivenessType) {
308
+ //
309
+ // }
310
+
311
+ func livenessData(_ stLivenessValue: String!, livenessImage: UIImage!, status: Bool, videoPath: String!, imagePath: String!) {
312
+
313
+ }
314
+
315
+ func facematchViewDisappear() {
316
+ closeMe()
317
+ }
318
+
319
+ func facematchData(_ FaceImage: UIImage!) {
320
+ isfacematch = false
321
+ var results:[String: Any] = [:]
322
+ // self.faceRegion = EngineWrapper.detectSourceFaces(self.faceImage)
323
+ print(faceRegion as Any)
324
+ if (faceRegion != nil)
325
+ {
326
+ let face2 = EngineWrapper.detectTargetFaces(FaceImage, feature1: faceRegion?.feature)
327
+ // let face11 = faceRegion?.image
328
+ let fm_Score = EngineWrapper.identify(faceRegion?.feature, featurebuff2: face2?.feature)
329
+ if(fm_Score != 0.0){
330
+ let data = face2?.bound
331
+ let image = self.resizeImage(image: FaceImage, targetSize: data!)
332
+ results["detect"] = AccurascanKyc.getImageUri(img: image, name: nil)
333
+ let twoDecimalPlaces = String(format: "%.2f", fm_Score*100) //Face Match score convert to float value
334
+ results["score"] = "\(twoDecimalPlaces)"
335
+ self.callBack!([NSNull(),AccurascanKyc.convertJSONString(results:results)])
336
+ EngineWrapper.faceEngineClose()
337
+ print(twoDecimalPlaces)
338
+ closeMe()
339
+ }
340
+ }else{
341
+ callBack!(["Failed to get Facematch. Please try again", NSNull()])
342
+ EngineWrapper.faceEngineClose()
343
+ closeMe()
344
+ }
345
+ }
346
+ }