@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
@@ -73,24 +73,133 @@ const classLabels_1 = require("./classLabels");
73
73
  const classLabelsCoco_1 = require("./classLabelsCoco");
74
74
  const imagePreprocessor_1 = require("../utils/imagePreprocessor");
75
75
  const yoloProcessor_1 = require("../utils/yoloProcessor");
76
- // ============================================================================
77
- // TFLite Model Loading
78
- // ============================================================================
79
- // Dynamic import of react-native-fast-tflite to handle cases where it's not installed
80
- let TFLite = null;
81
- let loadedModel = null;
82
- async function loadTFLiteModule() {
83
- if (TFLite)
84
- return TFLite;
85
- try {
86
- TFLite = await Promise.resolve().then(() => __importStar(require('react-native-fast-tflite')));
87
- return TFLite;
76
+ const logger_1 = require("../utils/logger");
77
+ /**
78
+ * Singleton class for managing TFLite model lifecycle
79
+ * Ensures only one model instance exists and handles cleanup properly
80
+ */
81
+ class TFLiteModelManager {
82
+ constructor() {
83
+ this.tfliteModule = null;
84
+ this.model = null;
85
+ this.loadPromise = null;
86
+ this.refCount = 0;
88
87
  }
89
- catch (error) {
90
- console.error('[useProductDetector] Failed to load react-native-fast-tflite:', error);
91
- return null;
88
+ static getInstance() {
89
+ if (!TFLiteModelManager.instance) {
90
+ TFLiteModelManager.instance = new TFLiteModelManager();
91
+ }
92
+ return TFLiteModelManager.instance;
93
+ }
94
+ /**
95
+ * Load the TFLite module
96
+ */
97
+ async loadModule() {
98
+ if (this.tfliteModule)
99
+ return this.tfliteModule;
100
+ try {
101
+ this.tfliteModule = await Promise.resolve().then(() => __importStar(require('react-native-fast-tflite')));
102
+ return this.tfliteModule;
103
+ }
104
+ catch (error) {
105
+ logger_1.logger.error('Failed to load react-native-fast-tflite:', error);
106
+ return null;
107
+ }
108
+ }
109
+ /**
110
+ * Get or load the TFLite model
111
+ */
112
+ async getModel(modelAsset, delegate) {
113
+ // If already loaded, increment ref count and return
114
+ if (this.model) {
115
+ this.refCount++;
116
+ return this.model;
117
+ }
118
+ // If loading in progress, wait for it
119
+ if (this.loadPromise) {
120
+ const result = await this.loadPromise;
121
+ if (result)
122
+ this.refCount++;
123
+ return result;
124
+ }
125
+ // Start loading
126
+ this.loadPromise = this.loadModelInternal(modelAsset, delegate);
127
+ const result = await this.loadPromise;
128
+ this.loadPromise = null;
129
+ if (result) {
130
+ this.model = result;
131
+ this.refCount = 1;
132
+ }
133
+ return result;
134
+ }
135
+ async loadModelInternal(modelAsset, delegate) {
136
+ const tflite = await this.loadModule();
137
+ if (!tflite)
138
+ return null;
139
+ try {
140
+ logger_1.logger.debug('Loading TFLite model...');
141
+ let model;
142
+ try {
143
+ model = await tflite.loadTensorflowModel(modelAsset, delegate);
144
+ }
145
+ catch (loadErr) {
146
+ logger_1.logger.warn('Primary model load failed:', loadErr.message);
147
+ // Fallback for Android assets
148
+ if (react_native_1.Platform.OS === 'android') {
149
+ logger_1.logger.debug('Trying Android asset fallback...');
150
+ model = await tflite.loadTensorflowModel({ url: 'file:///android_asset/souschef_v1_int8.tflite' }, delegate);
151
+ logger_1.logger.info('Android asset fallback succeeded');
152
+ }
153
+ else {
154
+ throw loadErr;
155
+ }
156
+ }
157
+ logger_1.logger.info('TFLite model loaded successfully');
158
+ logger_1.logger.debug('Model inputs:', JSON.stringify(model.inputs));
159
+ logger_1.logger.debug('Model outputs:', JSON.stringify(model.outputs));
160
+ return model;
161
+ }
162
+ catch (error) {
163
+ logger_1.logger.error('Failed to load TFLite model:', error);
164
+ return null;
165
+ }
166
+ }
167
+ /**
168
+ * Release a reference to the model
169
+ * Model is unloaded when ref count reaches 0
170
+ */
171
+ releaseModel() {
172
+ if (this.refCount > 0) {
173
+ this.refCount--;
174
+ logger_1.logger.debug(`Model ref count: ${this.refCount}`);
175
+ }
176
+ // Note: react-native-fast-tflite doesn't expose a dispose method
177
+ // The model will be garbage collected when no longer referenced
178
+ // We keep the model cached for performance (hot reload scenarios)
179
+ }
180
+ /**
181
+ * Force unload the model (for testing or memory pressure)
182
+ */
183
+ forceUnload() {
184
+ this.model = null;
185
+ this.refCount = 0;
186
+ logger_1.logger.debug('Model force unloaded');
187
+ }
188
+ /**
189
+ * Check if model is loaded
190
+ */
191
+ isLoaded() {
192
+ return this.model !== null;
193
+ }
194
+ /**
195
+ * Get current ref count (for debugging)
196
+ */
197
+ getRefCount() {
198
+ return this.refCount;
92
199
  }
93
200
  }
201
+ // Export singleton instance for use in hook
202
+ const modelManager = TFLiteModelManager.getInstance();
94
203
  // ============================================================================
95
204
  // Constants
96
205
  // ============================================================================
@@ -237,68 +346,27 @@ function useProductDetector(options = {}) {
237
346
  return;
238
347
  }
239
348
  try {
240
- console.log('[useProductDetector] Step 1: Loading TFLite module...');
241
- const tflite = await loadTFLiteModule();
242
- if (!tflite) {
243
- throw new Error('react-native-fast-tflite is not available');
244
- }
245
- console.log('[useProductDetector] Step 2: TFLite module loaded');
246
- // Check if model is already loaded
247
- if (loadedModel) {
248
- console.log('[useProductDetector] Model already loaded, reusing...');
249
- modelRef.current = loadedModel;
250
- if (mountedRef.current) {
251
- setIsModelLoaded(true);
252
- }
253
- return;
254
- }
255
- // Load the model from assets folder
256
- console.log('[useProductDetector] Step 3: Loading TFLite model...');
257
- console.log('[useProductDetector] MODEL_ASSET value:', MODEL_ASSET);
258
- console.log('[useProductDetector] MODEL_ASSET type:', typeof MODEL_ASSET);
349
+ logger_1.logger.debug('Loading TFLite model via singleton manager...');
350
+ logger_1.logger.debug('MODEL_ASSET:', MODEL_ASSET, typeof MODEL_ASSET);
259
351
  // CoreML is iOS-only, use default CPU delegate on Android for stability
260
352
  const delegate = config.enableGPUDelegate && react_native_1.Platform.OS === 'ios'
261
353
  ? 'core-ml'
262
354
  : 'default';
263
- console.log('[useProductDetector] Step 4: Using delegate:', delegate);
264
- // Load model via require() which Metro resolves to an asset ID
265
- console.log('[useProductDetector] Step 5: Calling loadTensorflowModel...');
266
- let model;
267
- try {
268
- // Try loading with the bundled asset first
269
- model = await tflite.loadTensorflowModel(MODEL_ASSET, delegate);
270
- }
271
- catch (loadErr) {
272
- console.error('[useProductDetector] Primary load failed:', loadErr.message);
273
- // Fallback: try file:// URL for Android assets
274
- if (react_native_1.Platform.OS === 'android') {
275
- console.log('[useProductDetector] Trying fallback: file:///android_asset/...');
276
- try {
277
- model = await tflite.loadTensorflowModel({ url: 'file:///android_asset/souschef_v1_int8.tflite' }, delegate);
278
- console.log('[useProductDetector] Fallback succeeded!');
279
- }
280
- catch (fallbackErr) {
281
- console.error('[useProductDetector] Fallback also failed:', fallbackErr.message);
282
- throw loadErr; // Throw original error
283
- }
284
- }
285
- else {
286
- throw loadErr;
287
- }
355
+ logger_1.logger.debug('Using delegate:', delegate);
356
+ // Use singleton model manager
357
+ const model = await modelManager.getModel(MODEL_ASSET, delegate);
358
+ if (!model) {
359
+ throw new Error('Failed to load TFLite model');
288
360
  }
289
- console.log('[useProductDetector] Step 6: Model loaded successfully');
290
- console.log('[useProductDetector] Model inputs:', JSON.stringify(model.inputs));
291
- console.log('[useProductDetector] Model outputs:', JSON.stringify(model.outputs));
292
- loadedModel = model;
293
361
  modelRef.current = model;
294
362
  if (mountedRef.current) {
295
363
  setIsModelLoaded(true);
296
- console.log('[useProductDetector] Model loaded successfully');
364
+ logger_1.logger.info('Model ready for inference');
297
365
  }
298
366
  }
299
367
  catch (err) {
300
368
  const loadError = err instanceof Error ? err : new Error('Failed to load model');
301
- console.error('[useProductDetector] Model loading error:', loadError);
369
+ logger_1.logger.error('Model loading error:', loadError);
302
370
  if (mountedRef.current) {
303
371
  setError(loadError);
304
372
  onError?.(loadError);
@@ -308,6 +376,8 @@ function useProductDetector(options = {}) {
308
376
  loadModel();
309
377
  return () => {
310
378
  mountedRef.current = false;
379
+ // Release model reference on unmount
380
+ modelManager.releaseModel();
311
381
  };
312
382
  }, [modelType, config.enableGPUDelegate, onError]);
313
383
  // ============================================================================
@@ -318,7 +388,7 @@ function useProductDetector(options = {}) {
318
388
  */
319
389
  const detectProducts = (0, react_1.useCallback)(async (uri) => {
320
390
  if (isDetecting) {
321
- console.warn('[useProductDetector] Detection already in progress');
391
+ logger_1.logger.warn('Detection already in progress');
322
392
  return [];
323
393
  }
324
394
  setIsDetecting(true);
@@ -330,7 +400,7 @@ function useProductDetector(options = {}) {
330
400
  if (cacheManager) {
331
401
  const cached = cacheManager.getProductRecognition(imageHash);
332
402
  if (cached && cached.modelVersion === MODEL_VERSION) {
333
- console.log('[useProductDetector] Using cached results');
403
+ logger_1.logger.debug('[Detection] Using cached results');
334
404
  // Convert cached data to ProductDetectionResult format
335
405
  results = cached.detections.map((det, idx) => ({
336
406
  id: `cached_${imageHash}_${idx}`,
@@ -367,7 +437,7 @@ function useProductDetector(options = {}) {
367
437
  catch {
368
438
  // On-device detection failed (e.g., preprocessing not implemented)
369
439
  // This is expected for photo-based detection - silently fall back to server
370
- console.log('[useProductDetector] On-device detection unavailable, will use server');
440
+ logger_1.logger.debug('[Detection] On-device detection unavailable, will use server');
371
441
  }
372
442
  }
373
443
  // Server fallback for:
@@ -381,14 +451,14 @@ function useProductDetector(options = {}) {
381
451
  (results.length === 0 ||
382
452
  results.every((r) => r.confidence < serverFallbackThreshold)));
383
453
  if (shouldFallback && serverClient) {
384
- console.log('[useProductDetector] Using server detection');
454
+ logger_1.logger.debug('[Detection] Using server detection');
385
455
  try {
386
456
  const serverResults = await runServerDetection(uri);
387
457
  // Merge results, preferring server for duplicates
388
458
  results = mergeDetections(results, serverResults);
389
459
  }
390
460
  catch (serverErr) {
391
- console.error('[useProductDetector] Server detection failed:', serverErr);
461
+ logger_1.logger.error('[Detection] Server detection failed:', serverErr);
392
462
  // If server fails too, we have no results - throw the error
393
463
  if (results.length === 0) {
394
464
  throw new Error('Detection failed: Server unavailable and on-device preprocessing not implemented');
@@ -429,7 +499,7 @@ function useProductDetector(options = {}) {
429
499
  }
430
500
  catch (err) {
431
501
  const detectError = err instanceof Error ? err : new Error('Detection failed');
432
- console.error('[useProductDetector] Detection error:', detectError);
502
+ logger_1.logger.error('[Detection] Detection error:', detectError);
433
503
  if (mountedRef.current) {
434
504
  setError(detectError);
435
505
  }
@@ -479,14 +549,14 @@ function useProductDetector(options = {}) {
479
549
  // Try to initialize Skia for preprocessing
480
550
  await (0, imagePreprocessor_1.initSkia)();
481
551
  if (!(0, imagePreprocessor_1.isSkiaAvailable)()) {
482
- console.log('[useProductDetector] On-device detection requires @shopify/react-native-skia');
483
- console.log('[useProductDetector] Install with: npm install @shopify/react-native-skia');
484
- console.log('[useProductDetector] Falling back to server detection...');
552
+ logger_1.logger.debug('[Detection] On-device detection requires @shopify/react-native-skia');
553
+ logger_1.logger.debug('[Detection] Install with: npm install @shopify/react-native-skia');
554
+ logger_1.logger.debug('[Detection] Falling back to server detection...');
485
555
  throw new Error('On-device photo detection requires @shopify/react-native-skia. ' +
486
556
  'Install it or use server fallback.');
487
557
  }
488
- console.log('[useProductDetector] Running on-device detection...');
489
- console.log('[useProductDetector] Image:', imageWidth, 'x', imageHeight);
558
+ logger_1.logger.debug('[Detection] Running on-device detection...');
559
+ logger_1.logger.debug('[Detection] Image:', imageWidth, 'x', imageHeight);
490
560
  try {
491
561
  // Preprocess image: resize to 640x640 and normalize to [0, 1]
492
562
  const preprocessed = await (0, imagePreprocessor_1.preprocessImage)(uri, {
@@ -495,24 +565,24 @@ function useProductDetector(options = {}) {
495
565
  normalize: true,
496
566
  letterbox: true,
497
567
  });
498
- console.log('[useProductDetector] Preprocessed image, running inference...');
568
+ logger_1.logger.debug('[Detection] Preprocessed image, running inference...');
499
569
  // Run TFLite inference
500
570
  const output = await model.run([preprocessed.data]);
501
571
  const rawOutput = output[0];
502
572
  const inferenceTime = Date.now() - startTime;
503
- console.log('[useProductDetector] Inference complete:', inferenceTime, 'ms');
573
+ logger_1.logger.debug('[Detection] Inference complete:', inferenceTime, 'ms');
504
574
  // Process YOLO output
505
575
  const numClasses = getNumClasses();
506
576
  const rawDetections = (0, yoloProcessor_1.processYoloOutput)(rawOutput, numClasses, 0.25, 0.45);
507
577
  // Scale detections back to original image coordinates
508
578
  const scaledDetections = (0, yoloProcessor_1.scaleDetections)(rawDetections, MODEL_INPUT_SIZE, imageWidth, imageHeight);
509
- console.log('[useProductDetector] Found', scaledDetections.length, 'detections');
579
+ logger_1.logger.debug('[Detection] Found', scaledDetections.length, 'detections');
510
580
  // Convert to ProductDetectionResult format
511
581
  const processingTimeMs = Date.now() - startTime;
512
582
  return scaledDetections.map((det) => toProductDetectionResult(det, imageWidth, imageHeight, processingTimeMs));
513
583
  }
514
584
  catch (preprocessError) {
515
- console.error('[useProductDetector] On-device detection failed:', preprocessError);
585
+ logger_1.logger.error('[Detection] On-device detection failed:', preprocessError);
516
586
  throw preprocessError;
517
587
  }
518
588
  }
@@ -549,12 +619,12 @@ function useProductDetector(options = {}) {
549
619
  * Run detection on server
550
620
  */
551
621
  async function runServerDetection(uri) {
552
- console.log('[useProductDetector] runServerDetection called');
553
- console.log('[useProductDetector] Server client available:', !!serverClient);
554
- console.log('[useProductDetector] Server URL:', effectiveServerUrl);
555
- console.log('[useProductDetector] Image URI:', uri);
622
+ logger_1.logger.debug('[Detection] runServerDetection called');
623
+ logger_1.logger.debug('[Detection] Server client available:', !!serverClient);
624
+ logger_1.logger.debug('[Detection] Server URL:', effectiveServerUrl);
625
+ logger_1.logger.debug('[Detection] Image URI:', uri);
556
626
  if (!serverClient) {
557
- console.error('[useProductDetector] Server client not available!');
627
+ logger_1.logger.error('[Detection] Server client not available!');
558
628
  throw new Error('Server client not available');
559
629
  }
560
630
  // Convert URI to ImageUploadData format
@@ -562,19 +632,19 @@ function useProductDetector(options = {}) {
562
632
  image: uri,
563
633
  isBase64: false,
564
634
  };
565
- console.log('[useProductDetector] Calling serverClient.detectProducts...');
635
+ logger_1.logger.debug('[Detection] Calling serverClient.detectProducts...');
566
636
  try {
567
637
  const results = await serverClient.detectProducts(imageData, {
568
638
  maxDetections,
569
639
  minConfidence: minConfidence * 0.8, // Slightly lower threshold for server
570
640
  });
571
- console.log('[useProductDetector] Server returned', results?.length || 0, 'detections');
572
- console.log('[useProductDetector] Server results:', JSON.stringify(results));
641
+ logger_1.logger.debug('[Detection] Server returned', results?.length || 0, 'detections');
642
+ logger_1.logger.debug('[Detection] Server results:', JSON.stringify(results));
573
643
  // Server already returns ProductDetectionResult[] with all required fields
574
644
  return results;
575
645
  }
576
646
  catch (serverErr) {
577
- console.error('[useProductDetector] Server request failed:', serverErr);
647
+ logger_1.logger.error('[Detection] Server request failed:', serverErr);
578
648
  throw serverErr;
579
649
  }
580
650
  }
@@ -620,7 +690,7 @@ function useProductDetector(options = {}) {
620
690
  */
621
691
  const updateModel = (0, react_1.useCallback)(async () => {
622
692
  // TODO: Implement model update checking
623
- console.log('[useProductDetector] Model update check not implemented');
693
+ logger_1.logger.debug('[Detection] Model update check not implemented');
624
694
  }, []);
625
695
  /**
626
696
  * Clear all detections
@@ -677,3 +747,4 @@ function useProductDetector(options = {}) {
677
747
  };
678
748
  }
679
749
  exports.default = useProductDetector;
750
+ //# sourceMappingURL=useProductDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useProductDetector.js","sourceRoot":"","sources":["../../../src/hooks/useProductDetector.ts"],"names":[],"mappings":"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"}