@souscheflabs/ml-vision 0.1.1 → 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
@@ -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"}