@souscheflabs/ml-vision 0.1.1 → 0.1.3

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 (150) 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/cjs/hooks/classLabels.js +178 -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 +168 -97
  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 +174 -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 +5 -4
  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/hooks/classLabels.js +0 -439
  150. package/dist/index.d.ts +0 -58
@@ -0,0 +1,305 @@
1
+ /**
2
+ * ServerClient - HTTP client for ML inference server communication
3
+ *
4
+ * Handles:
5
+ * - Health checks
6
+ * - Product detection requests
7
+ * - OCR requests
8
+ * - Error handling and retries
9
+ */
10
+ import { logger } from '../utils/logger';
11
+ // ============================================================================
12
+ // Server Error
13
+ // ============================================================================
14
+ /**
15
+ * Custom error for server communication failures
16
+ */
17
+ export class ServerError extends Error {
18
+ constructor(message, code, statusCode, details) {
19
+ super(message);
20
+ this.name = 'ServerError';
21
+ this.code = code;
22
+ this.statusCode = statusCode;
23
+ this.details = details;
24
+ }
25
+ static fromResponse(response, statusCode) {
26
+ return new ServerError(response.error, response.code, statusCode, response.details);
27
+ }
28
+ static networkError(originalError) {
29
+ return new ServerError(originalError?.message || 'Network request failed', 'NETWORK_ERROR');
30
+ }
31
+ static timeoutError() {
32
+ return new ServerError('Request timed out', 'TIMEOUT_ERROR');
33
+ }
34
+ }
35
+ // ============================================================================
36
+ // ServerClient Class
37
+ // ============================================================================
38
+ /**
39
+ * Client for communicating with the ML inference server
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const client = new ServerClient('http://192.168.1.100:8000');
44
+ *
45
+ * // Check health
46
+ * const health = await client.checkHealth();
47
+ *
48
+ * // Detect products
49
+ * const detections = await client.detectProducts({
50
+ * image: base64Image,
51
+ * isBase64: true,
52
+ * });
53
+ * ```
54
+ */
55
+ export class ServerClient {
56
+ constructor(baseUrl, defaultTimeout = 5000) {
57
+ // Remove trailing slash
58
+ this.baseUrl = baseUrl.replace(/\/$/, '');
59
+ this.defaultTimeout = defaultTimeout;
60
+ }
61
+ // ==========================================================================
62
+ // Health Check
63
+ // ==========================================================================
64
+ /**
65
+ * Check server health status
66
+ */
67
+ async checkHealth(options) {
68
+ const response = await this.request('/health', 'GET', undefined, options);
69
+ return response;
70
+ }
71
+ /**
72
+ * Quick connectivity check (returns boolean)
73
+ */
74
+ async isAvailable() {
75
+ try {
76
+ const health = await this.checkHealth({ timeout: 2000 });
77
+ return health.status === 'healthy';
78
+ }
79
+ catch {
80
+ return false;
81
+ }
82
+ }
83
+ // ==========================================================================
84
+ // Detection Endpoints
85
+ // ==========================================================================
86
+ /**
87
+ * Detect products in an image
88
+ */
89
+ async detectProducts(imageData, options) {
90
+ logger.debug('[ServerClient] detectProducts called');
91
+ logger.debug('[ServerClient] baseUrl:', this.baseUrl);
92
+ logger.debug('[ServerClient] imageData.image:', imageData.image?.substring(0, 100));
93
+ logger.debug('[ServerClient] imageData.isBase64:', imageData.isBase64);
94
+ const formData = this.createImageFormData(imageData);
95
+ if (options?.maxDetections) {
96
+ formData.append('max_detections', String(options.maxDetections));
97
+ }
98
+ if (options?.minConfidence) {
99
+ formData.append('min_confidence', String(options.minConfidence));
100
+ }
101
+ if (options?.categories) {
102
+ formData.append('categories', options.categories.join(','));
103
+ }
104
+ logger.debug('[ServerClient] Sending request to /api/v1/detect/products...');
105
+ try {
106
+ const response = await this.requestWithForm('/api/v1/detect/products', formData, options);
107
+ logger.debug('[ServerClient] Response received:', JSON.stringify(response));
108
+ return response.detections;
109
+ }
110
+ catch (err) {
111
+ logger.error('[ServerClient] Request failed:', err);
112
+ throw err;
113
+ }
114
+ }
115
+ /**
116
+ * Detect fresh produce with quality assessment
117
+ */
118
+ async detectProduce(imageData, options) {
119
+ const formData = this.createImageFormData(imageData);
120
+ const response = await this.requestWithForm('/api/v1/detect/produce', formData, options);
121
+ return response.detections;
122
+ }
123
+ /**
124
+ * Detect spice jars (requires larger model on server)
125
+ */
126
+ async detectSpices(imageData, options) {
127
+ const formData = this.createImageFormData(imageData);
128
+ const response = await this.requestWithForm('/api/v1/detect/spices', formData, options);
129
+ return response.detections;
130
+ }
131
+ // ==========================================================================
132
+ // OCR Endpoints
133
+ // ==========================================================================
134
+ /**
135
+ * Extract text and items from a receipt image
136
+ */
137
+ async scanReceipt(imageData, options) {
138
+ const formData = this.createImageFormData(imageData);
139
+ if (options?.storeHint) {
140
+ formData.append('store_hint', options.storeHint);
141
+ }
142
+ if (options?.languageHint) {
143
+ formData.append('language_hint', options.languageHint);
144
+ }
145
+ const response = await this.requestWithForm('/api/v1/ocr/receipt', formData, options);
146
+ return response;
147
+ }
148
+ /**
149
+ * Read text from a product label
150
+ */
151
+ async readLabel(imageData, options) {
152
+ const formData = this.createImageFormData(imageData);
153
+ const response = await this.requestWithForm('/api/v1/ocr/label', formData, options);
154
+ return response;
155
+ }
156
+ // ==========================================================================
157
+ // Private Methods
158
+ // ==========================================================================
159
+ /**
160
+ * Create FormData with image
161
+ */
162
+ createImageFormData(imageData) {
163
+ const formData = new FormData();
164
+ if (imageData.isBase64) {
165
+ // For base64, send as a field
166
+ formData.append('image_base64', imageData.image);
167
+ if (imageData.mimeType) {
168
+ formData.append('mime_type', imageData.mimeType);
169
+ }
170
+ }
171
+ else {
172
+ // For file URI, create a file object
173
+ // React Native's FormData handles file:// URIs
174
+ const uri = imageData.image;
175
+ const filename = uri.split('/').pop() || 'image.jpg';
176
+ const type = imageData.mimeType || 'image/jpeg';
177
+ formData.append('image', {
178
+ uri,
179
+ name: filename,
180
+ type,
181
+ });
182
+ }
183
+ return formData;
184
+ }
185
+ /**
186
+ * Make a JSON request
187
+ */
188
+ async request(endpoint, method, body, options) {
189
+ const url = `${this.baseUrl}${endpoint}`;
190
+ const timeout = options?.timeout ?? this.defaultTimeout;
191
+ // Create abort controller for timeout
192
+ const controller = new AbortController();
193
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
194
+ // Track external abort handler for cleanup
195
+ let externalAbortHandler = null;
196
+ // Combine with external signal if provided
197
+ if (options?.signal) {
198
+ externalAbortHandler = () => controller.abort();
199
+ options.signal.addEventListener('abort', externalAbortHandler);
200
+ }
201
+ try {
202
+ const response = await fetch(url, {
203
+ method,
204
+ headers: {
205
+ 'Content-Type': 'application/json',
206
+ Accept: 'application/json',
207
+ },
208
+ body: body ? JSON.stringify(body) : undefined,
209
+ signal: controller.signal,
210
+ });
211
+ if (!response.ok) {
212
+ const errorBody = await response.json().catch(() => ({
213
+ error: 'Unknown error',
214
+ code: 'UNKNOWN_ERROR',
215
+ }));
216
+ throw ServerError.fromResponse(errorBody, response.status);
217
+ }
218
+ return (await response.json());
219
+ }
220
+ catch (error) {
221
+ if (error instanceof ServerError) {
222
+ throw error;
223
+ }
224
+ if (error instanceof Error) {
225
+ if (error.name === 'AbortError') {
226
+ throw ServerError.timeoutError();
227
+ }
228
+ throw ServerError.networkError(error);
229
+ }
230
+ throw ServerError.networkError();
231
+ }
232
+ finally {
233
+ // Clean up timeout
234
+ clearTimeout(timeoutId);
235
+ // Clean up external abort listener
236
+ if (options?.signal && externalAbortHandler) {
237
+ options.signal.removeEventListener('abort', externalAbortHandler);
238
+ }
239
+ }
240
+ }
241
+ /**
242
+ * Make a multipart form request
243
+ */
244
+ async requestWithForm(endpoint, formData, options) {
245
+ const url = `${this.baseUrl}${endpoint}`;
246
+ const timeout = options?.timeout ?? this.defaultTimeout;
247
+ const controller = new AbortController();
248
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
249
+ // Track external abort handler for cleanup
250
+ let externalAbortHandler = null;
251
+ if (options?.signal) {
252
+ externalAbortHandler = () => controller.abort();
253
+ options.signal.addEventListener('abort', externalAbortHandler);
254
+ }
255
+ try {
256
+ const response = await fetch(url, {
257
+ method: 'POST',
258
+ headers: {
259
+ Accept: 'application/json',
260
+ // Don't set Content-Type for FormData - fetch will set it with boundary
261
+ },
262
+ body: formData,
263
+ signal: controller.signal,
264
+ });
265
+ if (!response.ok) {
266
+ const errorBody = await response.json().catch(() => ({
267
+ error: 'Unknown error',
268
+ code: 'UNKNOWN_ERROR',
269
+ }));
270
+ throw ServerError.fromResponse(errorBody, response.status);
271
+ }
272
+ return (await response.json());
273
+ }
274
+ catch (error) {
275
+ if (error instanceof ServerError) {
276
+ throw error;
277
+ }
278
+ if (error instanceof Error) {
279
+ if (error.name === 'AbortError') {
280
+ throw ServerError.timeoutError();
281
+ }
282
+ throw ServerError.networkError(error);
283
+ }
284
+ throw ServerError.networkError();
285
+ }
286
+ finally {
287
+ // Clean up timeout
288
+ clearTimeout(timeoutId);
289
+ // Clean up external abort listener
290
+ if (options?.signal && externalAbortHandler) {
291
+ options.signal.removeEventListener('abort', externalAbortHandler);
292
+ }
293
+ }
294
+ }
295
+ }
296
+ // ============================================================================
297
+ // Factory Function
298
+ // ============================================================================
299
+ /**
300
+ * Create a ServerClient instance
301
+ */
302
+ export function createServerClient(baseUrl, timeout) {
303
+ return new ServerClient(baseUrl, timeout);
304
+ }
305
+ //# sourceMappingURL=ServerClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerClient.js","sourceRoot":"","sources":["../../../src/core/ServerClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Core module exports
3
+ */
4
+ export { MLVisionProvider, useMLVisionContext, useMLVisionReady, } from './MLVisionProvider';
5
+ export { CacheManager, createCacheManager, CACHE_TTL, } from './CacheManager';
6
+ export { ServerClient, createServerClient, ServerError, } from './ServerClient';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,GAGjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,SAAS,GAGV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,WAAW,GAKZ,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Class label mappings for the trained SousChef YOLOv8 model
3
+ *
4
+ * These labels correspond to the 43 classes in the souschef_products_v2 model.
5
+ * The model was trained on curated grocery product images.
6
+ */
7
+ /**
8
+ * Categorize a food item label
9
+ */
10
+ function categorizeLabel(label) {
11
+ // Produce
12
+ const produce = [
13
+ 'apple', 'banana', 'blackberries', 'blueberries', 'cherries',
14
+ 'lettuce', 'pomegranate', 'red_onion', 'serrano_pepper', 'tomato'
15
+ ];
16
+ // Meat & Seafood
17
+ const meat = [
18
+ 'beef_tenderloin', 'chicken_drumsticks', 'chicken_tenders', 'chicken_wings',
19
+ 'chuck_roast', 'ground_beef', 'pork_chops', 'pork_loin', 'pork_shoulder',
20
+ 'pork_tenderloin', 'rotisserie_chicken', 'sirloin_steak'
21
+ ];
22
+ // Dairy
23
+ const dairy = [
24
+ 'butter', 'goat_cheese', 'greek_yogurt', 'half_and_half', 'provolone_cheese',
25
+ 'salted_butter', 'shredded_cheese', 'sliced_cheese', 'unsalted_butter',
26
+ 'whole_milk', 'yogurt'
27
+ ];
28
+ // Packaged/Pantry
29
+ const packaged = [
30
+ 'all_purpose_flour', 'crushed_tomatoes', 'flour', 'honey', 'mixed_nuts',
31
+ 'rice', 'sugar', 'white_rice'
32
+ ];
33
+ // Beverages
34
+ const beverage = [
35
+ 'bottled_water', 'sparkling_water'
36
+ ];
37
+ if (produce.includes(label))
38
+ return 'produce';
39
+ if (meat.includes(label))
40
+ return 'meat';
41
+ if (dairy.includes(label))
42
+ return 'dairy';
43
+ if (packaged.includes(label))
44
+ return 'packaged';
45
+ if (beverage.includes(label))
46
+ return 'beverage';
47
+ // Default categorization based on common patterns
48
+ if (label.includes('cheese'))
49
+ return 'dairy';
50
+ if (label.includes('milk') || label.includes('cream') || label.includes('butter'))
51
+ return 'dairy';
52
+ if (label.includes('beef') || label.includes('chicken') || label.includes('pork') ||
53
+ label.includes('fish') || label.includes('shrimp') || label.includes('salmon'))
54
+ return 'meat';
55
+ if (label.includes('bread') || label.includes('bun'))
56
+ return 'bakery';
57
+ if (label.includes('juice') || label.includes('water') || label.includes('soda'))
58
+ return 'beverage';
59
+ return 'unknown';
60
+ }
61
+ /**
62
+ * Map class index to label and category (43 classes)
63
+ */
64
+ export const CLASS_LABELS = {
65
+ 0: { label: 'all_purpose_flour', category: 'packaged' },
66
+ 1: { label: 'apple', category: 'produce' },
67
+ 2: { label: 'banana', category: 'produce' },
68
+ 3: { label: 'beef_tenderloin', category: 'meat' },
69
+ 4: { label: 'blackberries', category: 'produce' },
70
+ 5: { label: 'blueberries', category: 'produce' },
71
+ 6: { label: 'bottled_water', category: 'beverage' },
72
+ 7: { label: 'butter', category: 'dairy' },
73
+ 8: { label: 'cherries', category: 'produce' },
74
+ 9: { label: 'chicken_drumsticks', category: 'meat' },
75
+ 10: { label: 'chicken_tenders', category: 'meat' },
76
+ 11: { label: 'chicken_wings', category: 'meat' },
77
+ 12: { label: 'chuck_roast', category: 'meat' },
78
+ 13: { label: 'crushed_tomatoes', category: 'packaged' },
79
+ 14: { label: 'flour', category: 'packaged' },
80
+ 15: { label: 'goat_cheese', category: 'dairy' },
81
+ 16: { label: 'greek_yogurt', category: 'dairy' },
82
+ 17: { label: 'ground_beef', category: 'meat' },
83
+ 18: { label: 'half_and_half', category: 'dairy' },
84
+ 19: { label: 'honey', category: 'packaged' },
85
+ 20: { label: 'lettuce', category: 'produce' },
86
+ 21: { label: 'mixed_nuts', category: 'snack' },
87
+ 22: { label: 'pomegranate', category: 'produce' },
88
+ 23: { label: 'pork_chops', category: 'meat' },
89
+ 24: { label: 'pork_loin', category: 'meat' },
90
+ 25: { label: 'pork_shoulder', category: 'meat' },
91
+ 26: { label: 'pork_tenderloin', category: 'meat' },
92
+ 27: { label: 'provolone_cheese', category: 'dairy' },
93
+ 28: { label: 'red_onion', category: 'produce' },
94
+ 29: { label: 'rice', category: 'packaged' },
95
+ 30: { label: 'rotisserie_chicken', category: 'meat' },
96
+ 31: { label: 'salted_butter', category: 'dairy' },
97
+ 32: { label: 'serrano_pepper', category: 'produce' },
98
+ 33: { label: 'shredded_cheese', category: 'dairy' },
99
+ 34: { label: 'sirloin_steak', category: 'meat' },
100
+ 35: { label: 'sliced_cheese', category: 'dairy' },
101
+ 36: { label: 'sparkling_water', category: 'beverage' },
102
+ 37: { label: 'sugar', category: 'packaged' },
103
+ 38: { label: 'tomato', category: 'produce' },
104
+ 39: { label: 'unsalted_butter', category: 'dairy' },
105
+ 40: { label: 'white_rice', category: 'packaged' },
106
+ 41: { label: 'whole_milk', category: 'dairy' },
107
+ 42: { label: 'yogurt', category: 'dairy' },
108
+ };
109
+ /**
110
+ * Number of classes in the model
111
+ */
112
+ export const NUM_CLASSES = 43;
113
+ /**
114
+ * Get label info for a class index
115
+ */
116
+ export function getClassInfo(classIndex) {
117
+ const info = CLASS_LABELS[classIndex];
118
+ if (info) {
119
+ return info;
120
+ }
121
+ // Fallback for unknown indices
122
+ return { label: `class_${classIndex}`, category: 'unknown' };
123
+ }
124
+ /**
125
+ * Get all labels as an array (ordered by class index)
126
+ */
127
+ export function getLabelsArray() {
128
+ const labels = [];
129
+ for (let i = 0; i < NUM_CLASSES; i++) {
130
+ labels.push(CLASS_LABELS[i]?.label ?? `class_${i}`);
131
+ }
132
+ return labels;
133
+ }
134
+ /**
135
+ * Category to class indices mapping
136
+ */
137
+ export const CATEGORY_CLASSES = {
138
+ produce: Object.entries(CLASS_LABELS)
139
+ .filter(([, v]) => v.category === 'produce')
140
+ .map(([k]) => parseInt(k, 10)),
141
+ meat: Object.entries(CLASS_LABELS)
142
+ .filter(([, v]) => v.category === 'meat')
143
+ .map(([k]) => parseInt(k, 10)),
144
+ dairy: Object.entries(CLASS_LABELS)
145
+ .filter(([, v]) => v.category === 'dairy')
146
+ .map(([k]) => parseInt(k, 10)),
147
+ packaged: Object.entries(CLASS_LABELS)
148
+ .filter(([, v]) => v.category === 'packaged')
149
+ .map(([k]) => parseInt(k, 10)),
150
+ bakery: Object.entries(CLASS_LABELS)
151
+ .filter(([, v]) => v.category === 'bakery')
152
+ .map(([k]) => parseInt(k, 10)),
153
+ snack: Object.entries(CLASS_LABELS)
154
+ .filter(([, v]) => v.category === 'snack')
155
+ .map(([k]) => parseInt(k, 10)),
156
+ beverage: Object.entries(CLASS_LABELS)
157
+ .filter(([, v]) => v.category === 'beverage')
158
+ .map(([k]) => parseInt(k, 10)),
159
+ condiment: Object.entries(CLASS_LABELS)
160
+ .filter(([, v]) => v.category === 'condiment')
161
+ .map(([k]) => parseInt(k, 10)),
162
+ spice: Object.entries(CLASS_LABELS)
163
+ .filter(([, v]) => v.category === 'spice')
164
+ .map(([k]) => parseInt(k, 10)),
165
+ frozen: Object.entries(CLASS_LABELS)
166
+ .filter(([, v]) => v.category === 'frozen')
167
+ .map(([k]) => parseInt(k, 10)),
168
+ unknown: Object.entries(CLASS_LABELS)
169
+ .filter(([, v]) => v.category === 'unknown')
170
+ .map(([k]) => parseInt(k, 10)),
171
+ };
172
+ // Export the categorize function for use elsewhere
173
+ export { categorizeLabel };
174
+ //# sourceMappingURL=classLabels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classLabels.js","sourceRoot":"","sources":["../../../src/hooks/classLabels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Class label mappings for YOLOv8 COCO model
3
+ *
4
+ * These labels correspond to the 80 classes in the COCO dataset.
5
+ * Food-related classes: banana (46), apple (47), sandwich (48), orange (49),
6
+ * broccoli (50), carrot (51), hot dog (52), pizza (53), donut (54), cake (55)
7
+ */
8
+ /**
9
+ * COCO class names in order
10
+ */
11
+ export const COCO_CLASSES = [
12
+ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck',
13
+ 'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench',
14
+ 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra',
15
+ 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
16
+ 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove',
17
+ 'skateboard', 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup',
18
+ 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange',
19
+ 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
20
+ 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse',
21
+ 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink',
22
+ 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier',
23
+ 'toothbrush'
24
+ ];
25
+ /**
26
+ * Map COCO class to a product category
27
+ */
28
+ function getCocoCategory(label) {
29
+ // Food items
30
+ const produceItems = ['banana', 'apple', 'orange', 'broccoli', 'carrot'];
31
+ const meatItems = ['hot dog'];
32
+ const bakeryItems = ['sandwich', 'pizza', 'donut', 'cake'];
33
+ const dairyItems = [];
34
+ const beverageItems = ['bottle', 'wine glass', 'cup'];
35
+ const condimentItems = ['bowl']; // Often contains condiments/sauces
36
+ if (produceItems.includes(label))
37
+ return 'produce';
38
+ if (meatItems.includes(label))
39
+ return 'meat';
40
+ if (bakeryItems.includes(label))
41
+ return 'bakery';
42
+ if (dairyItems.includes(label))
43
+ return 'dairy';
44
+ if (beverageItems.includes(label))
45
+ return 'beverage';
46
+ if (condimentItems.includes(label))
47
+ return 'condiment';
48
+ // Kitchen items (useful for context)
49
+ const kitchenItems = [
50
+ 'fork', 'knife', 'spoon', 'microwave', 'oven', 'toaster', 'sink',
51
+ 'refrigerator', 'dining table'
52
+ ];
53
+ if (kitchenItems.includes(label))
54
+ return 'unknown'; // Not a product but kitchen context
55
+ return 'unknown';
56
+ }
57
+ /**
58
+ * Map class index to label and category for COCO
59
+ */
60
+ export const CLASS_LABELS_COCO = Object.fromEntries(COCO_CLASSES.map((label, index) => [
61
+ index,
62
+ { label, category: getCocoCategory(label) }
63
+ ]));
64
+ /**
65
+ * Number of classes in COCO model
66
+ */
67
+ export const NUM_CLASSES_COCO = 80;
68
+ /**
69
+ * Food class indices in COCO (useful for filtering)
70
+ */
71
+ export const FOOD_CLASS_INDICES = [46, 47, 48, 49, 50, 51, 52, 53, 54, 55];
72
+ /**
73
+ * Kitchen/dining class indices (context)
74
+ */
75
+ export const KITCHEN_CLASS_INDICES = [39, 40, 41, 42, 43, 44, 45, 60, 68, 69, 70, 71, 72];
76
+ /**
77
+ * Get label info for a COCO class index
78
+ */
79
+ export function getCocoClassInfo(classIndex) {
80
+ const info = CLASS_LABELS_COCO[classIndex];
81
+ if (info) {
82
+ return info;
83
+ }
84
+ return { label: `class_${classIndex}`, category: 'unknown' };
85
+ }
86
+ /**
87
+ * Check if a class index is a food item
88
+ */
89
+ export function isFoodClass(classIndex) {
90
+ return FOOD_CLASS_INDICES.includes(classIndex);
91
+ }
92
+ /**
93
+ * Get all COCO labels as an array
94
+ */
95
+ export function getCocoLabelsArray() {
96
+ return [...COCO_CLASSES];
97
+ }
98
+ //# sourceMappingURL=classLabelsCoco.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classLabelsCoco.js","sourceRoot":"","sources":["../../../src/hooks/classLabelsCoco.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO;IAC7E,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO;IAC9E,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO;IAC1E,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS;IAC1E,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,gBAAgB;IAC5E,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK;IACzE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ;IACzE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAC3E,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;IACxE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAC1E,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY;IAC/E,YAAY;CACJ,CAAC;AAEX;;GAEG;AACH,SAAS,eAAe,CAAC,KAAa;IACpC,aAAa;IACb,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACzE,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,mCAAmC;IAEpE,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAC7C,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACjD,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/C,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC;IACrD,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAEvD,qCAAqC;IACrC,MAAM,YAAY,GAAG;QACnB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;QAChE,cAAc,EAAE,cAAc;KAC/B,CAAC;IACF,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC,CAAC,oCAAoC;IAExF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAkB,MAAM,CAAC,WAAW,CAChE,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;IACjC,KAAK;IACL,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE;CAC5C,CAAC,CACH,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAE3E;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAE1F;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IAIjD,MAAM,IAAI,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,UAAkB;IAC5C,OAAO,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Hooks exports
3
+ */
4
+ export { useProductDetector, default as useProductDetectorDefault } from './useProductDetector';
5
+ export { useMultiBarcodeScanner, default as useMultiBarcodeScannerDefault } from './useMultiBarcodeScanner';
6
+ export { useReceiptScanner, default as useReceiptScannerDefault } from './useReceiptScanner';
7
+ export { useVideoScanner, default as useVideoScannerDefault, } from './useVideoScanner';
8
+ export { CLASS_LABELS, NUM_CLASSES, getClassInfo, getLabelsArray, CATEGORY_CLASSES } from './classLabels';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,sBAAsB,EAAE,OAAO,IAAI,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAC5G,OAAO,EAAE,iBAAiB,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EACL,eAAe,EACf,OAAO,IAAI,sBAAsB,GAKlC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}