edgeflowjs 0.1.0 → 0.3.0
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/README.md +200 -66
- package/dist/backends/index.d.ts +9 -2
- package/dist/backends/index.d.ts.map +1 -1
- package/dist/backends/index.js +13 -13
- package/dist/backends/index.js.map +1 -1
- package/dist/backends/onnx.d.ts +49 -4
- package/dist/backends/onnx.d.ts.map +1 -1
- package/dist/backends/onnx.js +165 -76
- package/dist/backends/onnx.js.map +1 -1
- package/dist/backends/transformers-adapter.d.ts +99 -0
- package/dist/backends/transformers-adapter.d.ts.map +1 -0
- package/dist/backends/transformers-adapter.js +171 -0
- package/dist/backends/transformers-adapter.js.map +1 -0
- package/dist/backends/webgpu.d.ts +7 -5
- package/dist/backends/webgpu.d.ts.map +1 -1
- package/dist/backends/webgpu.js +7 -5
- package/dist/backends/webgpu.js.map +1 -1
- package/dist/backends/webnn.d.ts +6 -5
- package/dist/backends/webnn.d.ts.map +1 -1
- package/dist/backends/webnn.js +6 -5
- package/dist/backends/webnn.js.map +1 -1
- package/dist/core/composer.d.ts +118 -0
- package/dist/core/composer.d.ts.map +1 -0
- package/dist/core/composer.js +163 -0
- package/dist/core/composer.js.map +1 -0
- package/dist/core/device-profiler.d.ts +75 -0
- package/dist/core/device-profiler.d.ts.map +1 -0
- package/dist/core/device-profiler.js +131 -0
- package/dist/core/device-profiler.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/memory.d.ts +22 -2
- package/dist/core/memory.d.ts.map +1 -1
- package/dist/core/memory.js +49 -13
- package/dist/core/memory.js.map +1 -1
- package/dist/core/plugin.d.ts +100 -0
- package/dist/core/plugin.d.ts.map +1 -0
- package/dist/core/plugin.js +106 -0
- package/dist/core/plugin.js.map +1 -0
- package/dist/core/runtime.d.ts +4 -0
- package/dist/core/runtime.d.ts.map +1 -1
- package/dist/core/runtime.js +18 -0
- package/dist/core/runtime.js.map +1 -1
- package/dist/core/scheduler.d.ts +17 -0
- package/dist/core/scheduler.d.ts.map +1 -1
- package/dist/core/scheduler.js +101 -3
- package/dist/core/scheduler.js.map +1 -1
- package/dist/core/types.d.ts +14 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker.d.ts +202 -0
- package/dist/core/worker.d.ts.map +1 -0
- package/dist/core/worker.js +477 -0
- package/dist/core/worker.js.map +1 -0
- package/dist/edgeflow.browser.js +9789 -4379
- package/dist/edgeflow.browser.js.map +4 -4
- package/dist/edgeflow.browser.min.js +435 -5
- package/dist/edgeflow.browser.min.js.map +4 -4
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -12
- package/dist/index.js.map +1 -1
- package/dist/pipelines/automatic-speech-recognition.d.ts +63 -0
- package/dist/pipelines/automatic-speech-recognition.d.ts.map +1 -0
- package/dist/pipelines/automatic-speech-recognition.js +269 -0
- package/dist/pipelines/automatic-speech-recognition.js.map +1 -0
- package/dist/pipelines/base.d.ts +6 -1
- package/dist/pipelines/base.d.ts.map +1 -1
- package/dist/pipelines/base.js +12 -2
- package/dist/pipelines/base.js.map +1 -1
- package/dist/pipelines/feature-extraction.d.ts +5 -40
- package/dist/pipelines/feature-extraction.d.ts.map +1 -1
- package/dist/pipelines/feature-extraction.js +44 -63
- package/dist/pipelines/feature-extraction.js.map +1 -1
- package/dist/pipelines/image-classification.d.ts +4 -36
- package/dist/pipelines/image-classification.d.ts.map +1 -1
- package/dist/pipelines/image-classification.js +22 -60
- package/dist/pipelines/image-classification.js.map +1 -1
- package/dist/pipelines/image-segmentation.d.ts +221 -0
- package/dist/pipelines/image-segmentation.d.ts.map +1 -0
- package/dist/pipelines/image-segmentation.js +535 -0
- package/dist/pipelines/image-segmentation.js.map +1 -0
- package/dist/pipelines/index.d.ts +18 -0
- package/dist/pipelines/index.d.ts.map +1 -1
- package/dist/pipelines/index.js +51 -2
- package/dist/pipelines/index.js.map +1 -1
- package/dist/pipelines/object-detection.d.ts +44 -0
- package/dist/pipelines/object-detection.d.ts.map +1 -0
- package/dist/pipelines/object-detection.js +218 -0
- package/dist/pipelines/object-detection.js.map +1 -0
- package/dist/pipelines/question-answering.d.ts +41 -0
- package/dist/pipelines/question-answering.d.ts.map +1 -0
- package/dist/pipelines/question-answering.js +164 -0
- package/dist/pipelines/question-answering.js.map +1 -0
- package/dist/pipelines/text-classification.d.ts +3 -39
- package/dist/pipelines/text-classification.d.ts.map +1 -1
- package/dist/pipelines/text-classification.js +29 -67
- package/dist/pipelines/text-classification.js.map +1 -1
- package/dist/pipelines/text-generation.d.ts +281 -0
- package/dist/pipelines/text-generation.d.ts.map +1 -0
- package/dist/pipelines/text-generation.js +766 -0
- package/dist/pipelines/text-generation.js.map +1 -0
- package/dist/pipelines/zero-shot-classification.d.ts +45 -0
- package/dist/pipelines/zero-shot-classification.d.ts.map +1 -0
- package/dist/pipelines/zero-shot-classification.js +140 -0
- package/dist/pipelines/zero-shot-classification.js.map +1 -0
- package/dist/tools/benchmark.d.ts +92 -0
- package/dist/tools/benchmark.d.ts.map +1 -0
- package/dist/tools/benchmark.js +213 -0
- package/dist/tools/benchmark.js.map +1 -0
- package/dist/tools/debugger.d.ts +258 -0
- package/dist/tools/debugger.d.ts.map +1 -0
- package/dist/tools/debugger.js +624 -0
- package/dist/tools/debugger.js.map +1 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +16 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/monitor.d.ts +284 -0
- package/dist/tools/monitor.d.ts.map +1 -0
- package/dist/tools/monitor.js +921 -0
- package/dist/tools/monitor.js.map +1 -0
- package/dist/tools/quantization.d.ts +235 -0
- package/dist/tools/quantization.d.ts.map +1 -0
- package/dist/tools/quantization.js +830 -0
- package/dist/tools/quantization.js.map +1 -0
- package/dist/utils/hub.d.ts +162 -0
- package/dist/utils/hub.d.ts.map +1 -0
- package/dist/utils/hub.js +311 -0
- package/dist/utils/hub.js.map +1 -0
- package/dist/utils/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +5 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/model-loader.d.ts.map +1 -1
- package/dist/utils/model-loader.js +106 -30
- package/dist/utils/model-loader.js.map +1 -1
- package/dist/utils/offline.d.ts +147 -0
- package/dist/utils/offline.d.ts.map +1 -0
- package/dist/utils/offline.js +405 -0
- package/dist/utils/offline.js.map +1 -0
- package/dist/utils/preprocessor.d.ts +82 -6
- package/dist/utils/preprocessor.d.ts.map +1 -1
- package/dist/utils/preprocessor.js +278 -21
- package/dist/utils/preprocessor.js.map +1 -1
- package/dist/utils/tokenizer.d.ts +197 -72
- package/dist/utils/tokenizer.d.ts.map +1 -1
- package/dist/utils/tokenizer.js +558 -274
- package/dist/utils/tokenizer.js.map +1 -1
- package/package.json +26 -11
|
@@ -0,0 +1,535 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* edgeFlow.js - Image Segmentation Pipeline
|
|
3
|
+
*
|
|
4
|
+
* Interactive image segmentation using SAM (Segment Anything Model).
|
|
5
|
+
* Supports point prompts and bounding box prompts.
|
|
6
|
+
*/
|
|
7
|
+
import { EdgeFlowTensor } from '../core/tensor.js';
|
|
8
|
+
import { BasePipeline, registerPipeline } from './base.js';
|
|
9
|
+
import { loadModel, loadModelFromBuffer, runInference, runInferenceNamed } from '../core/runtime.js';
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Default Model URLs (SlimSAM - quantized for browser)
|
|
12
|
+
// ============================================================================
|
|
13
|
+
const DEFAULT_SAM_MODELS = {
|
|
14
|
+
encoder: 'https://huggingface.co/Xenova/slimsam-77-uniform/resolve/main/onnx/vision_encoder_quantized.onnx',
|
|
15
|
+
decoder: 'https://huggingface.co/Xenova/slimsam-77-uniform/resolve/main/onnx/prompt_encoder_mask_decoder_quantized.onnx',
|
|
16
|
+
};
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Image Segmentation Pipeline
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* ImageSegmentationPipeline - Interactive image segmentation
|
|
22
|
+
*
|
|
23
|
+
* Uses SAM-style models for point/box prompted segmentation.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const segmenter = createImageSegmentationPipeline();
|
|
28
|
+
*
|
|
29
|
+
* // Load models with progress callback
|
|
30
|
+
* await segmenter.loadModels((progress) => {
|
|
31
|
+
* console.log(`Loading ${progress.model}: ${progress.progress}%`);
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* // Set image and segment
|
|
35
|
+
* await segmenter.setImage(imageElement);
|
|
36
|
+
* const result = await segmenter.segment({
|
|
37
|
+
* points: [{ x: 0.5, y: 0.5, label: 1 }]
|
|
38
|
+
* });
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export class ImageSegmentationPipeline extends BasePipeline {
|
|
42
|
+
encoderModel = null;
|
|
43
|
+
decoderModel = null;
|
|
44
|
+
imageEmbedding = null;
|
|
45
|
+
imagePositionalEmbedding = null;
|
|
46
|
+
currentImageSize = null;
|
|
47
|
+
resizedImageSize = null;
|
|
48
|
+
inputSize = 1024; // SAM default input size
|
|
49
|
+
modelsLoaded = false;
|
|
50
|
+
// Custom model URLs
|
|
51
|
+
encoderUrl;
|
|
52
|
+
decoderUrl;
|
|
53
|
+
constructor(config) {
|
|
54
|
+
super(config);
|
|
55
|
+
this.encoderUrl = DEFAULT_SAM_MODELS.encoder;
|
|
56
|
+
this.decoderUrl = DEFAULT_SAM_MODELS.decoder;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Check if models are loaded
|
|
60
|
+
*/
|
|
61
|
+
get isModelsLoaded() {
|
|
62
|
+
return this.modelsLoaded;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Set custom model URLs
|
|
66
|
+
*/
|
|
67
|
+
setModelUrls(encoder, decoder) {
|
|
68
|
+
this.encoderUrl = encoder;
|
|
69
|
+
this.decoderUrl = decoder;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Load both encoder and decoder models with progress callback
|
|
73
|
+
*/
|
|
74
|
+
async loadModels(onProgress) {
|
|
75
|
+
if (this.modelsLoaded)
|
|
76
|
+
return;
|
|
77
|
+
// Load encoder
|
|
78
|
+
onProgress?.({ model: 'encoder', loaded: 0, total: 100, progress: 0 });
|
|
79
|
+
const encoderData = await this.fetchModelWithProgress(this.encoderUrl, (loaded, total) => {
|
|
80
|
+
onProgress?.({
|
|
81
|
+
model: 'encoder',
|
|
82
|
+
loaded,
|
|
83
|
+
total,
|
|
84
|
+
progress: Math.round((loaded / total) * 100),
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
this.encoderModel = await loadModelFromBuffer(encoderData, {
|
|
88
|
+
runtime: 'wasm', // Uses ONNXRuntime which auto-detects WebGPU internally
|
|
89
|
+
});
|
|
90
|
+
// Load decoder
|
|
91
|
+
onProgress?.({ model: 'decoder', loaded: 0, total: 100, progress: 0 });
|
|
92
|
+
const decoderData = await this.fetchModelWithProgress(this.decoderUrl, (loaded, total) => {
|
|
93
|
+
onProgress?.({
|
|
94
|
+
model: 'decoder',
|
|
95
|
+
loaded,
|
|
96
|
+
total,
|
|
97
|
+
progress: Math.round((loaded / total) * 100),
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
this.decoderModel = await loadModelFromBuffer(decoderData, {
|
|
101
|
+
runtime: 'wasm', // Uses ONNXRuntime which auto-detects WebGPU internally
|
|
102
|
+
});
|
|
103
|
+
this.modelsLoaded = true;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Fetch model with progress tracking
|
|
107
|
+
*/
|
|
108
|
+
async fetchModelWithProgress(url, onProgress) {
|
|
109
|
+
const response = await fetch(url);
|
|
110
|
+
if (!response.ok) {
|
|
111
|
+
throw new Error(`Failed to fetch model: ${response.status} ${response.statusText}`);
|
|
112
|
+
}
|
|
113
|
+
const contentLength = response.headers.get('content-length');
|
|
114
|
+
const total = contentLength ? parseInt(contentLength, 10) : 0;
|
|
115
|
+
if (!response.body) {
|
|
116
|
+
// Fallback if no streaming support
|
|
117
|
+
const buffer = await response.arrayBuffer();
|
|
118
|
+
onProgress(buffer.byteLength, buffer.byteLength);
|
|
119
|
+
return buffer;
|
|
120
|
+
}
|
|
121
|
+
const reader = response.body.getReader();
|
|
122
|
+
const chunks = [];
|
|
123
|
+
let loaded = 0;
|
|
124
|
+
while (true) {
|
|
125
|
+
const { done, value } = await reader.read();
|
|
126
|
+
if (done)
|
|
127
|
+
break;
|
|
128
|
+
chunks.push(value);
|
|
129
|
+
loaded += value.length;
|
|
130
|
+
onProgress(loaded, total || loaded);
|
|
131
|
+
}
|
|
132
|
+
// Combine chunks into ArrayBuffer
|
|
133
|
+
const buffer = new Uint8Array(loaded);
|
|
134
|
+
let offset = 0;
|
|
135
|
+
for (const chunk of chunks) {
|
|
136
|
+
buffer.set(chunk, offset);
|
|
137
|
+
offset += chunk.length;
|
|
138
|
+
}
|
|
139
|
+
return buffer.buffer;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Initialize pipeline (override to skip default model loading)
|
|
143
|
+
*/
|
|
144
|
+
async initialize() {
|
|
145
|
+
if (this.isReady)
|
|
146
|
+
return;
|
|
147
|
+
// Don't call super.initialize() - we handle model loading separately
|
|
148
|
+
this.isReady = true;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Load encoder model (processes the image once)
|
|
152
|
+
*/
|
|
153
|
+
async loadEncoder(modelUrl) {
|
|
154
|
+
this.encoderModel = await loadModel(modelUrl, {
|
|
155
|
+
runtime: 'wasm',
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Load decoder model (processes prompts to generate masks)
|
|
160
|
+
*/
|
|
161
|
+
async loadDecoder(modelUrl) {
|
|
162
|
+
this.decoderModel = await loadModel(modelUrl, {
|
|
163
|
+
runtime: 'wasm',
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Set and encode the image (call once per image)
|
|
168
|
+
*/
|
|
169
|
+
async setImage(image) {
|
|
170
|
+
if (!this.modelsLoaded) {
|
|
171
|
+
throw new Error('Models not loaded. Call loadModels() first.');
|
|
172
|
+
}
|
|
173
|
+
// Get image data
|
|
174
|
+
const imageData = await this.loadImage(image);
|
|
175
|
+
this.currentImageSize = {
|
|
176
|
+
width: imageData.width,
|
|
177
|
+
height: imageData.height,
|
|
178
|
+
};
|
|
179
|
+
// Preprocess image for SAM
|
|
180
|
+
const { tensor: inputTensor, resizedSize } = this.preprocessImage(imageData);
|
|
181
|
+
this.resizedImageSize = resizedSize;
|
|
182
|
+
// Run encoder
|
|
183
|
+
if (this.encoderModel) {
|
|
184
|
+
const outputs = await runInference(this.encoderModel, [inputTensor]);
|
|
185
|
+
// SlimSAM encoder outputs: [image_embeddings, image_positional_embeddings]
|
|
186
|
+
this.imageEmbedding = outputs[0];
|
|
187
|
+
this.imagePositionalEmbedding = outputs[1];
|
|
188
|
+
console.log('[SAM] Encoder outputs:', outputs.length);
|
|
189
|
+
console.log('[SAM] image_embeddings shape:', this.imageEmbedding.shape);
|
|
190
|
+
if (this.imagePositionalEmbedding) {
|
|
191
|
+
console.log('[SAM] image_positional_embeddings shape:', this.imagePositionalEmbedding.shape);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
throw new Error('Encoder model not loaded');
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Segment the image with given prompts
|
|
200
|
+
*/
|
|
201
|
+
async segment(options = {}) {
|
|
202
|
+
if (!this.imageEmbedding || !this.currentImageSize || !this.resizedImageSize) {
|
|
203
|
+
throw new Error('No image set. Call setImage() first.');
|
|
204
|
+
}
|
|
205
|
+
if (!this.decoderModel) {
|
|
206
|
+
throw new Error('Decoder model not loaded');
|
|
207
|
+
}
|
|
208
|
+
const startTime = performance.now();
|
|
209
|
+
const { points = [], boxes = [], maskThreshold = 0.0, returnAllMasks = false } = options;
|
|
210
|
+
// Prepare inputs for decoder
|
|
211
|
+
const decoderInputs = this.prepareDecoderInputs(points, boxes);
|
|
212
|
+
// Add image embeddings to inputs
|
|
213
|
+
decoderInputs.set('image_embeddings', this.imageEmbedding);
|
|
214
|
+
// Add positional embeddings (required by SlimSAM)
|
|
215
|
+
if (this.imagePositionalEmbedding) {
|
|
216
|
+
decoderInputs.set('image_positional_embeddings', this.imagePositionalEmbedding);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
throw new Error('image_positional_embeddings not available from encoder');
|
|
220
|
+
}
|
|
221
|
+
// Run decoder model with named inputs
|
|
222
|
+
const outputs = await runInferenceNamed(this.decoderModel, decoderInputs);
|
|
223
|
+
// SAM decoder outputs: [masks, iou_predictions]
|
|
224
|
+
const masks = outputs[0];
|
|
225
|
+
const scores = outputs[1];
|
|
226
|
+
// Post-process masks
|
|
227
|
+
const result = this.postprocessMasks(masks, scores, maskThreshold, returnAllMasks);
|
|
228
|
+
result.processingTime = performance.now() - startTime;
|
|
229
|
+
return result;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Run segmentation (implements BasePipeline interface)
|
|
233
|
+
*/
|
|
234
|
+
async run(input, options) {
|
|
235
|
+
await this.setImage(input);
|
|
236
|
+
return this.segment(options);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Load image from various sources
|
|
240
|
+
*/
|
|
241
|
+
async loadImage(input) {
|
|
242
|
+
// Handle different input types
|
|
243
|
+
if (typeof input === 'string') {
|
|
244
|
+
// URL or base64
|
|
245
|
+
return this.loadImageFromUrl(input);
|
|
246
|
+
}
|
|
247
|
+
else if (input instanceof HTMLImageElement) {
|
|
248
|
+
return this.imageElementToImageData(input);
|
|
249
|
+
}
|
|
250
|
+
else if (input instanceof HTMLCanvasElement) {
|
|
251
|
+
return this.canvasToImageData(input);
|
|
252
|
+
}
|
|
253
|
+
else if (input instanceof ImageData) {
|
|
254
|
+
return input;
|
|
255
|
+
}
|
|
256
|
+
else if (typeof ImageBitmap !== 'undefined' && input instanceof ImageBitmap) {
|
|
257
|
+
return this.imageBitmapToImageData(input);
|
|
258
|
+
}
|
|
259
|
+
throw new Error('Unsupported image input type');
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Load image from URL
|
|
263
|
+
*/
|
|
264
|
+
async loadImageFromUrl(url) {
|
|
265
|
+
return new Promise((resolve, reject) => {
|
|
266
|
+
const img = new Image();
|
|
267
|
+
img.crossOrigin = 'anonymous';
|
|
268
|
+
img.onload = () => {
|
|
269
|
+
const canvas = document.createElement('canvas');
|
|
270
|
+
canvas.width = img.width;
|
|
271
|
+
canvas.height = img.height;
|
|
272
|
+
const ctx = canvas.getContext('2d');
|
|
273
|
+
ctx.drawImage(img, 0, 0);
|
|
274
|
+
resolve(ctx.getImageData(0, 0, img.width, img.height));
|
|
275
|
+
};
|
|
276
|
+
img.onerror = reject;
|
|
277
|
+
img.src = url;
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Convert HTMLImageElement to ImageData
|
|
282
|
+
*/
|
|
283
|
+
imageElementToImageData(img) {
|
|
284
|
+
const canvas = document.createElement('canvas');
|
|
285
|
+
canvas.width = img.naturalWidth || img.width;
|
|
286
|
+
canvas.height = img.naturalHeight || img.height;
|
|
287
|
+
const ctx = canvas.getContext('2d');
|
|
288
|
+
ctx.drawImage(img, 0, 0);
|
|
289
|
+
return ctx.getImageData(0, 0, canvas.width, canvas.height);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Convert canvas to ImageData
|
|
293
|
+
*/
|
|
294
|
+
canvasToImageData(canvas) {
|
|
295
|
+
const ctx = canvas.getContext('2d');
|
|
296
|
+
return ctx.getImageData(0, 0, canvas.width, canvas.height);
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Convert ImageBitmap to ImageData
|
|
300
|
+
*/
|
|
301
|
+
imageBitmapToImageData(bitmap) {
|
|
302
|
+
const canvas = document.createElement('canvas');
|
|
303
|
+
canvas.width = bitmap.width;
|
|
304
|
+
canvas.height = bitmap.height;
|
|
305
|
+
const ctx = canvas.getContext('2d');
|
|
306
|
+
ctx.drawImage(bitmap, 0, 0);
|
|
307
|
+
return ctx.getImageData(0, 0, canvas.width, canvas.height);
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Preprocess image for SAM
|
|
311
|
+
*/
|
|
312
|
+
preprocessImage(imageData) {
|
|
313
|
+
const { width, height } = imageData;
|
|
314
|
+
// Calculate resize dimensions (longest side = inputSize)
|
|
315
|
+
const scale = this.inputSize / Math.max(width, height);
|
|
316
|
+
const newWidth = Math.round(width * scale);
|
|
317
|
+
const newHeight = Math.round(height * scale);
|
|
318
|
+
// Create resized canvas with padding
|
|
319
|
+
const canvas = document.createElement('canvas');
|
|
320
|
+
canvas.width = this.inputSize;
|
|
321
|
+
canvas.height = this.inputSize;
|
|
322
|
+
const ctx = canvas.getContext('2d');
|
|
323
|
+
// Fill with padding color (SAM uses pixel mean)
|
|
324
|
+
ctx.fillStyle = `rgb(123.675, 116.28, 103.53)`;
|
|
325
|
+
ctx.fillRect(0, 0, this.inputSize, this.inputSize);
|
|
326
|
+
// Draw resized image (top-left aligned)
|
|
327
|
+
const tempCanvas = document.createElement('canvas');
|
|
328
|
+
tempCanvas.width = width;
|
|
329
|
+
tempCanvas.height = height;
|
|
330
|
+
const tempCtx = tempCanvas.getContext('2d');
|
|
331
|
+
tempCtx.putImageData(imageData, 0, 0);
|
|
332
|
+
ctx.drawImage(tempCanvas, 0, 0, newWidth, newHeight);
|
|
333
|
+
// Get pixel data
|
|
334
|
+
const resizedData = ctx.getImageData(0, 0, this.inputSize, this.inputSize);
|
|
335
|
+
// Convert to tensor (NCHW format, normalized with ImageNet mean/std)
|
|
336
|
+
const tensorData = new Float32Array(3 * this.inputSize * this.inputSize);
|
|
337
|
+
const mean = [123.675, 116.28, 103.53];
|
|
338
|
+
const std = [58.395, 57.12, 57.375];
|
|
339
|
+
for (let i = 0; i < this.inputSize * this.inputSize; i++) {
|
|
340
|
+
const pixelIdx = i * 4;
|
|
341
|
+
tensorData[i] = (resizedData.data[pixelIdx] - mean[0]) / std[0]; // R
|
|
342
|
+
tensorData[this.inputSize * this.inputSize + i] =
|
|
343
|
+
(resizedData.data[pixelIdx + 1] - mean[1]) / std[1]; // G
|
|
344
|
+
tensorData[2 * this.inputSize * this.inputSize + i] =
|
|
345
|
+
(resizedData.data[pixelIdx + 2] - mean[2]) / std[2]; // B
|
|
346
|
+
}
|
|
347
|
+
return {
|
|
348
|
+
tensor: new EdgeFlowTensor(tensorData, [1, 3, this.inputSize, this.inputSize], 'float32'),
|
|
349
|
+
resizedSize: { width: newWidth, height: newHeight },
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Prepare decoder inputs (prompts) for SlimSAM
|
|
354
|
+
*
|
|
355
|
+
* SlimSAM prompt_encoder_mask_decoder expects these named inputs:
|
|
356
|
+
* - image_embeddings: [1, 256, 64, 64]
|
|
357
|
+
* - point_coords: [batch, num_points, 2]
|
|
358
|
+
* - point_labels: [batch, num_points]
|
|
359
|
+
* - mask_input: [batch, 1, 256, 256]
|
|
360
|
+
* - has_mask_input: [batch, 1]
|
|
361
|
+
* - orig_im_size: [2]
|
|
362
|
+
* - position_ids: [batch, num_points]
|
|
363
|
+
*/
|
|
364
|
+
prepareDecoderInputs(points, boxes) {
|
|
365
|
+
const { width: resizedW, height: resizedH } = this.resizedImageSize;
|
|
366
|
+
// Scale factors for converting normalized coords to resized image coords
|
|
367
|
+
const scaleX = resizedW;
|
|
368
|
+
const scaleY = resizedH;
|
|
369
|
+
const allPoints = [];
|
|
370
|
+
const allLabels = [];
|
|
371
|
+
// Add point prompts
|
|
372
|
+
for (const point of points) {
|
|
373
|
+
allPoints.push(point.x * scaleX, point.y * scaleY);
|
|
374
|
+
allLabels.push(point.label);
|
|
375
|
+
}
|
|
376
|
+
// Add box prompts (as two corner points)
|
|
377
|
+
for (const box of boxes) {
|
|
378
|
+
// Top-left corner (label 2)
|
|
379
|
+
allPoints.push(box.x1 * scaleX, box.y1 * scaleY);
|
|
380
|
+
allLabels.push(2);
|
|
381
|
+
// Bottom-right corner (label 3)
|
|
382
|
+
allPoints.push(box.x2 * scaleX, box.y2 * scaleY);
|
|
383
|
+
allLabels.push(3);
|
|
384
|
+
}
|
|
385
|
+
// Default point if no prompts (center of image)
|
|
386
|
+
if (allPoints.length === 0) {
|
|
387
|
+
allPoints.push(resizedW / 2, resizedH / 2);
|
|
388
|
+
allLabels.push(1);
|
|
389
|
+
}
|
|
390
|
+
const numPoints = allLabels.length;
|
|
391
|
+
const inputs = new Map();
|
|
392
|
+
// input_points: [1, 1, num_points, 2] - SlimSAM format (float32)
|
|
393
|
+
inputs.set('input_points', new EdgeFlowTensor(new Float32Array(allPoints), [1, 1, numPoints, 2], 'float32'));
|
|
394
|
+
// input_labels: [1, 1, num_points] - SlimSAM format (int64)
|
|
395
|
+
inputs.set('input_labels', new EdgeFlowTensor(BigInt64Array.from(allLabels.map(l => BigInt(l))), [1, 1, numPoints], 'int64'));
|
|
396
|
+
// Note: image_embeddings and image_positional_embeddings are added in segment()
|
|
397
|
+
// SlimSAM decoder only needs: image_embeddings, image_positional_embeddings, input_points, input_labels
|
|
398
|
+
return inputs;
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Post-process masks from decoder output
|
|
402
|
+
*/
|
|
403
|
+
postprocessMasks(masks, scores, threshold, returnAllMasks) {
|
|
404
|
+
const { width, height } = this.currentImageSize;
|
|
405
|
+
const scoresData = scores.toFloat32Array();
|
|
406
|
+
const masksData = masks.toFloat32Array();
|
|
407
|
+
// SAM outputs multiple masks (usually 3)
|
|
408
|
+
const numMasks = scoresData.length;
|
|
409
|
+
const maskShape = masks.shape; // [1, num_masks, H, W]
|
|
410
|
+
const maskH = maskShape[2] ?? height;
|
|
411
|
+
const maskW = maskShape[3] ?? width;
|
|
412
|
+
// Find best mask by score
|
|
413
|
+
let bestIdx = 0;
|
|
414
|
+
let bestScore = scoresData[0] ?? 0;
|
|
415
|
+
for (let i = 1; i < numMasks; i++) {
|
|
416
|
+
if ((scoresData[i] ?? 0) > bestScore) {
|
|
417
|
+
bestScore = scoresData[i] ?? 0;
|
|
418
|
+
bestIdx = i;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
// Extract and resize the best mask to original image size
|
|
422
|
+
const outputMask = this.resizeMask(masksData, bestIdx, maskW, maskH, width, height, threshold);
|
|
423
|
+
const result = {
|
|
424
|
+
mask: outputMask,
|
|
425
|
+
width,
|
|
426
|
+
height,
|
|
427
|
+
score: bestScore,
|
|
428
|
+
};
|
|
429
|
+
if (returnAllMasks && numMasks > 1) {
|
|
430
|
+
result.allMasks = [];
|
|
431
|
+
for (let m = 0; m < numMasks; m++) {
|
|
432
|
+
const mask = this.resizeMask(masksData, m, maskW, maskH, width, height, threshold);
|
|
433
|
+
result.allMasks.push({
|
|
434
|
+
mask,
|
|
435
|
+
score: scoresData[m] ?? 0,
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
return result;
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Resize mask from model output size to original image size
|
|
443
|
+
*/
|
|
444
|
+
resizeMask(masksData, maskIdx, srcW, srcH, dstW, dstH, threshold) {
|
|
445
|
+
const outputMask = new Uint8Array(dstW * dstH);
|
|
446
|
+
const maskOffset = maskIdx * srcW * srcH;
|
|
447
|
+
// Bilinear interpolation for resizing
|
|
448
|
+
for (let y = 0; y < dstH; y++) {
|
|
449
|
+
for (let x = 0; x < dstW; x++) {
|
|
450
|
+
// Map to source coordinates
|
|
451
|
+
const srcX = (x / dstW) * srcW;
|
|
452
|
+
const srcY = (y / dstH) * srcH;
|
|
453
|
+
// Bilinear interpolation
|
|
454
|
+
const x0 = Math.floor(srcX);
|
|
455
|
+
const x1 = Math.min(x0 + 1, srcW - 1);
|
|
456
|
+
const y0 = Math.floor(srcY);
|
|
457
|
+
const y1 = Math.min(y0 + 1, srcH - 1);
|
|
458
|
+
const xFrac = srcX - x0;
|
|
459
|
+
const yFrac = srcY - y0;
|
|
460
|
+
const v00 = masksData[maskOffset + y0 * srcW + x0] ?? 0;
|
|
461
|
+
const v01 = masksData[maskOffset + y0 * srcW + x1] ?? 0;
|
|
462
|
+
const v10 = masksData[maskOffset + y1 * srcW + x0] ?? 0;
|
|
463
|
+
const v11 = masksData[maskOffset + y1 * srcW + x1] ?? 0;
|
|
464
|
+
const value = v00 * (1 - xFrac) * (1 - yFrac) +
|
|
465
|
+
v01 * xFrac * (1 - yFrac) +
|
|
466
|
+
v10 * (1 - xFrac) * yFrac +
|
|
467
|
+
v11 * xFrac * yFrac;
|
|
468
|
+
// Apply sigmoid and threshold
|
|
469
|
+
const sigmoid = 1 / (1 + Math.exp(-value));
|
|
470
|
+
outputMask[y * dstW + x] = sigmoid > threshold ? 255 : 0;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
return outputMask;
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Clear the current image embedding
|
|
477
|
+
*/
|
|
478
|
+
clearImage() {
|
|
479
|
+
this.imageEmbedding = null;
|
|
480
|
+
this.imagePositionalEmbedding = null;
|
|
481
|
+
this.currentImageSize = null;
|
|
482
|
+
this.resizedImageSize = null;
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Preprocess (required by BasePipeline)
|
|
486
|
+
*/
|
|
487
|
+
async preprocess(input) {
|
|
488
|
+
const imageData = await this.loadImage(input);
|
|
489
|
+
const { tensor } = this.preprocessImage(imageData);
|
|
490
|
+
return [tensor];
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Postprocess (required by BasePipeline)
|
|
494
|
+
*/
|
|
495
|
+
async postprocess(_outputs, _options) {
|
|
496
|
+
// This is handled in segment() method
|
|
497
|
+
return {
|
|
498
|
+
mask: new Uint8Array(0),
|
|
499
|
+
width: 0,
|
|
500
|
+
height: 0,
|
|
501
|
+
score: 0,
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Dispose resources
|
|
506
|
+
*/
|
|
507
|
+
dispose() {
|
|
508
|
+
super.dispose();
|
|
509
|
+
this.encoderModel?.dispose();
|
|
510
|
+
this.decoderModel?.dispose();
|
|
511
|
+
this.imageEmbedding = null;
|
|
512
|
+
this.imagePositionalEmbedding = null;
|
|
513
|
+
this.currentImageSize = null;
|
|
514
|
+
this.resizedImageSize = null;
|
|
515
|
+
this.modelsLoaded = false;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
// ============================================================================
|
|
519
|
+
// Factory Function
|
|
520
|
+
// ============================================================================
|
|
521
|
+
/**
|
|
522
|
+
* Create image segmentation pipeline
|
|
523
|
+
*/
|
|
524
|
+
export function createImageSegmentationPipeline(config = {}) {
|
|
525
|
+
return new ImageSegmentationPipeline({
|
|
526
|
+
task: 'image-segmentation',
|
|
527
|
+
model: config.model ?? 'slimsam',
|
|
528
|
+
runtime: config.runtime,
|
|
529
|
+
cache: config.cache ?? true,
|
|
530
|
+
quantization: config.quantization,
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
// Register pipeline
|
|
534
|
+
registerPipeline('image-segmentation', (config) => new ImageSegmentationPipeline(config));
|
|
535
|
+
//# sourceMappingURL=image-segmentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-segmentation.js","sourceRoot":"","sources":["../../src/pipelines/image-segmentation.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,12 @@ export { BasePipeline, registerPipeline, getPipelineFactory, SENTIMENT_LABELS, E
|
|
|
6
6
|
export { TextClassificationPipeline, SentimentAnalysisPipeline, createTextClassificationPipeline, createSentimentAnalysisPipeline, type TextClassificationOptions, } from './text-classification.js';
|
|
7
7
|
export { FeatureExtractionPipeline, createFeatureExtractionPipeline, type FeatureExtractionOptions, } from './feature-extraction.js';
|
|
8
8
|
export { ImageClassificationPipeline, createImageClassificationPipeline, type ImageClassificationOptions, type ImageInput, } from './image-classification.js';
|
|
9
|
+
export { TextGenerationPipeline, createTextGenerationPipeline, type TextGenerationOptions, type TextGenerationResult, type GenerationStreamEvent, type ChatMessage, type ChatOptions, type ChatTemplateType, type LLMLoadProgress, } from './text-generation.js';
|
|
10
|
+
export { ObjectDetectionPipeline, createObjectDetectionPipeline, COCO_LABELS, type ObjectDetectionOptions, type Detection, type BoundingBox, } from './object-detection.js';
|
|
11
|
+
export { AutomaticSpeechRecognitionPipeline, createASRPipeline, type ASROptions, type ASRResult, type WordTimestamp, type ChunkTimestamp, } from './automatic-speech-recognition.js';
|
|
12
|
+
export { ZeroShotClassificationPipeline, createZeroShotClassificationPipeline, type ZeroShotClassificationOptions, type ZeroShotClassificationResult, } from './zero-shot-classification.js';
|
|
13
|
+
export { QuestionAnsweringPipeline, createQuestionAnsweringPipeline, type QuestionAnsweringOptions, type QuestionAnsweringResult, type QAInput, } from './question-answering.js';
|
|
14
|
+
export { ImageSegmentationPipeline, createImageSegmentationPipeline, type ImageSegmentationOptions, type ImageSegmentationResult, type PointPrompt, type BoxPrompt, type ModelLoadProgress, } from './image-segmentation.js';
|
|
9
15
|
/**
|
|
10
16
|
* Pipeline options for the factory function
|
|
11
17
|
*/
|
|
@@ -29,10 +35,22 @@ type PipelineTaskMap = {
|
|
|
29
35
|
'sentiment-analysis': SentimentAnalysisPipeline;
|
|
30
36
|
'feature-extraction': FeatureExtractionPipeline;
|
|
31
37
|
'image-classification': ImageClassificationPipeline;
|
|
38
|
+
'text-generation': TextGenerationPipeline;
|
|
39
|
+
'object-detection': ObjectDetectionPipeline;
|
|
40
|
+
'automatic-speech-recognition': AutomaticSpeechRecognitionPipeline;
|
|
41
|
+
'zero-shot-classification': ZeroShotClassificationPipeline;
|
|
42
|
+
'question-answering': QuestionAnsweringPipeline;
|
|
43
|
+
'image-segmentation': ImageSegmentationPipeline;
|
|
32
44
|
};
|
|
33
45
|
import { TextClassificationPipeline, SentimentAnalysisPipeline } from './text-classification.js';
|
|
34
46
|
import { FeatureExtractionPipeline } from './feature-extraction.js';
|
|
35
47
|
import { ImageClassificationPipeline } from './image-classification.js';
|
|
48
|
+
import { TextGenerationPipeline } from './text-generation.js';
|
|
49
|
+
import { ObjectDetectionPipeline } from './object-detection.js';
|
|
50
|
+
import { AutomaticSpeechRecognitionPipeline } from './automatic-speech-recognition.js';
|
|
51
|
+
import { ZeroShotClassificationPipeline } from './zero-shot-classification.js';
|
|
52
|
+
import { QuestionAnsweringPipeline } from './question-answering.js';
|
|
53
|
+
import { ImageSegmentationPipeline } from './image-segmentation.js';
|
|
36
54
|
/**
|
|
37
55
|
* Create a pipeline for a specific task
|
|
38
56
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pipelines/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAGL,WAAW,EACX,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pipelines/index.ts"],"names":[],"mappings":"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"}
|