capacitor-plugin-camera-forked 3.0.113 → 3.0.120
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/LICENSE +0 -0
- package/README.md +4 -4
- package/android/src/main/java/com/tonyxlh/capacitor/camera/CameraPreviewPlugin.java +31 -4
- package/dist/docs.json +4 -4
- package/dist/esm/definitions.d.ts +2 -2
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/web.d.ts +1 -1
- package/dist/esm/web.js +1 -1
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +1 -1
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +1 -1
- package/dist/plugin.js.map +1 -1
- package/ios/Plugin/CameraPreviewPlugin.swift +25 -6
- package/ios/Plugin/PreviewView.swift +0 -0
- package/ios/Plugin/ScanRegion.swift +0 -0
- package/ios/Plugin/TestTFLite.swift +0 -0
- package/package.json +1 -1
package/LICENSE
CHANGED
|
File without changes
|
package/README.md
CHANGED
|
@@ -290,7 +290,7 @@ stopCamera() => Promise<void>
|
|
|
290
290
|
### takeSnapshot(...)
|
|
291
291
|
|
|
292
292
|
```typescript
|
|
293
|
-
takeSnapshot(options: { quality?: number; checkBlur?: boolean; }) => Promise<{ base64: string;
|
|
293
|
+
takeSnapshot(options: { quality?: number; checkBlur?: boolean; }) => Promise<{ base64: string; confidence?: number; }>
|
|
294
294
|
```
|
|
295
295
|
|
|
296
296
|
take a snapshot as base64.
|
|
@@ -299,7 +299,7 @@ take a snapshot as base64.
|
|
|
299
299
|
| ------------- | ------------------------------------------------------- |
|
|
300
300
|
| **`options`** | <code>{ quality?: number; checkBlur?: boolean; }</code> |
|
|
301
301
|
|
|
302
|
-
**Returns:** <code>Promise<{ base64: string;
|
|
302
|
+
**Returns:** <code>Promise<{ base64: string; confidence?: number; }></code>
|
|
303
303
|
|
|
304
304
|
--------------------
|
|
305
305
|
|
|
@@ -354,14 +354,14 @@ take a snapshot on to a canvas. Web Only
|
|
|
354
354
|
### takePhoto(...)
|
|
355
355
|
|
|
356
356
|
```typescript
|
|
357
|
-
takePhoto(options: { pathToSave?: string; includeBase64?: boolean; }) => Promise<{ path?: string; base64?: string; blob?: Blob;
|
|
357
|
+
takePhoto(options: { pathToSave?: string; includeBase64?: boolean; }) => Promise<{ path?: string; base64?: string; blob?: Blob; confidence?: number; }>
|
|
358
358
|
```
|
|
359
359
|
|
|
360
360
|
| Param | Type |
|
|
361
361
|
| ------------- | -------------------------------------------------------------- |
|
|
362
362
|
| **`options`** | <code>{ pathToSave?: string; includeBase64?: boolean; }</code> |
|
|
363
363
|
|
|
364
|
-
**Returns:** <code>Promise<{ path?: string; base64?: string; blob?: any;
|
|
364
|
+
**Returns:** <code>Promise<{ path?: string; base64?: string; blob?: any; confidence?: number; }></code>
|
|
365
365
|
|
|
366
366
|
--------------------
|
|
367
367
|
|
|
@@ -130,6 +130,7 @@ public class CameraPreviewPlugin extends Plugin {
|
|
|
130
130
|
|
|
131
131
|
previewView = new PreviewView(getContext());
|
|
132
132
|
previewView.setScaleType(PreviewView.ScaleType.FIT_CENTER);
|
|
133
|
+
previewView.setBackgroundColor(Color.TRANSPARENT);
|
|
133
134
|
FrameLayout.LayoutParams cameraPreviewParams = new FrameLayout.LayoutParams(
|
|
134
135
|
FrameLayout.LayoutParams.MATCH_PARENT,
|
|
135
136
|
FrameLayout.LayoutParams.MATCH_PARENT
|
|
@@ -223,9 +224,9 @@ public class CameraPreviewPlugin extends Plugin {
|
|
|
223
224
|
// Only detect blur if checkBlur option is true
|
|
224
225
|
boolean shouldCheckBlur = takeSnapshotCall.getBoolean("checkBlur", false);
|
|
225
226
|
if (shouldCheckBlur) {
|
|
226
|
-
|
|
227
|
-
result.put("
|
|
228
|
-
Log.d("Camera", "Blur detection -
|
|
227
|
+
double confidence = calculateBlurConfidence(bitmap);
|
|
228
|
+
result.put("confidence", confidence);
|
|
229
|
+
Log.d("Camera", "Blur detection - Confidence: " + confidence);
|
|
229
230
|
} else {
|
|
230
231
|
Log.d("Camera", "Blur detection disabled for performance");
|
|
231
232
|
}
|
|
@@ -1127,9 +1128,16 @@ public class CameraPreviewPlugin extends Plugin {
|
|
|
1127
1128
|
if (call.getBoolean("includeBase64", false)) {
|
|
1128
1129
|
String base64 = Base64.encodeToString(convertFileToByteArray(file), Base64.DEFAULT);
|
|
1129
1130
|
result.put("base64", base64);
|
|
1131
|
+
|
|
1132
|
+
// Detect blur if base64 is included
|
|
1133
|
+
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
|
|
1134
|
+
if (bitmap != null) {
|
|
1135
|
+
double confidence = calculateBlurConfidence(bitmap);
|
|
1136
|
+
result.put("confidence", confidence);
|
|
1137
|
+
Log.d("Camera", "Blur detection - Confidence: " + confidence);
|
|
1138
|
+
}
|
|
1130
1139
|
}
|
|
1131
1140
|
result.put("path", file.getAbsolutePath());
|
|
1132
|
-
call.resolve(result);
|
|
1133
1141
|
}
|
|
1134
1142
|
|
|
1135
1143
|
@Override
|
|
@@ -1455,6 +1463,25 @@ public class CameraPreviewPlugin extends Plugin {
|
|
|
1455
1463
|
return laplacianScore < 50;
|
|
1456
1464
|
}
|
|
1457
1465
|
}
|
|
1466
|
+
|
|
1467
|
+
/**
|
|
1468
|
+
* Calculate blur confidence score (0-1 where 1 is sharp, 0 is blurry)
|
|
1469
|
+
*/
|
|
1470
|
+
private double calculateBlurConfidence(Bitmap bitmap) {
|
|
1471
|
+
if (bitmap == null) return 0.0;
|
|
1472
|
+
|
|
1473
|
+
// Use TFLite model if available for detailed confidence
|
|
1474
|
+
if (blurDetectionHelper != null && blurDetectionHelper.isInitialized()) {
|
|
1475
|
+
java.util.Map<String, Object> result = blurDetectionHelper.detectBlurWithConfidence(bitmap);
|
|
1476
|
+
Double blurConfidence = (Double) result.get("blurConfidence");
|
|
1477
|
+
return blurConfidence != null ? blurConfidence : 0.0;
|
|
1478
|
+
} else {
|
|
1479
|
+
// Fallback to Laplacian algorithm with confidence calculation
|
|
1480
|
+
double laplacianScore = calculateLaplacianBlurScore(bitmap);
|
|
1481
|
+
// Normalize to 0-1 range (higher score = sharper image)
|
|
1482
|
+
return Math.max(0.0, Math.min(1.0, laplacianScore / 300.0));
|
|
1483
|
+
}
|
|
1484
|
+
}
|
|
1458
1485
|
|
|
1459
1486
|
/**
|
|
1460
1487
|
* Original Laplacian blur detection (fallback)
|
package/dist/docs.json
CHANGED
|
@@ -189,7 +189,7 @@
|
|
|
189
189
|
},
|
|
190
190
|
{
|
|
191
191
|
"name": "takeSnapshot",
|
|
192
|
-
"signature": "(options: { quality?: number; checkBlur?: boolean; }) => Promise<{ base64: string;
|
|
192
|
+
"signature": "(options: { quality?: number; checkBlur?: boolean; }) => Promise<{ base64: string; confidence?: number; }>",
|
|
193
193
|
"parameters": [
|
|
194
194
|
{
|
|
195
195
|
"name": "options",
|
|
@@ -197,7 +197,7 @@
|
|
|
197
197
|
"type": "{ quality?: number | undefined; checkBlur?: boolean | undefined; }"
|
|
198
198
|
}
|
|
199
199
|
],
|
|
200
|
-
"returns": "Promise<{ base64: string;
|
|
200
|
+
"returns": "Promise<{ base64: string; confidence?: number | undefined; }>",
|
|
201
201
|
"tags": [],
|
|
202
202
|
"docs": "take a snapshot as base64.",
|
|
203
203
|
"complexTypes": [],
|
|
@@ -249,7 +249,7 @@
|
|
|
249
249
|
},
|
|
250
250
|
{
|
|
251
251
|
"name": "takePhoto",
|
|
252
|
-
"signature": "(options: { pathToSave?: string; includeBase64?: boolean; }) => Promise<{ path?: string; base64?: string; blob?: Blob;
|
|
252
|
+
"signature": "(options: { pathToSave?: string; includeBase64?: boolean; }) => Promise<{ path?: string; base64?: string; blob?: Blob; confidence?: number; }>",
|
|
253
253
|
"parameters": [
|
|
254
254
|
{
|
|
255
255
|
"name": "options",
|
|
@@ -257,7 +257,7 @@
|
|
|
257
257
|
"type": "{ pathToSave?: string | undefined; includeBase64?: boolean | undefined; }"
|
|
258
258
|
}
|
|
259
259
|
],
|
|
260
|
-
"returns": "Promise<{ path?: string | undefined; base64?: string | undefined; blob?: any;
|
|
260
|
+
"returns": "Promise<{ path?: string | undefined; base64?: string | undefined; blob?: any; confidence?: number | undefined; }>",
|
|
261
261
|
"tags": [],
|
|
262
262
|
"docs": "",
|
|
263
263
|
"complexTypes": [
|
|
@@ -46,7 +46,7 @@ export interface CameraPreviewPlugin {
|
|
|
46
46
|
checkBlur?: boolean;
|
|
47
47
|
}): Promise<{
|
|
48
48
|
base64: string;
|
|
49
|
-
|
|
49
|
+
confidence?: number;
|
|
50
50
|
}>;
|
|
51
51
|
/**
|
|
52
52
|
* analyze an image for blur detection with detailed confidence scores.
|
|
@@ -80,7 +80,7 @@ export interface CameraPreviewPlugin {
|
|
|
80
80
|
path?: string;
|
|
81
81
|
base64?: string;
|
|
82
82
|
blob?: Blob;
|
|
83
|
-
|
|
83
|
+
confidence?: number;
|
|
84
84
|
}>;
|
|
85
85
|
toggleTorch(options: {
|
|
86
86
|
on: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"AA2EA,MAAM,CAAN,IAAY,cAOX;AAPD,WAAY,cAAc;IACxB,yEAAmB,CAAA;IACnB,yEAAmB,CAAA;IACnB,yEAAmB,CAAA;IACnB,2EAAoB,CAAA;IACpB,qEAAiB,CAAA;IACjB,qEAAiB,CAAA;AACnB,CAAC,EAPW,cAAc,KAAd,cAAc,QAOzB","sourcesContent":["import { PluginListenerHandle } from \"@capacitor/core\";\n\nexport interface CameraPreviewPlugin {\n initialize(options?: { quality?: number }): Promise<void>;\n getResolution(): Promise<{resolution: string}>;\n setResolution(options: {resolution: number}): Promise<void>;\n getAllCameras(): Promise<{cameras: string[]}>;\n getSelectedCamera(): Promise<{selectedCamera: string}>;\n selectCamera(options: {cameraID: string; }): Promise<void>;\n setScanRegion(options: {region:ScanRegion}): Promise<void>;\n setZoom(options: {factor: number}): Promise<void>;\n setFocus(options: {x: number, y: number}): Promise<void>;\n /**\n * Web Only\n */\n setDefaultUIElementURL(url:string): Promise<void>;\n /**\n * Web Only\n */\n setElement(ele:HTMLElement): Promise<void>;\n startCamera(): Promise<void>;\n stopCamera(): Promise<void>;\n /**\n * take a snapshot as base64.\n */\n takeSnapshot(options:{quality?:number, checkBlur?:boolean}): Promise<{base64:string,
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"AA2EA,MAAM,CAAN,IAAY,cAOX;AAPD,WAAY,cAAc;IACxB,yEAAmB,CAAA;IACnB,yEAAmB,CAAA;IACnB,yEAAmB,CAAA;IACnB,2EAAoB,CAAA;IACpB,qEAAiB,CAAA;IACjB,qEAAiB,CAAA;AACnB,CAAC,EAPW,cAAc,KAAd,cAAc,QAOzB","sourcesContent":["import { PluginListenerHandle } from \"@capacitor/core\";\n\nexport interface CameraPreviewPlugin {\n initialize(options?: { quality?: number }): Promise<void>;\n getResolution(): Promise<{resolution: string}>;\n setResolution(options: {resolution: number}): Promise<void>;\n getAllCameras(): Promise<{cameras: string[]}>;\n getSelectedCamera(): Promise<{selectedCamera: string}>;\n selectCamera(options: {cameraID: string; }): Promise<void>;\n setScanRegion(options: {region:ScanRegion}): Promise<void>;\n setZoom(options: {factor: number}): Promise<void>;\n setFocus(options: {x: number, y: number}): Promise<void>;\n /**\n * Web Only\n */\n setDefaultUIElementURL(url:string): Promise<void>;\n /**\n * Web Only\n */\n setElement(ele:HTMLElement): Promise<void>;\n startCamera(): Promise<void>;\n stopCamera(): Promise<void>;\n /**\n * take a snapshot as base64.\n */\n takeSnapshot(options:{quality?:number, checkBlur?:boolean}): Promise<{base64:string, confidence?: number}>;\n /**\n * analyze an image for blur detection with detailed confidence scores.\n */\n detectBlur(options:{image: string}): Promise<{isBlur: boolean, blurConfidence: number, sharpConfidence: number}>;\n /**\n * save a frame internally. Android and iOS only.\n */\n saveFrame(): Promise<{success:boolean}>;\n /**\n * take a snapshot on to a canvas. Web Only\n */\n takeSnapshot2(options:{canvas:HTMLCanvasElement,maxLength?:number}): Promise<{scaleRatio?:number}>;\n takePhoto(options: {pathToSave?:string,includeBase64?: boolean}): Promise<{path?:string,base64?:string,blob?:Blob, confidence?: number}>;\n toggleTorch(options: {on: boolean}): Promise<void>;\n /**\n * get the orientation of the device.\n */\n getOrientation(): Promise<{\"orientation\":\"PORTRAIT\"|\"LANDSCAPE\"}>;\n startRecording(): Promise<void>;\n stopRecording(options:{includeBase64?:boolean}): Promise<{path?:string,base64?:string,blob?:Blob}>;\n setLayout(options: {top: string, left:string, width:string, height:string}): Promise<void>;\n requestCameraPermission(): Promise<void>;\n requestMicroPhonePermission(): Promise<void>;\n isOpen():Promise<{isOpen:boolean}>;\n addListener(\n eventName: 'onPlayed',\n listenerFunc: onPlayedListener,\n ): Promise<PluginListenerHandle>;\n addListener(\n eventName: 'onOrientationChanged',\n listenerFunc: onOrientationChangedListener,\n ): Promise<PluginListenerHandle>;\n removeAllListeners(): Promise<void>;\n}\n\nexport type onPlayedListener = (result:{resolution:string}) => void;\nexport type onOrientationChangedListener = () => void;\n\n/**\n * measuredByPercentage: 0 in pixel, 1 in percent\n */\nexport interface ScanRegion{\n left: number;\n top: number;\n right: number;\n bottom: number;\n measuredByPercentage: number;\n}\n\nexport enum EnumResolution {\n RESOLUTION_AUTO = 0,\n RESOLUTION_480P = 1,\n RESOLUTION_720P = 2,\n RESOLUTION_1080P = 3,\n RESOLUTION_2K = 4,\n RESOLUTION_4K = 5\n}\n"]}
|
package/dist/esm/web.d.ts
CHANGED
package/dist/esm/web.js
CHANGED
|
@@ -257,7 +257,7 @@ export class CameraPreviewWeb extends WebPlugin {
|
|
|
257
257
|
const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);
|
|
258
258
|
return {
|
|
259
259
|
base64: base64,
|
|
260
|
-
|
|
260
|
+
confidence: Math.max(0, Math.min(1, blurResult.blurScore / 300))
|
|
261
261
|
};
|
|
262
262
|
}
|
|
263
263
|
}
|
package/dist/esm/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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AK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACzI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7H,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACzI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7H,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7H,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACzI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7H,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBAC1I,CAAC;gBAEF,8DAA8D;gBAC9D,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;oBAC5C,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;oBACvC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAE7D,QAAQ,IAAI,SAAS,GAAG,SAAS,CAAC;gBAClC,KAAK,EAAE,CAAC;aACT;SACF;QAED,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnD,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC;CACF","sourcesContent":["import { WebPlugin } from '@capacitor/core';\nimport { CameraEnhancer, PlayCallbackInfo } from 'dynamsoft-camera-enhancer';\nimport { CameraPreviewPlugin, EnumResolution, ScanRegion } from './definitions';\nimport RecordRTC from 'recordrtc';\nCameraEnhancer.defaultUIElementURL = \"https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.3.9/dist/dce.ui.html\";\n\nexport class CameraPreviewWeb extends WebPlugin implements CameraPreviewPlugin {\n private camera:CameraEnhancer | undefined;\n private container:HTMLElement | undefined;\n private region:ScanRegion | undefined;\n private recorder:RecordRTC | null | undefined;\n private hasMicrophone: boolean = false;\n async setDefaultUIElementURL(url: string): Promise<void> {\n CameraEnhancer.defaultUIElementURL = url;\n }\n\n async setElement(ele: HTMLElement): Promise<void> {\n this.container = ele;\n }\n\n saveFrame(): Promise<{ success: boolean; }> {\n throw new Error('Method not implemented.');\n }\n\n async getOrientation(): Promise<{\"orientation\":\"PORTRAIT\"|\"LANDSCAPE\"}> {\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n if (portrait.matches) {\n return {orientation:\"PORTRAIT\"};\n }else{\n return {orientation:\"LANDSCAPE\"};\n }\n }\n\n private desiredJpegQuality: number = 0.95; // Default to high quality (0.0-1.0)\n\n async initialize(options?: { quality?: number }): Promise<void> {\n // Get quality parameter from initialization, default to 95% if not specified\n if (options?.quality !== undefined) {\n this.desiredJpegQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n console.log(`Camera initialized with JPEG quality: ${this.desiredJpegQuality}`);\n }\n \n this.camera = await CameraEnhancer.createInstance();\n this.camera.on(\"played\", (playCallBackInfo:PlayCallbackInfo) => {\n this.notifyListeners(\"onPlayed\", {resolution:playCallBackInfo.width+\"x\"+playCallBackInfo.height});\n try {\n let canvas = this.camera!.getUIElement().getElementsByClassName(\"dce-video-container\")[0].getElementsByTagName(\"canvas\")[0];\n if (canvas) {\n canvas.remove();\n }\n } catch (error) {\n console.log(error);\n }\n });\n if (this.container) {\n await this.camera.setUIElement(this.container);\n }else{\n await this.camera.setUIElement(CameraEnhancer.defaultUIElementURL);\n this.camera.getUIElement().getElementsByClassName(\"dce-btn-close\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-camera\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-resolution\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-msg-poweredby\")[0].remove();\n }\n this.camera.setVideoFit(\"cover\");\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n portrait.addEventListener(\"change\", () => {\n this.notifyListeners(\"onOrientationChanged\", null);\n })\n }\n\n async getResolution(): Promise<{ resolution: string; }> {\n if (this.camera) {\n let rsl = this.camera.getResolution();\n let resolution:string = rsl[0] + \"x\" + rsl[1];\n return {resolution: resolution};\n }else{\n throw new Error('Camera not initialized');\n }\n }\n\n async setResolution(options: { resolution: number; }): Promise<void> {\n if (this.camera) {\n let res = options.resolution;\n let width = 1280;\n let height = 720;\n if (res == EnumResolution.RESOLUTION_480P){\n width = 640;\n height = 480;\n } else if (res == EnumResolution.RESOLUTION_720P){\n width = 1280;\n height = 720;\n } else if (res == EnumResolution.RESOLUTION_1080P){\n width = 1920;\n height = 1080;\n } else if (res == EnumResolution.RESOLUTION_2K){\n width = 2560;\n height = 1440;\n } else if (res == EnumResolution.RESOLUTION_4K){\n width = 3840;\n height = 2160;\n }\n await this.camera.setResolution(width,height);\n return;\n } else {\n throw new Error('Camera not initialized');\n }\n }\n\n async getAllCameras(): Promise<{ cameras: string[]; }> {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n let labels:string[] = [];\n cameras.forEach(camera => {\n labels.push(camera.label);\n });\n return {cameras:labels};\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async getSelectedCamera(): Promise<{ selectedCamera: string; }> {\n if (this.camera) {\n let cameraInfo = this.camera.getSelectedCamera();\n return {selectedCamera:cameraInfo.label};\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async selectCamera(options: { cameraID: string; }): Promise<void> {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras()\n for (let index = 0; index < cameras.length; index++) {\n const camera = cameras[index];\n if (camera.label === options.cameraID) {\n await this.camera.selectCamera(camera);\n return;\n }\n }\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async setScanRegion(options: { region: ScanRegion; }): Promise<void> {\n if (this.camera){\n this.region = options.region;\n this.applyScanRegion();\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n applyScanRegion(){\n if (this.camera && this.region){\n this.camera.setScanRegion({\n regionLeft:this.region.left,\n regionTop:this.region.top,\n regionRight:this.region.right,\n regionBottom:this.region.bottom,\n regionMeasuredByPercentage: this.region.measuredByPercentage\n });\n }\n }\n\n async setZoom(options: { factor: number; }): Promise<void> {\n if (this.camera) {\n await this.camera.setZoom(options.factor);\n return;\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async setFocus(options: {x: number, y: number}): Promise<void> {\n if (this.camera) {\n this.camera.setFocus({\n mode:\"manual\",\n area:{\n centerPoint:{x:options.x.toString(),y:options.y.toString()}\n }\n });\n }else{\n throw new Error('Camera not initialized');\n }\n }\n\n async toggleTorch(options: { on: boolean; }): Promise<void> {\n if (this.camera) {\n try{\n if (options[\"on\"]){\n await this.camera.turnOnTorch();\n }else{\n await this.camera.turnOffTorch();\n }\n } catch (e){\n throw new Error(\"Torch unsupported\");\n }\n }\n }\n\n async startCamera(): Promise<void> {\n if (this.camera) {\n await this.camera?.open(true);\n if (this.container && this.isSafari() === true) {\n const resetZoom = async () => {\n await this.camera?.setZoom(1.001);\n await this.camera?.setZoom(1.0);\n }\n setTimeout(resetZoom,500);\n }\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n isSafari():boolean{\n const u = navigator.userAgent.toLowerCase()\n if (u.indexOf('safari') > -1 && u.indexOf('chrome') === -1) {\n return true;\n }else{\n return false;\n }\n }\n\n async stopCamera(): Promise<void> {\n if (this.camera) {\n this.camera.close(true);\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async isOpen(): Promise<{isOpen:boolean}> {\n if (this.camera) {\n return {isOpen:this.camera.isOpen()};\n }else{\n throw new Error('Camera not initialized');\n }\n }\n\n async takeSnapshot(options:{quality?:number, checkBlur?:boolean}): Promise<{ base64: string, isBlur?: boolean }> {\n if (this.camera) {\n let desiredQuality = this.desiredJpegQuality;\n if (options?.quality !== undefined) {\n desiredQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n }\n let canvas = this.camera.getFrame().toCanvas();\n let dataURL = canvas.toDataURL('image/jpeg', desiredQuality);\n let base64 = dataURL.replace(\"data:image/jpeg;base64,\",\"\");\n \n // Only perform blur detection if checkBlur option is true\n if (options?.checkBlur === true) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n isBlur: blurResult.blurScore < 150\n };\n }\n }\n \n return {base64: base64};\n }else{\n throw new Error('Camera not initialized');\n }\n }\n\n async detectBlur(options: {image: string}): Promise<{isBlur: boolean, blurConfidence: number, sharpConfidence: number}> {\n try {\n // Create image element from base64\n const img = new Image();\n \n return new Promise((resolve, reject) => {\n img.onload = () => {\n try {\n // Create canvas to extract image data\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n \n if (!ctx) {\n reject(new Error('Cannot create canvas context'));\n return;\n }\n \n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n \n // Get image data\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n \n // Convert blur score to confidence values\n // Higher blurScore means sharper image\n const normalizedScore = Math.max(0, Math.min(1, blurResult.blurScore / 300)); // Normalize to 0-1\n const sharpConfidence = normalizedScore;\n const blurConfidence = 1 - normalizedScore;\n const isBlur = blurResult.blurScore < 150;\n \n resolve({\n isBlur: isBlur,\n blurConfidence: blurConfidence,\n sharpConfidence: sharpConfidence\n });\n } catch (error) {\n reject(error);\n }\n };\n \n img.onerror = () => {\n reject(new Error('Failed to load image'));\n };\n \n // Handle both data URLs and base64 strings\n if (options.image.startsWith('data:')) {\n img.src = options.image;\n } else {\n img.src = `data:image/jpeg;base64,${options.image}`;\n }\n });\n } catch (error) {\n throw new Error(`Failed to detect blur: ${error}`);\n }\n }\n\n async takeSnapshot2(options:{canvas:HTMLCanvasElement,maxLength?:number}): Promise<{scaleRatio?:number}> {\n if (this.camera) {\n let canvas = options.canvas;\n let scaleRatio = 1.0;\n if (options && options.maxLength) {\n let res = (await this.getResolution()).resolution;\n let width = parseInt(res.split(\"x\")[0]);\n let height = parseInt(res.split(\"x\")[1]);\n let targetWidth = width;\n let targetHeight = height;\n if (width > options.maxLength || height > options.maxLength) {\n if (width > height) {\n targetWidth = options.maxLength;\n targetHeight = options.maxLength/width*height;\n scaleRatio = options.maxLength/width;\n }else{\n targetHeight = options.maxLength;\n targetWidth = options.maxLength/height*width;\n scaleRatio = options.maxLength/height;\n }\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, targetWidth, targetHeight);\n }\n }else{\n this.drawFullFrame(canvas);\n }\n }else{\n this.drawFullFrame(canvas);\n }\n return {scaleRatio:scaleRatio};\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n drawFullFrame(canvas:HTMLCanvasElement):HTMLCanvasElement{\n let video = this.camera?.getUIElement().getElementsByTagName(\"video\")[0];\n if (video) {\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n\n async takePhoto(_options:{includeBase64?:boolean}): Promise<{ path?:string, base64?: string, blob?:Blob, blurScore?: number }> {\n if (this.camera) {\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let localStream:MediaStream = video.srcObject as MediaStream;\n if (localStream) {\n if (\"ImageCapture\" in window) {\n try {\n //@ts-ignore \n let ImageCapture:any = window[\"ImageCapture\"];\n console.log(\"ImageCapture supported\");\n const track = localStream.getVideoTracks()[0];\n let imageCapture = new ImageCapture(track);\n let blob = await imageCapture.takePhoto();\n return {blob:blob}; \n } catch (error) {\n console.log(error);\n }\n }else{\n console.log(\"ImageCapture not supported\");\n }\n }\n this.camera.setScanRegion(\n {\n regionLeft: 0,\n regionTop: 0,\n regionBottom: 100,\n regionRight: 100,\n regionMeasuredByPercentage: 1\n }\n )\n let canvas = this.camera.getFrame().toCanvas();\n let base64 = this.removeDataURLHead(canvas.toDataURL(\"image/jpeg\", this.desiredJpegQuality));\n this.applyScanRegion();\n \n // Add blur detection if base64 is included\n if (_options?.includeBase64) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n blurScore: blurResult.blurScore\n };\n }\n }\n \n return {base64:base64};\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n removeDataURLHead(dataURL:string){\n return dataURL.substring(dataURL.indexOf(\",\")+1,dataURL.length);\n }\n\n\n async requestCameraPermission(): Promise<void> {\n const constraints = {video: true, audio: false};\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i=0;i<tracks.length;i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n }\n\n async requestMicroPhonePermission(): Promise<void> {\n try {\n const constraints = {video: false, audio: true};\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i=0;i<tracks.length;i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n this.hasMicrophone = true;\n } catch (error) {\n this.hasMicrophone = false;\n throw error;\n }\n }\n\n async startRecording(): Promise<void> {\n if (this.camera) {\n if (this.hasMicrophone) {\n let settings = this.camera.getVideoSettings();\n settings.audio = true;\n await this.camera.updateVideoSettings(settings);\n }\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n this.recorder = new RecordRTC(video.srcObject as MediaStream, {\n type: 'video'\n });\n this.recorder.startRecording();\n }else{\n throw new Error(\"camera not initialized\");\n }\n }\n\n async stopRecording(): Promise<{blob:Blob}> {\n return new Promise<{blob:Blob}>((resolve, reject) => {\n if (this.recorder) {\n const stopRecordingCallback = () => {\n let blob = this.recorder!.getBlob();\n this.recorder!.destroy();\n this.recorder = null;\n resolve({blob})\n }\n this.recorder.stopRecording(stopRecordingCallback);\n }else{\n reject(\"recorder not initialized\");\n }\n }) \n }\n\n async setLayout(options: {top: string,left:string,width:string, height:string}): Promise<void> {\n if (this.camera) {\n let ele = this.camera.getUIElement();\n if (options.top) {\n ele.style.top = options.top;\n }\n if (options.left) {\n ele.style.left = options.left;\n }\n if (options.width) {\n ele.style.width = options.width;\n }\n if (options.height) {\n ele.style.height = options.height;\n }\n ele.style.position = \"absolute\";\n }else{\n throw new Error(\"Camera not initialized\");\n }\n }\n\n /**\n * Detect blur using Laplacian variance algorithm (same as iOS/Android)\n * Higher values indicate sharper images\n */\n private detectBlurWeb(imageData: ImageData, width: number, height: number): { blurScore: number } {\n const data = imageData.data;\n let variance = 0;\n let count = 0;\n \n // Sample every 4th pixel for performance (similar to Android implementation)\n const step = 4;\n for (let y = step; y < height - step; y += step) {\n for (let x = step; x < width - step; x += step) {\n const idx = (y * width + x) * 4;\n \n // Convert to grayscale using same formula as Android\n const gray = 0.299 * data[idx] + 0.587 * data[idx + 1] + 0.114 * data[idx + 2];\n \n // Calculate neighbors for 3x3 Laplacian kernel\n const neighbors = [\n 0.299 * data[((y-1) * width + (x-1)) * 4] + 0.587 * data[((y-1) * width + (x-1)) * 4 + 1] + 0.114 * data[((y-1) * width + (x-1)) * 4 + 2],\n 0.299 * data[((y-1) * width + x) * 4] + 0.587 * data[((y-1) * width + x) * 4 + 1] + 0.114 * data[((y-1) * width + x) * 4 + 2],\n 0.299 * data[((y-1) * width + (x+1)) * 4] + 0.587 * data[((y-1) * width + (x+1)) * 4 + 1] + 0.114 * data[((y-1) * width + (x+1)) * 4 + 2],\n 0.299 * data[(y * width + (x-1)) * 4] + 0.587 * data[(y * width + (x-1)) * 4 + 1] + 0.114 * data[(y * width + (x-1)) * 4 + 2],\n 0.299 * data[(y * width + (x+1)) * 4] + 0.587 * data[(y * width + (x+1)) * 4 + 1] + 0.114 * data[(y * width + (x+1)) * 4 + 2],\n 0.299 * data[((y+1) * width + (x-1)) * 4] + 0.587 * data[((y+1) * width + (x-1)) * 4 + 1] + 0.114 * data[((y+1) * width + (x-1)) * 4 + 2],\n 0.299 * data[((y+1) * width + x) * 4] + 0.587 * data[((y+1) * width + x) * 4 + 1] + 0.114 * data[((y+1) * width + x) * 4 + 2],\n 0.299 * data[((y+1) * width + (x+1)) * 4] + 0.587 * data[((y+1) * width + (x+1)) * 4 + 1] + 0.114 * data[((y+1) * width + (x+1)) * 4 + 2]\n ];\n \n // Apply 3x3 Laplacian kernel (matches Android implementation)\n const laplacian = -neighbors[0] - neighbors[1] - neighbors[2] +\n -neighbors[3] + 8 * gray - neighbors[4] +\n -neighbors[5] - neighbors[6] - neighbors[7];\n \n variance += laplacian * laplacian;\n count++;\n }\n }\n \n const blurScore = count > 0 ? variance / count : 0;\n \n return { blurScore };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAoB,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAuB,cAAc,EAAc,MAAM,eAAe,CAAC;AAChF,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,cAAc,CAAC,mBAAmB,GAAG,+EAA+E,CAAC;AAErH,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAA/C;;QAKU,kBAAa,GAAY,KAAK,CAAC;QAsB/B,uBAAkB,GAAW,IAAI,CAAC,CAAC,oCAAoC;IAkhBjF,CAAC;IAviBC,KAAK,CAAC,sBAAsB,CAAC,GAAW;QACtC,cAAc,CAAC,mBAAmB,GAAG,GAAG,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAgB;QAC/B,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;IACvB,CAAC;IAED,SAAS;QACP,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;QAC5D,IAAI,QAAQ,CAAC,OAAO,EAAE;YACpB,OAAO,EAAC,WAAW,EAAC,UAAU,EAAC,CAAC;SACjC;aAAI;YACH,OAAO,EAAC,WAAW,EAAC,WAAW,EAAC,CAAC;SAClC;IACH,CAAC;IAID,KAAK,CAAC,UAAU,CAAC,OAA8B;QAC7C,6EAA6E;QAC7E,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,MAAK,SAAS,EAAE;YAClC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,yCAAyC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;SACjF;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,cAAc,CAAC,cAAc,EAAE,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,gBAAiC,EAAE,EAAE;YAC7D,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,EAAC,UAAU,EAAC,gBAAgB,CAAC,KAAK,GAAC,GAAG,GAAC,gBAAgB,CAAC,MAAM,EAAC,CAAC,CAAC;YAClG,IAAI;gBACF,IAAI,MAAM,GAAG,IAAI,CAAC,MAAO,CAAC,YAAY,EAAE,CAAC,sBAAsB,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5H,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,MAAM,EAAE,CAAC;iBACjB;aACF;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aACpB;QACH,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAChD;aAAI;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;YACnE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC/E,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAChF,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,sBAAsB,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YACpF,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACpF;QACD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;QAC5D,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;YACvC,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YACtC,IAAI,UAAU,GAAU,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9C,OAAO,EAAC,UAAU,EAAE,UAAU,EAAC,CAAC;SACjC;aAAI;YACH,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAgC;QAClD,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC;YAC7B,IAAI,KAAK,GAAG,IAAI,CAAC;YACjB,IAAI,MAAM,GAAG,GAAG,CAAC;YACjB,IAAI,GAAG,IAAI,cAAc,CAAC,eAAe,EAAC;gBACvC,KAAK,GAAG,GAAG,CAAC;gBACZ,MAAM,GAAG,GAAG,CAAC;aACf;iBAAM,IAAI,GAAG,IAAI,cAAc,CAAC,eAAe,EAAC;gBAC/C,KAAK,GAAG,IAAI,CAAC;gBACb,MAAM,GAAG,GAAG,CAAC;aACd;iBAAM,IAAI,GAAG,IAAI,cAAc,CAAC,gBAAgB,EAAC;gBAChD,KAAK,GAAG,IAAI,CAAC;gBACb,MAAM,GAAG,IAAI,CAAC;aACf;iBAAM,IAAI,GAAG,IAAI,cAAc,CAAC,aAAa,EAAC;gBAC7C,KAAK,GAAG,IAAI,CAAC;gBACb,MAAM,GAAG,IAAI,CAAC;aACf;iBAAM,IAAI,GAAG,IAAI,cAAc,CAAC,aAAa,EAAC;gBAC7C,KAAK,GAAG,IAAI,CAAC;gBACb,MAAM,GAAG,IAAI,CAAC;aACf;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAC,MAAM,CAAC,CAAC;YAC9C,OAAO;SACR;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAChD,IAAI,MAAM,GAAY,EAAE,CAAC;YACzB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACvB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;YACH,OAAO,EAAC,OAAO,EAAC,MAAM,EAAC,CAAC;SACzB;aAAK;YACJ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YACjD,OAAO,EAAC,cAAc,EAAC,UAAU,CAAC,KAAK,EAAC,CAAC;SAC1C;aAAK;YACJ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAA8B;QAC/C,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAA;YAC/C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACnD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,QAAQ,EAAE;oBACrC,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;oBACvC,OAAO;iBACR;aACF;SACF;aAAK;YACJ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAgC;QAClD,IAAI,IAAI,CAAC,MAAM,EAAC;YACd,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;aAAK;YACJ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,eAAe;QACb,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;gBACxB,UAAU,EAAC,IAAI,CAAC,MAAM,CAAC,IAAI;gBAC3B,SAAS,EAAC,IAAI,CAAC,MAAM,CAAC,GAAG;gBACzB,WAAW,EAAC,IAAI,CAAC,MAAM,CAAC,KAAK;gBAC7B,YAAY,EAAC,IAAI,CAAC,MAAM,CAAC,MAAM;gBAC/B,0BAA0B,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB;aAC7D,CAAC,CAAC;SACJ;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA4B;QACxC,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1C,OAAO;SACR;aAAK;YACJ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAA+B;QAC5C,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACnB,IAAI,EAAC,QAAQ;gBACb,IAAI,EAAC;oBACH,WAAW,EAAC,EAAC,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAC,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAC;iBAC5D;aACF,CAAC,CAAC;SACJ;aAAI;YACH,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAG;gBACD,IAAI,OAAO,CAAC,IAAI,CAAC,EAAC;oBAChB,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;iBACjC;qBAAI;oBACH,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;iBAClC;aACF;YAAC,OAAO,CAAC,EAAC;gBACT,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;aACtC;SACF;IACH,CAAC;IAED,KAAK,CAAC,WAAW;;QACf,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,aAAM,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,IAAI,EAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;gBAC9C,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;;oBAC3B,aAAM,IAAI,CAAC,MAAM,0CAAE,OAAO,CAAC,KAAK,EAAC,CAAC;oBAClC,aAAM,IAAI,CAAC,MAAM,0CAAE,OAAO,CAAC,GAAG,EAAC,CAAC;gBAClC,CAAC,CAAA;gBACD,UAAU,CAAC,SAAS,EAAC,GAAG,CAAC,CAAC;aAC3B;SACF;aAAK;YACJ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,QAAQ;QACN,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAA;QAC3C,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;YAC1D,OAAO,IAAI,CAAC;SACb;aAAI;YACH,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACzB;aAAK;YACJ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,OAAO,EAAC,MAAM,EAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,CAAC;SACtC;aAAI;YACH,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAA6C;QAC9D,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAC7C,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,MAAK,SAAS,EAAE;gBAClC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC;aACtE;YACD,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC/C,IAAI,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YAC7D,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,yBAAyB,EAAC,EAAE,CAAC,CAAC;YAE3D,0DAA0D;YAC1D,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,MAAK,IAAI,EAAE;gBAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,GAAG,EAAE;oBACP,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;oBACtE,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC9E,OAAO;wBACL,MAAM,EAAE,MAAM;wBACd,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;qBACjE,CAAC;iBACH;aACF;YAED,OAAO,EAAC,MAAM,EAAE,MAAM,EAAC,CAAC;SACzB;aAAI;YACH,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAwB;QACvC,IAAI;YACF,mCAAmC;YACnC,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;YAExB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;oBAChB,IAAI;wBACF,sCAAsC;wBACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;wBAChD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;wBAEpC,IAAI,CAAC,GAAG,EAAE;4BACR,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;4BAClD,OAAO;yBACR;wBAED,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;wBACzB,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;wBAC3B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBAEzB,iBAAiB;wBACjB,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;wBACtE,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;wBAE9E,0CAA0C;wBAC1C,uCAAuC;wBACvC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB;wBACjG,MAAM,eAAe,GAAG,eAAe,CAAC;wBACxC,MAAM,cAAc,GAAG,CAAC,GAAG,eAAe,CAAC;wBAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,GAAG,GAAG,CAAC;wBAE1C,OAAO,CAAC;4BACN,MAAM,EAAE,MAAM;4BACd,cAAc,EAAE,cAAc;4BAC9B,eAAe,EAAE,eAAe;yBACjC,CAAC,CAAC;qBACJ;oBAAC,OAAO,KAAK,EAAE;wBACd,MAAM,CAAC,KAAK,CAAC,CAAC;qBACf;gBACH,CAAC,CAAC;gBAEF,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE;oBACjB,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;gBAC5C,CAAC,CAAC;gBAEF,2CAA2C;gBAC3C,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;oBACrC,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;iBACzB;qBAAM;oBACL,GAAG,CAAC,GAAG,GAAG,0BAA0B,OAAO,CAAC,KAAK,EAAE,CAAC;iBACrD;YACH,CAAC,CAAC,CAAC;SACJ;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;SACpD;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAoD;QACtE,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC5B,IAAI,UAAU,GAAG,GAAG,CAAC;YACrB,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE;gBAChC,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,UAAU,CAAC;gBAClD,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,IAAI,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzC,IAAI,WAAW,GAAG,KAAK,CAAC;gBACxB,IAAI,YAAY,GAAG,MAAM,CAAC;gBAC1B,IAAI,KAAK,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE;oBAC3D,IAAI,KAAK,GAAG,MAAM,EAAE;wBAClB,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;wBAChC,YAAY,GAAG,OAAO,CAAC,SAAS,GAAC,KAAK,GAAC,MAAM,CAAC;wBAC9C,UAAU,GAAG,OAAO,CAAC,SAAS,GAAC,KAAK,CAAC;qBACtC;yBAAI;wBACH,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;wBACjC,WAAW,GAAG,OAAO,CAAC,SAAS,GAAC,MAAM,GAAC,KAAK,CAAC;wBAC7C,UAAU,GAAG,OAAO,CAAC,SAAS,GAAC,MAAM,CAAC;qBACvC;oBACD,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;oBAC3B,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC;oBAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxE,IAAI,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAClC,IAAI,GAAG,EAAE;wBACP,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;qBACvD;iBACF;qBAAI;oBACH,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;iBAC5B;aACF;iBAAI;gBACH,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;aAC5B;YACD,OAAO,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC;SAChC;aAAK;YACJ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,aAAa,CAAC,MAAwB;;QACpC,IAAI,KAAK,SAAG,IAAI,CAAC,MAAM,0CAAE,YAAY,GAAG,oBAAoB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzE,IAAI,KAAK,EAAE;YACT,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;YAChC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC;YAClC,IAAI,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,GAAG,EAAE;gBACP,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;aACzD;SACF;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAiC;QAC/C,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,IAAI,WAAW,GAAe,KAAK,CAAC,SAAwB,CAAC;YAC7D,IAAI,WAAW,EAAE;gBACf,IAAI,cAAc,IAAI,MAAM,EAAE;oBAC5B,IAAI;wBACF,aAAa;wBACb,IAAI,YAAY,GAAO,MAAM,CAAC,cAAc,CAAC,CAAC;wBAC9C,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;wBACtC,MAAM,KAAK,GAAG,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;wBAC9C,IAAI,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;wBAC3C,IAAI,IAAI,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;wBAC1C,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC;qBACpB;oBAAC,OAAO,KAAK,EAAE;wBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;qBACpB;iBACF;qBAAI;oBACH,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;iBAC3C;aACF;YACD,IAAI,CAAC,MAAM,CAAC,aAAa,CACvB;gBACE,UAAU,EAAE,CAAC;gBACb,SAAS,EAAE,CAAC;gBACZ,YAAY,EAAE,GAAG;gBACjB,WAAW,EAAE,GAAG;gBAChB,0BAA0B,EAAE,CAAC;aAC9B,CACF,CAAA;YACD,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC/C,IAAI,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC7F,IAAI,CAAC,eAAe,EAAE,CAAC;YAEvB,2CAA2C;YAC3C,IAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,aAAa,EAAE;gBAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,GAAG,EAAE;oBACP,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;oBACtE,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC9E,OAAO;wBACL,MAAM,EAAE,MAAM;wBACd,SAAS,EAAE,UAAU,CAAC,SAAS;qBAChC,CAAC;iBACH;aACF;YAED,OAAO,EAAC,MAAM,EAAC,MAAM,EAAC,CAAC;SACxB;aAAK;YACJ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,iBAAiB,CAAC,OAAc;QAC9B,OAAO,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAC,CAAC,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC;IAGD,KAAK,CAAC,uBAAuB;QAC3B,MAAM,WAAW,GAAG,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAClC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,MAAM,CAAC,MAAM,EAAC,CAAC,EAAE,EAAE;YAChC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAE,yBAAyB;SACzC;IACH,CAAC;IAED,KAAK,CAAC,2BAA2B;QAC/B,IAAI;YACF,MAAM,WAAW,GAAG,EAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC;YAChD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACtE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;YAClC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,MAAM,CAAC,MAAM,EAAC,CAAC,EAAE,EAAE;gBAChC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAE,yBAAyB;aACzC;YACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,MAAM,KAAK,CAAC;SACb;IACH,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC9C,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;gBACtB,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;aACjD;YACD,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,QAAQ,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,SAAwB,EAAE;gBAC5D,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;SAChC;aAAI;YACH,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAClD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,MAAM,qBAAqB,GAAG,GAAG,EAAE;oBACjC,IAAI,IAAI,GAAG,IAAI,CAAC,QAAS,CAAC,OAAO,EAAE,CAAC;oBACpC,IAAI,CAAC,QAAS,CAAC,OAAO,EAAE,CAAC;oBACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACrB,OAAO,CAAC,EAAC,IAAI,EAAC,CAAC,CAAA;gBACjB,CAAC,CAAA;gBACD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;aACpD;iBAAI;gBACH,MAAM,CAAC,0BAA0B,CAAC,CAAC;aACpC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAA8D;QAC5E,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,GAAG,EAAE;gBACf,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;aAC7B;YACD,IAAI,OAAO,CAAC,IAAI,EAAE;gBAChB,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;aAC/B;YACD,IAAI,OAAO,CAAC,KAAK,EAAE;gBACjB,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;aACjC;YACD,IAAI,OAAO,CAAC,MAAM,EAAE;gBAClB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aACnC;YACD,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;SACjC;aAAI;YACH,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;IACH,CAAC;IAED;;;OAGG;IACK,aAAa,CAAC,SAAoB,EAAE,KAAa,EAAE,MAAc;QACvE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,6EAA6E;QAC7E,MAAM,IAAI,GAAG,CAAC,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE;YAC/C,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE;gBAC9C,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAEhC,qDAAqD;gBACrD,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBAE/E,+CAA+C;gBAC/C,MAAM,SAAS,GAAG;oBAChB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACzI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7H,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACzI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7H,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7H,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACzI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7H,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBAC1I,CAAC;gBAEF,8DAA8D;gBAC9D,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;oBAC5C,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;oBACvC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAE7D,QAAQ,IAAI,SAAS,GAAG,SAAS,CAAC;gBAClC,KAAK,EAAE,CAAC;aACT;SACF;QAED,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnD,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC;CACF","sourcesContent":["import { WebPlugin } from '@capacitor/core';\nimport { CameraEnhancer, PlayCallbackInfo } from 'dynamsoft-camera-enhancer';\nimport { CameraPreviewPlugin, EnumResolution, ScanRegion } from './definitions';\nimport RecordRTC from 'recordrtc';\nCameraEnhancer.defaultUIElementURL = \"https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.3.9/dist/dce.ui.html\";\n\nexport class CameraPreviewWeb extends WebPlugin implements CameraPreviewPlugin {\n private camera:CameraEnhancer | undefined;\n private container:HTMLElement | undefined;\n private region:ScanRegion | undefined;\n private recorder:RecordRTC | null | undefined;\n private hasMicrophone: boolean = false;\n async setDefaultUIElementURL(url: string): Promise<void> {\n CameraEnhancer.defaultUIElementURL = url;\n }\n\n async setElement(ele: HTMLElement): Promise<void> {\n this.container = ele;\n }\n\n saveFrame(): Promise<{ success: boolean; }> {\n throw new Error('Method not implemented.');\n }\n\n async getOrientation(): Promise<{\"orientation\":\"PORTRAIT\"|\"LANDSCAPE\"}> {\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n if (portrait.matches) {\n return {orientation:\"PORTRAIT\"};\n }else{\n return {orientation:\"LANDSCAPE\"};\n }\n }\n\n private desiredJpegQuality: number = 0.95; // Default to high quality (0.0-1.0)\n\n async initialize(options?: { quality?: number }): Promise<void> {\n // Get quality parameter from initialization, default to 95% if not specified\n if (options?.quality !== undefined) {\n this.desiredJpegQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n console.log(`Camera initialized with JPEG quality: ${this.desiredJpegQuality}`);\n }\n \n this.camera = await CameraEnhancer.createInstance();\n this.camera.on(\"played\", (playCallBackInfo:PlayCallbackInfo) => {\n this.notifyListeners(\"onPlayed\", {resolution:playCallBackInfo.width+\"x\"+playCallBackInfo.height});\n try {\n let canvas = this.camera!.getUIElement().getElementsByClassName(\"dce-video-container\")[0].getElementsByTagName(\"canvas\")[0];\n if (canvas) {\n canvas.remove();\n }\n } catch (error) {\n console.log(error);\n }\n });\n if (this.container) {\n await this.camera.setUIElement(this.container);\n }else{\n await this.camera.setUIElement(CameraEnhancer.defaultUIElementURL);\n this.camera.getUIElement().getElementsByClassName(\"dce-btn-close\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-camera\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-resolution\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-msg-poweredby\")[0].remove();\n }\n this.camera.setVideoFit(\"cover\");\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n portrait.addEventListener(\"change\", () => {\n this.notifyListeners(\"onOrientationChanged\", null);\n })\n }\n\n async getResolution(): Promise<{ resolution: string; }> {\n if (this.camera) {\n let rsl = this.camera.getResolution();\n let resolution:string = rsl[0] + \"x\" + rsl[1];\n return {resolution: resolution};\n }else{\n throw new Error('Camera not initialized');\n }\n }\n\n async setResolution(options: { resolution: number; }): Promise<void> {\n if (this.camera) {\n let res = options.resolution;\n let width = 1280;\n let height = 720;\n if (res == EnumResolution.RESOLUTION_480P){\n width = 640;\n height = 480;\n } else if (res == EnumResolution.RESOLUTION_720P){\n width = 1280;\n height = 720;\n } else if (res == EnumResolution.RESOLUTION_1080P){\n width = 1920;\n height = 1080;\n } else if (res == EnumResolution.RESOLUTION_2K){\n width = 2560;\n height = 1440;\n } else if (res == EnumResolution.RESOLUTION_4K){\n width = 3840;\n height = 2160;\n }\n await this.camera.setResolution(width,height);\n return;\n } else {\n throw new Error('Camera not initialized');\n }\n }\n\n async getAllCameras(): Promise<{ cameras: string[]; }> {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n let labels:string[] = [];\n cameras.forEach(camera => {\n labels.push(camera.label);\n });\n return {cameras:labels};\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async getSelectedCamera(): Promise<{ selectedCamera: string; }> {\n if (this.camera) {\n let cameraInfo = this.camera.getSelectedCamera();\n return {selectedCamera:cameraInfo.label};\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async selectCamera(options: { cameraID: string; }): Promise<void> {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras()\n for (let index = 0; index < cameras.length; index++) {\n const camera = cameras[index];\n if (camera.label === options.cameraID) {\n await this.camera.selectCamera(camera);\n return;\n }\n }\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async setScanRegion(options: { region: ScanRegion; }): Promise<void> {\n if (this.camera){\n this.region = options.region;\n this.applyScanRegion();\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n applyScanRegion(){\n if (this.camera && this.region){\n this.camera.setScanRegion({\n regionLeft:this.region.left,\n regionTop:this.region.top,\n regionRight:this.region.right,\n regionBottom:this.region.bottom,\n regionMeasuredByPercentage: this.region.measuredByPercentage\n });\n }\n }\n\n async setZoom(options: { factor: number; }): Promise<void> {\n if (this.camera) {\n await this.camera.setZoom(options.factor);\n return;\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async setFocus(options: {x: number, y: number}): Promise<void> {\n if (this.camera) {\n this.camera.setFocus({\n mode:\"manual\",\n area:{\n centerPoint:{x:options.x.toString(),y:options.y.toString()}\n }\n });\n }else{\n throw new Error('Camera not initialized');\n }\n }\n\n async toggleTorch(options: { on: boolean; }): Promise<void> {\n if (this.camera) {\n try{\n if (options[\"on\"]){\n await this.camera.turnOnTorch();\n }else{\n await this.camera.turnOffTorch();\n }\n } catch (e){\n throw new Error(\"Torch unsupported\");\n }\n }\n }\n\n async startCamera(): Promise<void> {\n if (this.camera) {\n await this.camera?.open(true);\n if (this.container && this.isSafari() === true) {\n const resetZoom = async () => {\n await this.camera?.setZoom(1.001);\n await this.camera?.setZoom(1.0);\n }\n setTimeout(resetZoom,500);\n }\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n isSafari():boolean{\n const u = navigator.userAgent.toLowerCase()\n if (u.indexOf('safari') > -1 && u.indexOf('chrome') === -1) {\n return true;\n }else{\n return false;\n }\n }\n\n async stopCamera(): Promise<void> {\n if (this.camera) {\n this.camera.close(true);\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n async isOpen(): Promise<{isOpen:boolean}> {\n if (this.camera) {\n return {isOpen:this.camera.isOpen()};\n }else{\n throw new Error('Camera not initialized');\n }\n }\n\n async takeSnapshot(options:{quality?:number, checkBlur?:boolean}): Promise<{ base64: string, confidence?: number }> {\n if (this.camera) {\n let desiredQuality = this.desiredJpegQuality;\n if (options?.quality !== undefined) {\n desiredQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n }\n let canvas = this.camera.getFrame().toCanvas();\n let dataURL = canvas.toDataURL('image/jpeg', desiredQuality);\n let base64 = dataURL.replace(\"data:image/jpeg;base64,\",\"\");\n \n // Only perform blur detection if checkBlur option is true\n if (options?.checkBlur === true) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n confidence: Math.max(0, Math.min(1, blurResult.blurScore / 300))\n };\n }\n }\n \n return {base64: base64};\n }else{\n throw new Error('Camera not initialized');\n }\n }\n\n async detectBlur(options: {image: string}): Promise<{isBlur: boolean, blurConfidence: number, sharpConfidence: number}> {\n try {\n // Create image element from base64\n const img = new Image();\n \n return new Promise((resolve, reject) => {\n img.onload = () => {\n try {\n // Create canvas to extract image data\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n \n if (!ctx) {\n reject(new Error('Cannot create canvas context'));\n return;\n }\n \n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n \n // Get image data\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n \n // Convert blur score to confidence values\n // Higher blurScore means sharper image\n const normalizedScore = Math.max(0, Math.min(1, blurResult.blurScore / 300)); // Normalize to 0-1\n const sharpConfidence = normalizedScore;\n const blurConfidence = 1 - normalizedScore;\n const isBlur = blurResult.blurScore < 150;\n \n resolve({\n isBlur: isBlur,\n blurConfidence: blurConfidence,\n sharpConfidence: sharpConfidence\n });\n } catch (error) {\n reject(error);\n }\n };\n \n img.onerror = () => {\n reject(new Error('Failed to load image'));\n };\n \n // Handle both data URLs and base64 strings\n if (options.image.startsWith('data:')) {\n img.src = options.image;\n } else {\n img.src = `data:image/jpeg;base64,${options.image}`;\n }\n });\n } catch (error) {\n throw new Error(`Failed to detect blur: ${error}`);\n }\n }\n\n async takeSnapshot2(options:{canvas:HTMLCanvasElement,maxLength?:number}): Promise<{scaleRatio?:number}> {\n if (this.camera) {\n let canvas = options.canvas;\n let scaleRatio = 1.0;\n if (options && options.maxLength) {\n let res = (await this.getResolution()).resolution;\n let width = parseInt(res.split(\"x\")[0]);\n let height = parseInt(res.split(\"x\")[1]);\n let targetWidth = width;\n let targetHeight = height;\n if (width > options.maxLength || height > options.maxLength) {\n if (width > height) {\n targetWidth = options.maxLength;\n targetHeight = options.maxLength/width*height;\n scaleRatio = options.maxLength/width;\n }else{\n targetHeight = options.maxLength;\n targetWidth = options.maxLength/height*width;\n scaleRatio = options.maxLength/height;\n }\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, targetWidth, targetHeight);\n }\n }else{\n this.drawFullFrame(canvas);\n }\n }else{\n this.drawFullFrame(canvas);\n }\n return {scaleRatio:scaleRatio};\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n drawFullFrame(canvas:HTMLCanvasElement):HTMLCanvasElement{\n let video = this.camera?.getUIElement().getElementsByTagName(\"video\")[0];\n if (video) {\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n\n async takePhoto(_options:{includeBase64?:boolean}): Promise<{ path?:string, base64?: string, blob?:Blob, blurScore?: number }> {\n if (this.camera) {\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let localStream:MediaStream = video.srcObject as MediaStream;\n if (localStream) {\n if (\"ImageCapture\" in window) {\n try {\n //@ts-ignore \n let ImageCapture:any = window[\"ImageCapture\"];\n console.log(\"ImageCapture supported\");\n const track = localStream.getVideoTracks()[0];\n let imageCapture = new ImageCapture(track);\n let blob = await imageCapture.takePhoto();\n return {blob:blob}; \n } catch (error) {\n console.log(error);\n }\n }else{\n console.log(\"ImageCapture not supported\");\n }\n }\n this.camera.setScanRegion(\n {\n regionLeft: 0,\n regionTop: 0,\n regionBottom: 100,\n regionRight: 100,\n regionMeasuredByPercentage: 1\n }\n )\n let canvas = this.camera.getFrame().toCanvas();\n let base64 = this.removeDataURLHead(canvas.toDataURL(\"image/jpeg\", this.desiredJpegQuality));\n this.applyScanRegion();\n \n // Add blur detection if base64 is included\n if (_options?.includeBase64) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n blurScore: blurResult.blurScore\n };\n }\n }\n \n return {base64:base64};\n }else {\n throw new Error('Camera not initialized');\n }\n }\n\n removeDataURLHead(dataURL:string){\n return dataURL.substring(dataURL.indexOf(\",\")+1,dataURL.length);\n }\n\n\n async requestCameraPermission(): Promise<void> {\n const constraints = {video: true, audio: false};\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i=0;i<tracks.length;i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n }\n\n async requestMicroPhonePermission(): Promise<void> {\n try {\n const constraints = {video: false, audio: true};\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i=0;i<tracks.length;i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n this.hasMicrophone = true;\n } catch (error) {\n this.hasMicrophone = false;\n throw error;\n }\n }\n\n async startRecording(): Promise<void> {\n if (this.camera) {\n if (this.hasMicrophone) {\n let settings = this.camera.getVideoSettings();\n settings.audio = true;\n await this.camera.updateVideoSettings(settings);\n }\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n this.recorder = new RecordRTC(video.srcObject as MediaStream, {\n type: 'video'\n });\n this.recorder.startRecording();\n }else{\n throw new Error(\"camera not initialized\");\n }\n }\n\n async stopRecording(): Promise<{blob:Blob}> {\n return new Promise<{blob:Blob}>((resolve, reject) => {\n if (this.recorder) {\n const stopRecordingCallback = () => {\n let blob = this.recorder!.getBlob();\n this.recorder!.destroy();\n this.recorder = null;\n resolve({blob})\n }\n this.recorder.stopRecording(stopRecordingCallback);\n }else{\n reject(\"recorder not initialized\");\n }\n }) \n }\n\n async setLayout(options: {top: string,left:string,width:string, height:string}): Promise<void> {\n if (this.camera) {\n let ele = this.camera.getUIElement();\n if (options.top) {\n ele.style.top = options.top;\n }\n if (options.left) {\n ele.style.left = options.left;\n }\n if (options.width) {\n ele.style.width = options.width;\n }\n if (options.height) {\n ele.style.height = options.height;\n }\n ele.style.position = \"absolute\";\n }else{\n throw new Error(\"Camera not initialized\");\n }\n }\n\n /**\n * Detect blur using Laplacian variance algorithm (same as iOS/Android)\n * Higher values indicate sharper images\n */\n private detectBlurWeb(imageData: ImageData, width: number, height: number): { blurScore: number } {\n const data = imageData.data;\n let variance = 0;\n let count = 0;\n \n // Sample every 4th pixel for performance (similar to Android implementation)\n const step = 4;\n for (let y = step; y < height - step; y += step) {\n for (let x = step; x < width - step; x += step) {\n const idx = (y * width + x) * 4;\n \n // Convert to grayscale using same formula as Android\n const gray = 0.299 * data[idx] + 0.587 * data[idx + 1] + 0.114 * data[idx + 2];\n \n // Calculate neighbors for 3x3 Laplacian kernel\n const neighbors = [\n 0.299 * data[((y-1) * width + (x-1)) * 4] + 0.587 * data[((y-1) * width + (x-1)) * 4 + 1] + 0.114 * data[((y-1) * width + (x-1)) * 4 + 2],\n 0.299 * data[((y-1) * width + x) * 4] + 0.587 * data[((y-1) * width + x) * 4 + 1] + 0.114 * data[((y-1) * width + x) * 4 + 2],\n 0.299 * data[((y-1) * width + (x+1)) * 4] + 0.587 * data[((y-1) * width + (x+1)) * 4 + 1] + 0.114 * data[((y-1) * width + (x+1)) * 4 + 2],\n 0.299 * data[(y * width + (x-1)) * 4] + 0.587 * data[(y * width + (x-1)) * 4 + 1] + 0.114 * data[(y * width + (x-1)) * 4 + 2],\n 0.299 * data[(y * width + (x+1)) * 4] + 0.587 * data[(y * width + (x+1)) * 4 + 1] + 0.114 * data[(y * width + (x+1)) * 4 + 2],\n 0.299 * data[((y+1) * width + (x-1)) * 4] + 0.587 * data[((y+1) * width + (x-1)) * 4 + 1] + 0.114 * data[((y+1) * width + (x-1)) * 4 + 2],\n 0.299 * data[((y+1) * width + x) * 4] + 0.587 * data[((y+1) * width + x) * 4 + 1] + 0.114 * data[((y+1) * width + x) * 4 + 2],\n 0.299 * data[((y+1) * width + (x+1)) * 4] + 0.587 * data[((y+1) * width + (x+1)) * 4 + 1] + 0.114 * data[((y+1) * width + (x+1)) * 4 + 2]\n ];\n \n // Apply 3x3 Laplacian kernel (matches Android implementation)\n const laplacian = -neighbors[0] - neighbors[1] - neighbors[2] +\n -neighbors[3] + 8 * gray - neighbors[4] +\n -neighbors[5] - neighbors[6] - neighbors[7];\n \n variance += laplacian * laplacian;\n count++;\n }\n }\n \n const blurScore = count > 0 ? variance / count : 0;\n \n return { blurScore };\n }\n}\n"]}
|
package/dist/plugin.cjs.js
CHANGED
|
@@ -273,7 +273,7 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
273
273
|
const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);
|
|
274
274
|
return {
|
|
275
275
|
base64: base64,
|
|
276
|
-
|
|
276
|
+
confidence: Math.max(0, Math.min(1, blurResult.blurScore / 300))
|
|
277
277
|
};
|
|
278
278
|
}
|
|
279
279
|
}
|
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var EnumResolution;\n(function (EnumResolution) {\n EnumResolution[EnumResolution[\"RESOLUTION_AUTO\"] = 0] = \"RESOLUTION_AUTO\";\n EnumResolution[EnumResolution[\"RESOLUTION_480P\"] = 1] = \"RESOLUTION_480P\";\n EnumResolution[EnumResolution[\"RESOLUTION_720P\"] = 2] = \"RESOLUTION_720P\";\n EnumResolution[EnumResolution[\"RESOLUTION_1080P\"] = 3] = \"RESOLUTION_1080P\";\n EnumResolution[EnumResolution[\"RESOLUTION_2K\"] = 4] = \"RESOLUTION_2K\";\n EnumResolution[EnumResolution[\"RESOLUTION_4K\"] = 5] = \"RESOLUTION_4K\";\n})(EnumResolution || (EnumResolution = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst CameraPreview = registerPlugin('CameraPreview', {\n web: () => import('./web').then(m => new m.CameraPreviewWeb()),\n});\nexport * from './definitions';\nexport { CameraPreview };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { CameraEnhancer } from 'dynamsoft-camera-enhancer';\nimport { EnumResolution } from './definitions';\nimport RecordRTC from 'recordrtc';\nCameraEnhancer.defaultUIElementURL = \"https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.3.9/dist/dce.ui.html\";\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.hasMicrophone = false;\n this.desiredJpegQuality = 0.95; // Default to high quality (0.0-1.0)\n }\n async setDefaultUIElementURL(url) {\n CameraEnhancer.defaultUIElementURL = url;\n }\n async setElement(ele) {\n this.container = ele;\n }\n saveFrame() {\n throw new Error('Method not implemented.');\n }\n async getOrientation() {\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n if (portrait.matches) {\n return { orientation: \"PORTRAIT\" };\n }\n else {\n return { orientation: \"LANDSCAPE\" };\n }\n }\n async initialize(options) {\n // Get quality parameter from initialization, default to 95% if not specified\n if ((options === null || options === void 0 ? void 0 : options.quality) !== undefined) {\n this.desiredJpegQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n console.log(`Camera initialized with JPEG quality: ${this.desiredJpegQuality}`);\n }\n this.camera = await CameraEnhancer.createInstance();\n this.camera.on(\"played\", (playCallBackInfo) => {\n this.notifyListeners(\"onPlayed\", { resolution: playCallBackInfo.width + \"x\" + playCallBackInfo.height });\n try {\n let canvas = this.camera.getUIElement().getElementsByClassName(\"dce-video-container\")[0].getElementsByTagName(\"canvas\")[0];\n if (canvas) {\n canvas.remove();\n }\n }\n catch (error) {\n console.log(error);\n }\n });\n if (this.container) {\n await this.camera.setUIElement(this.container);\n }\n else {\n await this.camera.setUIElement(CameraEnhancer.defaultUIElementURL);\n this.camera.getUIElement().getElementsByClassName(\"dce-btn-close\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-camera\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-resolution\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-msg-poweredby\")[0].remove();\n }\n this.camera.setVideoFit(\"cover\");\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n portrait.addEventListener(\"change\", () => {\n this.notifyListeners(\"onOrientationChanged\", null);\n });\n }\n async getResolution() {\n if (this.camera) {\n let rsl = this.camera.getResolution();\n let resolution = rsl[0] + \"x\" + rsl[1];\n return { resolution: resolution };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setResolution(options) {\n if (this.camera) {\n let res = options.resolution;\n let width = 1280;\n let height = 720;\n if (res == EnumResolution.RESOLUTION_480P) {\n width = 640;\n height = 480;\n }\n else if (res == EnumResolution.RESOLUTION_720P) {\n width = 1280;\n height = 720;\n }\n else if (res == EnumResolution.RESOLUTION_1080P) {\n width = 1920;\n height = 1080;\n }\n else if (res == EnumResolution.RESOLUTION_2K) {\n width = 2560;\n height = 1440;\n }\n else if (res == EnumResolution.RESOLUTION_4K) {\n width = 3840;\n height = 2160;\n }\n await this.camera.setResolution(width, height);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getAllCameras() {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n let labels = [];\n cameras.forEach(camera => {\n labels.push(camera.label);\n });\n return { cameras: labels };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getSelectedCamera() {\n if (this.camera) {\n let cameraInfo = this.camera.getSelectedCamera();\n return { selectedCamera: cameraInfo.label };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async selectCamera(options) {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n for (let index = 0; index < cameras.length; index++) {\n const camera = cameras[index];\n if (camera.label === options.cameraID) {\n await this.camera.selectCamera(camera);\n return;\n }\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setScanRegion(options) {\n if (this.camera) {\n this.region = options.region;\n this.applyScanRegion();\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n applyScanRegion() {\n if (this.camera && this.region) {\n this.camera.setScanRegion({\n regionLeft: this.region.left,\n regionTop: this.region.top,\n regionRight: this.region.right,\n regionBottom: this.region.bottom,\n regionMeasuredByPercentage: this.region.measuredByPercentage\n });\n }\n }\n async setZoom(options) {\n if (this.camera) {\n await this.camera.setZoom(options.factor);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setFocus(options) {\n if (this.camera) {\n this.camera.setFocus({\n mode: \"manual\",\n area: {\n centerPoint: { x: options.x.toString(), y: options.y.toString() }\n }\n });\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async toggleTorch(options) {\n if (this.camera) {\n try {\n if (options[\"on\"]) {\n await this.camera.turnOnTorch();\n }\n else {\n await this.camera.turnOffTorch();\n }\n }\n catch (e) {\n throw new Error(\"Torch unsupported\");\n }\n }\n }\n async startCamera() {\n var _a;\n if (this.camera) {\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.open(true));\n if (this.container && this.isSafari() === true) {\n const resetZoom = async () => {\n var _a, _b;\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.setZoom(1.001));\n await ((_b = this.camera) === null || _b === void 0 ? void 0 : _b.setZoom(1.0));\n };\n setTimeout(resetZoom, 500);\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n isSafari() {\n const u = navigator.userAgent.toLowerCase();\n if (u.indexOf('safari') > -1 && u.indexOf('chrome') === -1) {\n return true;\n }\n else {\n return false;\n }\n }\n async stopCamera() {\n if (this.camera) {\n this.camera.close(true);\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async isOpen() {\n if (this.camera) {\n return { isOpen: this.camera.isOpen() };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async takeSnapshot(options) {\n if (this.camera) {\n let desiredQuality = this.desiredJpegQuality;\n if ((options === null || options === void 0 ? void 0 : options.quality) !== undefined) {\n desiredQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n }\n let canvas = this.camera.getFrame().toCanvas();\n let dataURL = canvas.toDataURL('image/jpeg', desiredQuality);\n let base64 = dataURL.replace(\"data:image/jpeg;base64,\", \"\");\n // Only perform blur detection if checkBlur option is true\n if ((options === null || options === void 0 ? void 0 : options.checkBlur) === true) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n isBlur: blurResult.blurScore < 150\n };\n }\n }\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async detectBlur(options) {\n try {\n // Create image element from base64\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.onload = () => {\n try {\n // Create canvas to extract image data\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n reject(new Error('Cannot create canvas context'));\n return;\n }\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n // Get image data\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n // Convert blur score to confidence values\n // Higher blurScore means sharper image\n const normalizedScore = Math.max(0, Math.min(1, blurResult.blurScore / 300)); // Normalize to 0-1\n const sharpConfidence = normalizedScore;\n const blurConfidence = 1 - normalizedScore;\n const isBlur = blurResult.blurScore < 150;\n resolve({\n isBlur: isBlur,\n blurConfidence: blurConfidence,\n sharpConfidence: sharpConfidence\n });\n }\n catch (error) {\n reject(error);\n }\n };\n img.onerror = () => {\n reject(new Error('Failed to load image'));\n };\n // Handle both data URLs and base64 strings\n if (options.image.startsWith('data:')) {\n img.src = options.image;\n }\n else {\n img.src = `data:image/jpeg;base64,${options.image}`;\n }\n });\n }\n catch (error) {\n throw new Error(`Failed to detect blur: ${error}`);\n }\n }\n async takeSnapshot2(options) {\n if (this.camera) {\n let canvas = options.canvas;\n let scaleRatio = 1.0;\n if (options && options.maxLength) {\n let res = (await this.getResolution()).resolution;\n let width = parseInt(res.split(\"x\")[0]);\n let height = parseInt(res.split(\"x\")[1]);\n let targetWidth = width;\n let targetHeight = height;\n if (width > options.maxLength || height > options.maxLength) {\n if (width > height) {\n targetWidth = options.maxLength;\n targetHeight = options.maxLength / width * height;\n scaleRatio = options.maxLength / width;\n }\n else {\n targetHeight = options.maxLength;\n targetWidth = options.maxLength / height * width;\n scaleRatio = options.maxLength / height;\n }\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, targetWidth, targetHeight);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n return { scaleRatio: scaleRatio };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n drawFullFrame(canvas) {\n var _a;\n let video = (_a = this.camera) === null || _a === void 0 ? void 0 : _a.getUIElement().getElementsByTagName(\"video\")[0];\n if (video) {\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n async takePhoto(_options) {\n if (this.camera) {\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let localStream = video.srcObject;\n if (localStream) {\n if (\"ImageCapture\" in window) {\n try {\n //@ts-ignore \n let ImageCapture = window[\"ImageCapture\"];\n console.log(\"ImageCapture supported\");\n const track = localStream.getVideoTracks()[0];\n let imageCapture = new ImageCapture(track);\n let blob = await imageCapture.takePhoto();\n return { blob: blob };\n }\n catch (error) {\n console.log(error);\n }\n }\n else {\n console.log(\"ImageCapture not supported\");\n }\n }\n this.camera.setScanRegion({\n regionLeft: 0,\n regionTop: 0,\n regionBottom: 100,\n regionRight: 100,\n regionMeasuredByPercentage: 1\n });\n let canvas = this.camera.getFrame().toCanvas();\n let base64 = this.removeDataURLHead(canvas.toDataURL(\"image/jpeg\", this.desiredJpegQuality));\n this.applyScanRegion();\n // Add blur detection if base64 is included\n if (_options === null || _options === void 0 ? void 0 : _options.includeBase64) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n blurScore: blurResult.blurScore\n };\n }\n }\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n removeDataURLHead(dataURL) {\n return dataURL.substring(dataURL.indexOf(\",\") + 1, dataURL.length);\n }\n async requestCameraPermission() {\n const constraints = { video: true, audio: false };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n }\n async requestMicroPhonePermission() {\n try {\n const constraints = { video: false, audio: true };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n this.hasMicrophone = true;\n }\n catch (error) {\n this.hasMicrophone = false;\n throw error;\n }\n }\n async startRecording() {\n if (this.camera) {\n if (this.hasMicrophone) {\n let settings = this.camera.getVideoSettings();\n settings.audio = true;\n await this.camera.updateVideoSettings(settings);\n }\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n this.recorder = new RecordRTC(video.srcObject, {\n type: 'video'\n });\n this.recorder.startRecording();\n }\n else {\n throw new Error(\"camera not initialized\");\n }\n }\n async stopRecording() {\n return new Promise((resolve, reject) => {\n if (this.recorder) {\n const stopRecordingCallback = () => {\n let blob = this.recorder.getBlob();\n this.recorder.destroy();\n this.recorder = null;\n resolve({ blob });\n };\n this.recorder.stopRecording(stopRecordingCallback);\n }\n else {\n reject(\"recorder not initialized\");\n }\n });\n }\n async setLayout(options) {\n if (this.camera) {\n let ele = this.camera.getUIElement();\n if (options.top) {\n ele.style.top = options.top;\n }\n if (options.left) {\n ele.style.left = options.left;\n }\n if (options.width) {\n ele.style.width = options.width;\n }\n if (options.height) {\n ele.style.height = options.height;\n }\n ele.style.position = \"absolute\";\n }\n else {\n throw new Error(\"Camera not initialized\");\n }\n }\n /**\n * Detect blur using Laplacian variance algorithm (same as iOS/Android)\n * Higher values indicate sharper images\n */\n detectBlurWeb(imageData, width, height) {\n const data = imageData.data;\n let variance = 0;\n let count = 0;\n // Sample every 4th pixel for performance (similar to Android implementation)\n const step = 4;\n for (let y = step; y < height - step; y += step) {\n for (let x = step; x < width - step; x += step) {\n const idx = (y * width + x) * 4;\n // Convert to grayscale using same formula as Android\n const gray = 0.299 * data[idx] + 0.587 * data[idx + 1] + 0.114 * data[idx + 2];\n // Calculate neighbors for 3x3 Laplacian kernel\n const neighbors = [\n 0.299 * data[((y - 1) * width + (x - 1)) * 4] + 0.587 * data[((y - 1) * width + (x - 1)) * 4 + 1] + 0.114 * data[((y - 1) * width + (x - 1)) * 4 + 2],\n 0.299 * data[((y - 1) * width + x) * 4] + 0.587 * data[((y - 1) * width + x) * 4 + 1] + 0.114 * data[((y - 1) * width + x) * 4 + 2],\n 0.299 * data[((y - 1) * width + (x + 1)) * 4] + 0.587 * data[((y - 1) * width + (x + 1)) * 4 + 1] + 0.114 * data[((y - 1) * width + (x + 1)) * 4 + 2],\n 0.299 * data[(y * width + (x - 1)) * 4] + 0.587 * data[(y * width + (x - 1)) * 4 + 1] + 0.114 * data[(y * width + (x - 1)) * 4 + 2],\n 0.299 * data[(y * width + (x + 1)) * 4] + 0.587 * data[(y * width + (x + 1)) * 4 + 1] + 0.114 * data[(y * width + (x + 1)) * 4 + 2],\n 0.299 * data[((y + 1) * width + (x - 1)) * 4] + 0.587 * data[((y + 1) * width + (x - 1)) * 4 + 1] + 0.114 * data[((y + 1) * width + (x - 1)) * 4 + 2],\n 0.299 * data[((y + 1) * width + x) * 4] + 0.587 * data[((y + 1) * width + x) * 4 + 1] + 0.114 * data[((y + 1) * width + x) * 4 + 2],\n 0.299 * data[((y + 1) * width + (x + 1)) * 4] + 0.587 * data[((y + 1) * width + (x + 1)) * 4 + 1] + 0.114 * data[((y + 1) * width + (x + 1)) * 4 + 2]\n ];\n // Apply 3x3 Laplacian kernel (matches Android implementation)\n const laplacian = -neighbors[0] - neighbors[1] - neighbors[2] +\n -neighbors[3] + 8 * gray - neighbors[4] +\n -neighbors[5] - neighbors[6] - neighbors[7];\n variance += laplacian * laplacian;\n count++;\n }\n }\n const blurScore = count > 0 ? variance / count : 0;\n return { blurScore };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["EnumResolution","registerPlugin","CameraEnhancer","WebPlugin"],"mappings":"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AK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzK,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzK,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACxK,iBAAiB;AACjB;AACA,gBAAgB,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AAC7E,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;AAC3D,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AAC/D,gBAAgB,QAAQ,IAAI,SAAS,GAAG,SAAS;AACjD,gBAAgB,KAAK,EAAE;AACvB;AACA;AACA,QAAQ,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,QAAQ,GAAG,KAAK,GAAG,CAAC;AAC1D,QAAQ,OAAO,EAAE,SAAS,EAAE;AAC5B;AACA;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var EnumResolution;\n(function (EnumResolution) {\n EnumResolution[EnumResolution[\"RESOLUTION_AUTO\"] = 0] = \"RESOLUTION_AUTO\";\n EnumResolution[EnumResolution[\"RESOLUTION_480P\"] = 1] = \"RESOLUTION_480P\";\n EnumResolution[EnumResolution[\"RESOLUTION_720P\"] = 2] = \"RESOLUTION_720P\";\n EnumResolution[EnumResolution[\"RESOLUTION_1080P\"] = 3] = \"RESOLUTION_1080P\";\n EnumResolution[EnumResolution[\"RESOLUTION_2K\"] = 4] = \"RESOLUTION_2K\";\n EnumResolution[EnumResolution[\"RESOLUTION_4K\"] = 5] = \"RESOLUTION_4K\";\n})(EnumResolution || (EnumResolution = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst CameraPreview = registerPlugin('CameraPreview', {\n web: () => import('./web').then(m => new m.CameraPreviewWeb()),\n});\nexport * from './definitions';\nexport { CameraPreview };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { CameraEnhancer } from 'dynamsoft-camera-enhancer';\nimport { EnumResolution } from './definitions';\nimport RecordRTC from 'recordrtc';\nCameraEnhancer.defaultUIElementURL = \"https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.3.9/dist/dce.ui.html\";\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.hasMicrophone = false;\n this.desiredJpegQuality = 0.95; // Default to high quality (0.0-1.0)\n }\n async setDefaultUIElementURL(url) {\n CameraEnhancer.defaultUIElementURL = url;\n }\n async setElement(ele) {\n this.container = ele;\n }\n saveFrame() {\n throw new Error('Method not implemented.');\n }\n async getOrientation() {\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n if (portrait.matches) {\n return { orientation: \"PORTRAIT\" };\n }\n else {\n return { orientation: \"LANDSCAPE\" };\n }\n }\n async initialize(options) {\n // Get quality parameter from initialization, default to 95% if not specified\n if ((options === null || options === void 0 ? void 0 : options.quality) !== undefined) {\n this.desiredJpegQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n console.log(`Camera initialized with JPEG quality: ${this.desiredJpegQuality}`);\n }\n this.camera = await CameraEnhancer.createInstance();\n this.camera.on(\"played\", (playCallBackInfo) => {\n this.notifyListeners(\"onPlayed\", { resolution: playCallBackInfo.width + \"x\" + playCallBackInfo.height });\n try {\n let canvas = this.camera.getUIElement().getElementsByClassName(\"dce-video-container\")[0].getElementsByTagName(\"canvas\")[0];\n if (canvas) {\n canvas.remove();\n }\n }\n catch (error) {\n console.log(error);\n }\n });\n if (this.container) {\n await this.camera.setUIElement(this.container);\n }\n else {\n await this.camera.setUIElement(CameraEnhancer.defaultUIElementURL);\n this.camera.getUIElement().getElementsByClassName(\"dce-btn-close\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-camera\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-resolution\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-msg-poweredby\")[0].remove();\n }\n this.camera.setVideoFit(\"cover\");\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n portrait.addEventListener(\"change\", () => {\n this.notifyListeners(\"onOrientationChanged\", null);\n });\n }\n async getResolution() {\n if (this.camera) {\n let rsl = this.camera.getResolution();\n let resolution = rsl[0] + \"x\" + rsl[1];\n return { resolution: resolution };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setResolution(options) {\n if (this.camera) {\n let res = options.resolution;\n let width = 1280;\n let height = 720;\n if (res == EnumResolution.RESOLUTION_480P) {\n width = 640;\n height = 480;\n }\n else if (res == EnumResolution.RESOLUTION_720P) {\n width = 1280;\n height = 720;\n }\n else if (res == EnumResolution.RESOLUTION_1080P) {\n width = 1920;\n height = 1080;\n }\n else if (res == EnumResolution.RESOLUTION_2K) {\n width = 2560;\n height = 1440;\n }\n else if (res == EnumResolution.RESOLUTION_4K) {\n width = 3840;\n height = 2160;\n }\n await this.camera.setResolution(width, height);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getAllCameras() {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n let labels = [];\n cameras.forEach(camera => {\n labels.push(camera.label);\n });\n return { cameras: labels };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getSelectedCamera() {\n if (this.camera) {\n let cameraInfo = this.camera.getSelectedCamera();\n return { selectedCamera: cameraInfo.label };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async selectCamera(options) {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n for (let index = 0; index < cameras.length; index++) {\n const camera = cameras[index];\n if (camera.label === options.cameraID) {\n await this.camera.selectCamera(camera);\n return;\n }\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setScanRegion(options) {\n if (this.camera) {\n this.region = options.region;\n this.applyScanRegion();\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n applyScanRegion() {\n if (this.camera && this.region) {\n this.camera.setScanRegion({\n regionLeft: this.region.left,\n regionTop: this.region.top,\n regionRight: this.region.right,\n regionBottom: this.region.bottom,\n regionMeasuredByPercentage: this.region.measuredByPercentage\n });\n }\n }\n async setZoom(options) {\n if (this.camera) {\n await this.camera.setZoom(options.factor);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setFocus(options) {\n if (this.camera) {\n this.camera.setFocus({\n mode: \"manual\",\n area: {\n centerPoint: { x: options.x.toString(), y: options.y.toString() }\n }\n });\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async toggleTorch(options) {\n if (this.camera) {\n try {\n if (options[\"on\"]) {\n await this.camera.turnOnTorch();\n }\n else {\n await this.camera.turnOffTorch();\n }\n }\n catch (e) {\n throw new Error(\"Torch unsupported\");\n }\n }\n }\n async startCamera() {\n var _a;\n if (this.camera) {\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.open(true));\n if (this.container && this.isSafari() === true) {\n const resetZoom = async () => {\n var _a, _b;\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.setZoom(1.001));\n await ((_b = this.camera) === null || _b === void 0 ? void 0 : _b.setZoom(1.0));\n };\n setTimeout(resetZoom, 500);\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n isSafari() {\n const u = navigator.userAgent.toLowerCase();\n if (u.indexOf('safari') > -1 && u.indexOf('chrome') === -1) {\n return true;\n }\n else {\n return false;\n }\n }\n async stopCamera() {\n if (this.camera) {\n this.camera.close(true);\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async isOpen() {\n if (this.camera) {\n return { isOpen: this.camera.isOpen() };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async takeSnapshot(options) {\n if (this.camera) {\n let desiredQuality = this.desiredJpegQuality;\n if ((options === null || options === void 0 ? void 0 : options.quality) !== undefined) {\n desiredQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n }\n let canvas = this.camera.getFrame().toCanvas();\n let dataURL = canvas.toDataURL('image/jpeg', desiredQuality);\n let base64 = dataURL.replace(\"data:image/jpeg;base64,\", \"\");\n // Only perform blur detection if checkBlur option is true\n if ((options === null || options === void 0 ? void 0 : options.checkBlur) === true) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n confidence: Math.max(0, Math.min(1, blurResult.blurScore / 300))\n };\n }\n }\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async detectBlur(options) {\n try {\n // Create image element from base64\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.onload = () => {\n try {\n // Create canvas to extract image data\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n reject(new Error('Cannot create canvas context'));\n return;\n }\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n // Get image data\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n // Convert blur score to confidence values\n // Higher blurScore means sharper image\n const normalizedScore = Math.max(0, Math.min(1, blurResult.blurScore / 300)); // Normalize to 0-1\n const sharpConfidence = normalizedScore;\n const blurConfidence = 1 - normalizedScore;\n const isBlur = blurResult.blurScore < 150;\n resolve({\n isBlur: isBlur,\n blurConfidence: blurConfidence,\n sharpConfidence: sharpConfidence\n });\n }\n catch (error) {\n reject(error);\n }\n };\n img.onerror = () => {\n reject(new Error('Failed to load image'));\n };\n // Handle both data URLs and base64 strings\n if (options.image.startsWith('data:')) {\n img.src = options.image;\n }\n else {\n img.src = `data:image/jpeg;base64,${options.image}`;\n }\n });\n }\n catch (error) {\n throw new Error(`Failed to detect blur: ${error}`);\n }\n }\n async takeSnapshot2(options) {\n if (this.camera) {\n let canvas = options.canvas;\n let scaleRatio = 1.0;\n if (options && options.maxLength) {\n let res = (await this.getResolution()).resolution;\n let width = parseInt(res.split(\"x\")[0]);\n let height = parseInt(res.split(\"x\")[1]);\n let targetWidth = width;\n let targetHeight = height;\n if (width > options.maxLength || height > options.maxLength) {\n if (width > height) {\n targetWidth = options.maxLength;\n targetHeight = options.maxLength / width * height;\n scaleRatio = options.maxLength / width;\n }\n else {\n targetHeight = options.maxLength;\n targetWidth = options.maxLength / height * width;\n scaleRatio = options.maxLength / height;\n }\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, targetWidth, targetHeight);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n return { scaleRatio: scaleRatio };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n drawFullFrame(canvas) {\n var _a;\n let video = (_a = this.camera) === null || _a === void 0 ? void 0 : _a.getUIElement().getElementsByTagName(\"video\")[0];\n if (video) {\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n async takePhoto(_options) {\n if (this.camera) {\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let localStream = video.srcObject;\n if (localStream) {\n if (\"ImageCapture\" in window) {\n try {\n //@ts-ignore \n let ImageCapture = window[\"ImageCapture\"];\n console.log(\"ImageCapture supported\");\n const track = localStream.getVideoTracks()[0];\n let imageCapture = new ImageCapture(track);\n let blob = await imageCapture.takePhoto();\n return { blob: blob };\n }\n catch (error) {\n console.log(error);\n }\n }\n else {\n console.log(\"ImageCapture not supported\");\n }\n }\n this.camera.setScanRegion({\n regionLeft: 0,\n regionTop: 0,\n regionBottom: 100,\n regionRight: 100,\n regionMeasuredByPercentage: 1\n });\n let canvas = this.camera.getFrame().toCanvas();\n let base64 = this.removeDataURLHead(canvas.toDataURL(\"image/jpeg\", this.desiredJpegQuality));\n this.applyScanRegion();\n // Add blur detection if base64 is included\n if (_options === null || _options === void 0 ? void 0 : _options.includeBase64) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n blurScore: blurResult.blurScore\n };\n }\n }\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n removeDataURLHead(dataURL) {\n return dataURL.substring(dataURL.indexOf(\",\") + 1, dataURL.length);\n }\n async requestCameraPermission() {\n const constraints = { video: true, audio: false };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n }\n async requestMicroPhonePermission() {\n try {\n const constraints = { video: false, audio: true };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n this.hasMicrophone = true;\n }\n catch (error) {\n this.hasMicrophone = false;\n throw error;\n }\n }\n async startRecording() {\n if (this.camera) {\n if (this.hasMicrophone) {\n let settings = this.camera.getVideoSettings();\n settings.audio = true;\n await this.camera.updateVideoSettings(settings);\n }\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n this.recorder = new RecordRTC(video.srcObject, {\n type: 'video'\n });\n this.recorder.startRecording();\n }\n else {\n throw new Error(\"camera not initialized\");\n }\n }\n async stopRecording() {\n return new Promise((resolve, reject) => {\n if (this.recorder) {\n const stopRecordingCallback = () => {\n let blob = this.recorder.getBlob();\n this.recorder.destroy();\n this.recorder = null;\n resolve({ blob });\n };\n this.recorder.stopRecording(stopRecordingCallback);\n }\n else {\n reject(\"recorder not initialized\");\n }\n });\n }\n async setLayout(options) {\n if (this.camera) {\n let ele = this.camera.getUIElement();\n if (options.top) {\n ele.style.top = options.top;\n }\n if (options.left) {\n ele.style.left = options.left;\n }\n if (options.width) {\n ele.style.width = options.width;\n }\n if (options.height) {\n ele.style.height = options.height;\n }\n ele.style.position = \"absolute\";\n }\n else {\n throw new Error(\"Camera not initialized\");\n }\n }\n /**\n * Detect blur using Laplacian variance algorithm (same as iOS/Android)\n * Higher values indicate sharper images\n */\n detectBlurWeb(imageData, width, height) {\n const data = imageData.data;\n let variance = 0;\n let count = 0;\n // Sample every 4th pixel for performance (similar to Android implementation)\n const step = 4;\n for (let y = step; y < height - step; y += step) {\n for (let x = step; x < width - step; x += step) {\n const idx = (y * width + x) * 4;\n // Convert to grayscale using same formula as Android\n const gray = 0.299 * data[idx] + 0.587 * data[idx + 1] + 0.114 * data[idx + 2];\n // Calculate neighbors for 3x3 Laplacian kernel\n const neighbors = [\n 0.299 * data[((y - 1) * width + (x - 1)) * 4] + 0.587 * data[((y - 1) * width + (x - 1)) * 4 + 1] + 0.114 * data[((y - 1) * width + (x - 1)) * 4 + 2],\n 0.299 * data[((y - 1) * width + x) * 4] + 0.587 * data[((y - 1) * width + x) * 4 + 1] + 0.114 * data[((y - 1) * width + x) * 4 + 2],\n 0.299 * data[((y - 1) * width + (x + 1)) * 4] + 0.587 * data[((y - 1) * width + (x + 1)) * 4 + 1] + 0.114 * data[((y - 1) * width + (x + 1)) * 4 + 2],\n 0.299 * data[(y * width + (x - 1)) * 4] + 0.587 * data[(y * width + (x - 1)) * 4 + 1] + 0.114 * data[(y * width + (x - 1)) * 4 + 2],\n 0.299 * data[(y * width + (x + 1)) * 4] + 0.587 * data[(y * width + (x + 1)) * 4 + 1] + 0.114 * data[(y * width + (x + 1)) * 4 + 2],\n 0.299 * data[((y + 1) * width + (x - 1)) * 4] + 0.587 * data[((y + 1) * width + (x - 1)) * 4 + 1] + 0.114 * data[((y + 1) * width + (x - 1)) * 4 + 2],\n 0.299 * data[((y + 1) * width + x) * 4] + 0.587 * data[((y + 1) * width + x) * 4 + 1] + 0.114 * data[((y + 1) * width + x) * 4 + 2],\n 0.299 * data[((y + 1) * width + (x + 1)) * 4] + 0.587 * data[((y + 1) * width + (x + 1)) * 4 + 1] + 0.114 * data[((y + 1) * width + (x + 1)) * 4 + 2]\n ];\n // Apply 3x3 Laplacian kernel (matches Android implementation)\n const laplacian = -neighbors[0] - neighbors[1] - neighbors[2] +\n -neighbors[3] + 8 * gray - neighbors[4] +\n -neighbors[5] - neighbors[6] - neighbors[7];\n variance += laplacian * laplacian;\n count++;\n }\n }\n const blurScore = count > 0 ? variance / count : 0;\n return { blurScore };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["EnumResolution","registerPlugin","CameraEnhancer","WebPlugin"],"mappings":"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AG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzK,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzK,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACxK,iBAAiB;AACjB;AACA,gBAAgB,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AAC7E,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;AAC3D,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AAC/D,gBAAgB,QAAQ,IAAI,SAAS,GAAG,SAAS;AACjD,gBAAgB,KAAK,EAAE;AACvB;AACA;AACA,QAAQ,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,QAAQ,GAAG,KAAK,GAAG,CAAC;AAC1D,QAAQ,OAAO,EAAE,SAAS,EAAE;AAC5B;AACA;;;;;;;;;"}
|
package/dist/plugin.js
CHANGED
|
@@ -270,7 +270,7 @@ var capacitorCameraPreview = (function (exports, core, dynamsoftCameraEnhancer,
|
|
|
270
270
|
const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);
|
|
271
271
|
return {
|
|
272
272
|
base64: base64,
|
|
273
|
-
|
|
273
|
+
confidence: Math.max(0, Math.min(1, blurResult.blurScore / 300))
|
|
274
274
|
};
|
|
275
275
|
}
|
|
276
276
|
}
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var EnumResolution;\n(function (EnumResolution) {\n EnumResolution[EnumResolution[\"RESOLUTION_AUTO\"] = 0] = \"RESOLUTION_AUTO\";\n EnumResolution[EnumResolution[\"RESOLUTION_480P\"] = 1] = \"RESOLUTION_480P\";\n EnumResolution[EnumResolution[\"RESOLUTION_720P\"] = 2] = \"RESOLUTION_720P\";\n EnumResolution[EnumResolution[\"RESOLUTION_1080P\"] = 3] = \"RESOLUTION_1080P\";\n EnumResolution[EnumResolution[\"RESOLUTION_2K\"] = 4] = \"RESOLUTION_2K\";\n EnumResolution[EnumResolution[\"RESOLUTION_4K\"] = 5] = \"RESOLUTION_4K\";\n})(EnumResolution || (EnumResolution = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst CameraPreview = registerPlugin('CameraPreview', {\n web: () => import('./web').then(m => new m.CameraPreviewWeb()),\n});\nexport * from './definitions';\nexport { CameraPreview };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { CameraEnhancer } from 'dynamsoft-camera-enhancer';\nimport { EnumResolution } from './definitions';\nimport RecordRTC from 'recordrtc';\nCameraEnhancer.defaultUIElementURL = \"https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.3.9/dist/dce.ui.html\";\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.hasMicrophone = false;\n this.desiredJpegQuality = 0.95; // Default to high quality (0.0-1.0)\n }\n async setDefaultUIElementURL(url) {\n CameraEnhancer.defaultUIElementURL = url;\n }\n async setElement(ele) {\n this.container = ele;\n }\n saveFrame() {\n throw new Error('Method not implemented.');\n }\n async getOrientation() {\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n if (portrait.matches) {\n return { orientation: \"PORTRAIT\" };\n }\n else {\n return { orientation: \"LANDSCAPE\" };\n }\n }\n async initialize(options) {\n // Get quality parameter from initialization, default to 95% if not specified\n if ((options === null || options === void 0 ? void 0 : options.quality) !== undefined) {\n this.desiredJpegQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n console.log(`Camera initialized with JPEG quality: ${this.desiredJpegQuality}`);\n }\n this.camera = await CameraEnhancer.createInstance();\n this.camera.on(\"played\", (playCallBackInfo) => {\n this.notifyListeners(\"onPlayed\", { resolution: playCallBackInfo.width + \"x\" + playCallBackInfo.height });\n try {\n let canvas = this.camera.getUIElement().getElementsByClassName(\"dce-video-container\")[0].getElementsByTagName(\"canvas\")[0];\n if (canvas) {\n canvas.remove();\n }\n }\n catch (error) {\n console.log(error);\n }\n });\n if (this.container) {\n await this.camera.setUIElement(this.container);\n }\n else {\n await this.camera.setUIElement(CameraEnhancer.defaultUIElementURL);\n this.camera.getUIElement().getElementsByClassName(\"dce-btn-close\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-camera\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-resolution\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-msg-poweredby\")[0].remove();\n }\n this.camera.setVideoFit(\"cover\");\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n portrait.addEventListener(\"change\", () => {\n this.notifyListeners(\"onOrientationChanged\", null);\n });\n }\n async getResolution() {\n if (this.camera) {\n let rsl = this.camera.getResolution();\n let resolution = rsl[0] + \"x\" + rsl[1];\n return { resolution: resolution };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setResolution(options) {\n if (this.camera) {\n let res = options.resolution;\n let width = 1280;\n let height = 720;\n if (res == EnumResolution.RESOLUTION_480P) {\n width = 640;\n height = 480;\n }\n else if (res == EnumResolution.RESOLUTION_720P) {\n width = 1280;\n height = 720;\n }\n else if (res == EnumResolution.RESOLUTION_1080P) {\n width = 1920;\n height = 1080;\n }\n else if (res == EnumResolution.RESOLUTION_2K) {\n width = 2560;\n height = 1440;\n }\n else if (res == EnumResolution.RESOLUTION_4K) {\n width = 3840;\n height = 2160;\n }\n await this.camera.setResolution(width, height);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getAllCameras() {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n let labels = [];\n cameras.forEach(camera => {\n labels.push(camera.label);\n });\n return { cameras: labels };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getSelectedCamera() {\n if (this.camera) {\n let cameraInfo = this.camera.getSelectedCamera();\n return { selectedCamera: cameraInfo.label };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async selectCamera(options) {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n for (let index = 0; index < cameras.length; index++) {\n const camera = cameras[index];\n if (camera.label === options.cameraID) {\n await this.camera.selectCamera(camera);\n return;\n }\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setScanRegion(options) {\n if (this.camera) {\n this.region = options.region;\n this.applyScanRegion();\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n applyScanRegion() {\n if (this.camera && this.region) {\n this.camera.setScanRegion({\n regionLeft: this.region.left,\n regionTop: this.region.top,\n regionRight: this.region.right,\n regionBottom: this.region.bottom,\n regionMeasuredByPercentage: this.region.measuredByPercentage\n });\n }\n }\n async setZoom(options) {\n if (this.camera) {\n await this.camera.setZoom(options.factor);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setFocus(options) {\n if (this.camera) {\n this.camera.setFocus({\n mode: \"manual\",\n area: {\n centerPoint: { x: options.x.toString(), y: options.y.toString() }\n }\n });\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async toggleTorch(options) {\n if (this.camera) {\n try {\n if (options[\"on\"]) {\n await this.camera.turnOnTorch();\n }\n else {\n await this.camera.turnOffTorch();\n }\n }\n catch (e) {\n throw new Error(\"Torch unsupported\");\n }\n }\n }\n async startCamera() {\n var _a;\n if (this.camera) {\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.open(true));\n if (this.container && this.isSafari() === true) {\n const resetZoom = async () => {\n var _a, _b;\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.setZoom(1.001));\n await ((_b = this.camera) === null || _b === void 0 ? void 0 : _b.setZoom(1.0));\n };\n setTimeout(resetZoom, 500);\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n isSafari() {\n const u = navigator.userAgent.toLowerCase();\n if (u.indexOf('safari') > -1 && u.indexOf('chrome') === -1) {\n return true;\n }\n else {\n return false;\n }\n }\n async stopCamera() {\n if (this.camera) {\n this.camera.close(true);\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async isOpen() {\n if (this.camera) {\n return { isOpen: this.camera.isOpen() };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async takeSnapshot(options) {\n if (this.camera) {\n let desiredQuality = this.desiredJpegQuality;\n if ((options === null || options === void 0 ? void 0 : options.quality) !== undefined) {\n desiredQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n }\n let canvas = this.camera.getFrame().toCanvas();\n let dataURL = canvas.toDataURL('image/jpeg', desiredQuality);\n let base64 = dataURL.replace(\"data:image/jpeg;base64,\", \"\");\n // Only perform blur detection if checkBlur option is true\n if ((options === null || options === void 0 ? void 0 : options.checkBlur) === true) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n isBlur: blurResult.blurScore < 150\n };\n }\n }\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async detectBlur(options) {\n try {\n // Create image element from base64\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.onload = () => {\n try {\n // Create canvas to extract image data\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n reject(new Error('Cannot create canvas context'));\n return;\n }\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n // Get image data\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n // Convert blur score to confidence values\n // Higher blurScore means sharper image\n const normalizedScore = Math.max(0, Math.min(1, blurResult.blurScore / 300)); // Normalize to 0-1\n const sharpConfidence = normalizedScore;\n const blurConfidence = 1 - normalizedScore;\n const isBlur = blurResult.blurScore < 150;\n resolve({\n isBlur: isBlur,\n blurConfidence: blurConfidence,\n sharpConfidence: sharpConfidence\n });\n }\n catch (error) {\n reject(error);\n }\n };\n img.onerror = () => {\n reject(new Error('Failed to load image'));\n };\n // Handle both data URLs and base64 strings\n if (options.image.startsWith('data:')) {\n img.src = options.image;\n }\n else {\n img.src = `data:image/jpeg;base64,${options.image}`;\n }\n });\n }\n catch (error) {\n throw new Error(`Failed to detect blur: ${error}`);\n }\n }\n async takeSnapshot2(options) {\n if (this.camera) {\n let canvas = options.canvas;\n let scaleRatio = 1.0;\n if (options && options.maxLength) {\n let res = (await this.getResolution()).resolution;\n let width = parseInt(res.split(\"x\")[0]);\n let height = parseInt(res.split(\"x\")[1]);\n let targetWidth = width;\n let targetHeight = height;\n if (width > options.maxLength || height > options.maxLength) {\n if (width > height) {\n targetWidth = options.maxLength;\n targetHeight = options.maxLength / width * height;\n scaleRatio = options.maxLength / width;\n }\n else {\n targetHeight = options.maxLength;\n targetWidth = options.maxLength / height * width;\n scaleRatio = options.maxLength / height;\n }\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, targetWidth, targetHeight);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n return { scaleRatio: scaleRatio };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n drawFullFrame(canvas) {\n var _a;\n let video = (_a = this.camera) === null || _a === void 0 ? void 0 : _a.getUIElement().getElementsByTagName(\"video\")[0];\n if (video) {\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n async takePhoto(_options) {\n if (this.camera) {\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let localStream = video.srcObject;\n if (localStream) {\n if (\"ImageCapture\" in window) {\n try {\n //@ts-ignore \n let ImageCapture = window[\"ImageCapture\"];\n console.log(\"ImageCapture supported\");\n const track = localStream.getVideoTracks()[0];\n let imageCapture = new ImageCapture(track);\n let blob = await imageCapture.takePhoto();\n return { blob: blob };\n }\n catch (error) {\n console.log(error);\n }\n }\n else {\n console.log(\"ImageCapture not supported\");\n }\n }\n this.camera.setScanRegion({\n regionLeft: 0,\n regionTop: 0,\n regionBottom: 100,\n regionRight: 100,\n regionMeasuredByPercentage: 1\n });\n let canvas = this.camera.getFrame().toCanvas();\n let base64 = this.removeDataURLHead(canvas.toDataURL(\"image/jpeg\", this.desiredJpegQuality));\n this.applyScanRegion();\n // Add blur detection if base64 is included\n if (_options === null || _options === void 0 ? void 0 : _options.includeBase64) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n blurScore: blurResult.blurScore\n };\n }\n }\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n removeDataURLHead(dataURL) {\n return dataURL.substring(dataURL.indexOf(\",\") + 1, dataURL.length);\n }\n async requestCameraPermission() {\n const constraints = { video: true, audio: false };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n }\n async requestMicroPhonePermission() {\n try {\n const constraints = { video: false, audio: true };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n this.hasMicrophone = true;\n }\n catch (error) {\n this.hasMicrophone = false;\n throw error;\n }\n }\n async startRecording() {\n if (this.camera) {\n if (this.hasMicrophone) {\n let settings = this.camera.getVideoSettings();\n settings.audio = true;\n await this.camera.updateVideoSettings(settings);\n }\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n this.recorder = new RecordRTC(video.srcObject, {\n type: 'video'\n });\n this.recorder.startRecording();\n }\n else {\n throw new Error(\"camera not initialized\");\n }\n }\n async stopRecording() {\n return new Promise((resolve, reject) => {\n if (this.recorder) {\n const stopRecordingCallback = () => {\n let blob = this.recorder.getBlob();\n this.recorder.destroy();\n this.recorder = null;\n resolve({ blob });\n };\n this.recorder.stopRecording(stopRecordingCallback);\n }\n else {\n reject(\"recorder not initialized\");\n }\n });\n }\n async setLayout(options) {\n if (this.camera) {\n let ele = this.camera.getUIElement();\n if (options.top) {\n ele.style.top = options.top;\n }\n if (options.left) {\n ele.style.left = options.left;\n }\n if (options.width) {\n ele.style.width = options.width;\n }\n if (options.height) {\n ele.style.height = options.height;\n }\n ele.style.position = \"absolute\";\n }\n else {\n throw new Error(\"Camera not initialized\");\n }\n }\n /**\n * Detect blur using Laplacian variance algorithm (same as iOS/Android)\n * Higher values indicate sharper images\n */\n detectBlurWeb(imageData, width, height) {\n const data = imageData.data;\n let variance = 0;\n let count = 0;\n // Sample every 4th pixel for performance (similar to Android implementation)\n const step = 4;\n for (let y = step; y < height - step; y += step) {\n for (let x = step; x < width - step; x += step) {\n const idx = (y * width + x) * 4;\n // Convert to grayscale using same formula as Android\n const gray = 0.299 * data[idx] + 0.587 * data[idx + 1] + 0.114 * data[idx + 2];\n // Calculate neighbors for 3x3 Laplacian kernel\n const neighbors = [\n 0.299 * data[((y - 1) * width + (x - 1)) * 4] + 0.587 * data[((y - 1) * width + (x - 1)) * 4 + 1] + 0.114 * data[((y - 1) * width + (x - 1)) * 4 + 2],\n 0.299 * data[((y - 1) * width + x) * 4] + 0.587 * data[((y - 1) * width + x) * 4 + 1] + 0.114 * data[((y - 1) * width + x) * 4 + 2],\n 0.299 * data[((y - 1) * width + (x + 1)) * 4] + 0.587 * data[((y - 1) * width + (x + 1)) * 4 + 1] + 0.114 * data[((y - 1) * width + (x + 1)) * 4 + 2],\n 0.299 * data[(y * width + (x - 1)) * 4] + 0.587 * data[(y * width + (x - 1)) * 4 + 1] + 0.114 * data[(y * width + (x - 1)) * 4 + 2],\n 0.299 * data[(y * width + (x + 1)) * 4] + 0.587 * data[(y * width + (x + 1)) * 4 + 1] + 0.114 * data[(y * width + (x + 1)) * 4 + 2],\n 0.299 * data[((y + 1) * width + (x - 1)) * 4] + 0.587 * data[((y + 1) * width + (x - 1)) * 4 + 1] + 0.114 * data[((y + 1) * width + (x - 1)) * 4 + 2],\n 0.299 * data[((y + 1) * width + x) * 4] + 0.587 * data[((y + 1) * width + x) * 4 + 1] + 0.114 * data[((y + 1) * width + x) * 4 + 2],\n 0.299 * data[((y + 1) * width + (x + 1)) * 4] + 0.587 * data[((y + 1) * width + (x + 1)) * 4 + 1] + 0.114 * data[((y + 1) * width + (x + 1)) * 4 + 2]\n ];\n // Apply 3x3 Laplacian kernel (matches Android implementation)\n const laplacian = -neighbors[0] - neighbors[1] - neighbors[2] +\n -neighbors[3] + 8 * gray - neighbors[4] +\n -neighbors[5] - neighbors[6] - neighbors[7];\n variance += laplacian * laplacian;\n count++;\n }\n }\n const blurScore = count > 0 ? variance / count : 0;\n return { blurScore };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["EnumResolution","registerPlugin","CameraEnhancer","WebPlugin"],"mappings":"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IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzK,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzK,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACxK,iBAAiB;IACjB;IACA,gBAAgB,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAC7E,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;IAC3D,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/D,gBAAgB,QAAQ,IAAI,SAAS,GAAG,SAAS;IACjD,gBAAgB,KAAK,EAAE;IACvB;IACA;IACA,QAAQ,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,QAAQ,GAAG,KAAK,GAAG,CAAC;IAC1D,QAAQ,OAAO,EAAE,SAAS,EAAE;IAC5B;IACA;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var EnumResolution;\n(function (EnumResolution) {\n EnumResolution[EnumResolution[\"RESOLUTION_AUTO\"] = 0] = \"RESOLUTION_AUTO\";\n EnumResolution[EnumResolution[\"RESOLUTION_480P\"] = 1] = \"RESOLUTION_480P\";\n EnumResolution[EnumResolution[\"RESOLUTION_720P\"] = 2] = \"RESOLUTION_720P\";\n EnumResolution[EnumResolution[\"RESOLUTION_1080P\"] = 3] = \"RESOLUTION_1080P\";\n EnumResolution[EnumResolution[\"RESOLUTION_2K\"] = 4] = \"RESOLUTION_2K\";\n EnumResolution[EnumResolution[\"RESOLUTION_4K\"] = 5] = \"RESOLUTION_4K\";\n})(EnumResolution || (EnumResolution = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst CameraPreview = registerPlugin('CameraPreview', {\n web: () => import('./web').then(m => new m.CameraPreviewWeb()),\n});\nexport * from './definitions';\nexport { CameraPreview };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { CameraEnhancer } from 'dynamsoft-camera-enhancer';\nimport { EnumResolution } from './definitions';\nimport RecordRTC from 'recordrtc';\nCameraEnhancer.defaultUIElementURL = \"https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.3.9/dist/dce.ui.html\";\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.hasMicrophone = false;\n this.desiredJpegQuality = 0.95; // Default to high quality (0.0-1.0)\n }\n async setDefaultUIElementURL(url) {\n CameraEnhancer.defaultUIElementURL = url;\n }\n async setElement(ele) {\n this.container = ele;\n }\n saveFrame() {\n throw new Error('Method not implemented.');\n }\n async getOrientation() {\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n if (portrait.matches) {\n return { orientation: \"PORTRAIT\" };\n }\n else {\n return { orientation: \"LANDSCAPE\" };\n }\n }\n async initialize(options) {\n // Get quality parameter from initialization, default to 95% if not specified\n if ((options === null || options === void 0 ? void 0 : options.quality) !== undefined) {\n this.desiredJpegQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n console.log(`Camera initialized with JPEG quality: ${this.desiredJpegQuality}`);\n }\n this.camera = await CameraEnhancer.createInstance();\n this.camera.on(\"played\", (playCallBackInfo) => {\n this.notifyListeners(\"onPlayed\", { resolution: playCallBackInfo.width + \"x\" + playCallBackInfo.height });\n try {\n let canvas = this.camera.getUIElement().getElementsByClassName(\"dce-video-container\")[0].getElementsByTagName(\"canvas\")[0];\n if (canvas) {\n canvas.remove();\n }\n }\n catch (error) {\n console.log(error);\n }\n });\n if (this.container) {\n await this.camera.setUIElement(this.container);\n }\n else {\n await this.camera.setUIElement(CameraEnhancer.defaultUIElementURL);\n this.camera.getUIElement().getElementsByClassName(\"dce-btn-close\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-camera\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-resolution\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-msg-poweredby\")[0].remove();\n }\n this.camera.setVideoFit(\"cover\");\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n portrait.addEventListener(\"change\", () => {\n this.notifyListeners(\"onOrientationChanged\", null);\n });\n }\n async getResolution() {\n if (this.camera) {\n let rsl = this.camera.getResolution();\n let resolution = rsl[0] + \"x\" + rsl[1];\n return { resolution: resolution };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setResolution(options) {\n if (this.camera) {\n let res = options.resolution;\n let width = 1280;\n let height = 720;\n if (res == EnumResolution.RESOLUTION_480P) {\n width = 640;\n height = 480;\n }\n else if (res == EnumResolution.RESOLUTION_720P) {\n width = 1280;\n height = 720;\n }\n else if (res == EnumResolution.RESOLUTION_1080P) {\n width = 1920;\n height = 1080;\n }\n else if (res == EnumResolution.RESOLUTION_2K) {\n width = 2560;\n height = 1440;\n }\n else if (res == EnumResolution.RESOLUTION_4K) {\n width = 3840;\n height = 2160;\n }\n await this.camera.setResolution(width, height);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getAllCameras() {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n let labels = [];\n cameras.forEach(camera => {\n labels.push(camera.label);\n });\n return { cameras: labels };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getSelectedCamera() {\n if (this.camera) {\n let cameraInfo = this.camera.getSelectedCamera();\n return { selectedCamera: cameraInfo.label };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async selectCamera(options) {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n for (let index = 0; index < cameras.length; index++) {\n const camera = cameras[index];\n if (camera.label === options.cameraID) {\n await this.camera.selectCamera(camera);\n return;\n }\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setScanRegion(options) {\n if (this.camera) {\n this.region = options.region;\n this.applyScanRegion();\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n applyScanRegion() {\n if (this.camera && this.region) {\n this.camera.setScanRegion({\n regionLeft: this.region.left,\n regionTop: this.region.top,\n regionRight: this.region.right,\n regionBottom: this.region.bottom,\n regionMeasuredByPercentage: this.region.measuredByPercentage\n });\n }\n }\n async setZoom(options) {\n if (this.camera) {\n await this.camera.setZoom(options.factor);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setFocus(options) {\n if (this.camera) {\n this.camera.setFocus({\n mode: \"manual\",\n area: {\n centerPoint: { x: options.x.toString(), y: options.y.toString() }\n }\n });\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async toggleTorch(options) {\n if (this.camera) {\n try {\n if (options[\"on\"]) {\n await this.camera.turnOnTorch();\n }\n else {\n await this.camera.turnOffTorch();\n }\n }\n catch (e) {\n throw new Error(\"Torch unsupported\");\n }\n }\n }\n async startCamera() {\n var _a;\n if (this.camera) {\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.open(true));\n if (this.container && this.isSafari() === true) {\n const resetZoom = async () => {\n var _a, _b;\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.setZoom(1.001));\n await ((_b = this.camera) === null || _b === void 0 ? void 0 : _b.setZoom(1.0));\n };\n setTimeout(resetZoom, 500);\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n isSafari() {\n const u = navigator.userAgent.toLowerCase();\n if (u.indexOf('safari') > -1 && u.indexOf('chrome') === -1) {\n return true;\n }\n else {\n return false;\n }\n }\n async stopCamera() {\n if (this.camera) {\n this.camera.close(true);\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async isOpen() {\n if (this.camera) {\n return { isOpen: this.camera.isOpen() };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async takeSnapshot(options) {\n if (this.camera) {\n let desiredQuality = this.desiredJpegQuality;\n if ((options === null || options === void 0 ? void 0 : options.quality) !== undefined) {\n desiredQuality = Math.max(1, Math.min(100, options.quality)) / 100.0;\n }\n let canvas = this.camera.getFrame().toCanvas();\n let dataURL = canvas.toDataURL('image/jpeg', desiredQuality);\n let base64 = dataURL.replace(\"data:image/jpeg;base64,\", \"\");\n // Only perform blur detection if checkBlur option is true\n if ((options === null || options === void 0 ? void 0 : options.checkBlur) === true) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n confidence: Math.max(0, Math.min(1, blurResult.blurScore / 300))\n };\n }\n }\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async detectBlur(options) {\n try {\n // Create image element from base64\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.onload = () => {\n try {\n // Create canvas to extract image data\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n reject(new Error('Cannot create canvas context'));\n return;\n }\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n // Get image data\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n // Convert blur score to confidence values\n // Higher blurScore means sharper image\n const normalizedScore = Math.max(0, Math.min(1, blurResult.blurScore / 300)); // Normalize to 0-1\n const sharpConfidence = normalizedScore;\n const blurConfidence = 1 - normalizedScore;\n const isBlur = blurResult.blurScore < 150;\n resolve({\n isBlur: isBlur,\n blurConfidence: blurConfidence,\n sharpConfidence: sharpConfidence\n });\n }\n catch (error) {\n reject(error);\n }\n };\n img.onerror = () => {\n reject(new Error('Failed to load image'));\n };\n // Handle both data URLs and base64 strings\n if (options.image.startsWith('data:')) {\n img.src = options.image;\n }\n else {\n img.src = `data:image/jpeg;base64,${options.image}`;\n }\n });\n }\n catch (error) {\n throw new Error(`Failed to detect blur: ${error}`);\n }\n }\n async takeSnapshot2(options) {\n if (this.camera) {\n let canvas = options.canvas;\n let scaleRatio = 1.0;\n if (options && options.maxLength) {\n let res = (await this.getResolution()).resolution;\n let width = parseInt(res.split(\"x\")[0]);\n let height = parseInt(res.split(\"x\")[1]);\n let targetWidth = width;\n let targetHeight = height;\n if (width > options.maxLength || height > options.maxLength) {\n if (width > height) {\n targetWidth = options.maxLength;\n targetHeight = options.maxLength / width * height;\n scaleRatio = options.maxLength / width;\n }\n else {\n targetHeight = options.maxLength;\n targetWidth = options.maxLength / height * width;\n scaleRatio = options.maxLength / height;\n }\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, targetWidth, targetHeight);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n return { scaleRatio: scaleRatio };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n drawFullFrame(canvas) {\n var _a;\n let video = (_a = this.camera) === null || _a === void 0 ? void 0 : _a.getUIElement().getElementsByTagName(\"video\")[0];\n if (video) {\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n async takePhoto(_options) {\n if (this.camera) {\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let localStream = video.srcObject;\n if (localStream) {\n if (\"ImageCapture\" in window) {\n try {\n //@ts-ignore \n let ImageCapture = window[\"ImageCapture\"];\n console.log(\"ImageCapture supported\");\n const track = localStream.getVideoTracks()[0];\n let imageCapture = new ImageCapture(track);\n let blob = await imageCapture.takePhoto();\n return { blob: blob };\n }\n catch (error) {\n console.log(error);\n }\n }\n else {\n console.log(\"ImageCapture not supported\");\n }\n }\n this.camera.setScanRegion({\n regionLeft: 0,\n regionTop: 0,\n regionBottom: 100,\n regionRight: 100,\n regionMeasuredByPercentage: 1\n });\n let canvas = this.camera.getFrame().toCanvas();\n let base64 = this.removeDataURLHead(canvas.toDataURL(\"image/jpeg\", this.desiredJpegQuality));\n this.applyScanRegion();\n // Add blur detection if base64 is included\n if (_options === null || _options === void 0 ? void 0 : _options.includeBase64) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const blurResult = this.detectBlurWeb(imageData, canvas.width, canvas.height);\n return {\n base64: base64,\n blurScore: blurResult.blurScore\n };\n }\n }\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n removeDataURLHead(dataURL) {\n return dataURL.substring(dataURL.indexOf(\",\") + 1, dataURL.length);\n }\n async requestCameraPermission() {\n const constraints = { video: true, audio: false };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n }\n async requestMicroPhonePermission() {\n try {\n const constraints = { video: false, audio: true };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n this.hasMicrophone = true;\n }\n catch (error) {\n this.hasMicrophone = false;\n throw error;\n }\n }\n async startRecording() {\n if (this.camera) {\n if (this.hasMicrophone) {\n let settings = this.camera.getVideoSettings();\n settings.audio = true;\n await this.camera.updateVideoSettings(settings);\n }\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n this.recorder = new RecordRTC(video.srcObject, {\n type: 'video'\n });\n this.recorder.startRecording();\n }\n else {\n throw new Error(\"camera not initialized\");\n }\n }\n async stopRecording() {\n return new Promise((resolve, reject) => {\n if (this.recorder) {\n const stopRecordingCallback = () => {\n let blob = this.recorder.getBlob();\n this.recorder.destroy();\n this.recorder = null;\n resolve({ blob });\n };\n this.recorder.stopRecording(stopRecordingCallback);\n }\n else {\n reject(\"recorder not initialized\");\n }\n });\n }\n async setLayout(options) {\n if (this.camera) {\n let ele = this.camera.getUIElement();\n if (options.top) {\n ele.style.top = options.top;\n }\n if (options.left) {\n ele.style.left = options.left;\n }\n if (options.width) {\n ele.style.width = options.width;\n }\n if (options.height) {\n ele.style.height = options.height;\n }\n ele.style.position = \"absolute\";\n }\n else {\n throw new Error(\"Camera not initialized\");\n }\n }\n /**\n * Detect blur using Laplacian variance algorithm (same as iOS/Android)\n * Higher values indicate sharper images\n */\n detectBlurWeb(imageData, width, height) {\n const data = imageData.data;\n let variance = 0;\n let count = 0;\n // Sample every 4th pixel for performance (similar to Android implementation)\n const step = 4;\n for (let y = step; y < height - step; y += step) {\n for (let x = step; x < width - step; x += step) {\n const idx = (y * width + x) * 4;\n // Convert to grayscale using same formula as Android\n const gray = 0.299 * data[idx] + 0.587 * data[idx + 1] + 0.114 * data[idx + 2];\n // Calculate neighbors for 3x3 Laplacian kernel\n const neighbors = [\n 0.299 * data[((y - 1) * width + (x - 1)) * 4] + 0.587 * data[((y - 1) * width + (x - 1)) * 4 + 1] + 0.114 * data[((y - 1) * width + (x - 1)) * 4 + 2],\n 0.299 * data[((y - 1) * width + x) * 4] + 0.587 * data[((y - 1) * width + x) * 4 + 1] + 0.114 * data[((y - 1) * width + x) * 4 + 2],\n 0.299 * data[((y - 1) * width + (x + 1)) * 4] + 0.587 * data[((y - 1) * width + (x + 1)) * 4 + 1] + 0.114 * data[((y - 1) * width + (x + 1)) * 4 + 2],\n 0.299 * data[(y * width + (x - 1)) * 4] + 0.587 * data[(y * width + (x - 1)) * 4 + 1] + 0.114 * data[(y * width + (x - 1)) * 4 + 2],\n 0.299 * data[(y * width + (x + 1)) * 4] + 0.587 * data[(y * width + (x + 1)) * 4 + 1] + 0.114 * data[(y * width + (x + 1)) * 4 + 2],\n 0.299 * data[((y + 1) * width + (x - 1)) * 4] + 0.587 * data[((y + 1) * width + (x - 1)) * 4 + 1] + 0.114 * data[((y + 1) * width + (x - 1)) * 4 + 2],\n 0.299 * data[((y + 1) * width + x) * 4] + 0.587 * data[((y + 1) * width + x) * 4 + 1] + 0.114 * data[((y + 1) * width + x) * 4 + 2],\n 0.299 * data[((y + 1) * width + (x + 1)) * 4] + 0.587 * data[((y + 1) * width + (x + 1)) * 4 + 1] + 0.114 * data[((y + 1) * width + (x + 1)) * 4 + 2]\n ];\n // Apply 3x3 Laplacian kernel (matches Android implementation)\n const laplacian = -neighbors[0] - neighbors[1] - neighbors[2] +\n -neighbors[3] + 8 * gray - neighbors[4] +\n -neighbors[5] - neighbors[6] - neighbors[7];\n variance += laplacian * laplacian;\n count++;\n }\n }\n const blurScore = count > 0 ? variance / count : 0;\n return { blurScore };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["EnumResolution","registerPlugin","CameraEnhancer","WebPlugin"],"mappings":"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CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzK,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzK,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvJ,oBAAoB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACxK,iBAAiB;IACjB;IACA,gBAAgB,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAC7E,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;IAC3D,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/D,gBAAgB,QAAQ,IAAI,SAAS,GAAG,SAAS;IACjD,gBAAgB,KAAK,EAAE;IACvB;IACA;IACA,QAAQ,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,QAAQ,GAAG,KAAK,GAAG,CAAC;IAC1D,QAAQ,OAAO,EAAE,SAAS,EAAE;IAC5B;IACA;;;;;;;;;;;;;;;"}
|
|
@@ -442,9 +442,10 @@ public class CameraPreviewPlugin: CAPPlugin, AVCaptureVideoDataOutputSampleBuffe
|
|
|
442
442
|
ret["base64"] = base64
|
|
443
443
|
|
|
444
444
|
// Detect blur if base64 is included
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
445
|
+
// Detect blur if base64 is included
|
|
446
|
+
let confidence = calculateBlurConfidence(image: image!)
|
|
447
|
+
ret["confidence"] = confidence
|
|
448
|
+
print("Blur detection - Confidence: \(confidence)")
|
|
448
449
|
}
|
|
449
450
|
do {
|
|
450
451
|
|
|
@@ -512,9 +513,9 @@ public class CameraPreviewPlugin: CAPPlugin, AVCaptureVideoDataOutputSampleBuffe
|
|
|
512
513
|
// Only detect blur if checkBlur option is true
|
|
513
514
|
let shouldCheckBlur = takeSnapshotCall.getBool("checkBlur", false)
|
|
514
515
|
if shouldCheckBlur {
|
|
515
|
-
let
|
|
516
|
-
ret["
|
|
517
|
-
print("Blur detection -
|
|
516
|
+
let confidence = calculateBlurConfidence(image: normalized)
|
|
517
|
+
ret["confidence"] = confidence
|
|
518
|
+
print("Blur detection - Confidence: \(confidence)")
|
|
518
519
|
} else {
|
|
519
520
|
print("Blur detection disabled for performance")
|
|
520
521
|
}
|
|
@@ -1302,6 +1303,24 @@ public class CameraPreviewPlugin: CAPPlugin, AVCaptureVideoDataOutputSampleBuffe
|
|
|
1302
1303
|
return laplacianScore < 50
|
|
1303
1304
|
}
|
|
1304
1305
|
}
|
|
1306
|
+
|
|
1307
|
+
/**
|
|
1308
|
+
* Calculate blur confidence score (0-1 where 1 is sharp, 0 is blurry)
|
|
1309
|
+
*/
|
|
1310
|
+
private func calculateBlurConfidence(image: UIImage) -> Double {
|
|
1311
|
+
// Use TFLite model if available for detailed confidence
|
|
1312
|
+
if let helper = blurDetectionHelper, helper.getIsInitialized() {
|
|
1313
|
+
let result = helper.detectBlurWithConfidence(image: image)
|
|
1314
|
+
if let blurConfidence = result["blurConfidence"] as? Double {
|
|
1315
|
+
return blurConfidence
|
|
1316
|
+
}
|
|
1317
|
+
}
|
|
1318
|
+
|
|
1319
|
+
// Fallback to Laplacian algorithm with confidence calculation
|
|
1320
|
+
let laplacianScore = calculateLaplacianBlurScore(image: image)
|
|
1321
|
+
// Normalize to 0-1 range (higher score = sharper image)
|
|
1322
|
+
return max(0.0, min(1.0, laplacianScore / 300.0))
|
|
1323
|
+
}
|
|
1305
1324
|
|
|
1306
1325
|
// Original Laplacian blur detection (fallback)
|
|
1307
1326
|
private func calculateLaplacianBlurScore(image: UIImage) -> Double {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/package.json
CHANGED