@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
|
@@ -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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
|
|
241
|
-
|
|
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
|
-
|
|
264
|
-
//
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
483
|
-
|
|
484
|
-
|
|
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
|
-
|
|
489
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
572
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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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"}
|