@souscheflabs/ml-vision 0.1.0 → 0.1.2
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/CHANGELOG.md +54 -0
- package/LICENSE +15 -0
- package/README.md +50 -5
- package/dist/{components → cjs/components}/DetectionOverlay.js +1 -0
- package/dist/cjs/components/DetectionOverlay.js.map +1 -0
- package/dist/{components → cjs/components}/index.js +1 -0
- package/dist/cjs/components/index.js.map +1 -0
- package/dist/{core → cjs/core}/CacheManager.js +1 -0
- package/dist/cjs/core/CacheManager.js.map +1 -0
- package/dist/{core → cjs/core}/MLVisionProvider.js +4 -2
- package/dist/cjs/core/MLVisionProvider.js.map +1 -0
- package/dist/{core → cjs/core}/ServerClient.js +33 -13
- package/dist/cjs/core/ServerClient.js.map +1 -0
- package/dist/{core → cjs/core}/index.js +1 -0
- package/dist/cjs/core/index.js.map +1 -0
- package/dist/{hooks → cjs/hooks}/classLabels.js +1 -0
- package/dist/cjs/hooks/classLabels.js.map +1 -0
- package/dist/{hooks → cjs/hooks}/classLabelsCoco.js +1 -0
- package/dist/cjs/hooks/classLabelsCoco.js.map +1 -0
- package/dist/{hooks → cjs/hooks}/index.js +1 -0
- package/dist/cjs/hooks/index.js.map +1 -0
- package/dist/{hooks → cjs/hooks}/useMultiBarcodeScanner.js +6 -3
- package/dist/cjs/hooks/useMultiBarcodeScanner.js.map +1 -0
- package/dist/{hooks → cjs/hooks}/useProductDetector.js +161 -90
- package/dist/cjs/hooks/useProductDetector.js.map +1 -0
- package/dist/{hooks → cjs/hooks}/useReceiptScanner.js +60 -52
- package/dist/cjs/hooks/useReceiptScanner.js.map +1 -0
- package/dist/{hooks → cjs/hooks}/useVideoScanner.js +8 -5
- package/dist/cjs/hooks/useVideoScanner.js.map +1 -0
- package/dist/{index.js → cjs/index.js} +8 -4
- package/dist/cjs/index.js.map +1 -0
- package/dist/{processors → cjs/processors}/detectionProcessor.js +1 -0
- package/dist/cjs/processors/detectionProcessor.js.map +1 -0
- package/dist/{processors → cjs/processors}/index.js +1 -0
- package/dist/cjs/processors/index.js.map +1 -0
- package/dist/{processors → cjs/processors}/tfliteFrameProcessor.js +108 -25
- package/dist/cjs/processors/tfliteFrameProcessor.js.map +1 -0
- package/dist/{types → cjs/types}/barcode.js +1 -0
- package/dist/cjs/types/barcode.js.map +1 -0
- package/dist/{types → cjs/types}/detection.js +1 -0
- package/dist/cjs/types/detection.js.map +1 -0
- package/dist/{types → cjs/types}/index.js +1 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/{types → cjs/types}/ocr.js +1 -0
- package/dist/cjs/types/ocr.js.map +1 -0
- package/dist/{utils → cjs/utils}/imagePreprocessor.js +30 -25
- package/dist/cjs/utils/imagePreprocessor.js.map +1 -0
- package/dist/cjs/utils/logger.js +99 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/{utils → cjs/utils}/yoloProcessor.js +1 -0
- package/dist/cjs/utils/yoloProcessor.js.map +1 -0
- package/dist/esm/components/DetectionOverlay.js +130 -0
- package/dist/esm/components/DetectionOverlay.js.map +1 -0
- package/dist/esm/components/index.js +5 -0
- package/dist/esm/components/index.js.map +1 -0
- package/dist/esm/core/CacheManager.js +327 -0
- package/dist/esm/core/CacheManager.js.map +1 -0
- package/dist/esm/core/MLVisionProvider.js +185 -0
- package/dist/esm/core/MLVisionProvider.js.map +1 -0
- package/dist/esm/core/ServerClient.js +305 -0
- package/dist/esm/core/ServerClient.js.map +1 -0
- package/dist/esm/core/index.js +7 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/hooks/classLabels.js +436 -0
- package/dist/esm/hooks/classLabels.js.map +1 -0
- package/dist/esm/hooks/classLabelsCoco.js +98 -0
- package/dist/esm/hooks/classLabelsCoco.js.map +1 -0
- package/dist/esm/hooks/index.js +9 -0
- package/dist/esm/hooks/index.js.map +1 -0
- package/dist/esm/hooks/useMultiBarcodeScanner.js +290 -0
- package/dist/esm/hooks/useMultiBarcodeScanner.js.map +1 -0
- package/dist/esm/hooks/useProductDetector.js +714 -0
- package/dist/esm/hooks/useProductDetector.js.map +1 -0
- package/dist/esm/hooks/useReceiptScanner.js +407 -0
- package/dist/esm/hooks/useReceiptScanner.js.map +1 -0
- package/dist/esm/hooks/useVideoScanner.js +383 -0
- package/dist/esm/hooks/useVideoScanner.js.map +1 -0
- package/dist/esm/index.js +93 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/processors/detectionProcessor.js +121 -0
- package/dist/esm/processors/detectionProcessor.js.map +1 -0
- package/dist/esm/processors/index.js +7 -0
- package/dist/esm/processors/index.js.map +1 -0
- package/dist/esm/processors/tfliteFrameProcessor.js +292 -0
- package/dist/esm/processors/tfliteFrameProcessor.js.map +1 -0
- package/dist/esm/types/barcode.js +17 -0
- package/dist/esm/types/barcode.js.map +1 -0
- package/dist/esm/types/detection.js +8 -0
- package/dist/esm/types/detection.js.map +1 -0
- package/dist/esm/types/index.js +10 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/ocr.js +8 -0
- package/dist/esm/types/ocr.js.map +1 -0
- package/dist/esm/utils/imagePreprocessor.js +268 -0
- package/dist/esm/utils/imagePreprocessor.js.map +1 -0
- package/dist/esm/utils/logger.js +94 -0
- package/dist/esm/utils/logger.js.map +1 -0
- package/dist/esm/utils/yoloProcessor.js +151 -0
- package/dist/esm/utils/yoloProcessor.js.map +1 -0
- package/dist/{components → types/components}/DetectionOverlay.d.ts +1 -0
- package/dist/types/components/DetectionOverlay.d.ts.map +1 -0
- package/dist/{components → types/components}/index.d.ts +1 -0
- package/dist/types/components/index.d.ts.map +1 -0
- package/dist/{core → types/core}/CacheManager.d.ts +1 -0
- package/dist/types/core/CacheManager.d.ts.map +1 -0
- package/dist/{core → types/core}/MLVisionProvider.d.ts +1 -0
- package/dist/types/core/MLVisionProvider.d.ts.map +1 -0
- package/dist/{core → types/core}/ServerClient.d.ts +1 -0
- package/dist/types/core/ServerClient.d.ts.map +1 -0
- package/dist/{core → types/core}/index.d.ts +1 -0
- package/dist/types/core/index.d.ts.map +1 -0
- package/dist/{hooks → types/hooks}/classLabels.d.ts +1 -0
- package/dist/types/hooks/classLabels.d.ts.map +1 -0
- package/dist/{hooks → types/hooks}/classLabelsCoco.d.ts +1 -0
- package/dist/types/hooks/classLabelsCoco.d.ts.map +1 -0
- package/dist/{hooks → types/hooks}/index.d.ts +1 -0
- package/dist/types/hooks/index.d.ts.map +1 -0
- package/dist/{hooks → types/hooks}/useMultiBarcodeScanner.d.ts +1 -0
- package/dist/types/hooks/useMultiBarcodeScanner.d.ts.map +1 -0
- package/dist/{hooks → types/hooks}/useProductDetector.d.ts +1 -0
- package/dist/types/hooks/useProductDetector.d.ts.map +1 -0
- package/dist/{hooks → types/hooks}/useReceiptScanner.d.ts +2 -1
- package/dist/types/hooks/useReceiptScanner.d.ts.map +1 -0
- package/dist/{hooks → types/hooks}/useVideoScanner.d.ts +1 -0
- package/dist/types/hooks/useVideoScanner.d.ts.map +1 -0
- package/dist/types/index.d.ts +58 -124
- package/dist/types/index.d.ts.map +1 -0
- package/dist/{processors → types/processors}/detectionProcessor.d.ts +1 -0
- package/dist/types/processors/detectionProcessor.d.ts.map +1 -0
- package/dist/{processors → types/processors}/index.d.ts +1 -0
- package/dist/types/processors/index.d.ts.map +1 -0
- package/dist/{processors → types/processors}/tfliteFrameProcessor.d.ts +5 -4
- package/dist/types/processors/tfliteFrameProcessor.d.ts.map +1 -0
- package/dist/types/{barcode.d.ts → types/barcode.d.ts} +1 -0
- package/dist/types/types/barcode.d.ts.map +1 -0
- package/dist/types/{detection.d.ts → types/detection.d.ts} +1 -0
- package/dist/types/types/detection.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +127 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/{ocr.d.ts → types/ocr.d.ts} +1 -0
- package/dist/types/types/ocr.d.ts.map +1 -0
- package/dist/{utils → types/utils}/imagePreprocessor.d.ts +1 -0
- package/dist/types/utils/imagePreprocessor.d.ts.map +1 -0
- package/dist/types/utils/logger.d.ts +52 -0
- package/dist/types/utils/logger.d.ts.map +1 -0
- package/dist/{utils → types/utils}/yoloProcessor.d.ts +1 -0
- package/dist/types/utils/yoloProcessor.d.ts.map +1 -0
- package/package.json +62 -21
- package/dist/index.d.ts +0 -58
|
@@ -17,29 +17,98 @@ const react_1 = require("react");
|
|
|
17
17
|
const react_native_reanimated_1 = require("react-native-reanimated");
|
|
18
18
|
const react_native_worklets_core_1 = require("react-native-worklets-core");
|
|
19
19
|
const vision_camera_resize_plugin_1 = require("vision-camera-resize-plugin");
|
|
20
|
+
const logger_1 = require("../utils/logger");
|
|
20
21
|
// COCO food class indices
|
|
21
22
|
const COCO_FOOD_INDICES = new Set([46, 47, 48, 49, 50, 51, 52, 53, 54, 55]);
|
|
22
23
|
// COCO class names
|
|
23
24
|
const COCO_LABELS = [
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
25
|
+
"person",
|
|
26
|
+
"bicycle",
|
|
27
|
+
"car",
|
|
28
|
+
"motorcycle",
|
|
29
|
+
"airplane",
|
|
30
|
+
"bus",
|
|
31
|
+
"train",
|
|
32
|
+
"truck",
|
|
33
|
+
"boat",
|
|
34
|
+
"traffic light",
|
|
35
|
+
"fire hydrant",
|
|
36
|
+
"stop sign",
|
|
37
|
+
"parking meter",
|
|
38
|
+
"bench",
|
|
39
|
+
"bird",
|
|
40
|
+
"cat",
|
|
41
|
+
"dog",
|
|
42
|
+
"horse",
|
|
43
|
+
"sheep",
|
|
44
|
+
"cow",
|
|
45
|
+
"elephant",
|
|
46
|
+
"bear",
|
|
47
|
+
"zebra",
|
|
48
|
+
"giraffe",
|
|
49
|
+
"backpack",
|
|
50
|
+
"umbrella",
|
|
51
|
+
"handbag",
|
|
52
|
+
"tie",
|
|
53
|
+
"suitcase",
|
|
54
|
+
"frisbee",
|
|
55
|
+
"skis",
|
|
56
|
+
"snowboard",
|
|
57
|
+
"sports ball",
|
|
58
|
+
"kite",
|
|
59
|
+
"baseball bat",
|
|
60
|
+
"baseball glove",
|
|
61
|
+
"skateboard",
|
|
62
|
+
"surfboard",
|
|
63
|
+
"tennis racket",
|
|
64
|
+
"bottle",
|
|
65
|
+
"wine glass",
|
|
66
|
+
"cup",
|
|
67
|
+
"fork",
|
|
68
|
+
"knife",
|
|
69
|
+
"spoon",
|
|
70
|
+
"bowl",
|
|
71
|
+
"banana",
|
|
72
|
+
"apple",
|
|
73
|
+
"sandwich",
|
|
74
|
+
"orange",
|
|
75
|
+
"broccoli",
|
|
76
|
+
"carrot",
|
|
77
|
+
"hot dog",
|
|
78
|
+
"pizza",
|
|
79
|
+
"donut",
|
|
80
|
+
"cake",
|
|
81
|
+
"chair",
|
|
82
|
+
"couch",
|
|
83
|
+
"potted plant",
|
|
84
|
+
"bed",
|
|
85
|
+
"dining table",
|
|
86
|
+
"toilet",
|
|
87
|
+
"tv",
|
|
88
|
+
"laptop",
|
|
89
|
+
"mouse",
|
|
90
|
+
"remote",
|
|
91
|
+
"keyboard",
|
|
92
|
+
"cell phone",
|
|
93
|
+
"microwave",
|
|
94
|
+
"oven",
|
|
95
|
+
"toaster",
|
|
96
|
+
"sink",
|
|
97
|
+
"refrigerator",
|
|
98
|
+
"book",
|
|
99
|
+
"clock",
|
|
100
|
+
"vase",
|
|
101
|
+
"scissors",
|
|
102
|
+
"teddy bear",
|
|
103
|
+
"hair drier",
|
|
104
|
+
"toothbrush",
|
|
36
105
|
];
|
|
37
106
|
/**
|
|
38
107
|
* Process YOLOv8 output in worklet (simplified for worklet compatibility)
|
|
39
108
|
* This runs synchronously in the frame processor thread
|
|
40
109
|
*/
|
|
41
110
|
function processYoloOutputWorklet(output, numClasses, confThreshold, _iouThreshold, labels, foodOnly) {
|
|
42
|
-
|
|
111
|
+
"worklet";
|
|
43
112
|
const data = new Float32Array(output);
|
|
44
113
|
const numPredictions = 8400;
|
|
45
114
|
const detections = [];
|
|
@@ -115,7 +184,7 @@ function useTFLiteFrameProcessor(options) {
|
|
|
115
184
|
const { resize } = (0, vision_camera_resize_plugin_1.useResizePlugin)();
|
|
116
185
|
// Log state on mount and when model changes
|
|
117
186
|
(0, react_1.useEffect)(() => {
|
|
118
|
-
|
|
187
|
+
logger_1.logger.debug("[TFLiteFrameProcessor] Hook state:", {
|
|
119
188
|
model: !!model,
|
|
120
189
|
resize: !!resize,
|
|
121
190
|
});
|
|
@@ -123,21 +192,21 @@ function useTFLiteFrameProcessor(options) {
|
|
|
123
192
|
// Debug: log frame count changes
|
|
124
193
|
(0, react_1.useEffect)(() => {
|
|
125
194
|
if (frameCount > 0) {
|
|
126
|
-
|
|
195
|
+
logger_1.logger.debug(`[TFLiteFrameProcessor] Processed ${frameCount} frames`);
|
|
127
196
|
}
|
|
128
197
|
}, [frameCount]);
|
|
129
198
|
// Helper to log from worklet
|
|
130
199
|
const logFromWorklet = (0, react_1.useCallback)((msg) => {
|
|
131
|
-
|
|
200
|
+
logger_1.logger.debug(msg);
|
|
132
201
|
}, []);
|
|
133
202
|
const incrementFrameCount = (0, react_1.useCallback)(() => {
|
|
134
|
-
setFrameCount(prev => prev + 1);
|
|
203
|
+
setFrameCount((prev) => prev + 1);
|
|
135
204
|
}, []);
|
|
136
205
|
// Create frame processor
|
|
137
206
|
const frameProcessor = (0, react_1.useCallback)((frame) => {
|
|
138
|
-
|
|
207
|
+
"worklet";
|
|
139
208
|
if (!model) {
|
|
140
|
-
react_native_worklets_core_1.Worklets.runOnJS(() => logFromWorklet(
|
|
209
|
+
react_native_worklets_core_1.Worklets.runOnJS(() => logFromWorklet("[TFLiteFrameProcessor] No model"));
|
|
141
210
|
return;
|
|
142
211
|
}
|
|
143
212
|
// Throttle to ~10fps for processing
|
|
@@ -154,8 +223,8 @@ function useTFLiteFrameProcessor(options) {
|
|
|
154
223
|
width: inputSize,
|
|
155
224
|
height: inputSize,
|
|
156
225
|
},
|
|
157
|
-
pixelFormat:
|
|
158
|
-
dataType:
|
|
226
|
+
pixelFormat: "rgb",
|
|
227
|
+
dataType: "float32",
|
|
159
228
|
});
|
|
160
229
|
// Run TFLite inference synchronously in worklet
|
|
161
230
|
const outputs = model.runSync([resized]);
|
|
@@ -174,7 +243,20 @@ function useTFLiteFrameProcessor(options) {
|
|
|
174
243
|
catch (error) {
|
|
175
244
|
react_native_worklets_core_1.Worklets.runOnJS(() => logFromWorklet(`[TFLiteFrameProcessor] Error: ${error}`));
|
|
176
245
|
}
|
|
177
|
-
}, [
|
|
246
|
+
}, [
|
|
247
|
+
model,
|
|
248
|
+
resize,
|
|
249
|
+
inputSize,
|
|
250
|
+
numClasses,
|
|
251
|
+
confThreshold,
|
|
252
|
+
iouThreshold,
|
|
253
|
+
classLabels,
|
|
254
|
+
foodOnly,
|
|
255
|
+
onDetections,
|
|
256
|
+
lastProcessTime,
|
|
257
|
+
logFromWorklet,
|
|
258
|
+
incrementFrameCount,
|
|
259
|
+
]);
|
|
178
260
|
return {
|
|
179
261
|
frameProcessor: model ? frameProcessor : undefined,
|
|
180
262
|
detections,
|
|
@@ -197,12 +279,12 @@ function useTFLiteFrameProcessor(options) {
|
|
|
197
279
|
function createTFLiteFrameProcessor(model, resizeFn, options = {}) {
|
|
198
280
|
const { inputSize = 640, numClasses = 80, confThreshold = 0.25, classLabels = COCO_LABELS, foodOnly = false, } = options;
|
|
199
281
|
return (frame) => {
|
|
200
|
-
|
|
282
|
+
"worklet";
|
|
201
283
|
// Resize to model input
|
|
202
284
|
const resized = resizeFn(frame, {
|
|
203
285
|
scale: { width: inputSize, height: inputSize },
|
|
204
|
-
pixelFormat:
|
|
205
|
-
dataType:
|
|
286
|
+
pixelFormat: "rgb",
|
|
287
|
+
dataType: "float32",
|
|
206
288
|
});
|
|
207
289
|
// Run inference
|
|
208
290
|
const outputs = model.runSync([resized]);
|
|
@@ -211,3 +293,4 @@ function createTFLiteFrameProcessor(model, resizeFn, options = {}) {
|
|
|
211
293
|
return processYoloOutputWorklet(outputData.buffer ?? outputs[0], numClasses, confThreshold, 0.45, classLabels, foodOnly);
|
|
212
294
|
};
|
|
213
295
|
}
|
|
296
|
+
//# sourceMappingURL=tfliteFrameProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tfliteFrameProcessor.js","sourceRoot":"","sources":["../../../src/processors/tfliteFrameProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"barcode.js","sourceRoot":"","sources":["../../../src/types/barcode.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AA2BH;;GAEG;AACU,QAAA,uBAAuB,GAAoB;IACtD,QAAQ;IACR,OAAO;IACP,OAAO;IACP,OAAO;IACP,IAAI;CACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detection.js","sourceRoot":"","sources":["../../../src/types/detection.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;AAEH,4CAA0B;AAC1B,8CAA4B;AAC5B,wCAAsB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ocr.js","sourceRoot":"","sources":["../../../src/types/ocr.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
|
|
@@ -51,6 +51,7 @@ exports.isSkiaAvailable = isSkiaAvailable;
|
|
|
51
51
|
exports.initSkia = initSkia;
|
|
52
52
|
exports.isResizePluginAvailable = isResizePluginAvailable;
|
|
53
53
|
const react_native_1 = require("react-native");
|
|
54
|
+
const logger_1 = require("../utils/logger");
|
|
54
55
|
// Lazy-loaded Skia references (to avoid crashes when Skia isn't needed)
|
|
55
56
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
57
|
let SkiaModule = null;
|
|
@@ -65,14 +66,14 @@ async function loadSkiaModule() {
|
|
|
65
66
|
return SkiaModule !== null;
|
|
66
67
|
skiaLoadAttempted = true;
|
|
67
68
|
try {
|
|
68
|
-
|
|
69
|
+
logger_1.logger.debug("[imagePreprocessor] Loading Skia module...");
|
|
69
70
|
// Lazy require to avoid loading Skia when not needed (e.g., video scanner)
|
|
70
|
-
SkiaModule = require(
|
|
71
|
-
|
|
71
|
+
SkiaModule = require("@shopify/react-native-skia");
|
|
72
|
+
logger_1.logger.debug("[imagePreprocessor] Skia loaded successfully");
|
|
72
73
|
return true;
|
|
73
74
|
}
|
|
74
75
|
catch (error) {
|
|
75
|
-
|
|
76
|
+
logger_1.logger.error("[imagePreprocessor] Failed to load Skia:", error);
|
|
76
77
|
SkiaModule = null;
|
|
77
78
|
return false;
|
|
78
79
|
}
|
|
@@ -103,9 +104,9 @@ async function preprocessImage(uri, options = {}) {
|
|
|
103
104
|
// Load Skia module first (lazy loading)
|
|
104
105
|
const loaded = await loadSkiaModule();
|
|
105
106
|
if (!loaded || !checkSkiaAvailable()) {
|
|
106
|
-
throw new Error(
|
|
107
|
-
|
|
108
|
-
|
|
107
|
+
throw new Error("Image preprocessing requires @shopify/react-native-skia. " +
|
|
108
|
+
"Install with: npm install @shopify/react-native-skia\n\n" +
|
|
109
|
+
"Alternatively, use server-side inference or VisionCamera frame processor.");
|
|
109
110
|
}
|
|
110
111
|
// Get original image dimensions
|
|
111
112
|
const { width: originalWidth, height: originalHeight } = await getImageSize(uri);
|
|
@@ -127,21 +128,21 @@ async function getImageSize(uri) {
|
|
|
127
128
|
async function preprocessWithSkia(uri, originalWidth, originalHeight, targetWidth, targetHeight, normalize, letterbox) {
|
|
128
129
|
// Get Skia APIs from the lazy-loaded module
|
|
129
130
|
const { Skia, ColorType, AlphaType } = SkiaModule;
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
131
|
+
logger_1.logger.debug("[imagePreprocessor] preprocessWithSkia called");
|
|
132
|
+
logger_1.logger.debug("[imagePreprocessor] URI:", uri);
|
|
133
|
+
logger_1.logger.debug("[imagePreprocessor] Original size:", originalWidth, "x", originalHeight);
|
|
134
|
+
logger_1.logger.debug("[imagePreprocessor] Target size:", targetWidth, "x", targetHeight);
|
|
134
135
|
// Load image data using Skia's fromURI (handles file:// URIs properly)
|
|
135
|
-
|
|
136
|
+
logger_1.logger.debug("[imagePreprocessor] Loading image data with Skia.Data.fromURI...");
|
|
136
137
|
const data = await Skia.Data.fromURI(uri);
|
|
137
|
-
|
|
138
|
+
logger_1.logger.debug("[imagePreprocessor] Data loaded:", !!data);
|
|
138
139
|
// Create SkImage from encoded data
|
|
139
140
|
const image = Skia.Image.MakeImageFromEncoded(data);
|
|
140
|
-
|
|
141
|
+
logger_1.logger.debug("[imagePreprocessor] Image created:", !!image);
|
|
141
142
|
if (!image) {
|
|
142
|
-
throw new Error(
|
|
143
|
+
throw new Error("Failed to decode image with Skia. The image format may not be supported.");
|
|
143
144
|
}
|
|
144
|
-
|
|
145
|
+
logger_1.logger.debug("[imagePreprocessor] Image dimensions:", image.width(), "x", image.height());
|
|
145
146
|
// Calculate scaling and padding for letterboxing
|
|
146
147
|
let scale = { x: 1, y: 1 };
|
|
147
148
|
let padding = { x: 0, y: 0 };
|
|
@@ -154,25 +155,28 @@ async function preprocessWithSkia(uri, originalWidth, originalHeight, targetWidt
|
|
|
154
155
|
};
|
|
155
156
|
}
|
|
156
157
|
else {
|
|
157
|
-
scale = {
|
|
158
|
+
scale = {
|
|
159
|
+
x: targetWidth / originalWidth,
|
|
160
|
+
y: targetHeight / originalHeight,
|
|
161
|
+
};
|
|
158
162
|
}
|
|
159
163
|
// Create a surface to draw the resized image
|
|
160
|
-
|
|
164
|
+
logger_1.logger.debug("[imagePreprocessor] Creating surface...");
|
|
161
165
|
const surface = Skia.Surface.Make(targetWidth, targetHeight);
|
|
162
166
|
if (!surface) {
|
|
163
|
-
throw new Error(
|
|
167
|
+
throw new Error("Failed to create Skia surface. This may happen on devices without GPU support.");
|
|
164
168
|
}
|
|
165
169
|
const canvas = surface.getCanvas();
|
|
166
170
|
// Fill with gray (letterbox padding color) - Skia.Color takes a color string
|
|
167
171
|
if (letterbox) {
|
|
168
|
-
canvas.clear(Skia.Color(
|
|
172
|
+
canvas.clear(Skia.Color("gray"));
|
|
169
173
|
}
|
|
170
174
|
// Draw the resized image
|
|
171
175
|
const srcRect = Skia.XYWHRect(0, 0, originalWidth, originalHeight);
|
|
172
176
|
const dstRect = Skia.XYWHRect(padding.x, padding.y, originalWidth * scale.x, originalHeight * scale.y);
|
|
173
177
|
canvas.drawImageRect(image, srcRect, dstRect, Skia.Paint());
|
|
174
178
|
// Get pixel data from the snapshot
|
|
175
|
-
|
|
179
|
+
logger_1.logger.debug("[imagePreprocessor] Reading pixels...");
|
|
176
180
|
const snapshot = surface.makeImageSnapshot();
|
|
177
181
|
// readPixels returns Uint8Array directly in newer Skia versions
|
|
178
182
|
// ColorType and AlphaType are separate exports from @shopify/react-native-skia
|
|
@@ -183,9 +187,9 @@ async function preprocessWithSkia(uri, originalWidth, originalHeight, targetWidt
|
|
|
183
187
|
alphaType: AlphaType.Unpremul,
|
|
184
188
|
});
|
|
185
189
|
if (!pixels) {
|
|
186
|
-
throw new Error(
|
|
190
|
+
throw new Error("Failed to read pixels from Skia image");
|
|
187
191
|
}
|
|
188
|
-
|
|
192
|
+
logger_1.logger.debug("[imagePreprocessor] Pixels read, length:", pixels.length);
|
|
189
193
|
// Convert RGBA Uint8Array to RGB Float32Array
|
|
190
194
|
const rgbData = new Float32Array(targetWidth * targetHeight * 3);
|
|
191
195
|
for (let i = 0, j = 0; i < pixels.length; i += 4, j += 3) {
|
|
@@ -209,7 +213,7 @@ async function preprocessWithSkia(uri, originalWidth, originalHeight, targetWidt
|
|
|
209
213
|
surface.dispose();
|
|
210
214
|
if (data.dispose)
|
|
211
215
|
data.dispose();
|
|
212
|
-
|
|
216
|
+
logger_1.logger.debug("[imagePreprocessor] Preprocessing complete, output size:", rgbData.length);
|
|
213
217
|
return {
|
|
214
218
|
data: rgbData,
|
|
215
219
|
originalWidth,
|
|
@@ -293,7 +297,7 @@ async function isResizePluginAvailable() {
|
|
|
293
297
|
return resizePluginAvailable;
|
|
294
298
|
}
|
|
295
299
|
try {
|
|
296
|
-
await Promise.resolve().then(() => __importStar(require(
|
|
300
|
+
await Promise.resolve().then(() => __importStar(require("vision-camera-resize-plugin")));
|
|
297
301
|
resizePluginAvailable = true;
|
|
298
302
|
return true;
|
|
299
303
|
}
|
|
@@ -302,3 +306,4 @@ async function isResizePluginAvailable() {
|
|
|
302
306
|
return false;
|
|
303
307
|
}
|
|
304
308
|
}
|
|
309
|
+
//# sourceMappingURL=imagePreprocessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imagePreprocessor.js","sourceRoot":"","sources":["../../../src/utils/imagePreprocessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Logger utility for @souscheflabs/ml-vision
|
|
4
|
+
*
|
|
5
|
+
* Provides configurable logging with different levels.
|
|
6
|
+
* In production, set LOG_LEVEL to 'none' or 'error' to reduce noise.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { logger, setLogLevel } from './utils/logger';
|
|
11
|
+
*
|
|
12
|
+
* // Set log level (default: 'warn' in production, 'debug' in development)
|
|
13
|
+
* setLogLevel('debug');
|
|
14
|
+
*
|
|
15
|
+
* // Use logger
|
|
16
|
+
* logger.debug('Detailed info for debugging');
|
|
17
|
+
* logger.info('General information');
|
|
18
|
+
* logger.warn('Warning message');
|
|
19
|
+
* logger.error('Error occurred', error);
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.logger = void 0;
|
|
24
|
+
exports.setLogLevel = setLogLevel;
|
|
25
|
+
exports.getLogLevel = getLogLevel;
|
|
26
|
+
const LOG_LEVELS = {
|
|
27
|
+
debug: 0,
|
|
28
|
+
info: 1,
|
|
29
|
+
warn: 2,
|
|
30
|
+
error: 3,
|
|
31
|
+
none: 4,
|
|
32
|
+
};
|
|
33
|
+
// Default to 'warn' in production, 'debug' in development
|
|
34
|
+
let currentLevel = __DEV__ ? 'debug' : 'warn';
|
|
35
|
+
/**
|
|
36
|
+
* Set the current log level
|
|
37
|
+
*/
|
|
38
|
+
function setLogLevel(level) {
|
|
39
|
+
currentLevel = level;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get the current log level
|
|
43
|
+
*/
|
|
44
|
+
function getLogLevel() {
|
|
45
|
+
return currentLevel;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if a log level should be printed
|
|
49
|
+
*/
|
|
50
|
+
function shouldLog(level) {
|
|
51
|
+
return LOG_LEVELS[level] >= LOG_LEVELS[currentLevel];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Format log message with prefix
|
|
55
|
+
*/
|
|
56
|
+
function formatMessage(prefix, message) {
|
|
57
|
+
return `[MLVision:${prefix}] ${message}`;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Logger instance with configurable levels
|
|
61
|
+
*/
|
|
62
|
+
exports.logger = {
|
|
63
|
+
/**
|
|
64
|
+
* Debug level - detailed information for debugging
|
|
65
|
+
*/
|
|
66
|
+
debug(message, ...args) {
|
|
67
|
+
if (shouldLog('debug')) {
|
|
68
|
+
// eslint-disable-next-line no-console
|
|
69
|
+
console.log(formatMessage('DEBUG', message), ...args);
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
/**
|
|
73
|
+
* Info level - general information
|
|
74
|
+
*/
|
|
75
|
+
info(message, ...args) {
|
|
76
|
+
if (shouldLog('info')) {
|
|
77
|
+
// eslint-disable-next-line no-console
|
|
78
|
+
console.log(formatMessage('INFO', message), ...args);
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
/**
|
|
82
|
+
* Warn level - warning messages
|
|
83
|
+
*/
|
|
84
|
+
warn(message, ...args) {
|
|
85
|
+
if (shouldLog('warn')) {
|
|
86
|
+
console.warn(formatMessage('WARN', message), ...args);
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
/**
|
|
90
|
+
* Error level - error messages
|
|
91
|
+
*/
|
|
92
|
+
error(message, ...args) {
|
|
93
|
+
if (shouldLog('error')) {
|
|
94
|
+
console.error(formatMessage('ERROR', message), ...args);
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
exports.default = exports.logger;
|
|
99
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAkBH,kCAEC;AAKD,kCAEC;AAvBD,MAAM,UAAU,GAA6B;IAC3C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;CACR,CAAC;AAEF,0DAA0D;AAC1D,IAAI,YAAY,GAAa,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAExD;;GAEG;AACH,SAAgB,WAAW,CAAC,KAAe;IACzC,YAAY,GAAG,KAAK,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW;IACzB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,KAAe;IAChC,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,MAAc,EAAE,OAAe;IACpD,OAAO,aAAa,MAAM,KAAK,OAAO,EAAE,CAAC;AAC3C,CAAC;AAED;;GAEG;AACU,QAAA,MAAM,GAAG;IACpB;;OAEG;IACH,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;CACF,CAAC;AAEF,kBAAe,cAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yoloProcessor.js","sourceRoot":"","sources":["../../../src/utils/yoloProcessor.ts"],"names":[],"mappings":"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"}
|