idmission-web-sdk 2.0.1 → 2.0.3

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.
@@ -1,4 +1,5 @@
1
1
  import { BoundingBox } from '@mediapipe/tasks-vision';
2
+ import { MutableRefObject } from 'react';
2
3
  export declare function convertBoundingBox(box?: BoundingBox): {
3
4
  xMin: number;
4
5
  xMax: number;
@@ -7,3 +8,4 @@ export declare function convertBoundingBox(box?: BoundingBox): {
7
8
  width: number;
8
9
  height: number;
9
10
  };
11
+ export declare function waitForVideoReady(videoRef: MutableRefObject<HTMLVideoElement | null>, checkEveryMs?: number): Promise<void>;
@@ -49,7 +49,7 @@ var LanguageDetector__default = /*#__PURE__*/_interopDefaultLegacy(LanguageDetec
49
49
  var i18n__default = /*#__PURE__*/_interopDefaultLegacy(i18n);
50
50
  var SignatureCanvas__default = /*#__PURE__*/_interopDefaultLegacy(SignatureCanvas);
51
51
 
52
- var webSdkVersion = '2.0.1';
52
+ var webSdkVersion = '2.0.3';
53
53
 
54
54
  function getPlatform() {
55
55
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -2481,6 +2481,34 @@ function giveUpAfter(maxTime) {
2481
2481
  });
2482
2482
  }
2483
2483
 
2484
+ function convertBoundingBox(box) {
2485
+ var _a, _b, _c, _d, _e, _f, _g, _h;
2486
+ return {
2487
+ xMin: (_a = box === null || box === void 0 ? void 0 : box.originX) !== null && _a !== void 0 ? _a : 0,
2488
+ xMax: ((_b = box === null || box === void 0 ? void 0 : box.originX) !== null && _b !== void 0 ? _b : 0) + ((_c = box === null || box === void 0 ? void 0 : box.width) !== null && _c !== void 0 ? _c : 0),
2489
+ yMin: (_d = box === null || box === void 0 ? void 0 : box.originY) !== null && _d !== void 0 ? _d : 0,
2490
+ yMax: ((_e = box === null || box === void 0 ? void 0 : box.originY) !== null && _e !== void 0 ? _e : 0) + ((_f = box === null || box === void 0 ? void 0 : box.height) !== null && _f !== void 0 ? _f : 0),
2491
+ width: (_g = box === null || box === void 0 ? void 0 : box.width) !== null && _g !== void 0 ? _g : 0,
2492
+ height: (_h = box === null || box === void 0 ? void 0 : box.height) !== null && _h !== void 0 ? _h : 0
2493
+ };
2494
+ }
2495
+ function waitForVideoReady(videoRef, checkEveryMs) {
2496
+ if (checkEveryMs === void 0) {
2497
+ checkEveryMs = 100;
2498
+ }
2499
+ return new Promise(function (resolve) {
2500
+ var _a;
2501
+ if (((_a = videoRef.current) === null || _a === void 0 ? void 0 : _a.readyState) === 4) return resolve();
2502
+ var interval = setInterval(function () {
2503
+ var _a;
2504
+ if (((_a = videoRef.current) === null || _a === void 0 ? void 0 : _a.readyState) === 4) {
2505
+ clearInterval(interval);
2506
+ resolve();
2507
+ }
2508
+ }, checkEveryMs);
2509
+ });
2510
+ }
2511
+
2484
2512
  var defaultFocusModelPath = "https://websdk-cdn-dev.idmission.com/assets/models/focusmp20240523/model_float16.tflite";
2485
2513
  var defaultFocusModelLoadTimeoutMs = 45000;
2486
2514
  var defaultFocusThresholds = {
@@ -2496,7 +2524,7 @@ var defaultFocusThresholds = {
2496
2524
  var models = {};
2497
2525
  function loadFocusModel(modelAssetPath) {
2498
2526
  return tslib.__awaiter(this, void 0, void 0, function () {
2499
- var id, _a, _b, _c, _d, emptyFrame;
2527
+ var id, _a, _b, _c, _d;
2500
2528
  return tslib.__generator(this, function (_e) {
2501
2529
  switch (_e.label) {
2502
2530
  case 0:
@@ -2522,9 +2550,6 @@ function loadFocusModel(modelAssetPath) {
2522
2550
  }])];
2523
2551
  case 3:
2524
2552
  _a[_b] = _e.sent();
2525
- emptyFrame = document.createElement('canvas');
2526
- models[id].classifyForVideo(emptyFrame, performance.now());
2527
- emptyFrame.remove();
2528
2553
  return [2 /*return*/, models[id]];
2529
2554
  }
2530
2555
  });
@@ -2546,7 +2571,9 @@ function useLoadFocusModel(_a) {
2546
2571
  var _f = React.useState(null),
2547
2572
  modelError = _f[0],
2548
2573
  setModelError = _f[1];
2574
+ var videoRef = React.useContext(CameraStateContext).videoRef;
2549
2575
  React.useEffect(function loadModel() {
2576
+ var _this = this;
2550
2577
  setReady(false);
2551
2578
  function handleDownloadProgress(event) {
2552
2579
  setModelDownloadProgress(progressToPercentage(event.detail));
@@ -2556,9 +2583,22 @@ function useLoadFocusModel(_a) {
2556
2583
  setModelError(new Error('Model loading time limit exceeded.'));
2557
2584
  }, modelLoadTimeoutMs);
2558
2585
  loadFocusModel(modelPath).then(function (loadedModel) {
2559
- model.current = loadedModel;
2560
- setModelDownloadProgress(100);
2561
- setReady(true);
2586
+ return tslib.__awaiter(_this, void 0, void 0, function () {
2587
+ return tslib.__generator(this, function (_a) {
2588
+ switch (_a.label) {
2589
+ case 0:
2590
+ model.current = loadedModel;
2591
+ setModelDownloadProgress(100);
2592
+ clearTimeout(modelLoadTimeout);
2593
+ return [4 /*yield*/, waitForVideoReady(videoRef)];
2594
+ case 1:
2595
+ _a.sent();
2596
+ loadedModel.classifyForVideo(videoRef.current, performance.now());
2597
+ setReady(true);
2598
+ return [2 /*return*/];
2599
+ }
2600
+ });
2601
+ });
2562
2602
  })["catch"](function (e) {
2563
2603
  setModelError(e);
2564
2604
  })["finally"](function () {
@@ -2568,7 +2608,7 @@ function useLoadFocusModel(_a) {
2568
2608
  clearTimeout(modelLoadTimeout);
2569
2609
  document.removeEventListener('idmission.preloadProgress.focus', handleDownloadProgress);
2570
2610
  };
2571
- }, [modelPath, modelLoadTimeoutMs]);
2611
+ }, [modelPath, modelLoadTimeoutMs, videoRef]);
2572
2612
  React.useEffect(function handleModelError() {
2573
2613
  modelError && (onModelError === null || onModelError === void 0 ? void 0 : onModelError(modelError));
2574
2614
  }, [modelError, onModelError]);
@@ -2748,24 +2788,12 @@ K("FACEDETECTION_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11]
2748
2788
  [256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,
2749
2789
  343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]);K("VERSION","0.4.1646425229");}).call(commonjsGlobal);
2750
2790
 
2751
- function convertBoundingBox(box) {
2752
- var _a, _b, _c, _d, _e, _f, _g, _h;
2753
- return {
2754
- xMin: (_a = box === null || box === void 0 ? void 0 : box.originX) !== null && _a !== void 0 ? _a : 0,
2755
- xMax: ((_b = box === null || box === void 0 ? void 0 : box.originX) !== null && _b !== void 0 ? _b : 0) + ((_c = box === null || box === void 0 ? void 0 : box.width) !== null && _c !== void 0 ? _c : 0),
2756
- yMin: (_d = box === null || box === void 0 ? void 0 : box.originY) !== null && _d !== void 0 ? _d : 0,
2757
- yMax: ((_e = box === null || box === void 0 ? void 0 : box.originY) !== null && _e !== void 0 ? _e : 0) + ((_f = box === null || box === void 0 ? void 0 : box.height) !== null && _f !== void 0 ? _f : 0),
2758
- width: (_g = box === null || box === void 0 ? void 0 : box.width) !== null && _g !== void 0 ? _g : 0,
2759
- height: (_h = box === null || box === void 0 ? void 0 : box.height) !== null && _h !== void 0 ? _h : 0
2760
- };
2761
- }
2762
-
2763
2791
  var defaultFaceDetectorModelPath = 'https://websdk-cdn-dev.idmission.com/assets/models/blazeface20240207/blaze_face_short_range.tflite';
2764
2792
  var defaultSelfieCaptureModelLoadTimeoutMs = 45000;
2765
2793
  var detector;
2766
2794
  function loadFaceDetector() {
2767
2795
  return tslib.__awaiter(this, void 0, void 0, function () {
2768
- var _a, _b, emptyFrame;
2796
+ var _a, _b;
2769
2797
  return tslib.__generator(this, function (_c) {
2770
2798
  switch (_c.label) {
2771
2799
  case 0:
@@ -2788,9 +2816,6 @@ function loadFaceDetector() {
2788
2816
  }])];
2789
2817
  case 3:
2790
2818
  detector = _c.sent();
2791
- emptyFrame = document.createElement('canvas');
2792
- detector.detectForVideo(emptyFrame, performance.now());
2793
- emptyFrame.remove();
2794
2819
  return [2 /*return*/, detector];
2795
2820
  }
2796
2821
  });
@@ -2810,7 +2835,9 @@ function useLoadFaceDetector(_a) {
2810
2835
  var _e = React.useState(null),
2811
2836
  modelError = _e[0],
2812
2837
  setModelError = _e[1];
2838
+ var videoRef = React.useContext(CameraStateContext).videoRef;
2813
2839
  React.useEffect(function loadModel() {
2840
+ var _this = this;
2814
2841
  setReady(false);
2815
2842
  var modelLoadTimeout = setTimeout(function () {
2816
2843
  setModelError(new Error('Model loading time limit exceeded.'));
@@ -2820,9 +2847,22 @@ function useLoadFaceDetector(_a) {
2820
2847
  }
2821
2848
  document.addEventListener('idmission.preloadProgress.faceDetection', handleDownloadProgress);
2822
2849
  loadFaceDetector().then(function (model) {
2823
- detector.current = model;
2824
- setModelDownloadProgress(100);
2825
- setReady(true);
2850
+ return tslib.__awaiter(_this, void 0, void 0, function () {
2851
+ return tslib.__generator(this, function (_a) {
2852
+ switch (_a.label) {
2853
+ case 0:
2854
+ detector.current = model;
2855
+ setModelDownloadProgress(100);
2856
+ clearTimeout(modelLoadTimeout);
2857
+ return [4 /*yield*/, waitForVideoReady(videoRef)];
2858
+ case 1:
2859
+ _a.sent();
2860
+ model.detectForVideo(videoRef.current, performance.now());
2861
+ setReady(true);
2862
+ return [2 /*return*/];
2863
+ }
2864
+ });
2865
+ });
2826
2866
  })["catch"](function (e) {
2827
2867
  setModelError(e);
2828
2868
  })["finally"](function () {
@@ -2832,7 +2872,7 @@ function useLoadFaceDetector(_a) {
2832
2872
  clearTimeout(modelLoadTimeout);
2833
2873
  document.removeEventListener('idmission.preloadProgress.faceDetection', handleDownloadProgress);
2834
2874
  };
2835
- }, [modelLoadTimeoutMs]);
2875
+ }, [modelLoadTimeoutMs, videoRef]);
2836
2876
  React.useEffect(function handleModelError() {
2837
2877
  modelError && (onModelError === null || onModelError === void 0 ? void 0 : onModelError(modelError));
2838
2878
  }, [modelError, onModelError]);
@@ -3113,7 +3153,7 @@ function loadDocumentDetector(modelAssetPath, scoreThreshold) {
3113
3153
  scoreThreshold = defaultDocumentDetectionScoreThreshold;
3114
3154
  }
3115
3155
  return tslib.__awaiter(this, void 0, void 0, function () {
3116
- var id, _a, _b, _c, _d, emptyFrame;
3156
+ var id, _a, _b, _c, _d;
3117
3157
  return tslib.__generator(this, function (_e) {
3118
3158
  switch (_e.label) {
3119
3159
  case 0:
@@ -3140,9 +3180,6 @@ function loadDocumentDetector(modelAssetPath, scoreThreshold) {
3140
3180
  }])];
3141
3181
  case 3:
3142
3182
  _a[_b] = _e.sent();
3143
- emptyFrame = document.createElement('canvas');
3144
- detectors[id].detectForVideo(emptyFrame, performance.now());
3145
- emptyFrame.remove();
3146
3183
  return [2 /*return*/, detectors[id]];
3147
3184
  }
3148
3185
  });
@@ -3166,7 +3203,9 @@ function useLoadDocumentDetector(_a) {
3166
3203
  var _g = React.useState(null),
3167
3204
  modelError = _g[0],
3168
3205
  setModelError = _g[1];
3206
+ var videoRef = React.useContext(CameraStateContext).videoRef;
3169
3207
  React.useEffect(function loadModel() {
3208
+ var _this = this;
3170
3209
  setReady(false);
3171
3210
  function handleDownloadProgress(event) {
3172
3211
  setModelDownloadProgress(progressToPercentage(event.detail));
@@ -3176,9 +3215,22 @@ function useLoadDocumentDetector(_a) {
3176
3215
  setModelError(new Error('Model loading time limit exceeded.'));
3177
3216
  }, modelLoadTimeoutMs);
3178
3217
  loadDocumentDetector(modelPath, scoreThreshold).then(function (model) {
3179
- detector.current = model;
3180
- setModelDownloadProgress(100);
3181
- setReady(true);
3218
+ return tslib.__awaiter(_this, void 0, void 0, function () {
3219
+ return tslib.__generator(this, function (_a) {
3220
+ switch (_a.label) {
3221
+ case 0:
3222
+ detector.current = model;
3223
+ setModelDownloadProgress(100);
3224
+ clearTimeout(modelLoadTimeout);
3225
+ return [4 /*yield*/, waitForVideoReady(videoRef)];
3226
+ case 1:
3227
+ _a.sent();
3228
+ model.detectForVideo(videoRef.current, performance.now());
3229
+ setReady(true);
3230
+ return [2 /*return*/];
3231
+ }
3232
+ });
3233
+ });
3182
3234
  })["catch"](function (e) {
3183
3235
  setModelError(e);
3184
3236
  })["finally"](function () {
@@ -3188,7 +3240,7 @@ function useLoadDocumentDetector(_a) {
3188
3240
  clearTimeout(modelLoadTimeout);
3189
3241
  document.removeEventListener('idmission.preloadProgress.documentDetection', handleDownloadProgress);
3190
3242
  };
3191
- }, [modelLoadTimeoutMs, modelPath, scoreThreshold]);
3243
+ }, [modelLoadTimeoutMs, modelPath, scoreThreshold, videoRef]);
3192
3244
  React.useEffect(function handleModelError() {
3193
3245
  modelError && (onModelError === null || onModelError === void 0 ? void 0 : onModelError(modelError));
3194
3246
  }, [modelError, onModelError]);