@privateid/ultrapass-web-sdk 0.1.1 → 1.0.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.
- package/dist/application/modules/core/document/DocumentService.d.ts +9 -8
- package/dist/application/modules/core/document/DocumentService.js +122 -74
- package/dist/application/modules/core/document/DocumentService.js.map +1 -1
- package/dist/application/modules/core/document/document.constants.d.ts +0 -1
- package/dist/application/modules/core/document/document.constants.js +0 -1
- package/dist/application/modules/core/document/document.constants.js.map +1 -1
- package/dist/application/modules/core/document/document.domain.d.ts +3 -3
- package/dist/application/modules/core/document/document.types.d.ts +12 -10
- package/dist/application/modules/core/document/document.utils.d.ts +1 -2
- package/dist/application/modules/core/document/document.utils.js +11 -36
- package/dist/application/modules/core/document/document.utils.js.map +1 -1
- package/dist/application/modules/core/document/index.d.ts +1 -1
- package/dist/application/modules/core/face/FaceService.d.ts +2 -2
- package/dist/application/modules/core/face/FaceService.js +15 -28
- package/dist/application/modules/core/face/FaceService.js.map +1 -1
- package/dist/application/modules/core/face/face.constants.d.ts +22 -11
- package/dist/application/modules/core/face/face.constants.js +22 -11
- package/dist/application/modules/core/face/face.constants.js.map +1 -1
- package/dist/application/modules/core/face/face.domain.d.ts +2 -2
- package/dist/application/modules/core/face/face.types.d.ts +1 -1
- package/dist/application/modules/core/face/index.d.ts +1 -1
- package/dist/application/modules/global/shared.constants.d.ts +2 -0
- package/dist/application/modules/global/shared.constants.js +3 -0
- package/dist/application/modules/global/shared.constants.js.map +1 -0
- package/dist/application/modules/support/wasm/WasmService.d.ts +2 -1
- package/dist/application/modules/support/wasm/WasmService.js +22 -15
- package/dist/application/modules/support/wasm/WasmService.js.map +1 -1
- package/dist/application/modules/support/wasm/wasm.domain.d.ts +6 -2
- package/dist/application/workers/index.d.ts +11 -5
- package/dist/faceModule.d.ts +10 -7
- package/dist/faceModule.js +11 -1
- package/dist/faceModule.js.map +1 -1
- package/dist/main.d.ts +5 -2
- package/dist/main.js +9 -9
- package/dist/main.js.map +1 -1
- package/dist/types.d.ts +11 -5
- package/dist/utils.d.ts +11 -5
- package/package.json +1 -1
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import { Document } from './document.domain';
|
|
2
|
-
import { BackScanParams, DocumentOcrParams,
|
|
2
|
+
import { BackScanParams, DocumentOcrParams, FrontDocumentScanParams, DocumentScanResponse } from './document.types';
|
|
3
3
|
import { Wasm } from '../../support/wasm';
|
|
4
4
|
import { Camera } from '../../support/camera/camera.domain';
|
|
5
5
|
export declare class DocumentService implements Document {
|
|
6
6
|
private isSimd;
|
|
7
|
-
private
|
|
8
|
-
private
|
|
9
|
-
private
|
|
10
|
-
private backScanCanvas;
|
|
7
|
+
private hasDebugWithImages;
|
|
8
|
+
private canvas;
|
|
9
|
+
private debugCanvas;
|
|
11
10
|
private wasmService;
|
|
12
11
|
private cameraService;
|
|
13
12
|
privid_wasm_result: (operation: string, id: string, response_str: any) => void;
|
|
14
13
|
constructor(wasmService: Wasm, cameraService: Camera);
|
|
15
|
-
|
|
16
|
-
scanPassport(params:
|
|
14
|
+
scanGovernmentPhotoId(params: FrontDocumentScanParams): Promise<DocumentScanResponse>;
|
|
15
|
+
scanPassport(params: FrontDocumentScanParams): Promise<DocumentScanResponse>;
|
|
17
16
|
scanBackDocument(params: BackScanParams): Promise<void>;
|
|
18
17
|
documentOcr(params: DocumentOcrParams): Promise<void>;
|
|
19
18
|
private getVideoElement;
|
|
20
|
-
private
|
|
19
|
+
private generateDebugImages;
|
|
20
|
+
private generateImageData;
|
|
21
|
+
private prepareCanvas;
|
|
21
22
|
}
|
|
@@ -14,85 +14,86 @@ import { proxy } from 'comlink';
|
|
|
14
14
|
import { callbackTypeEnum, createCallback } from '../../../../createCallback';
|
|
15
15
|
import { ImageType } from '../../../../types';
|
|
16
16
|
import { getDebugType, getIsSIMD, printLogs, iOS } from '../../global/shared.utils';
|
|
17
|
-
import {
|
|
18
|
-
import { DEBUG_TYPES_WITH_IMAGES, INPUT_IMAGE_FORMAT,
|
|
17
|
+
import { imageDataFromBase64, releaseCanvas } from './document.utils';
|
|
18
|
+
import { DEBUG_TYPES_WITH_IMAGES, INPUT_IMAGE_FORMAT, FINGERS_OVER_DOCUMENT_THRESHOLD, DOCUMENT_THRESHOLD_X, DOCUMENT_THRESHOLD_Y, DOCUMENT_TOO_CLOSE_THRESHOLD, DOCUMENT_TOO_FAR_THRESHOLD, CALCULATE_AGE_FROM_OCR_TEXT, ERROR_RESULT, ERROR_CODE, IMAGE_EXPORT_FORMAT, DOWNLOAD_IMAGE_TYPE, FILE_EXTENSION, DOWNLOAD_DELAY_TIMEOUT, } from './document.constants';
|
|
19
|
+
import { CANVAS_ID, INVALID_VIDEO_ERROR } from '../../global/shared.constants';
|
|
19
20
|
export class DocumentService {
|
|
20
21
|
constructor(wasmService, cameraService) {
|
|
22
|
+
// TODO: Remove isSimd from here, it should belong to WasmService.
|
|
21
23
|
this.isSimd = false;
|
|
22
|
-
this.
|
|
23
|
-
this.isDebugWithImages = DEBUG_TYPES_WITH_IMAGES.includes(this.debugType);
|
|
24
|
-
this.frontScanCanvas = document.createElement('canvas');
|
|
25
|
-
this.backScanCanvas = document.createElement('canvas');
|
|
24
|
+
this.hasDebugWithImages = false;
|
|
26
25
|
getIsSIMD().then((simd) => (this.isSimd = simd));
|
|
26
|
+
const canvas = document.createElement('canvas');
|
|
27
|
+
canvas.setAttribute('id', CANVAS_ID);
|
|
28
|
+
const debugCanvas = document.createElement('canvas');
|
|
29
|
+
const debugType = getDebugType();
|
|
30
|
+
this.hasDebugWithImages = DEBUG_TYPES_WITH_IMAGES.includes(debugType);
|
|
31
|
+
this.canvas = canvas;
|
|
32
|
+
this.debugCanvas = debugCanvas;
|
|
27
33
|
this.wasmService = wasmService;
|
|
28
34
|
this.cameraService = cameraService;
|
|
29
35
|
}
|
|
30
|
-
|
|
36
|
+
scanGovernmentPhotoId(params) {
|
|
31
37
|
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
-
|
|
33
|
-
printLogs('________________ FRONT DOCUMENT SCAN ______________', '');
|
|
34
|
-
const videoEl = this.getVideoElement();
|
|
35
|
-
let configuration = {
|
|
36
|
-
input_image_format: INPUT_IMAGE_FORMAT,
|
|
37
|
-
fingers_over_document_threshold: FINGERS_OVER_DOCUMENT_THRESHOLD,
|
|
38
|
-
};
|
|
39
|
-
if (config) {
|
|
40
|
-
configuration = Object.assign(Object.assign({}, configuration), config);
|
|
41
|
-
}
|
|
42
|
-
if (!videoEl) {
|
|
43
|
-
printLogs(`Capture need the video element id`, '', 'ERROR');
|
|
44
|
-
return { result: ERROR_RESULT };
|
|
45
|
-
}
|
|
46
|
-
this.privid_wasm_result = createCallback({
|
|
47
|
-
type: callbackTypeEnum.frontScan,
|
|
48
|
-
callbackFunction: callback,
|
|
49
|
-
});
|
|
50
|
-
const cb = proxy(this.privid_wasm_result);
|
|
51
|
-
const imageData = this.createImageData(videoEl);
|
|
52
|
-
if (this.isDebugWithImages) {
|
|
53
|
-
yield createImages([imageData], `${ImageType.original}_front_document_scan`, true);
|
|
54
|
-
}
|
|
38
|
+
printLogs('[DocumentService] scanGovernmentPhotoId params', params);
|
|
55
39
|
try {
|
|
56
|
-
configuration =
|
|
57
|
-
|
|
40
|
+
let configuration = {
|
|
41
|
+
input_image_format: INPUT_IMAGE_FORMAT,
|
|
42
|
+
fingers_over_document_threshold: FINGERS_OVER_DOCUMENT_THRESHOLD,
|
|
43
|
+
};
|
|
44
|
+
if (params.config) {
|
|
45
|
+
configuration = Object.assign(Object.assign({}, configuration), params.config);
|
|
46
|
+
}
|
|
47
|
+
const callback = createCallback({
|
|
48
|
+
type: callbackTypeEnum.frontScan,
|
|
49
|
+
callbackFunction: params.callback,
|
|
50
|
+
});
|
|
51
|
+
const workerCallback = proxy(callback);
|
|
52
|
+
const imageData = this.generateImageData();
|
|
53
|
+
if (this.hasDebugWithImages) {
|
|
54
|
+
yield this.generateDebugImages([imageData], `${ImageType.original}_front_gov_photo_id_document_scan`, 'enroll');
|
|
55
|
+
}
|
|
56
|
+
yield this.wasmService.scanFrontPhotoIdDocument(imageData, JSON.stringify(configuration), workerCallback);
|
|
57
|
+
return {
|
|
58
|
+
success: true,
|
|
59
|
+
};
|
|
58
60
|
}
|
|
59
|
-
catch (
|
|
60
|
-
printLogs(`
|
|
61
|
+
catch (error) {
|
|
62
|
+
printLogs(`[DocumentService] scanGovernmentPhotoId error: `, error.message, 'ERROR');
|
|
61
63
|
return {
|
|
62
|
-
|
|
64
|
+
success: false,
|
|
63
65
|
};
|
|
64
66
|
}
|
|
65
67
|
});
|
|
66
68
|
}
|
|
67
69
|
scanPassport(params) {
|
|
68
70
|
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
-
|
|
70
|
-
printLogs('________________ PASSPORT SCAN ______________', '');
|
|
71
|
-
const videoEl = this.getVideoElement();
|
|
72
|
-
let configuration = {
|
|
73
|
-
input_image_format: INPUT_IMAGE_FORMAT,
|
|
74
|
-
};
|
|
75
|
-
if (config) {
|
|
76
|
-
configuration = Object.assign(Object.assign({}, configuration), config);
|
|
77
|
-
}
|
|
78
|
-
this.privid_wasm_result = createCallback({ type: callbackTypeEnum.passportScan, callbackFunction: callback });
|
|
79
|
-
if (!videoEl) {
|
|
80
|
-
printLogs(`Capture need the video element id`, '', 'ERROR');
|
|
81
|
-
return { result: ERROR_RESULT };
|
|
82
|
-
}
|
|
83
|
-
const cb = proxy(this.privid_wasm_result);
|
|
84
|
-
const imageData = this.createImageData(videoEl);
|
|
85
|
-
if (this.isDebugWithImages) {
|
|
86
|
-
yield createImages([imageData], `${ImageType.original}_passport_scan`, true);
|
|
87
|
-
}
|
|
71
|
+
printLogs('[DocumentService] scanPassport params', params);
|
|
88
72
|
try {
|
|
89
|
-
configuration =
|
|
90
|
-
|
|
73
|
+
let configuration = {
|
|
74
|
+
input_image_format: INPUT_IMAGE_FORMAT,
|
|
75
|
+
};
|
|
76
|
+
if (params.config) {
|
|
77
|
+
configuration = Object.assign(Object.assign({}, configuration), params.config);
|
|
78
|
+
}
|
|
79
|
+
const callback = createCallback({
|
|
80
|
+
type: callbackTypeEnum.passportScan,
|
|
81
|
+
callbackFunction: params.callback,
|
|
82
|
+
});
|
|
83
|
+
const workerCallback = proxy(callback);
|
|
84
|
+
const imageData = this.generateImageData();
|
|
85
|
+
if (this.hasDebugWithImages) {
|
|
86
|
+
yield this.generateDebugImages([imageData], `${ImageType.original}_passport_scan`, 'enroll');
|
|
87
|
+
}
|
|
88
|
+
yield this.wasmService.scanPassport(imageData, JSON.stringify(configuration), workerCallback);
|
|
89
|
+
return {
|
|
90
|
+
success: true,
|
|
91
|
+
};
|
|
91
92
|
}
|
|
92
|
-
catch (
|
|
93
|
-
printLogs(`
|
|
93
|
+
catch (error) {
|
|
94
|
+
printLogs(`[DocumentService] scanPassport error: `, error, 'ERROR');
|
|
94
95
|
return {
|
|
95
|
-
|
|
96
|
+
success: false,
|
|
96
97
|
};
|
|
97
98
|
}
|
|
98
99
|
});
|
|
@@ -138,17 +139,18 @@ export class DocumentService {
|
|
|
138
139
|
printLogs(`Capture need the video element id`, '', 'ERROR');
|
|
139
140
|
return { result: ERROR_RESULT };
|
|
140
141
|
}
|
|
141
|
-
const imageData = this.
|
|
142
|
+
const imageData = this.generateImageData();
|
|
142
143
|
if ((imageData === null || imageData === void 0 ? void 0 : imageData.width) === 0)
|
|
143
144
|
return { result: ERROR_RESULT };
|
|
144
145
|
let result = null;
|
|
145
|
-
if (this.
|
|
146
|
-
yield
|
|
146
|
+
if (this.hasDebugWithImages) {
|
|
147
|
+
yield this.generateDebugImages([imageData], ImageType.original, 'enroll');
|
|
147
148
|
}
|
|
148
149
|
try {
|
|
149
150
|
printLogs(`Configuration: back scan: `, configuration);
|
|
150
151
|
result = yield this.wasmService.scanBackDocument(imageData, this.isSimd, configuration, proxy(this.privid_wasm_result));
|
|
151
|
-
|
|
152
|
+
// TODO: Validate if we need to release, and when, since we will have only one instance of canvas
|
|
153
|
+
releaseCanvas(this.canvas);
|
|
152
154
|
return Object.assign({}, result);
|
|
153
155
|
}
|
|
154
156
|
catch (e) {
|
|
@@ -175,8 +177,9 @@ export class DocumentService {
|
|
|
175
177
|
}
|
|
176
178
|
this.privid_wasm_result = createCallback({ type: callbackTypeEnum.documentOcr, callbackFunction: params.callback });
|
|
177
179
|
const cb = proxy(this.privid_wasm_result);
|
|
178
|
-
if (this.
|
|
179
|
-
yield
|
|
180
|
+
if (this.hasDebugWithImages) {
|
|
181
|
+
const imageData = yield imageDataFromBase64(params.inputImage);
|
|
182
|
+
yield this.generateDebugImages([imageData], `${ImageType.original}_document_ocr`, 'enroll');
|
|
180
183
|
}
|
|
181
184
|
try {
|
|
182
185
|
configuration = JSON.stringify(configuration);
|
|
@@ -193,15 +196,60 @@ export class DocumentService {
|
|
|
193
196
|
getVideoElement() {
|
|
194
197
|
return this.cameraService.getVideoElementDOM();
|
|
195
198
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
199
|
+
generateDebugImages(images, title, action) {
|
|
200
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
201
|
+
const a = document.createElement('a');
|
|
202
|
+
a.type = DOWNLOAD_IMAGE_TYPE;
|
|
203
|
+
document.body.appendChild(a);
|
|
204
|
+
for (const imageContent of images) {
|
|
205
|
+
this.debugCanvas.width = imageContent.width;
|
|
206
|
+
this.debugCanvas.height = imageContent.height;
|
|
207
|
+
const ctx = this.debugCanvas.getContext('2d');
|
|
208
|
+
ctx.putImageData(imageContent, 0, 0);
|
|
209
|
+
const blob = yield new Promise((resolve) => this.debugCanvas.toBlob((b) => resolve(b), IMAGE_EXPORT_FORMAT));
|
|
210
|
+
if (blob) {
|
|
211
|
+
const url = URL.createObjectURL(blob);
|
|
212
|
+
try {
|
|
213
|
+
a.href = url;
|
|
214
|
+
a.download = `${title}_${action}${FILE_EXTENSION}`;
|
|
215
|
+
a.click();
|
|
216
|
+
yield new Promise((r) => setTimeout(r, DOWNLOAD_DELAY_TIMEOUT));
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
printLogs('[DocumentService] generateDebugImages error', error, 'ERROR');
|
|
220
|
+
}
|
|
221
|
+
finally {
|
|
222
|
+
URL.revokeObjectURL(url);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
a.remove();
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
// TODO: Both DocumentService and FaceService uses generateImageData and prepareCanvas
|
|
230
|
+
// but in different ways, should we create an interface to secure these implementations?
|
|
231
|
+
// Or should we bring that to a different Class called CanvasService?
|
|
232
|
+
generateImageData() {
|
|
233
|
+
var _a;
|
|
234
|
+
const videoElement = this.cameraService.getVideoElementDOM();
|
|
235
|
+
printLogs('[DocumentService] generateImageData videoElement', videoElement);
|
|
236
|
+
const canvas = this.prepareCanvas(videoElement);
|
|
237
|
+
const context = this.canvas.getContext('2d', { willReadFrequently: true });
|
|
238
|
+
(_a = context.resetTransform) === null || _a === void 0 ? void 0 : _a.call(context);
|
|
239
|
+
context.clearRect(0, 0, canvas.width, canvas.height);
|
|
240
|
+
context.drawImage(videoElement, 0, 0, canvas.width, canvas.height);
|
|
241
|
+
return context.getImageData(0, 0, canvas.width, canvas.height);
|
|
242
|
+
}
|
|
243
|
+
prepareCanvas(videoElement) {
|
|
244
|
+
const height = videoElement.videoHeight || 0;
|
|
245
|
+
const width = videoElement.videoWidth || 0;
|
|
246
|
+
if (width === 0) {
|
|
247
|
+
throw new Error(INVALID_VIDEO_ERROR);
|
|
248
|
+
}
|
|
249
|
+
this.canvas.setAttribute('height', `${height}`);
|
|
250
|
+
this.canvas.setAttribute('width', `${width}`);
|
|
251
|
+
this.canvas.setAttribute('id', CANVAS_ID);
|
|
252
|
+
return this.canvas;
|
|
205
253
|
}
|
|
206
254
|
}
|
|
207
255
|
//# sourceMappingURL=DocumentService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentService.js","sourceRoot":"","sources":["../../../../../src/application/modules/core/document/DocumentService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,gDAAgD;AAChD,iDAAiD;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AACpF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"DocumentService.js","sourceRoot":"","sources":["../../../../../src/application/modules/core/document/DocumentService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export declare const DEBUG_TYPES_WITH_IMAGES: string[];
|
|
2
2
|
export declare const INPUT_IMAGE_FORMAT = "rgba";
|
|
3
|
-
export declare const CANVAS_ID = "test-canvas";
|
|
4
3
|
export declare const CANVAS_RELEASE_DIMENSION = 1;
|
|
5
4
|
export declare const FINGERS_OVER_DOCUMENT_THRESHOLD = 0.2;
|
|
6
5
|
export declare const DOCUMENT_THRESHOLD_X = 0;
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
export const DEBUG_TYPES_WITH_IMAGES = ['900', '901', '902', '903'];
|
|
3
3
|
// Image and canvas configuration
|
|
4
4
|
export const INPUT_IMAGE_FORMAT = 'rgba';
|
|
5
|
-
export const CANVAS_ID = 'test-canvas';
|
|
6
5
|
export const CANVAS_RELEASE_DIMENSION = 1;
|
|
7
6
|
// Document scanning thresholds
|
|
8
7
|
export const FINGERS_OVER_DOCUMENT_THRESHOLD = 0.2;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.constants.js","sourceRoot":"","sources":["../../../../../src/application/modules/core/document/document.constants.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAEpE,iCAAiC;AACjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AACzC,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"document.constants.js","sourceRoot":"","sources":["../../../../../src/application/modules/core/document/document.constants.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAEpE,iCAAiC;AACjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AACzC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C,+BAA+B;AAC/B,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;AACnD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACxC,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACxC,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AACjD,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAE9C,oBAAoB;AACpB,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAEhD,iBAAiB;AACjB,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC;AACpC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC;AAE7B,mBAAmB;AACnB,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAC/C,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AACrC,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { BackScanParams, DocumentOcrParams,
|
|
1
|
+
import { BackScanParams, DocumentOcrParams, FrontDocumentScanParams, DocumentScanResponse } from './document.types';
|
|
2
2
|
export interface Document {
|
|
3
|
-
|
|
4
|
-
scanPassport: (params:
|
|
3
|
+
scanGovernmentPhotoId: (params: FrontDocumentScanParams) => Promise<DocumentScanResponse>;
|
|
4
|
+
scanPassport: (params: FrontDocumentScanParams) => Promise<DocumentScanResponse>;
|
|
5
5
|
scanBackDocument: (params: BackScanParams) => Promise<void>;
|
|
6
6
|
documentOcr: (params: DocumentOcrParams) => Promise<void>;
|
|
7
7
|
}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
callback: (returnData: any) => void;
|
|
3
|
-
image?: ImageData;
|
|
4
|
-
config?: any;
|
|
5
|
-
};
|
|
6
|
-
export type FrontScanParams = {
|
|
1
|
+
interface BaseScanParams {
|
|
7
2
|
callback: (returnData: any) => void;
|
|
8
3
|
config?: any;
|
|
4
|
+
}
|
|
5
|
+
export interface BackScanParams extends BaseScanParams {
|
|
6
|
+
image?: ImageData;
|
|
7
|
+
}
|
|
8
|
+
export interface FrontDocumentScanParams extends BaseScanParams {
|
|
9
9
|
doOcr?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export type DocumentScanResponse = {
|
|
12
|
+
success: boolean;
|
|
10
13
|
};
|
|
11
|
-
export
|
|
14
|
+
export interface DocumentOcrParams extends BaseScanParams {
|
|
12
15
|
inputImage: string;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
};
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export declare const releaseCanvas: (canvasElement: HTMLCanvasElement) => void;
|
|
2
2
|
export declare const compareEmbeddings: (embeddingsA: string, embeddingsB: string, callback: (result: any) => void, config?: {}, encryptData?: boolean) => Promise<any>;
|
|
3
|
-
export declare
|
|
4
|
-
export declare function blobToBase64(blob: Blob): Promise<ArrayBuffer | string>;
|
|
3
|
+
export declare function imageDataFromBase64(base64: string): Promise<ImageData>;
|
|
@@ -11,7 +11,7 @@ import { proxy } from 'comlink';
|
|
|
11
11
|
import { callbackTypeEnum, createCallback } from '../../../../createCallback';
|
|
12
12
|
import { printLogs } from '../../global/shared.utils';
|
|
13
13
|
import { ultraCompareEmbeddings } from '../../../../utils';
|
|
14
|
-
import { CANVAS_RELEASE_DIMENSION,
|
|
14
|
+
import { CANVAS_RELEASE_DIMENSION, } from './document.constants';
|
|
15
15
|
export const releaseCanvas = (canvasElement) => {
|
|
16
16
|
const canvas = canvasElement;
|
|
17
17
|
try {
|
|
@@ -43,42 +43,17 @@ export const compareEmbeddings = (embeddingsA, embeddingsB, callback, config = {
|
|
|
43
43
|
const result = yield ultraCompareEmbeddings(embeddingsA, embeddingsB, JSON.stringify(configuration), proxy(createCallback({ type: callbackTypeEnum.compareEmbeddings, callbackFunction: callback })));
|
|
44
44
|
return result;
|
|
45
45
|
});
|
|
46
|
-
export
|
|
47
|
-
|
|
46
|
+
export function imageDataFromBase64(base64) {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
const img = new Image();
|
|
49
|
+
img.src = base64;
|
|
50
|
+
yield img.decode(); // wait until the image is loaded
|
|
48
51
|
const canvas = document.createElement('canvas');
|
|
49
|
-
canvas.width =
|
|
50
|
-
canvas.height =
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const base64 = yield blobToBase64(blob);
|
|
55
|
-
const url = URL.createObjectURL(blob);
|
|
56
|
-
resolve({ url, base64 });
|
|
57
|
-
})));
|
|
58
|
-
const data = yield Promise.all(promises);
|
|
59
|
-
const a = document.createElement('a');
|
|
60
|
-
for (let i = 0; i < data.length; i++) {
|
|
61
|
-
// if(!iOS()) {
|
|
62
|
-
// eslint-disable-next-line no-loop-func
|
|
63
|
-
yield new Promise((resolve) => {
|
|
64
|
-
a.href = data[i].url;
|
|
65
|
-
a.type = DOWNLOAD_IMAGE_TYPE;
|
|
66
|
-
a.download = `${title}_${action ? 'enroll' : 'predict'}${FILE_EXTENSION}`;
|
|
67
|
-
document.body.appendChild(a);
|
|
68
|
-
a.click();
|
|
69
|
-
setTimeout(() => {
|
|
70
|
-
resolve();
|
|
71
|
-
}, DOWNLOAD_DELAY_TIMEOUT);
|
|
72
|
-
});
|
|
73
|
-
// }
|
|
74
|
-
// postImages(data[i].base64);
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
export function blobToBase64(blob) {
|
|
78
|
-
return new Promise((resolve) => {
|
|
79
|
-
const reader = new FileReader();
|
|
80
|
-
reader.onloadend = () => resolve(reader.result);
|
|
81
|
-
reader.readAsDataURL(blob);
|
|
52
|
+
canvas.width = img.width;
|
|
53
|
+
canvas.height = img.height;
|
|
54
|
+
const ctx = canvas.getContext('2d');
|
|
55
|
+
ctx.drawImage(img, 0, 0);
|
|
56
|
+
return ctx.getImageData(0, 0, canvas.width, canvas.height);
|
|
82
57
|
});
|
|
83
58
|
}
|
|
84
59
|
//# sourceMappingURL=document.utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.utils.js","sourceRoot":"","sources":["../../../../../src/application/modules/core/document/document.utils.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EACL,wBAAwB,
|
|
1
|
+
{"version":3,"file":"document.utils.js","sourceRoot":"","sources":["../../../../../src/application/modules/core/document/document.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export type { Document } from './document.domain';
|
|
2
2
|
export { DocumentService } from './DocumentService';
|
|
3
|
-
export type { BackScanParams,
|
|
3
|
+
export type { BackScanParams, FrontDocumentScanParams, DocumentOcrParams } from './document.types';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Face } from './face.domain';
|
|
2
2
|
import { CameraFaceMode } from '../../../../types';
|
|
3
|
-
import type { FaceLoginProps, PredictProps,
|
|
3
|
+
import type { FaceLoginProps, PredictProps, FaceEnrollParams, EstimateAgeParams } from './face.types';
|
|
4
4
|
import { Wasm } from '../../support/wasm';
|
|
5
5
|
import { Camera } from '../../support/camera';
|
|
6
6
|
export declare class FaceService implements Face {
|
|
@@ -20,7 +20,7 @@ export declare class FaceService implements Face {
|
|
|
20
20
|
predictWithStatus(props: PredictProps): Promise<unknown>;
|
|
21
21
|
predictConfirmUser(props: PredictProps): Promise<unknown>;
|
|
22
22
|
predictDeleteUser(props: PredictProps): Promise<unknown>;
|
|
23
|
-
|
|
23
|
+
ageEstimation(params: EstimateAgeParams): Promise<unknown>;
|
|
24
24
|
enroll(params: FaceEnrollParams): Promise<unknown>;
|
|
25
25
|
private generateImageData;
|
|
26
26
|
private prepareCanvas;
|
|
@@ -15,7 +15,8 @@ import { CameraFaceMode } from '../../../../types';
|
|
|
15
15
|
import { defineDimensionsForCanvas, releaseCanvas } from './face.utils';
|
|
16
16
|
import { DEFAULT_PREDICT_CONFIG } from '../../support/wasm';
|
|
17
17
|
import { getIsSIMD, isMobileDevice, printLogs } from '../../global/shared.utils';
|
|
18
|
-
import {
|
|
18
|
+
import { AGE_ESTIMATION_BASE_CONFIG, ENROLL_BASE_CONFIG, LOG_MESSAGES, URL_OVERRIDES } from './face.constants';
|
|
19
|
+
import { CANVAS_ID, INVALID_VIDEO_ERROR } from '../../global/shared.constants';
|
|
19
20
|
export class FaceService {
|
|
20
21
|
constructor(wasmService, cameraService) {
|
|
21
22
|
this.isSimd = false;
|
|
@@ -26,7 +27,7 @@ export class FaceService {
|
|
|
26
27
|
this.isSimd = simd;
|
|
27
28
|
});
|
|
28
29
|
const canvas = document.createElement('canvas');
|
|
29
|
-
canvas.setAttribute('id',
|
|
30
|
+
canvas.setAttribute('id', CANVAS_ID);
|
|
30
31
|
this.canvas = canvas;
|
|
31
32
|
this.wasmService = wasmService;
|
|
32
33
|
this.cameraService = cameraService;
|
|
@@ -54,7 +55,7 @@ export class FaceService {
|
|
|
54
55
|
else {
|
|
55
56
|
canvas = document.createElement('canvas');
|
|
56
57
|
}
|
|
57
|
-
canvas.setAttribute('id',
|
|
58
|
+
canvas.setAttribute('id', CANVAS_ID);
|
|
58
59
|
canvas.setAttribute('height', `${height}`);
|
|
59
60
|
canvas.setAttribute('width', `${width}`);
|
|
60
61
|
const context = canvas.getContext('2d', { willReadFrequently: true });
|
|
@@ -66,6 +67,7 @@ export class FaceService {
|
|
|
66
67
|
const imageData = context.getImageData(0, 0, width, height);
|
|
67
68
|
return { imageData, canvas, width, height };
|
|
68
69
|
}
|
|
70
|
+
// TODO: Refactor this method and validate if is really needed.
|
|
69
71
|
runUltraProcess(fn, options) {
|
|
70
72
|
return __awaiter(this, void 0, void 0, function* () {
|
|
71
73
|
const { callback, image, config = {}, element, returnPortrait = false, useExistingCanvas = false, logMessage = LOG_MESSAGES.ULTRA_PROCESS, callbackType, } = options;
|
|
@@ -119,34 +121,19 @@ export class FaceService {
|
|
|
119
121
|
return this.performPredict(Object.assign(Object.assign({}, props), { config: Object.assign({ url_name_override: URL_OVERRIDES.DELETE_USER }, props.config) }));
|
|
120
122
|
});
|
|
121
123
|
}
|
|
122
|
-
|
|
124
|
+
ageEstimation(params) {
|
|
123
125
|
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
threshold_user_too_far: 0.2,
|
|
133
|
-
threshold_user_up: 0.15,
|
|
134
|
-
threshold_user_down: 0.9,
|
|
135
|
-
threshold_user_left: 0.8,
|
|
136
|
-
threshold_user_right: 0.2,
|
|
137
|
-
threshold_high_vertical_predict: 0.9,
|
|
138
|
-
threshold_down_vertical_predict: 2.2,
|
|
139
|
-
url_name_override: '',
|
|
140
|
-
disable_predict_mf: false,
|
|
141
|
-
mf_count_override: 5,
|
|
142
|
-
disable_estimate_age_mf: false,
|
|
143
|
-
threshold_profile_enroll: 0.6,
|
|
144
|
-
allow_only_one_face: false,
|
|
145
|
-
};
|
|
146
|
-
printLogs('[FaceService] estimateAge', true);
|
|
147
|
-
return this.runUltraProcess(this.wasmService.estimateAge, Object.assign(Object.assign({}, props), { callbackType: callbackTypeEnum.ageEstimation, logMessage: props.logMessage || LOG_MESSAGES.AGE_ESTIMATION, config: Object.assign(Object.assign({}, baseConfig), props.config) }));
|
|
126
|
+
printLogs('[FaceService] estimateAge params', params);
|
|
127
|
+
try {
|
|
128
|
+
return this.runUltraProcess(this.wasmService.estimateAge, Object.assign(Object.assign({}, params), { callbackType: callbackTypeEnum.ageEstimation, logMessage: params.logMessage || LOG_MESSAGES.AGE_ESTIMATION, config: Object.assign(Object.assign({}, AGE_ESTIMATION_BASE_CONFIG), params.config) }));
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
printLogs('[FaceService] estimateAge error', error.message, 'ERROR');
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
148
134
|
});
|
|
149
135
|
}
|
|
136
|
+
// TODO: Add try/catch block
|
|
150
137
|
enroll(params) {
|
|
151
138
|
return __awaiter(this, void 0, void 0, function* () {
|
|
152
139
|
printLogs('[FaceService] enroll params', params);
|