@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.
Files changed (149) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/LICENSE +15 -0
  3. package/README.md +50 -5
  4. package/dist/{components → cjs/components}/DetectionOverlay.js +1 -0
  5. package/dist/cjs/components/DetectionOverlay.js.map +1 -0
  6. package/dist/{components → cjs/components}/index.js +1 -0
  7. package/dist/cjs/components/index.js.map +1 -0
  8. package/dist/{core → cjs/core}/CacheManager.js +1 -0
  9. package/dist/cjs/core/CacheManager.js.map +1 -0
  10. package/dist/{core → cjs/core}/MLVisionProvider.js +4 -2
  11. package/dist/cjs/core/MLVisionProvider.js.map +1 -0
  12. package/dist/{core → cjs/core}/ServerClient.js +33 -13
  13. package/dist/cjs/core/ServerClient.js.map +1 -0
  14. package/dist/{core → cjs/core}/index.js +1 -0
  15. package/dist/cjs/core/index.js.map +1 -0
  16. package/dist/{hooks → cjs/hooks}/classLabels.js +1 -0
  17. package/dist/cjs/hooks/classLabels.js.map +1 -0
  18. package/dist/{hooks → cjs/hooks}/classLabelsCoco.js +1 -0
  19. package/dist/cjs/hooks/classLabelsCoco.js.map +1 -0
  20. package/dist/{hooks → cjs/hooks}/index.js +1 -0
  21. package/dist/cjs/hooks/index.js.map +1 -0
  22. package/dist/{hooks → cjs/hooks}/useMultiBarcodeScanner.js +6 -3
  23. package/dist/cjs/hooks/useMultiBarcodeScanner.js.map +1 -0
  24. package/dist/{hooks → cjs/hooks}/useProductDetector.js +161 -90
  25. package/dist/cjs/hooks/useProductDetector.js.map +1 -0
  26. package/dist/{hooks → cjs/hooks}/useReceiptScanner.js +60 -52
  27. package/dist/cjs/hooks/useReceiptScanner.js.map +1 -0
  28. package/dist/{hooks → cjs/hooks}/useVideoScanner.js +8 -5
  29. package/dist/cjs/hooks/useVideoScanner.js.map +1 -0
  30. package/dist/{index.js → cjs/index.js} +8 -4
  31. package/dist/cjs/index.js.map +1 -0
  32. package/dist/{processors → cjs/processors}/detectionProcessor.js +1 -0
  33. package/dist/cjs/processors/detectionProcessor.js.map +1 -0
  34. package/dist/{processors → cjs/processors}/index.js +1 -0
  35. package/dist/cjs/processors/index.js.map +1 -0
  36. package/dist/{processors → cjs/processors}/tfliteFrameProcessor.js +108 -25
  37. package/dist/cjs/processors/tfliteFrameProcessor.js.map +1 -0
  38. package/dist/{types → cjs/types}/barcode.js +1 -0
  39. package/dist/cjs/types/barcode.js.map +1 -0
  40. package/dist/{types → cjs/types}/detection.js +1 -0
  41. package/dist/cjs/types/detection.js.map +1 -0
  42. package/dist/{types → cjs/types}/index.js +1 -0
  43. package/dist/cjs/types/index.js.map +1 -0
  44. package/dist/{types → cjs/types}/ocr.js +1 -0
  45. package/dist/cjs/types/ocr.js.map +1 -0
  46. package/dist/{utils → cjs/utils}/imagePreprocessor.js +30 -25
  47. package/dist/cjs/utils/imagePreprocessor.js.map +1 -0
  48. package/dist/cjs/utils/logger.js +99 -0
  49. package/dist/cjs/utils/logger.js.map +1 -0
  50. package/dist/{utils → cjs/utils}/yoloProcessor.js +1 -0
  51. package/dist/cjs/utils/yoloProcessor.js.map +1 -0
  52. package/dist/esm/components/DetectionOverlay.js +130 -0
  53. package/dist/esm/components/DetectionOverlay.js.map +1 -0
  54. package/dist/esm/components/index.js +5 -0
  55. package/dist/esm/components/index.js.map +1 -0
  56. package/dist/esm/core/CacheManager.js +327 -0
  57. package/dist/esm/core/CacheManager.js.map +1 -0
  58. package/dist/esm/core/MLVisionProvider.js +185 -0
  59. package/dist/esm/core/MLVisionProvider.js.map +1 -0
  60. package/dist/esm/core/ServerClient.js +305 -0
  61. package/dist/esm/core/ServerClient.js.map +1 -0
  62. package/dist/esm/core/index.js +7 -0
  63. package/dist/esm/core/index.js.map +1 -0
  64. package/dist/esm/hooks/classLabels.js +436 -0
  65. package/dist/esm/hooks/classLabels.js.map +1 -0
  66. package/dist/esm/hooks/classLabelsCoco.js +98 -0
  67. package/dist/esm/hooks/classLabelsCoco.js.map +1 -0
  68. package/dist/esm/hooks/index.js +9 -0
  69. package/dist/esm/hooks/index.js.map +1 -0
  70. package/dist/esm/hooks/useMultiBarcodeScanner.js +290 -0
  71. package/dist/esm/hooks/useMultiBarcodeScanner.js.map +1 -0
  72. package/dist/esm/hooks/useProductDetector.js +714 -0
  73. package/dist/esm/hooks/useProductDetector.js.map +1 -0
  74. package/dist/esm/hooks/useReceiptScanner.js +407 -0
  75. package/dist/esm/hooks/useReceiptScanner.js.map +1 -0
  76. package/dist/esm/hooks/useVideoScanner.js +383 -0
  77. package/dist/esm/hooks/useVideoScanner.js.map +1 -0
  78. package/dist/esm/index.js +93 -0
  79. package/dist/esm/index.js.map +1 -0
  80. package/dist/esm/processors/detectionProcessor.js +121 -0
  81. package/dist/esm/processors/detectionProcessor.js.map +1 -0
  82. package/dist/esm/processors/index.js +7 -0
  83. package/dist/esm/processors/index.js.map +1 -0
  84. package/dist/esm/processors/tfliteFrameProcessor.js +292 -0
  85. package/dist/esm/processors/tfliteFrameProcessor.js.map +1 -0
  86. package/dist/esm/types/barcode.js +17 -0
  87. package/dist/esm/types/barcode.js.map +1 -0
  88. package/dist/esm/types/detection.js +8 -0
  89. package/dist/esm/types/detection.js.map +1 -0
  90. package/dist/esm/types/index.js +10 -0
  91. package/dist/esm/types/index.js.map +1 -0
  92. package/dist/esm/types/ocr.js +8 -0
  93. package/dist/esm/types/ocr.js.map +1 -0
  94. package/dist/esm/utils/imagePreprocessor.js +268 -0
  95. package/dist/esm/utils/imagePreprocessor.js.map +1 -0
  96. package/dist/esm/utils/logger.js +94 -0
  97. package/dist/esm/utils/logger.js.map +1 -0
  98. package/dist/esm/utils/yoloProcessor.js +151 -0
  99. package/dist/esm/utils/yoloProcessor.js.map +1 -0
  100. package/dist/{components → types/components}/DetectionOverlay.d.ts +1 -0
  101. package/dist/types/components/DetectionOverlay.d.ts.map +1 -0
  102. package/dist/{components → types/components}/index.d.ts +1 -0
  103. package/dist/types/components/index.d.ts.map +1 -0
  104. package/dist/{core → types/core}/CacheManager.d.ts +1 -0
  105. package/dist/types/core/CacheManager.d.ts.map +1 -0
  106. package/dist/{core → types/core}/MLVisionProvider.d.ts +1 -0
  107. package/dist/types/core/MLVisionProvider.d.ts.map +1 -0
  108. package/dist/{core → types/core}/ServerClient.d.ts +1 -0
  109. package/dist/types/core/ServerClient.d.ts.map +1 -0
  110. package/dist/{core → types/core}/index.d.ts +1 -0
  111. package/dist/types/core/index.d.ts.map +1 -0
  112. package/dist/{hooks → types/hooks}/classLabels.d.ts +1 -0
  113. package/dist/types/hooks/classLabels.d.ts.map +1 -0
  114. package/dist/{hooks → types/hooks}/classLabelsCoco.d.ts +1 -0
  115. package/dist/types/hooks/classLabelsCoco.d.ts.map +1 -0
  116. package/dist/{hooks → types/hooks}/index.d.ts +1 -0
  117. package/dist/types/hooks/index.d.ts.map +1 -0
  118. package/dist/{hooks → types/hooks}/useMultiBarcodeScanner.d.ts +1 -0
  119. package/dist/types/hooks/useMultiBarcodeScanner.d.ts.map +1 -0
  120. package/dist/{hooks → types/hooks}/useProductDetector.d.ts +1 -0
  121. package/dist/types/hooks/useProductDetector.d.ts.map +1 -0
  122. package/dist/{hooks → types/hooks}/useReceiptScanner.d.ts +2 -1
  123. package/dist/types/hooks/useReceiptScanner.d.ts.map +1 -0
  124. package/dist/{hooks → types/hooks}/useVideoScanner.d.ts +1 -0
  125. package/dist/types/hooks/useVideoScanner.d.ts.map +1 -0
  126. package/dist/types/index.d.ts +58 -124
  127. package/dist/types/index.d.ts.map +1 -0
  128. package/dist/{processors → types/processors}/detectionProcessor.d.ts +1 -0
  129. package/dist/types/processors/detectionProcessor.d.ts.map +1 -0
  130. package/dist/{processors → types/processors}/index.d.ts +1 -0
  131. package/dist/types/processors/index.d.ts.map +1 -0
  132. package/dist/{processors → types/processors}/tfliteFrameProcessor.d.ts +5 -4
  133. package/dist/types/processors/tfliteFrameProcessor.d.ts.map +1 -0
  134. package/dist/types/{barcode.d.ts → types/barcode.d.ts} +1 -0
  135. package/dist/types/types/barcode.d.ts.map +1 -0
  136. package/dist/types/{detection.d.ts → types/detection.d.ts} +1 -0
  137. package/dist/types/types/detection.d.ts.map +1 -0
  138. package/dist/types/types/index.d.ts +127 -0
  139. package/dist/types/types/index.d.ts.map +1 -0
  140. package/dist/types/{ocr.d.ts → types/ocr.d.ts} +1 -0
  141. package/dist/types/types/ocr.d.ts.map +1 -0
  142. package/dist/{utils → types/utils}/imagePreprocessor.d.ts +1 -0
  143. package/dist/types/utils/imagePreprocessor.d.ts.map +1 -0
  144. package/dist/types/utils/logger.d.ts +52 -0
  145. package/dist/types/utils/logger.d.ts.map +1 -0
  146. package/dist/{utils → types/utils}/yoloProcessor.d.ts +1 -0
  147. package/dist/types/utils/yoloProcessor.d.ts.map +1 -0
  148. package/package.json +62 -21
  149. 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
- 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck',
25
- 'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench',
26
- 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra',
27
- 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
28
- 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove',
29
- 'skateboard', 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup',
30
- 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange',
31
- 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
32
- 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse',
33
- 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink',
34
- 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier',
35
- 'toothbrush'
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
- 'worklet';
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
- console.log('[TFLiteFrameProcessor] Hook state:', {
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
- console.log(`[TFLiteFrameProcessor] Processed ${frameCount} frames`);
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
- console.log(msg);
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
- 'worklet';
207
+ "worklet";
139
208
  if (!model) {
140
- react_native_worklets_core_1.Worklets.runOnJS(() => logFromWorklet('[TFLiteFrameProcessor] No model'));
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: 'rgb',
158
- dataType: 'float32',
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
- }, [model, resize, inputSize, numClasses, confThreshold, iouThreshold, classLabels, foodOnly, onDetections, lastProcessTime, logFromWorklet, incrementFrameCount]);
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
- 'worklet';
282
+ "worklet";
201
283
  // Resize to model input
202
284
  const resized = resizeFn(frame, {
203
285
  scale: { width: inputSize, height: inputSize },
204
- pixelFormat: 'rgb',
205
- dataType: 'float32',
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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"}
@@ -17,3 +17,4 @@ exports.GROCERY_BARCODE_FORMATS = [
17
17
  'upc-e',
18
18
  'qr',
19
19
  ];
20
+ //# sourceMappingURL=barcode.js.map
@@ -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"}
@@ -6,3 +6,4 @@
6
6
  * Used with TFLite models for on-device inference.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=detection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detection.js","sourceRoot":"","sources":["../../../src/types/detection.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
@@ -23,3 +23,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
23
23
  __exportStar(require("./barcode"), exports);
24
24
  __exportStar(require("./detection"), exports);
25
25
  __exportStar(require("./ocr"), exports);
26
+ //# sourceMappingURL=index.js.map
@@ -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"}
@@ -6,3 +6,4 @@
6
6
  * Uses MLKit Text Recognition on-device with server fallback.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=ocr.js.map
@@ -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
- console.log('[imagePreprocessor] Loading Skia module...');
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('@shopify/react-native-skia');
71
- console.log('[imagePreprocessor] Skia loaded successfully');
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
- console.error('[imagePreprocessor] Failed to load Skia:', error);
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('Image preprocessing requires @shopify/react-native-skia. ' +
107
- 'Install with: npm install @shopify/react-native-skia\n\n' +
108
- 'Alternatively, use server-side inference or VisionCamera frame processor.');
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
- console.log('[imagePreprocessor] preprocessWithSkia called');
131
- console.log('[imagePreprocessor] URI:', uri);
132
- console.log('[imagePreprocessor] Original size:', originalWidth, 'x', originalHeight);
133
- console.log('[imagePreprocessor] Target size:', targetWidth, 'x', targetHeight);
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
- console.log('[imagePreprocessor] Loading image data with Skia.Data.fromURI...');
136
+ logger_1.logger.debug("[imagePreprocessor] Loading image data with Skia.Data.fromURI...");
136
137
  const data = await Skia.Data.fromURI(uri);
137
- console.log('[imagePreprocessor] Data loaded:', !!data);
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
- console.log('[imagePreprocessor] Image created:', !!image);
141
+ logger_1.logger.debug("[imagePreprocessor] Image created:", !!image);
141
142
  if (!image) {
142
- throw new Error('Failed to decode image with Skia. The image format may not be supported.');
143
+ throw new Error("Failed to decode image with Skia. The image format may not be supported.");
143
144
  }
144
- console.log('[imagePreprocessor] Image dimensions:', image.width(), 'x', image.height());
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 = { x: targetWidth / originalWidth, y: targetHeight / originalHeight };
158
+ scale = {
159
+ x: targetWidth / originalWidth,
160
+ y: targetHeight / originalHeight,
161
+ };
158
162
  }
159
163
  // Create a surface to draw the resized image
160
- console.log('[imagePreprocessor] Creating surface...');
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('Failed to create Skia surface. This may happen on devices without GPU support.');
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('gray'));
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
- console.log('[imagePreprocessor] Reading pixels...');
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('Failed to read pixels from Skia image');
190
+ throw new Error("Failed to read pixels from Skia image");
187
191
  }
188
- console.log('[imagePreprocessor] Pixels read, length:', pixels.length);
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
- console.log('[imagePreprocessor] Preprocessing complete, output size:', rgbData.length);
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('vision-camera-resize-plugin')));
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"}
@@ -152,3 +152,4 @@ function scaleDetections(detections, modelSize, imageWidth, imageHeight) {
152
152
  };
153
153
  });
154
154
  }
155
+ //# sourceMappingURL=yoloProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yoloProcessor.js","sourceRoot":"","sources":["../../../src/utils/yoloProcessor.ts"],"names":[],"mappings":"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"}