@mikashboks/capture-intelligence-core 0.1.21 → 0.1.24

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 (53) hide show
  1. package/dist/cjs/capture-normalization.d.ts +2 -1
  2. package/dist/cjs/capture-normalization.d.ts.map +1 -1
  3. package/dist/cjs/capture-normalization.js +42 -11
  4. package/dist/cjs/capture-normalization.js.map +1 -1
  5. package/dist/cjs/document-classifier.d.ts +2 -1
  6. package/dist/cjs/document-classifier.d.ts.map +1 -1
  7. package/dist/cjs/document-classifier.js +239 -27
  8. package/dist/cjs/document-classifier.js.map +1 -1
  9. package/dist/cjs/document-placement.d.ts +1 -0
  10. package/dist/cjs/document-placement.d.ts.map +1 -1
  11. package/dist/cjs/document-placement.js +16 -6
  12. package/dist/cjs/document-placement.js.map +1 -1
  13. package/dist/cjs/index.d.ts +3 -3
  14. package/dist/cjs/index.d.ts.map +1 -1
  15. package/dist/cjs/index.js +5 -3
  16. package/dist/cjs/index.js.map +1 -1
  17. package/dist/cjs/metrics.d.ts.map +1 -1
  18. package/dist/cjs/metrics.js +19 -4
  19. package/dist/cjs/metrics.js.map +1 -1
  20. package/dist/cjs/quality-checks.d.ts +1 -1
  21. package/dist/cjs/quality-checks.d.ts.map +1 -1
  22. package/dist/cjs/quality-checks.js +41 -6
  23. package/dist/cjs/quality-checks.js.map +1 -1
  24. package/dist/cjs/types.d.ts +37 -0
  25. package/dist/cjs/types.d.ts.map +1 -1
  26. package/dist/cjs/types.js.map +1 -1
  27. package/dist/esm/capture-normalization.d.ts +2 -1
  28. package/dist/esm/capture-normalization.d.ts.map +1 -1
  29. package/dist/esm/capture-normalization.js +42 -11
  30. package/dist/esm/capture-normalization.js.map +1 -1
  31. package/dist/esm/document-classifier.d.ts +2 -1
  32. package/dist/esm/document-classifier.d.ts.map +1 -1
  33. package/dist/esm/document-classifier.js +238 -27
  34. package/dist/esm/document-classifier.js.map +1 -1
  35. package/dist/esm/document-placement.d.ts +1 -0
  36. package/dist/esm/document-placement.d.ts.map +1 -1
  37. package/dist/esm/document-placement.js +15 -5
  38. package/dist/esm/document-placement.js.map +1 -1
  39. package/dist/esm/index.d.ts +3 -3
  40. package/dist/esm/index.d.ts.map +1 -1
  41. package/dist/esm/index.js +2 -2
  42. package/dist/esm/index.js.map +1 -1
  43. package/dist/esm/metrics.d.ts.map +1 -1
  44. package/dist/esm/metrics.js +20 -5
  45. package/dist/esm/metrics.js.map +1 -1
  46. package/dist/esm/quality-checks.d.ts +1 -1
  47. package/dist/esm/quality-checks.d.ts.map +1 -1
  48. package/dist/esm/quality-checks.js +41 -6
  49. package/dist/esm/quality-checks.js.map +1 -1
  50. package/dist/esm/types.d.ts +37 -0
  51. package/dist/esm/types.d.ts.map +1 -1
  52. package/dist/esm/types.js.map +1 -1
  53. package/package.json +1 -1
@@ -35,6 +35,7 @@ export interface PreviewRectToImageCropInput {
35
35
  imageSize: CaptureImageSize;
36
36
  previewSize: CaptureImageSize;
37
37
  previewRect: CapturePreviewRect;
38
+ documentType?: string | null;
38
39
  resizeMode?: CapturePreviewResizeMode;
39
40
  paddingRatio?: number;
40
41
  }
@@ -59,7 +60,7 @@ export interface CaptureNormalizationPlan {
59
60
  diagnostics: CaptureNormalizationDiagnostics;
60
61
  }
61
62
  export type CaptureFrameMode = 'document' | 'address-document' | 'front-door' | 'selfie';
62
- export declare function mapPreviewRectToImageCropWithDiagnostics({ imageSize, previewSize, previewRect, resizeMode, paddingRatio, }: PreviewRectToImageCropInput): {
63
+ export declare function mapPreviewRectToImageCropWithDiagnostics({ imageSize, previewSize, previewRect, documentType, resizeMode, paddingRatio, }: PreviewRectToImageCropInput): {
63
64
  crop: CaptureCropRect;
64
65
  diagnostics: CaptureNormalizationDiagnostics;
65
66
  };
@@ -1 +1 @@
1
- {"version":3,"file":"capture-normalization.d.ts","sourceRoot":"","sources":["../../src/capture-normalization.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,SAAS,CAAC;AAC3D,MAAM,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;AACxD,MAAM,MAAM,gCAAgC,GACxC,cAAc,GACd,WAAW,GACX,WAAW,GACX,YAAY,GACZ,mBAAmB,CAAC;AAExB,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,+BAA+B;IAC9C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,mBAAmB,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,gCAAgC,GAAG,IAAI,CAAC;CACvD;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,gBAAgB,CAAC;IAC5B,WAAW,EAAE,gBAAgB,CAAC;IAC9B,WAAW,EAAE,kBAAkB,CAAC;IAChC,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,6BAA8B,SAAQ,2BAA2B;IAChF,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,WAAW,EAAE,+BAA+B,CAAC;CAC9C;AAED,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,kBAAkB,GAAG,YAAY,GAAG,QAAQ,CAAC;AAyEzF,wBAAgB,wCAAwC,CAAC,EACvD,SAAS,EACT,WAAW,EACX,WAAW,EACX,UAAoB,EACpB,YAAmB,GACpB,EAAE,2BAA2B,GAAG;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,EAAE,+BAA+B,CAAC;CAC9C,CA8EA;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,2BAA2B,GAAG,eAAe,CAE7F;AAED,wBAAgB,gCAAgC,CAAC,EAC/C,KAAK,EACL,MAAM,EACN,YAAY,GACb,EAAE,wBAAwB,GAAG,sBAAsB,CAYnD;AAYD,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,6BAA6B,GACnC,wBAAwB,CAmB1B;AAED,wBAAgB,kCAAkC,CAChD,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACvC,IAAI,EAAE,gBAAgB,GACrB,MAAM,GAAG,IAAI,CAiBf"}
1
+ {"version":3,"file":"capture-normalization.d.ts","sourceRoot":"","sources":["../../src/capture-normalization.ts"],"names":[],"mappings":"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"}
@@ -8,11 +8,19 @@ exports.getDocumentCaptureFrameAspectRatio = getDocumentCaptureFrameAspectRatio;
8
8
  const document_classifier_js_1 = require("./document-classifier.js");
9
9
  const CARD_CAPTURE_FRAME_ASPECT_RATIO = 1.585;
10
10
  const ADDRESS_DOCUMENT_CAPTURE_FRAME_ASPECT_RATIO = 0.72;
11
- const CAPTURE_NORMALIZATION_MIN_AREA_RATIO = 0.04;
12
- const CAPTURE_NORMALIZATION_MAX_AREA_RATIO = 0.92;
13
- const CAPTURE_NORMALIZATION_NEAR_FULL_FRAME_AREA_RATIO = 0.9;
11
+ const DEFAULT_CAPTURE_NORMALIZATION_AREA_RANGE = Object.freeze({
12
+ minAreaRatio: 0.04,
13
+ nearFullFrameAreaRatio: 0.9,
14
+ maxAreaRatio: 0.92,
15
+ });
14
16
  const CAPTURE_NORMALIZATION_MIN_ASPECT_RATIO = 0.35;
15
17
  const CAPTURE_NORMALIZATION_MAX_ASPECT_RATIO = 2.4;
18
+ // Crop diagnostics must flag `nearly_full_frame` strictly before
19
+ // `maxAreaRatio` stops allowing the crop. Without this enforced margin the
20
+ // page profile (nearFullFrame 0.98, max 0.99) left a ~0.97–0.98 window where
21
+ // a degenerate frame-border quad produced `unsafeReason: null` and could
22
+ // masquerade as a trusted applied crop.
23
+ const CAPTURE_NORMALIZATION_NEAR_FULL_FRAME_MARGIN = 0.02;
16
24
  function clamp(value, min, max) {
17
25
  return Math.min(max, Math.max(min, value));
18
26
  }
@@ -25,7 +33,29 @@ const NO_CLAMPED_EDGES = {
25
33
  right: false,
26
34
  bottom: false,
27
35
  };
28
- function getCropDiagnostics(crop, imageSize, paddingRatio, clampedEdges = NO_CLAMPED_EDGES) {
36
+ function resolveCaptureNormalizationAreaRange(documentType) {
37
+ const configured = (0, document_classifier_js_1.getDocumentReviewProfile)(documentType).captureAreaRange ??
38
+ DEFAULT_CAPTURE_NORMALIZATION_AREA_RANGE;
39
+ const minAreaRatio = Number.isFinite(configured.minAreaRatio)
40
+ ? configured.minAreaRatio
41
+ : DEFAULT_CAPTURE_NORMALIZATION_AREA_RANGE.minAreaRatio;
42
+ const maxAreaRatio = Number.isFinite(configured.maxAreaRatio)
43
+ ? configured.maxAreaRatio
44
+ : DEFAULT_CAPTURE_NORMALIZATION_AREA_RANGE.maxAreaRatio;
45
+ const resolvedMaxAreaRatio = Math.max(minAreaRatio, maxAreaRatio);
46
+ const nearFullFrameAreaRatio = Number.isFinite(configured.nearFullFrameAreaRatio)
47
+ ? configured.nearFullFrameAreaRatio
48
+ : DEFAULT_CAPTURE_NORMALIZATION_AREA_RANGE.nearFullFrameAreaRatio;
49
+ return {
50
+ minAreaRatio,
51
+ // Enforce the nearly-full-frame margin below the hard max (see
52
+ // CAPTURE_NORMALIZATION_NEAR_FULL_FRAME_MARGIN) so the profile values
53
+ // cannot open an unflagged window just under maxAreaRatio.
54
+ nearFullFrameAreaRatio: clamp(Math.min(nearFullFrameAreaRatio, resolvedMaxAreaRatio - CAPTURE_NORMALIZATION_NEAR_FULL_FRAME_MARGIN), minAreaRatio, resolvedMaxAreaRatio),
55
+ maxAreaRatio: resolvedMaxAreaRatio,
56
+ };
57
+ }
58
+ function getCropDiagnostics(crop, imageSize, paddingRatio, clampedEdges = NO_CLAMPED_EDGES, areaRange = DEFAULT_CAPTURE_NORMALIZATION_AREA_RANGE) {
29
59
  const sourceArea = Math.max(1, imageSize.width * imageSize.height);
30
60
  const cropArea = crop.width * crop.height;
31
61
  const areaRatio = cropArea / sourceArea;
@@ -35,17 +65,17 @@ function getCropDiagnostics(crop, imageSize, paddingRatio, clampedEdges = NO_CLA
35
65
  if (clamped) {
36
66
  unsafeReason = 'clamped_edge';
37
67
  }
38
- else if (areaRatio < CAPTURE_NORMALIZATION_MIN_AREA_RATIO) {
68
+ else if (areaRatio < areaRange.minAreaRatio) {
39
69
  unsafeReason = 'too_small';
40
70
  }
41
- else if (areaRatio > CAPTURE_NORMALIZATION_MAX_AREA_RATIO) {
71
+ else if (areaRatio > areaRange.maxAreaRatio) {
42
72
  unsafeReason = 'too_large';
43
73
  }
44
74
  else if (aspectRatio < CAPTURE_NORMALIZATION_MIN_ASPECT_RATIO ||
45
75
  aspectRatio > CAPTURE_NORMALIZATION_MAX_ASPECT_RATIO) {
46
76
  unsafeReason = 'bad_aspect';
47
77
  }
48
- else if (areaRatio >= CAPTURE_NORMALIZATION_NEAR_FULL_FRAME_AREA_RATIO) {
78
+ else if (areaRatio >= areaRange.nearFullFrameAreaRatio) {
49
79
  unsafeReason = 'nearly_full_frame';
50
80
  }
51
81
  return {
@@ -65,12 +95,13 @@ function fullImageCrop(imageSize) {
65
95
  height: Math.max(1, Math.round(imageSize.height)),
66
96
  };
67
97
  }
68
- function mapPreviewRectToImageCropWithDiagnostics({ imageSize, previewSize, previewRect, resizeMode = 'cover', paddingRatio = 0.04, }) {
98
+ function mapPreviewRectToImageCropWithDiagnostics({ imageSize, previewSize, previewRect, documentType, resizeMode = 'cover', paddingRatio = 0.04, }) {
99
+ const areaRange = resolveCaptureNormalizationAreaRange(documentType);
69
100
  if (!hasPositiveSize(imageSize) || !hasPositiveSize(previewSize)) {
70
101
  const crop = fullImageCrop(imageSize);
71
102
  return {
72
103
  crop,
73
- diagnostics: getCropDiagnostics(crop, imageSize, paddingRatio),
104
+ diagnostics: getCropDiagnostics(crop, imageSize, paddingRatio, NO_CLAMPED_EDGES, areaRange),
74
105
  };
75
106
  }
76
107
  const imageWidth = imageSize.width;
@@ -82,7 +113,7 @@ function mapPreviewRectToImageCropWithDiagnostics({ imageSize, previewSize, prev
82
113
  const crop = fullImageCrop(imageSize);
83
114
  return {
84
115
  crop,
85
- diagnostics: getCropDiagnostics(crop, imageSize, paddingRatio),
116
+ diagnostics: getCropDiagnostics(crop, imageSize, paddingRatio, NO_CLAMPED_EDGES, areaRange),
86
117
  };
87
118
  }
88
119
  const renderedWidth = imageWidth * scale;
@@ -128,7 +159,7 @@ function mapPreviewRectToImageCropWithDiagnostics({ imageSize, previewSize, prev
128
159
  };
129
160
  return {
130
161
  crop,
131
- diagnostics: getCropDiagnostics(crop, imageSize, paddingRatio, clampedEdges),
162
+ diagnostics: getCropDiagnostics(crop, imageSize, paddingRatio, clampedEdges, areaRange),
132
163
  };
133
164
  }
134
165
  function mapPreviewRectToImageCrop(input) {
@@ -1 +1 @@
1
- {"version":3,"file":"capture-normalization.js","sourceRoot":"","sources":["../../src/capture-normalization.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture-normalization.js","sourceRoot":"","sources":["../../src/capture-normalization.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,8 @@
4
4
  * DOM-free: operates on raw greyscale (Uint8Array) and RGBA (Uint8ClampedArray)
5
5
  * pixel data. No Canvas, no HTMLImageElement.
6
6
  */
7
- import type { DocumentLikelihoodResult, DocumentReviewProfile } from './types.js';
7
+ import type { CaptureGeometryProfile, DocumentLikelihoodResult, DocumentReviewProfile } from './types.js';
8
+ export declare function getDocumentCaptureGeometryProfile(documentType: string | null | undefined): CaptureGeometryProfile;
8
9
  export declare function getDocumentReviewProfile(documentType: string | null | undefined): DocumentReviewProfile;
9
10
  /**
10
11
  * Determine whether a greyscale + RGBA image looks like a document.
@@ -1 +1 @@
1
- {"version":3,"file":"document-classifier.d.ts","sourceRoot":"","sources":["../../src/document-classifier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AA8ElF,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACtC,qBAAqB,CA4DvB;AAID;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,iBAAiB,EAC1B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAC3B,wBAAwB,CA6K1B"}
1
+ {"version":3,"file":"document-classifier.d.ts","sourceRoot":"","sources":["../../src/document-classifier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAEV,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAiKpB,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACtC,sBAAsB,CAuCxB;AAED,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACtC,qBAAqB,CAkEvB;AAID;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,iBAAiB,EAC1B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAC3B,wBAAwB,CAmR1B"}
@@ -6,13 +6,17 @@
6
6
  * pixel data. No Canvas, no HTMLImageElement.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getDocumentCaptureGeometryProfile = getDocumentCaptureGeometryProfile;
9
10
  exports.getDocumentReviewProfile = getDocumentReviewProfile;
10
11
  exports.checkDocumentLikelihood = checkDocumentLikelihood;
11
12
  /* -- Document type normaliser (mirrors host normalizeDocType) ------------- */
12
13
  function normalizeDocType(docType) {
13
14
  if (!docType)
14
15
  return null;
15
- const raw = String(docType).trim().toLowerCase().replace(/[\s-]+/g, '_');
16
+ const raw = String(docType)
17
+ .trim()
18
+ .toLowerCase()
19
+ .replace(/[\s-]+/g, '_');
16
20
  switch (raw) {
17
21
  case 'national_id':
18
22
  case 'national_id_card':
@@ -81,7 +85,113 @@ function normalizeDocType(docType) {
81
85
  return raw;
82
86
  }
83
87
  }
88
+ /* -- Card-family document types ------------------------------------------- */
89
+ /**
90
+ * Normalized document types that resolve to the standard card-shaped review
91
+ * profile (1.585 aspect). This is the single source of truth for "card
92
+ * family": both the review-profile lookup and the card-family classifier
93
+ * floor key off this set, so the floor can never silently widen to the
94
+ * default/unknown-type profile.
95
+ */
96
+ const CARD_FAMILY_DOCUMENT_TYPES = new Set([
97
+ 'id_card',
98
+ 'voter_id',
99
+ 'voter_card',
100
+ 'drivers_license',
101
+ 'driving_license',
102
+ 'driving_licence',
103
+ 'market_association',
104
+ 'ghana_card',
105
+ 'ife_card',
106
+ 'ine_card',
107
+ 'residence_permit',
108
+ 'work_permit',
109
+ 'visa',
110
+ ]);
84
111
  /* -- Per-document-type aspect ratio profiles ------------------------------ */
112
+ // All profile/range constants are returned to callers BY REFERENCE (and
113
+ // shared with resolveCaptureNormalizationAreaRange), so they are frozen:
114
+ // a consumer mutation must throw (strict mode) instead of silently
115
+ // poisoning every later call.
116
+ const CARD_CAPTURE_AREA_RANGE = Object.freeze({
117
+ minAreaRatio: 0.04,
118
+ nearFullFrameAreaRatio: 0.9,
119
+ maxAreaRatio: 0.92,
120
+ });
121
+ const PASSPORT_CAPTURE_AREA_RANGE = Object.freeze({
122
+ minAreaRatio: 0.04,
123
+ nearFullFrameAreaRatio: 0.96,
124
+ maxAreaRatio: 0.985,
125
+ });
126
+ const PAGE_CAPTURE_AREA_RANGE = Object.freeze({
127
+ minAreaRatio: 0.04,
128
+ nearFullFrameAreaRatio: 0.98,
129
+ maxAreaRatio: 0.99,
130
+ });
131
+ const CARD_CAPTURE_GEOMETRY_PROFILE = Object.freeze({
132
+ centerMax: 0.32,
133
+ aspectMin: 1.15,
134
+ aspectMax: 1.95,
135
+ safeInsetMinRatio: 0.02,
136
+ tiltSkewMaxRatio: 0.22,
137
+ scannerMaxWidthDiffRatio: 0.45,
138
+ scannerMaxHeightDiffRatio: 0.45,
139
+ });
140
+ const PASSPORT_CAPTURE_GEOMETRY_PROFILE = Object.freeze({
141
+ centerMax: 0.3,
142
+ aspectMin: 1.05,
143
+ aspectMax: 1.8,
144
+ useNormalizedAspect: true,
145
+ safeInsetMinRatio: 0.02,
146
+ tiltSkewMaxRatio: 0.26,
147
+ scannerMaxWidthDiffRatio: 0.5,
148
+ scannerMaxHeightDiffRatio: 0.5,
149
+ });
150
+ const PAGE_CAPTURE_GEOMETRY_PROFILE = Object.freeze({
151
+ centerMax: 0.32,
152
+ aspectMin: 0.5,
153
+ aspectMax: 2.05,
154
+ useNormalizedAspect: true,
155
+ safeInsetMinRatio: 0.02,
156
+ tiltSkewMaxRatio: 0.3,
157
+ scannerMaxWidthDiffRatio: 0.55,
158
+ scannerMaxHeightDiffRatio: 0.55,
159
+ });
160
+ function getDocumentCaptureGeometryProfile(documentType) {
161
+ const normalizedType = normalizeDocType(documentType);
162
+ if (normalizedType === 'passport') {
163
+ return PASSPORT_CAPTURE_GEOMETRY_PROFILE;
164
+ }
165
+ if (normalizedType === 'address_proof' ||
166
+ normalizedType === 'a4_proof' ||
167
+ normalizedType === 'a4' ||
168
+ normalizedType === 'utility_bill' ||
169
+ normalizedType === 'proof_of_address' ||
170
+ normalizedType === 'bank_statement' ||
171
+ normalizedType === 'business_registration' ||
172
+ normalizedType === 'business_document' ||
173
+ normalizedType === 'business_license' ||
174
+ normalizedType === 'operating_license' ||
175
+ normalizedType === 'proof_of_business' ||
176
+ normalizedType === 'proof_of_registration' ||
177
+ normalizedType === 'proof_of_ownership' ||
178
+ normalizedType === 'proof_of_business_tax_id' ||
179
+ normalizedType === 'business_tax_id' ||
180
+ normalizedType === 'tax_certificate' ||
181
+ normalizedType === 'tin_certificate' ||
182
+ normalizedType === 'corporate_tax_certificate' ||
183
+ normalizedType === 'business_utility_bill' ||
184
+ normalizedType === 'mobile_money' ||
185
+ normalizedType === 'address_document' ||
186
+ normalizedType === 'readable_document' ||
187
+ normalizedType === 'readable_text_document' ||
188
+ normalizedType === 'text_document' ||
189
+ normalizedType === 'document_page' ||
190
+ normalizedType === 'tax_id') {
191
+ return PAGE_CAPTURE_GEOMETRY_PROFILE;
192
+ }
193
+ return CARD_CAPTURE_GEOMETRY_PROFILE;
194
+ }
85
195
  function getDocumentReviewProfile(documentType) {
86
196
  const normalizedType = normalizeDocType(documentType);
87
197
  // Passports -- biodata/photo page is landscape (~1.42:1).
@@ -90,49 +200,57 @@ function getDocumentReviewProfile(documentType) {
90
200
  aspectTargets: [1.42],
91
201
  threshold: 58,
92
202
  expectedOrientation: 'landscape',
203
+ captureAreaRange: PASSPORT_CAPTURE_AREA_RANGE,
93
204
  };
94
205
  }
95
206
  // ID card, voter ID, driver's licence -- standard card-shaped documents
96
- if (normalizedType === 'id_card' ||
97
- normalizedType === 'voter_id' ||
98
- normalizedType === 'voter_card' ||
99
- normalizedType === 'drivers_license' ||
100
- normalizedType === 'driving_license' ||
101
- normalizedType === 'driving_licence' ||
102
- normalizedType === 'market_association' ||
103
- normalizedType === 'ghana_card' ||
104
- normalizedType === 'ife_card' ||
105
- normalizedType === 'ine_card' ||
106
- normalizedType === 'residence_permit' ||
107
- normalizedType === 'work_permit' ||
108
- normalizedType === 'visa') {
207
+ if (normalizedType !== null && CARD_FAMILY_DOCUMENT_TYPES.has(normalizedType)) {
109
208
  return {
110
209
  aspectTargets: [1.585],
111
210
  threshold: 62,
112
211
  expectedOrientation: 'landscape',
212
+ captureAreaRange: CARD_CAPTURE_AREA_RANGE,
113
213
  };
114
214
  }
115
215
  // Address proof / utility bills -- A4/letter shaped documents
116
216
  if (normalizedType === 'address_proof' ||
217
+ normalizedType === 'a4_proof' ||
218
+ normalizedType === 'a4' ||
117
219
  normalizedType === 'utility_bill' ||
118
220
  normalizedType === 'proof_of_address' ||
119
221
  normalizedType === 'bank_statement' ||
120
222
  normalizedType === 'business_registration' ||
223
+ normalizedType === 'business_document' ||
224
+ normalizedType === 'business_license' ||
121
225
  normalizedType === 'operating_license' ||
226
+ normalizedType === 'proof_of_business' ||
227
+ normalizedType === 'proof_of_registration' ||
228
+ normalizedType === 'proof_of_ownership' ||
122
229
  normalizedType === 'proof_of_business_tax_id' ||
230
+ normalizedType === 'business_tax_id' ||
231
+ normalizedType === 'tax_certificate' ||
232
+ normalizedType === 'tin_certificate' ||
233
+ normalizedType === 'corporate_tax_certificate' ||
234
+ normalizedType === 'business_utility_bill' ||
123
235
  normalizedType === 'mobile_money' ||
124
236
  normalizedType === 'address_document' ||
237
+ normalizedType === 'readable_document' ||
238
+ normalizedType === 'readable_text_document' ||
239
+ normalizedType === 'text_document' ||
240
+ normalizedType === 'document_page' ||
125
241
  normalizedType === 'tax_id') {
126
242
  return {
127
243
  aspectTargets: [1.414, 1.294],
128
244
  threshold: 55,
129
245
  expectedOrientation: 'either',
246
+ captureAreaRange: PAGE_CAPTURE_AREA_RANGE,
130
247
  };
131
248
  }
132
249
  return {
133
250
  aspectTargets: [1.585, 1.42],
134
251
  threshold: 60,
135
252
  expectedOrientation: 'either',
253
+ captureAreaRange: CARD_CAPTURE_AREA_RANGE,
136
254
  };
137
255
  }
138
256
  /* -- 5-signal document likelihood classifier ------------------------------ */
@@ -157,6 +275,8 @@ function checkDocumentLikelihood(grey, imgData, w, h, documentType) {
157
275
  let edgePixels = 0;
158
276
  let hEdgeSum = 0;
159
277
  let vEdgeSum = 0;
278
+ const zoneEdgeCounts = new Array(9).fill(0);
279
+ const zonePixelCounts = new Array(9).fill(0);
160
280
  for (let ey = 1; ey < h - 1; ey++) {
161
281
  for (let ex = 1; ex < w - 1; ex++) {
162
282
  const gx = -grey[(ey - 1) * w + (ex - 1)] +
@@ -176,10 +296,18 @@ function checkDocumentLikelihood(grey, imgData, w, h, documentType) {
176
296
  edgeMap[ey * w + ex] = 1;
177
297
  edgePixels++;
178
298
  }
299
+ const zoneX = Math.min(2, Math.floor((ex * 3) / w));
300
+ const zoneY = Math.min(2, Math.floor((ey * 3) / h));
301
+ const zoneIndex = zoneY * 3 + zoneX;
302
+ zonePixelCounts[zoneIndex]++;
303
+ if (mag > 30)
304
+ zoneEdgeCounts[zoneIndex]++;
179
305
  hEdgeSum += Math.abs(gy);
180
306
  vEdgeSum += Math.abs(gx);
181
307
  }
182
308
  }
309
+ const zoneEdgeDensities = zoneEdgeCounts.map((count, index) => zonePixelCounts[index] > 0 ? count / zonePixelCounts[index] : 0);
310
+ const zoneEdgeDensityRange = Math.max(...zoneEdgeDensities) - Math.min(...zoneEdgeDensities);
183
311
  // 1. Edge density (widened for worn/faded Sierra Leone national IDs)
184
312
  const edgeDensity = totalPixels > 0 ? edgePixels / totalPixels : 0;
185
313
  if (isPassport) {
@@ -216,19 +344,26 @@ function checkDocumentLikelihood(grey, imgData, w, h, documentType) {
216
344
  // 3. Color channel variance
217
345
  let rSum = 0, gSum = 0, bSum = 0;
218
346
  let rSq = 0, gSq = 0, bSq = 0;
347
+ let chromaDeltaSum = 0;
219
348
  const px = imgData.length / 4;
220
349
  for (let ci = 0; ci < imgData.length; ci += 4) {
221
- rSum += imgData[ci];
222
- gSum += imgData[ci + 1];
223
- bSum += imgData[ci + 2];
224
- rSq += imgData[ci] * imgData[ci];
225
- gSq += imgData[ci + 1] * imgData[ci + 1];
226
- bSq += imgData[ci + 2] * imgData[ci + 2];
350
+ const r = imgData[ci];
351
+ const g = imgData[ci + 1];
352
+ const b = imgData[ci + 2];
353
+ rSum += r;
354
+ gSum += g;
355
+ bSum += b;
356
+ rSq += r * r;
357
+ gSq += g * g;
358
+ bSq += b * b;
359
+ chromaDeltaSum += Math.max(r, g, b) - Math.min(r, g, b);
227
360
  }
228
361
  const rVar = rSq / px - (rSum / px) * (rSum / px);
229
362
  const gVar = gSq / px - (gSum / px) * (gSum / px);
230
363
  const bVar = bSq / px - (bSum / px) * (bSum / px);
231
364
  const avgVar = (rVar + gVar + bVar) / 3;
365
+ const channelVarianceRange = Math.max(rVar, gVar, bVar) - Math.min(rVar, gVar, bVar);
366
+ const avgChromaDelta = px > 0 ? chromaDeltaSum / px : 0;
232
367
  if (avgVar >= 400 && avgVar <= 4000)
233
368
  score += 20;
234
369
  else if (avgVar >= 200 && avgVar <= 5500)
@@ -238,7 +373,25 @@ function checkDocumentLikelihood(grey, imgData, w, h, documentType) {
238
373
  const gridW = Math.floor(w / 3);
239
374
  const gridH = Math.floor(h / 3);
240
375
  let centerEdges = 0, centerTotal = 0;
241
- let maxBrightness = 0;
376
+ // A pixel at or above this grey level counts as a blown-out highlight.
377
+ const glareSaturationLevel = 250;
378
+ // Minimum fraction of the center region that must be blown out to call it
379
+ // glare. Tuned so a holographic / laminated ID (e.g. the Sierra Leone national
380
+ // ID) keeps its scattered near-white sparkle below the bar, while a real
381
+ // specular hotspot that obscures text trips it. The previous single-pixel
382
+ // `maxBrightness > 245` rule false-flagged reflective IDs, which permanently
383
+ // zeroed the live auto-capture stable counter and stopped the green capture
384
+ // lock from ever forming. This LIVE rule is deliberately lenient; the review
385
+ // stage (runDocumentQualityChecks in quality-checks.ts) applies STRICTER
386
+ // thresholds to the raw measurements exposed on the result
387
+ // (centerSaturatedRatio, max row/col saturated fractions, center mean
388
+ // brightness), so thin specular streaks and washed-out centers that pass
389
+ // the live gate still fail the review `glare_free` check.
390
+ const glareSaturatedAreaRatioMin = 0.02;
391
+ let centerSaturatedCount = 0;
392
+ let centerBrightnessSum = 0;
393
+ const centerRowSaturatedCounts = new Array(h).fill(0);
394
+ const centerColSaturatedCounts = new Array(w).fill(0);
242
395
  for (let ry = 1; ry < h - 1; ry++) {
243
396
  const rowZone = ry < gridH ? 0 : ry >= gridH * 2 ? 2 : 1;
244
397
  if (rowZone !== 1)
@@ -249,14 +402,25 @@ function checkDocumentLikelihood(grey, imgData, w, h, documentType) {
249
402
  continue;
250
403
  centerEdges += edgeMap[ry * w + rx];
251
404
  centerTotal++;
252
- // Track max brightness in center region for glare detection
253
- const pixBrightness = grey[ry * w + rx];
254
- if (pixBrightness > maxBrightness)
255
- maxBrightness = pixBrightness;
405
+ centerBrightnessSum += grey[ry * w + rx];
406
+ // Count fully blown-out pixels for glare-cluster detection (below).
407
+ if (grey[ry * w + rx] >= glareSaturationLevel) {
408
+ centerSaturatedCount++;
409
+ centerRowSaturatedCounts[ry]++;
410
+ centerColSaturatedCounts[rx]++;
411
+ }
256
412
  }
257
413
  }
258
414
  const centerDensity = centerTotal > 0 ? centerEdges / centerTotal : 0;
259
- const hasGlare = maxBrightness > 245;
415
+ const centerSaturatedRatio = centerTotal > 0 ? centerSaturatedCount / centerTotal : 0;
416
+ const centerMeanBrightness = centerTotal > 0 ? centerBrightnessSum / centerTotal : 0;
417
+ const centerRegionWidth = Math.max(1, gridW);
418
+ const centerRegionHeight = Math.max(1, gridH);
419
+ const maxSaturatedRowFraction = Math.max(...centerRowSaturatedCounts) / centerRegionWidth;
420
+ const maxSaturatedColFraction = Math.max(...centerColSaturatedCounts) / centerRegionHeight;
421
+ const hasGlare = centerSaturatedRatio >= glareSaturatedAreaRatioMin ||
422
+ maxSaturatedRowFraction >= 0.45 ||
423
+ maxSaturatedColFraction >= 0.45;
260
424
  if (isPassport) {
261
425
  if (centerDensity >= 0.06 && centerDensity <= 0.34)
262
426
  score += 15;
@@ -275,9 +439,10 @@ function checkDocumentLikelihood(grey, imgData, w, h, documentType) {
275
439
  }
276
440
  // 5. Horizontal-edge dominance (text signature)
277
441
  const edgeTotal = hEdgeSum + vEdgeSum;
442
+ const horizontalEdgeRatio = edgeTotal > 0 ? hEdgeSum / edgeTotal : 0.5;
278
443
  let hasTextSignature = false;
279
444
  if (edgeTotal > 0) {
280
- const hRatio = hEdgeSum / edgeTotal;
445
+ const hRatio = horizontalEdgeRatio;
281
446
  const vRatio = vEdgeSum / edgeTotal;
282
447
  if (isPassport) {
283
448
  // Passport pages can be captured with note text or page header rotated
@@ -318,10 +483,57 @@ function checkDocumentLikelihood(grey, imgData, w, h, documentType) {
318
483
  (hasTextSignature || centerDensity >= 0.12)) {
319
484
  score = Math.max(score, reviewProfile.threshold + 2);
320
485
  }
486
+ // Card analog of the passport floor above. Security-printed national IDs
487
+ // (e.g. the Sierra Leone national ID's guilloche + hologram face) carry
488
+ // dense, direction-less fine texture across the WHOLE card, so the band
489
+ // scoring above penalises them twice (`edgeDensity > 0.3` and
490
+ // `centerDensity > 0.2`) and real IDs plateau at 10–20 vs the 60+
491
+ // threshold — every classifier-backed rescue stays inert and detection
492
+ // rides on bare quad geometry. When the crop is strongly card-shaped AND
493
+ // its texture sits in exactly that penalised dense band, floor the score
494
+ // just over the threshold. The conditions keep the floor scoped to the
495
+ // double-penalty case: sparse-texture documents already score well through
496
+ // the normal bands, direction-dominant content (text rows or stripe
497
+ // patterns pull the horizontal-edge ratio away from the ~0.5 isotropy of a
498
+ // guilloche) keeps its honest band score, and true noise (edge density
499
+ // above 0.6) stays excluded. Layout evidence must be real EDGE structure
500
+ // (zone edge-density variation between panels/strips and texture):
501
+ // brightness variation alone is excluded because an ordinary top-to-bottom
502
+ // lighting gradient produces a large zone-brightness range with zero edge
503
+ // evidence. Frames with a blown-out center (`hasGlare`) are excluded too —
504
+ // a specular blob both corrupts the texture measurements and means the
505
+ // capture should be retaken, not rescued. The explicit card-family type
506
+ // check scopes the floor to known card documents; the default/unknown-type
507
+ // profile (which also leads with a 1.585 aspect target) and A4/page
508
+ // profiles keep their stricter band scoring, and passports use the floor
509
+ // above.
510
+ const isCardFamilyDocumentType = normalizedType !== null && CARD_FAMILY_DOCUMENT_TYPES.has(normalizedType);
511
+ const hasCardLayoutVariation = zoneEdgeDensityRange >= 0.08;
512
+ const hasCardColorLayoutEvidence = avgChromaDelta >= 10 && channelVarianceRange >= 80 && zoneEdgeDensityRange >= 0.04;
513
+ let cardFloorApplied = false;
514
+ if (isCardFamilyDocumentType &&
515
+ !hasTextSignature &&
516
+ !hasGlare &&
517
+ (hasCardLayoutVariation || hasCardColorLayoutEvidence) &&
518
+ horizontalEdgeRatio >= 0.44 &&
519
+ horizontalEdgeRatio <= 0.54 &&
520
+ bestAspectDiff < 0.16 &&
521
+ edgeDensity > 0.28 &&
522
+ edgeDensity <= 0.6 &&
523
+ centerDensity >= 0.12) {
524
+ cardFloorApplied = score < reviewProfile.threshold + 2;
525
+ score = Math.max(score, reviewProfile.threshold + 2);
526
+ }
321
527
  return {
322
528
  isLikelyDoc: score >= reviewProfile.threshold,
323
529
  confidence: score,
324
530
  glareDetected: hasGlare,
531
+ centerSaturatedRatio,
532
+ maxSaturatedRowFraction,
533
+ maxSaturatedColFraction,
534
+ centerMeanBrightness,
535
+ cardFloorApplied,
536
+ textSignatureHRatio: horizontalEdgeRatio,
325
537
  };
326
538
  }
327
539
  //# sourceMappingURL=document-classifier.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"document-classifier.js","sourceRoot":"","sources":["../../src/document-classifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document-classifier.js","sourceRoot":"","sources":["../../src/document-classifier.ts"],"names":[],"mappings":"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"}