@jaak.ai/stamps 2.0.0-dev.30 → 2.0.0-dev.32
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/cjs/jaak-stamps-webcomponent.cjs.js +1 -1
- package/dist/cjs/jaak-stamps.cjs.entry.js +1493 -1254
- package/dist/cjs/jaak-stamps.cjs.entry.js.map +1 -1
- package/dist/cjs/jaak-stamps.entry.cjs.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/components/my-component/my-component.css +325 -126
- package/dist/collection/components/my-component/my-component.js +645 -1389
- package/dist/collection/components/my-component/my-component.js.map +1 -1
- package/dist/collection/services/CameraService.js +292 -0
- package/dist/collection/services/CameraService.js.map +1 -0
- package/dist/collection/services/DetectionService.js +369 -0
- package/dist/collection/services/DetectionService.js.map +1 -0
- package/dist/collection/services/EventBusService.js +42 -0
- package/dist/collection/services/EventBusService.js.map +1 -0
- package/dist/collection/services/LoggerService.js +40 -0
- package/dist/collection/services/LoggerService.js.map +1 -0
- package/dist/collection/services/ServiceContainer.js +66 -0
- package/dist/collection/services/ServiceContainer.js.map +1 -0
- package/dist/collection/services/StateManagerService.js +109 -0
- package/dist/collection/services/StateManagerService.js.map +1 -0
- package/dist/collection/services/factories/DeviceStrategyFactory.js +16 -0
- package/dist/collection/services/factories/DeviceStrategyFactory.js.map +1 -0
- package/dist/collection/services/interfaces/ICameraService.js +2 -0
- package/dist/collection/services/interfaces/ICameraService.js.map +1 -0
- package/dist/collection/services/interfaces/IDetectionService.js +2 -0
- package/dist/collection/services/interfaces/IDetectionService.js.map +1 -0
- package/dist/collection/services/interfaces/IEventBus.js +2 -0
- package/dist/collection/services/interfaces/IEventBus.js.map +1 -0
- package/dist/collection/services/interfaces/ILogger.js +2 -0
- package/dist/collection/services/interfaces/ILogger.js.map +1 -0
- package/dist/collection/services/interfaces/IStateManager.js +2 -0
- package/dist/collection/services/interfaces/IStateManager.js.map +1 -0
- package/dist/collection/services/strategies/HighPerformanceDeviceStrategy.js +30 -0
- package/dist/collection/services/strategies/HighPerformanceDeviceStrategy.js.map +1 -0
- package/dist/collection/services/strategies/IDeviceStrategy.js +2 -0
- package/dist/collection/services/strategies/IDeviceStrategy.js.map +1 -0
- package/dist/collection/services/strategies/LowMemoryDeviceStrategy.js +30 -0
- package/dist/collection/services/strategies/LowMemoryDeviceStrategy.js.map +1 -0
- package/dist/components/jaak-stamps.js +1501 -1275
- package/dist/components/jaak-stamps.js.map +1 -1
- package/dist/esm/jaak-stamps-webcomponent.js +1 -1
- package/dist/esm/jaak-stamps.entry.js +1493 -1254
- package/dist/esm/jaak-stamps.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/jaak-stamps-webcomponent/jaak-stamps-webcomponent.esm.js +1 -1
- package/dist/jaak-stamps-webcomponent/jaak-stamps.entry.esm.js.map +1 -1
- package/dist/jaak-stamps-webcomponent/p-9d1c45a9.entry.js +2 -0
- package/dist/jaak-stamps-webcomponent/p-9d1c45a9.entry.js.map +1 -0
- package/dist/types/components/my-component/my-component.d.ts +68 -100
- package/dist/types/components.d.ts +3 -3
- package/dist/types/services/CameraService.d.ts +41 -0
- package/dist/types/services/DetectionService.d.ts +35 -0
- package/dist/types/services/EventBusService.d.ts +9 -0
- package/dist/types/services/LoggerService.d.ts +12 -0
- package/dist/types/services/ServiceContainer.d.ts +26 -0
- package/dist/types/services/StateManagerService.d.ts +15 -0
- package/dist/types/services/factories/DeviceStrategyFactory.d.ts +4 -0
- package/dist/types/services/interfaces/ICameraService.d.ts +32 -0
- package/dist/types/services/interfaces/IDetectionService.d.ts +31 -0
- package/dist/types/services/interfaces/IEventBus.d.ts +16 -0
- package/dist/types/services/interfaces/ILogger.d.ts +8 -0
- package/dist/types/services/interfaces/IStateManager.d.ts +35 -0
- package/dist/types/services/strategies/HighPerformanceDeviceStrategy.d.ts +6 -0
- package/dist/types/services/strategies/IDeviceStrategy.d.ts +21 -0
- package/dist/types/services/strategies/LowMemoryDeviceStrategy.d.ts +6 -0
- package/package.json +3 -3
- package/dist/jaak-stamps-webcomponent/p-b62b53f8.entry.js +0 -2
- package/dist/jaak-stamps-webcomponent/p-b62b53f8.entry.js.map +0 -1
|
@@ -9,106 +9,85 @@ export declare class JaakStamps {
|
|
|
9
9
|
preferredCamera: 'auto' | 'front' | 'back';
|
|
10
10
|
captureCompleted: EventEmitter<any>;
|
|
11
11
|
isReady: EventEmitter<boolean>;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
capturedBackCroppedId: string | null;
|
|
20
|
-
captureStep: 'front' | 'back' | 'completed';
|
|
21
|
-
isCapturing: boolean;
|
|
22
|
-
showFlipAnimation: boolean;
|
|
23
|
-
showSuccessAnimation: boolean;
|
|
24
|
-
shouldMirrorVideo: boolean;
|
|
12
|
+
detectionBoxes: Array<{
|
|
13
|
+
x: number;
|
|
14
|
+
y: number;
|
|
15
|
+
w: number;
|
|
16
|
+
h: number;
|
|
17
|
+
score: number;
|
|
18
|
+
}>;
|
|
25
19
|
sideAlignment: {
|
|
26
20
|
top: boolean;
|
|
27
21
|
right: boolean;
|
|
28
22
|
bottom: boolean;
|
|
29
23
|
left: boolean;
|
|
30
24
|
};
|
|
31
|
-
isDetectionPaused: boolean;
|
|
32
|
-
isLoading: boolean;
|
|
33
|
-
isModelPreloaded: boolean;
|
|
34
25
|
isMaskReady: boolean;
|
|
35
|
-
|
|
36
|
-
selectedCameraId: string | null;
|
|
26
|
+
shouldMirrorVideo: boolean;
|
|
37
27
|
showCameraSelector: boolean;
|
|
38
|
-
|
|
28
|
+
isSwitchingCamera: boolean;
|
|
29
|
+
currentStatus: {
|
|
30
|
+
message: string;
|
|
31
|
+
description?: string;
|
|
32
|
+
type: 'initializing' | 'ready' | 'loading' | 'active' | 'error';
|
|
33
|
+
isInitialized: boolean;
|
|
34
|
+
};
|
|
35
|
+
performanceData: {
|
|
36
|
+
fps: number;
|
|
37
|
+
inferenceTime: number;
|
|
38
|
+
memoryUsage: number;
|
|
39
|
+
onnxLoadTime: number;
|
|
40
|
+
frameProcessingTime: number;
|
|
41
|
+
totalDetections: number;
|
|
42
|
+
successfulDetections: number;
|
|
43
|
+
detectionRate: number;
|
|
44
|
+
};
|
|
45
|
+
isPerformanceMonitorMinimized: boolean;
|
|
46
|
+
private serviceContainer;
|
|
47
|
+
private logger;
|
|
48
|
+
private eventBus;
|
|
49
|
+
private stateManager;
|
|
50
|
+
private cameraService;
|
|
51
|
+
private detectionService;
|
|
39
52
|
private videoRef?;
|
|
40
|
-
private
|
|
41
|
-
private session?;
|
|
42
|
-
private startTime?;
|
|
53
|
+
private detectionContainer?;
|
|
43
54
|
private videoStream?;
|
|
44
55
|
private animationId?;
|
|
45
|
-
private hasScreenshotTaken;
|
|
46
56
|
private lastDetectedBox?;
|
|
47
|
-
private
|
|
48
|
-
private
|
|
49
|
-
private
|
|
50
|
-
private
|
|
57
|
+
private startTime?;
|
|
58
|
+
private hasScreenshotTaken;
|
|
59
|
+
private alignmentStartTime?;
|
|
60
|
+
private alignmentTimer?;
|
|
61
|
+
private performanceMetrics;
|
|
62
|
+
private performanceUpdateInterval?;
|
|
51
63
|
private frameSkipCounter;
|
|
52
64
|
private readonly FRAME_SKIP;
|
|
53
65
|
private consecutiveFailures;
|
|
54
66
|
private readonly MAX_FAILURES;
|
|
55
67
|
private lastInferenceTime;
|
|
56
68
|
private readonly MIN_INFERENCE_INTERVAL;
|
|
57
|
-
private preprocessCanvas?;
|
|
58
|
-
private preprocessCtx?;
|
|
59
|
-
private captureCanvas?;
|
|
60
|
-
private captureCtx?;
|
|
61
|
-
private readonly MODEL_PATH;
|
|
62
|
-
private readonly MOBILENET_MODEL_PATH;
|
|
63
|
-
private readonly MOBILENET_CLASSES_PATH;
|
|
64
|
-
private readonly INPUT_SIZE;
|
|
65
|
-
private readonly CONFIDENCE_THRESHOLD;
|
|
66
|
-
private readonly ID1_ASPECT_RATIO;
|
|
67
|
-
private logger;
|
|
68
|
-
private validateMaskSize;
|
|
69
|
-
private validateCropMargin;
|
|
70
|
-
private validatePreferredCamera;
|
|
71
|
-
private emitReadyEvent;
|
|
72
|
-
private isRearCamera;
|
|
73
|
-
private detectDeviceTypeAndCameras;
|
|
74
|
-
private enumerateAndDetectCameras;
|
|
75
|
-
private checkCameraPermission;
|
|
76
|
-
private handleCameraPermissionError;
|
|
77
|
-
private setInitialCameraPreference;
|
|
78
|
-
private loadCameraPreference;
|
|
79
|
-
private saveCameraPreference;
|
|
80
|
-
private switchCamera;
|
|
81
|
-
private setupCameraWithRetry;
|
|
82
|
-
private toggleCameraSelector;
|
|
83
|
-
private flipCamera;
|
|
84
69
|
componentDidLoad(): Promise<void>;
|
|
85
|
-
private
|
|
70
|
+
private initializeServices;
|
|
71
|
+
private setupEventListeners;
|
|
72
|
+
private initializeComponent;
|
|
73
|
+
private validateProps;
|
|
74
|
+
private loadOnnxRuntime;
|
|
75
|
+
private finalizeInitialization;
|
|
76
|
+
private updateStatus;
|
|
77
|
+
private emitReadyEvent;
|
|
78
|
+
private handleStateChange;
|
|
79
|
+
private initializeResizeObserver;
|
|
86
80
|
private handleResize;
|
|
87
81
|
private updateMaskDimensions;
|
|
88
|
-
|
|
89
|
-
disconnectedCallback(): void;
|
|
90
|
-
getCapturedImages(): Promise<{
|
|
91
|
-
front: {
|
|
92
|
-
fullFrame: string;
|
|
93
|
-
cropped: string;
|
|
94
|
-
};
|
|
95
|
-
back: {
|
|
96
|
-
fullFrame: string;
|
|
97
|
-
cropped: string;
|
|
98
|
-
};
|
|
99
|
-
metadata: {
|
|
100
|
-
hasBackCapture: boolean;
|
|
101
|
-
totalImages: number;
|
|
102
|
-
};
|
|
103
|
-
}>;
|
|
82
|
+
getCapturedImages(): Promise<import("../../services/interfaces/IStateManager").CapturedImages>;
|
|
104
83
|
isProcessCompleted(): Promise<boolean>;
|
|
105
84
|
startCapture(): Promise<void>;
|
|
106
85
|
stopCapture(): Promise<void>;
|
|
107
86
|
resetCapture(): Promise<void>;
|
|
87
|
+
skipBackCapture(): Promise<void>;
|
|
108
88
|
getStatus(): Promise<{
|
|
109
89
|
isVideoActive: boolean;
|
|
110
90
|
captureStep: "front" | "back" | "completed";
|
|
111
|
-
statusMessage: string;
|
|
112
91
|
hasImages: boolean;
|
|
113
92
|
isProcessCompleted: boolean;
|
|
114
93
|
isModelPreloaded: boolean;
|
|
@@ -122,48 +101,37 @@ export declare class JaakStamps {
|
|
|
122
101
|
error: any;
|
|
123
102
|
message?: undefined;
|
|
124
103
|
}>;
|
|
125
|
-
skipBackCapture(): Promise<void>;
|
|
126
104
|
getCameraInfo(): Promise<{
|
|
127
|
-
availableCameras:
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
selected: boolean;
|
|
131
|
-
}[];
|
|
132
|
-
selectedCameraId: string;
|
|
133
|
-
deviceType: "mobile" | "desktop" | "tablet";
|
|
105
|
+
availableCameras: import("../../services/interfaces/ICameraService").CameraInfo[];
|
|
106
|
+
selectedCameraId: string | null;
|
|
107
|
+
deviceType: string;
|
|
134
108
|
isMultipleCamerasAvailable: boolean;
|
|
135
|
-
preferredFacing: "environment" | "user";
|
|
136
|
-
userPreferredCamera: "auto" | "front" | "back";
|
|
109
|
+
preferredFacing: "environment" | "user" | null;
|
|
137
110
|
}>;
|
|
138
111
|
setPreferredCamera(camera: 'auto' | 'front' | 'back'): Promise<{
|
|
139
112
|
success: boolean;
|
|
140
113
|
selectedCamera: string;
|
|
141
114
|
availableCameras: number;
|
|
142
115
|
}>;
|
|
143
|
-
private loadMobileNetModel;
|
|
144
|
-
private preprocessMobileNet;
|
|
145
|
-
private classifyDocument;
|
|
146
|
-
private cleanup;
|
|
147
|
-
private cleanupCanvasPool;
|
|
148
|
-
private getMaxResolution;
|
|
149
|
-
private setupCamera;
|
|
150
|
-
private preprocess;
|
|
151
|
-
private float32ToFloat16;
|
|
152
|
-
private getDeviceMemoryInfo;
|
|
153
|
-
private getSessionOptions;
|
|
154
116
|
private startDetection;
|
|
117
|
+
private initializeVideoStream;
|
|
155
118
|
private detectFrame;
|
|
156
|
-
|
|
157
|
-
private
|
|
158
|
-
|
|
119
|
+
disconnectedCallback(): void;
|
|
120
|
+
private cleanup;
|
|
121
|
+
render(): any;
|
|
122
|
+
private updateDetectionBoxes;
|
|
159
123
|
private updateMaskColor;
|
|
160
|
-
private updateGuidanceStatus;
|
|
161
|
-
private drawDetections;
|
|
162
124
|
private takeScreenshot;
|
|
163
125
|
private triggerCaptureAnimation;
|
|
126
|
+
private completeProcess;
|
|
164
127
|
private stopDetection;
|
|
128
|
+
private toggleCameraSelector;
|
|
129
|
+
private handleCameraSwitch;
|
|
165
130
|
private resetDetection;
|
|
166
|
-
private completeProcess;
|
|
167
131
|
private exitSession;
|
|
168
|
-
|
|
132
|
+
private initializePerformanceMonitor;
|
|
133
|
+
private updatePerformanceMetrics;
|
|
134
|
+
private recordOnnxPerformance;
|
|
135
|
+
private recordFrameProcessing;
|
|
136
|
+
private togglePerformanceMonitor;
|
|
169
137
|
}
|
|
@@ -19,9 +19,9 @@ export namespace Components {
|
|
|
19
19
|
* @default false
|
|
20
20
|
*/
|
|
21
21
|
"debug": boolean;
|
|
22
|
-
"getCameraInfo": () => Promise<{ availableCameras:
|
|
23
|
-
"getCapturedImages": () => Promise<
|
|
24
|
-
"getStatus": () => Promise<{ isVideoActive: boolean; captureStep: "front" | "back" | "completed";
|
|
22
|
+
"getCameraInfo": () => Promise<{ availableCameras: import("/home/runner/work/jaak-stamps-webcomponent/jaak-stamps-webcomponent/src/services/interfaces/ICameraService").CameraInfo[]; selectedCameraId: string | null; deviceType: string; isMultipleCamerasAvailable: boolean; preferredFacing: "environment" | "user" | null; }>;
|
|
23
|
+
"getCapturedImages": () => Promise<import("/home/runner/work/jaak-stamps-webcomponent/jaak-stamps-webcomponent/src/services/interfaces/IStateManager").CapturedImages>;
|
|
24
|
+
"getStatus": () => Promise<{ isVideoActive: boolean; captureStep: "front" | "back" | "completed"; hasImages: boolean; isProcessCompleted: boolean; isModelPreloaded: boolean; }>;
|
|
25
25
|
"isProcessCompleted": () => Promise<boolean>;
|
|
26
26
|
/**
|
|
27
27
|
* @default 90
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ICameraService, CameraInfo } from './interfaces/ICameraService';
|
|
2
|
+
import { ILogger } from './interfaces/ILogger';
|
|
3
|
+
import { IEventBus } from './interfaces/IEventBus';
|
|
4
|
+
export declare class CameraService implements ICameraService {
|
|
5
|
+
private logger;
|
|
6
|
+
private eventBus;
|
|
7
|
+
private availableCameras;
|
|
8
|
+
private selectedCameraId;
|
|
9
|
+
private deviceType;
|
|
10
|
+
private preferredCameraFacing;
|
|
11
|
+
private preferredCamera;
|
|
12
|
+
constructor(logger: ILogger, eventBus: IEventBus, preferredCamera?: 'auto' | 'front' | 'back');
|
|
13
|
+
detectDeviceType(): Promise<'mobile' | 'desktop' | 'tablet'>;
|
|
14
|
+
enumerateDevices(): Promise<MediaDeviceInfo[]>;
|
|
15
|
+
getAvailableCameras(): MediaDeviceInfo[];
|
|
16
|
+
isMultipleCamerasAvailable(): boolean;
|
|
17
|
+
getSelectedCameraId(): string | null;
|
|
18
|
+
setSelectedCamera(cameraId: string): Promise<void>;
|
|
19
|
+
getPreferredFacing(): 'environment' | 'user' | null;
|
|
20
|
+
setupCamera(constraints?: MediaTrackConstraints): Promise<MediaStream>;
|
|
21
|
+
switchCamera(cameraId: string): Promise<void>;
|
|
22
|
+
flipToNextCamera(): Promise<void>;
|
|
23
|
+
savePreference(): void;
|
|
24
|
+
loadPreference(): void;
|
|
25
|
+
isRearCamera(stream: MediaStream): boolean;
|
|
26
|
+
getCameraInfo(): {
|
|
27
|
+
availableCameras: CameraInfo[];
|
|
28
|
+
selectedCameraId: string | null;
|
|
29
|
+
deviceType: string;
|
|
30
|
+
isMultipleCamerasAvailable: boolean;
|
|
31
|
+
preferredFacing: 'environment' | 'user' | null;
|
|
32
|
+
};
|
|
33
|
+
private checkCameraPermission;
|
|
34
|
+
private handleCameraPermissionError;
|
|
35
|
+
private setInitialCameraPreference;
|
|
36
|
+
private selectFrontCamera;
|
|
37
|
+
private selectBackCamera;
|
|
38
|
+
private selectAutoCamera;
|
|
39
|
+
private updatePreferredFacing;
|
|
40
|
+
private getMaxResolution;
|
|
41
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { IDetectionService, DetectionBox, SideAlignment, ClassificationResult } from './interfaces/IDetectionService';
|
|
2
|
+
import { ILogger } from './interfaces/ILogger';
|
|
3
|
+
export declare class DetectionService implements IDetectionService {
|
|
4
|
+
private logger;
|
|
5
|
+
private debug;
|
|
6
|
+
private useDocumentClassification;
|
|
7
|
+
private session?;
|
|
8
|
+
private mobileNetSession?;
|
|
9
|
+
private mobileNetClassMap?;
|
|
10
|
+
private modelLoaded;
|
|
11
|
+
private deviceStrategy;
|
|
12
|
+
private readonly MODEL_PATH;
|
|
13
|
+
private readonly MOBILENET_MODEL_PATH;
|
|
14
|
+
private readonly MOBILENET_CLASSES_PATH;
|
|
15
|
+
private readonly INPUT_SIZE;
|
|
16
|
+
private readonly CONFIDENCE_THRESHOLD;
|
|
17
|
+
private preprocessCanvas?;
|
|
18
|
+
private preprocessCtx?;
|
|
19
|
+
private captureCanvas?;
|
|
20
|
+
constructor(logger: ILogger, debug?: boolean, useDocumentClassification?: boolean);
|
|
21
|
+
loadModel(): Promise<void>;
|
|
22
|
+
loadClassificationModel(): Promise<void>;
|
|
23
|
+
isModelLoaded(): boolean;
|
|
24
|
+
preprocess(video: HTMLVideoElement): any;
|
|
25
|
+
runInference(inputTensor: any): Promise<DetectionBox[]>;
|
|
26
|
+
classifyDocument(canvas: HTMLCanvasElement): Promise<ClassificationResult | null>;
|
|
27
|
+
checkSideAlignment(box: DetectionBox, maskConfig: any): SideAlignment;
|
|
28
|
+
isCardInFrame(box: DetectionBox): boolean;
|
|
29
|
+
areAllSidesAligned(alignment: SideAlignment): boolean;
|
|
30
|
+
cleanup(): void;
|
|
31
|
+
private initializeCanvasPool;
|
|
32
|
+
private cleanupCanvasPool;
|
|
33
|
+
private float32ToFloat16;
|
|
34
|
+
private preprocessMobileNet;
|
|
35
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IEventBus, EventCallback } from './interfaces/IEventBus';
|
|
2
|
+
export declare class EventBusService implements IEventBus {
|
|
3
|
+
private events;
|
|
4
|
+
on<T = any>(event: string, callback: EventCallback<T>): void;
|
|
5
|
+
off(event: string, callback: EventCallback): void;
|
|
6
|
+
emit<T = any>(event: string, data?: T): void;
|
|
7
|
+
once<T = any>(event: string, callback: EventCallback<T>): void;
|
|
8
|
+
clear(): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ILogger } from './interfaces/ILogger';
|
|
2
|
+
export declare class LoggerService implements ILogger {
|
|
3
|
+
private debugMode;
|
|
4
|
+
constructor(debug?: boolean);
|
|
5
|
+
setDebugMode(debug: boolean): void;
|
|
6
|
+
info(...args: any[]): void;
|
|
7
|
+
warn(...args: any[]): void;
|
|
8
|
+
error(...args: any[]): void;
|
|
9
|
+
debug(...args: any[]): void;
|
|
10
|
+
state(state: string, data?: any): void;
|
|
11
|
+
performance(operation: string, duration: number): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ILogger } from './interfaces/ILogger';
|
|
2
|
+
import { ICameraService } from './interfaces/ICameraService';
|
|
3
|
+
import { IDetectionService } from './interfaces/IDetectionService';
|
|
4
|
+
import { IStateManager } from './interfaces/IStateManager';
|
|
5
|
+
import { IEventBus } from './interfaces/IEventBus';
|
|
6
|
+
export interface ComponentConfig {
|
|
7
|
+
debug: boolean;
|
|
8
|
+
alignmentTolerance: number;
|
|
9
|
+
maskSize: number;
|
|
10
|
+
cropMargin: number;
|
|
11
|
+
useDocumentClassification: boolean;
|
|
12
|
+
preferredCamera: 'auto' | 'front' | 'back';
|
|
13
|
+
}
|
|
14
|
+
export declare class ServiceContainer {
|
|
15
|
+
private services;
|
|
16
|
+
constructor(config: ComponentConfig);
|
|
17
|
+
private initializeServices;
|
|
18
|
+
get<T>(serviceName: string): T;
|
|
19
|
+
getLogger(): ILogger;
|
|
20
|
+
getEventBus(): IEventBus;
|
|
21
|
+
getStateManager(): IStateManager;
|
|
22
|
+
getCameraService(): ICameraService;
|
|
23
|
+
getDetectionService(): IDetectionService;
|
|
24
|
+
updateConfig(config: Partial<ComponentConfig>): void;
|
|
25
|
+
cleanup(): void;
|
|
26
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { IStateManager, CaptureState, CapturedImages } from './interfaces/IStateManager';
|
|
2
|
+
import { IEventBus } from './interfaces/IEventBus';
|
|
3
|
+
export declare class StateManagerService implements IStateManager {
|
|
4
|
+
private eventBus;
|
|
5
|
+
private captureState;
|
|
6
|
+
private capturedImages;
|
|
7
|
+
constructor(eventBus: IEventBus);
|
|
8
|
+
getCaptureState(): CaptureState;
|
|
9
|
+
updateCaptureState(updates: Partial<CaptureState>): void;
|
|
10
|
+
getCapturedImages(): CapturedImages;
|
|
11
|
+
setCapturedImages(images: Partial<CapturedImages>): void;
|
|
12
|
+
reset(): void;
|
|
13
|
+
isProcessCompleted(): boolean;
|
|
14
|
+
canProceedToBack(): boolean;
|
|
15
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface CameraInfo {
|
|
2
|
+
id: string;
|
|
3
|
+
label: string;
|
|
4
|
+
selected: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface CameraPreference {
|
|
7
|
+
cameraId: string;
|
|
8
|
+
facing: 'environment' | 'user' | null;
|
|
9
|
+
timestamp: number;
|
|
10
|
+
}
|
|
11
|
+
export interface ICameraService {
|
|
12
|
+
detectDeviceType(): Promise<'mobile' | 'desktop' | 'tablet'>;
|
|
13
|
+
enumerateDevices(): Promise<MediaDeviceInfo[]>;
|
|
14
|
+
getAvailableCameras(): MediaDeviceInfo[];
|
|
15
|
+
isMultipleCamerasAvailable(): boolean;
|
|
16
|
+
getSelectedCameraId(): string | null;
|
|
17
|
+
setSelectedCamera(cameraId: string): Promise<void>;
|
|
18
|
+
getPreferredFacing(): 'environment' | 'user' | null;
|
|
19
|
+
setupCamera(constraints?: MediaTrackConstraints): Promise<MediaStream>;
|
|
20
|
+
switchCamera(cameraId: string): Promise<void>;
|
|
21
|
+
flipToNextCamera(): Promise<void>;
|
|
22
|
+
savePreference(): void;
|
|
23
|
+
loadPreference(): void;
|
|
24
|
+
isRearCamera(stream: MediaStream): boolean;
|
|
25
|
+
getCameraInfo(): {
|
|
26
|
+
availableCameras: CameraInfo[];
|
|
27
|
+
selectedCameraId: string | null;
|
|
28
|
+
deviceType: string;
|
|
29
|
+
isMultipleCamerasAvailable: boolean;
|
|
30
|
+
preferredFacing: 'environment' | 'user' | null;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface DetectionBox {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
w: number;
|
|
5
|
+
h: number;
|
|
6
|
+
score: number;
|
|
7
|
+
classId?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface SideAlignment {
|
|
10
|
+
top: boolean;
|
|
11
|
+
right: boolean;
|
|
12
|
+
bottom: boolean;
|
|
13
|
+
left: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface ClassificationResult {
|
|
16
|
+
class: string;
|
|
17
|
+
confidence: number;
|
|
18
|
+
classIndex: number;
|
|
19
|
+
}
|
|
20
|
+
export interface IDetectionService {
|
|
21
|
+
loadModel(): Promise<void>;
|
|
22
|
+
loadClassificationModel(): Promise<void>;
|
|
23
|
+
isModelLoaded(): boolean;
|
|
24
|
+
preprocess(video: HTMLVideoElement): any;
|
|
25
|
+
runInference(inputTensor: any): Promise<DetectionBox[]>;
|
|
26
|
+
classifyDocument(canvas: HTMLCanvasElement): Promise<ClassificationResult | null>;
|
|
27
|
+
checkSideAlignment(box: DetectionBox, maskConfig: any): SideAlignment;
|
|
28
|
+
isCardInFrame(box: DetectionBox): boolean;
|
|
29
|
+
areAllSidesAligned(alignment: SideAlignment): boolean;
|
|
30
|
+
cleanup(): void;
|
|
31
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type EventCallback<T = any> = (data: T) => void;
|
|
2
|
+
export interface IEventBus {
|
|
3
|
+
on<T = any>(event: string, callback: EventCallback<T>): void;
|
|
4
|
+
off(event: string, callback: EventCallback): void;
|
|
5
|
+
emit<T = any>(event: string, data?: T): void;
|
|
6
|
+
once<T = any>(event: string, callback: EventCallback<T>): void;
|
|
7
|
+
clear(): void;
|
|
8
|
+
}
|
|
9
|
+
export interface ComponentEvents {
|
|
10
|
+
'capture-completed': any;
|
|
11
|
+
'ready': boolean;
|
|
12
|
+
'camera-changed': string;
|
|
13
|
+
'detection-updated': any[];
|
|
14
|
+
'state-changed': any;
|
|
15
|
+
'error': Error;
|
|
16
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface CaptureState {
|
|
2
|
+
step: 'front' | 'back' | 'completed';
|
|
3
|
+
isCapturing: boolean;
|
|
4
|
+
isDetectionPaused: boolean;
|
|
5
|
+
isVideoActive: boolean;
|
|
6
|
+
isLoading: boolean;
|
|
7
|
+
showFlipAnimation: boolean;
|
|
8
|
+
showSuccessAnimation: boolean;
|
|
9
|
+
bestScore: number;
|
|
10
|
+
hasScreenshotTaken: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface CapturedImages {
|
|
13
|
+
front: {
|
|
14
|
+
fullFrame: string | null;
|
|
15
|
+
cropped: string | null;
|
|
16
|
+
};
|
|
17
|
+
back: {
|
|
18
|
+
fullFrame: string | null;
|
|
19
|
+
cropped: string | null;
|
|
20
|
+
};
|
|
21
|
+
metadata: {
|
|
22
|
+
totalImages: number;
|
|
23
|
+
processCompleted: boolean;
|
|
24
|
+
backCaptureSkipped: boolean;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export interface IStateManager {
|
|
28
|
+
getCaptureState(): CaptureState;
|
|
29
|
+
updateCaptureState(updates: Partial<CaptureState>): void;
|
|
30
|
+
getCapturedImages(): CapturedImages;
|
|
31
|
+
setCapturedImages(images: Partial<CapturedImages>): void;
|
|
32
|
+
reset(): void;
|
|
33
|
+
isProcessCompleted(): boolean;
|
|
34
|
+
canProceedToBack(): boolean;
|
|
35
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IDeviceStrategy, DeviceInfo, SessionOptions } from './IDeviceStrategy';
|
|
2
|
+
export declare class HighPerformanceDeviceStrategy implements IDeviceStrategy {
|
|
3
|
+
getDeviceInfo(): DeviceInfo;
|
|
4
|
+
getSessionOptions(debug: boolean): SessionOptions;
|
|
5
|
+
shouldUseSequentialLoading(): boolean;
|
|
6
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface DeviceInfo {
|
|
2
|
+
estimatedRAM: number;
|
|
3
|
+
isLowMemory: boolean;
|
|
4
|
+
isSlowConnection: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface SessionOptions {
|
|
7
|
+
executionProviders: string[];
|
|
8
|
+
graphOptimizationLevel: string;
|
|
9
|
+
logSeverityLevel: number;
|
|
10
|
+
logVerbosityLevel?: number;
|
|
11
|
+
enableCpuMemArena: boolean;
|
|
12
|
+
enableMemPattern: boolean;
|
|
13
|
+
executionMode: string;
|
|
14
|
+
interOpNumThreads: number;
|
|
15
|
+
intraOpNumThreads: number;
|
|
16
|
+
}
|
|
17
|
+
export interface IDeviceStrategy {
|
|
18
|
+
getDeviceInfo(): DeviceInfo;
|
|
19
|
+
getSessionOptions(debug: boolean): SessionOptions;
|
|
20
|
+
shouldUseSequentialLoading(): boolean;
|
|
21
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IDeviceStrategy, DeviceInfo, SessionOptions } from './IDeviceStrategy';
|
|
2
|
+
export declare class LowMemoryDeviceStrategy implements IDeviceStrategy {
|
|
3
|
+
getDeviceInfo(): DeviceInfo;
|
|
4
|
+
getSessionOptions(_debug: boolean): SessionOptions;
|
|
5
|
+
shouldUseSequentialLoading(): boolean;
|
|
6
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jaak.ai/stamps",
|
|
3
|
-
"version": "2.0.0-dev.
|
|
3
|
+
"version": "2.0.0-dev.32",
|
|
4
4
|
"description": "Jaak Document Identifier",
|
|
5
5
|
"main": "dist/index.cjs.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
53
53
|
"@semantic-release/git": "^10.0.1",
|
|
54
54
|
"@semantic-release/github": "^11.0.3",
|
|
55
|
-
"@semantic-release/npm": "^12.0.
|
|
55
|
+
"@semantic-release/npm": "^12.0.2",
|
|
56
56
|
"@semantic-release/release-notes-generator": "^14.0.3",
|
|
57
|
-
"semantic-release": "^24.2.
|
|
57
|
+
"semantic-release": "^24.2.6"
|
|
58
58
|
}
|
|
59
59
|
}
|