@livekit/track-processors 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/dist/ProcessorPipeline.d.ts +8 -7
- package/dist/ProcessorPipeline.js +6 -4
- package/dist/ProcessorPipeline.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/package.json +56 -0
- package/dist/src/ProcessorPipeline.d.ts +19 -0
- package/dist/src/ProcessorPipeline.js +41 -0
- package/dist/src/ProcessorPipeline.js.map +1 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.js +28 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/transformers/BackgroundTransformer.d.ts +23 -0
- package/dist/src/transformers/BackgroundTransformer.js +142 -0
- package/dist/src/transformers/BackgroundTransformer.js.map +1 -0
- package/dist/src/transformers/DummyTransformer.d.ts +6 -0
- package/dist/src/transformers/DummyTransformer.js +10 -0
- package/dist/src/transformers/DummyTransformer.js.map +1 -0
- package/dist/src/transformers/MediaPipeHolisticTrackerTransformer.d.ts +18 -0
- package/dist/src/transformers/MediaPipeHolisticTrackerTransformer.js +44 -0
- package/dist/src/transformers/MediaPipeHolisticTrackerTransformer.js.map +1 -0
- package/dist/src/transformers/VideoTransformer.d.ts +12 -0
- package/dist/src/transformers/VideoTransformer.js +26 -0
- package/dist/src/transformers/VideoTransformer.js.map +1 -0
- package/dist/src/transformers/index.d.ts +2 -0
- package/dist/src/transformers/index.js +3 -0
- package/dist/src/transformers/index.js.map +1 -0
- package/dist/src/transformers/types.d.ts +14 -0
- package/dist/src/transformers/types.js +2 -0
- package/dist/src/transformers/types.js.map +1 -0
- package/dist/src/utils.d.ts +2 -0
- package/dist/src/utils.js +3 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/transformers/BackgroundTransformer.d.ts +3 -3
- package/dist/transformers/BackgroundTransformer.js +26 -22
- package/dist/transformers/BackgroundTransformer.js.map +1 -1
- package/dist/transformers/MediaPipeHolisticTrackerTransformer.d.ts +2 -2
- package/dist/transformers/MediaPipeHolisticTrackerTransformer.js +2 -2
- package/dist/transformers/MediaPipeHolisticTrackerTransformer.js.map +1 -1
- package/dist/transformers/VideoTransformer.d.ts +3 -3
- package/dist/transformers/VideoTransformer.js +4 -1
- package/dist/transformers/VideoTransformer.js.map +1 -1
- package/dist/transformers/types.d.ts +8 -5
- package/package.json +3 -3
- package/src/transformers/BackgroundTransformer.ts +2 -3
- package/dist/BackgroundProcessor.d.ts +0 -23
- package/dist/BackgroundProcessor.js +0 -114
- package/dist/BackgroundProcessor.js.map +0 -1
- package/dist/BaseVideoProcessor.d.ts +0 -28
- package/dist/BaseVideoProcessor.js +0 -110
- package/dist/BaseVideoProcessor.js.map +0 -1
- package/dist/transformers/Untitled-1.d.ts +0 -1
- package/dist/transformers/Untitled-1.js +0 -219
- package/dist/transformers/Untitled-1.js.map +0 -1
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
// Copyright 2023 The MediaPipe Authors.
|
|
11
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
12
|
-
// you may not use this file except in compliance with the License.
|
|
13
|
-
// You may obtain a copy of the License at
|
|
14
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
15
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
16
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
-
// See the License for the specific language governing permissions and
|
|
19
|
-
// limitations under the License.
|
|
20
|
-
import vision from 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0';
|
|
21
|
-
const { ImageSegmenter, SegmentationMask, FilesetResolver } = vision;
|
|
22
|
-
// Get DOM elements
|
|
23
|
-
const video = document.getElementById('webcam');
|
|
24
|
-
const canvasElement = document.getElementById('canvas');
|
|
25
|
-
const canvasCtx = canvasElement.getContext('2d');
|
|
26
|
-
const webcamPredictions = document.getElementById('webcamPredictions');
|
|
27
|
-
const demosSection = document.getElementById('demos');
|
|
28
|
-
let enableWebcamButton;
|
|
29
|
-
let webcamRunning = false;
|
|
30
|
-
const videoHeight = '360px';
|
|
31
|
-
const videoWidth = '480px';
|
|
32
|
-
let runningMode = 'IMAGE';
|
|
33
|
-
const resultWidthHeigth = 256;
|
|
34
|
-
let imageSegmenter;
|
|
35
|
-
let labels;
|
|
36
|
-
const legendColors = [
|
|
37
|
-
[255, 197, 0, 255],
|
|
38
|
-
[128, 62, 117, 255],
|
|
39
|
-
[255, 104, 0, 255],
|
|
40
|
-
[166, 189, 215, 255],
|
|
41
|
-
[193, 0, 32, 255],
|
|
42
|
-
[206, 162, 98, 255],
|
|
43
|
-
[129, 112, 102, 255],
|
|
44
|
-
[0, 125, 52, 255],
|
|
45
|
-
[246, 118, 142, 255],
|
|
46
|
-
[0, 83, 138, 255],
|
|
47
|
-
[255, 112, 92, 255],
|
|
48
|
-
[83, 55, 112, 255],
|
|
49
|
-
[255, 142, 0, 255],
|
|
50
|
-
[179, 40, 81, 255],
|
|
51
|
-
[244, 200, 0, 255],
|
|
52
|
-
[127, 24, 13, 255],
|
|
53
|
-
[147, 170, 0, 255],
|
|
54
|
-
[89, 51, 21, 255],
|
|
55
|
-
[241, 58, 19, 255],
|
|
56
|
-
[35, 44, 22, 255],
|
|
57
|
-
[0, 161, 194, 255], // Vivid Blue
|
|
58
|
-
];
|
|
59
|
-
const createImageSegmenter = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
60
|
-
const audio = yield FilesetResolver.forVisionTasks('https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm');
|
|
61
|
-
imageSegmenter = yield ImageSegmenter.createFromOptions(audio, {
|
|
62
|
-
baseOptions: {
|
|
63
|
-
modelAssetPath: 'https://storage.googleapis.com/mediapipe-models/image_segmenter/deeplab_v3/float32/1/deeplab_v3.tflite',
|
|
64
|
-
delegate: 'GPU',
|
|
65
|
-
},
|
|
66
|
-
runningMode: runningMode,
|
|
67
|
-
outputCategoryMask: true,
|
|
68
|
-
outputConfidenceMasks: false,
|
|
69
|
-
});
|
|
70
|
-
labels = imageSegmenter.getLabels();
|
|
71
|
-
demosSection.classList.remove('invisible');
|
|
72
|
-
});
|
|
73
|
-
createImageSegmenter();
|
|
74
|
-
const imageContainers = document.getElementsByClassName('segmentOnClick');
|
|
75
|
-
// Add click event listeners for the img elements.
|
|
76
|
-
for (let i = 0; i < imageContainers.length; i++) {
|
|
77
|
-
imageContainers[i].getElementsByTagName('img')[0].addEventListener('click', handleClick);
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Demo 1: Segmented images on click and display results.
|
|
81
|
-
*/
|
|
82
|
-
let canvasClick;
|
|
83
|
-
function handleClick(event) {
|
|
84
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
85
|
-
// Do not segmented if imageSegmenter hasn't loaded
|
|
86
|
-
if (imageSegmenter === undefined) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
canvasClick = event.target.parentElement.getElementsByTagName('canvas')[0];
|
|
90
|
-
canvasClick.classList.remove('removed');
|
|
91
|
-
canvasClick.width = event.target.naturalWidth;
|
|
92
|
-
canvasClick.height = event.target.naturalHeight;
|
|
93
|
-
const cxt = canvasClick.getContext('2d');
|
|
94
|
-
cxt.clearRect(0, 0, canvasClick.width, canvasClick.height);
|
|
95
|
-
cxt.drawImage(event.target, 0, 0, canvasClick.width, canvasClick.height);
|
|
96
|
-
event.target.style.opacity = 0;
|
|
97
|
-
// if VIDEO mode is initialized, set runningMode to IMAGE
|
|
98
|
-
if (runningMode === 'VIDEO') {
|
|
99
|
-
runningMode = 'IMAGE';
|
|
100
|
-
yield imageSegmenter.setOptions({
|
|
101
|
-
runningMode: runningMode,
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
// imageSegmenter.segment() when resolved will call the callback function.
|
|
105
|
-
imageSegmenter.segment(event.target, callback);
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
function callback(result) {
|
|
109
|
-
const cxt = canvasClick.getContext('2d');
|
|
110
|
-
const { width, height } = result.categoryMask;
|
|
111
|
-
let imageData = cxt.getImageData(0, 0, width, height).data;
|
|
112
|
-
canvasClick.width = width;
|
|
113
|
-
canvasClick.height = height;
|
|
114
|
-
let category = '';
|
|
115
|
-
const mask = result.categoryMask.getAsUint8Array();
|
|
116
|
-
for (let i in mask) {
|
|
117
|
-
if (mask[i] > 0) {
|
|
118
|
-
category = labels[mask[i]];
|
|
119
|
-
}
|
|
120
|
-
const legendColor = legendColors[mask[i] % legendColors.length];
|
|
121
|
-
imageData[i * 4] = (legendColor[0] + imageData[i * 4]) / 2;
|
|
122
|
-
imageData[i * 4 + 1] = (legendColor[1] + imageData[i * 4 + 1]) / 2;
|
|
123
|
-
imageData[i * 4 + 2] = (legendColor[2] + imageData[i * 4 + 2]) / 2;
|
|
124
|
-
imageData[i * 4 + 3] = (legendColor[3] + imageData[i * 4 + 3]) / 2;
|
|
125
|
-
}
|
|
126
|
-
const uint8Array = new Uint8ClampedArray(imageData.buffer);
|
|
127
|
-
const dataNew = new ImageData(uint8Array, width, height);
|
|
128
|
-
cxt.putImageData(dataNew, 0, 0);
|
|
129
|
-
const p = event.target.parentNode.getElementsByClassName('classification')[0];
|
|
130
|
-
p.classList.remove('removed');
|
|
131
|
-
p.innerText = 'Category: ' + category;
|
|
132
|
-
}
|
|
133
|
-
function callbackForVideo(result) {
|
|
134
|
-
let imageData = canvasCtx.getImageData(0, 0, video.videoWidth, video.videoHeight).data;
|
|
135
|
-
const mask = result.categoryMask.getAsFloat32Array();
|
|
136
|
-
let j = 0;
|
|
137
|
-
for (let i = 0; i < mask.length; ++i) {
|
|
138
|
-
const maskVal = Math.round(mask[i] * 255.0);
|
|
139
|
-
const legendColor = legendColors[maskVal % legendColors.length];
|
|
140
|
-
imageData[j] = (legendColor[0] + imageData[j]) / 2;
|
|
141
|
-
imageData[j + 1] = (legendColor[1] + imageData[j + 1]) / 2;
|
|
142
|
-
imageData[j + 2] = (legendColor[2] + imageData[j + 2]) / 2;
|
|
143
|
-
imageData[j + 3] = (legendColor[3] + imageData[j + 3]) / 2;
|
|
144
|
-
j += 4;
|
|
145
|
-
}
|
|
146
|
-
const uint8Array = new Uint8ClampedArray(imageData.buffer);
|
|
147
|
-
const dataNew = new ImageData(uint8Array, video.videoWidth, video.videoHeight);
|
|
148
|
-
canvasCtx.putImageData(dataNew, 0, 0);
|
|
149
|
-
if (webcamRunning === true) {
|
|
150
|
-
window.requestAnimationFrame(predictWebcam);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
/********************************************************************
|
|
154
|
-
// Demo 2: Continuously grab image from webcam stream and segmented it.
|
|
155
|
-
********************************************************************/
|
|
156
|
-
// Check if webcam access is supported.
|
|
157
|
-
function hasGetUserMedia() {
|
|
158
|
-
return !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia);
|
|
159
|
-
}
|
|
160
|
-
// Get segmentation from the webcam
|
|
161
|
-
let lastWebcamTime = -1;
|
|
162
|
-
function predictWebcam() {
|
|
163
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
164
|
-
if (video.currentTime === lastWebcamTime) {
|
|
165
|
-
if (webcamRunning === true) {
|
|
166
|
-
window.requestAnimationFrame(predictWebcam);
|
|
167
|
-
}
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
lastWebcamTime = video.currentTime;
|
|
171
|
-
canvasCtx.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);
|
|
172
|
-
// Do not segmented if imageSegmenter hasn't loaded
|
|
173
|
-
if (imageSegmenter === undefined) {
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
// if image mode is initialized, create a new segmented with video runningMode
|
|
177
|
-
if (runningMode === 'IMAGE') {
|
|
178
|
-
runningMode = 'VIDEO';
|
|
179
|
-
yield imageSegmenter.setOptions({
|
|
180
|
-
runningMode: runningMode,
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
let startTimeMs = performance.now();
|
|
184
|
-
// Start segmenting the stream.
|
|
185
|
-
imageSegmenter.segmentForVideo(video, startTimeMs, callbackForVideo);
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
// Enable the live webcam view and start imageSegmentation.
|
|
189
|
-
function enableCam(event) {
|
|
190
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
191
|
-
if (imageSegmenter === undefined) {
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
if (webcamRunning === true) {
|
|
195
|
-
webcamRunning = false;
|
|
196
|
-
enableWebcamButton.innerText = 'ENABLE SEGMENTATION';
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
webcamRunning = true;
|
|
200
|
-
enableWebcamButton.innerText = 'DISABLE SEGMENTATION';
|
|
201
|
-
}
|
|
202
|
-
// getUsermedia parameters.
|
|
203
|
-
const constraints = {
|
|
204
|
-
video: true,
|
|
205
|
-
};
|
|
206
|
-
// Activate the webcam stream.
|
|
207
|
-
video.srcObject = yield navigator.mediaDevices.getUserMedia(constraints);
|
|
208
|
-
video.addEventListener('loadeddata', predictWebcam);
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
// If webcam supported, add event listener to button.
|
|
212
|
-
if (hasGetUserMedia()) {
|
|
213
|
-
enableWebcamButton = document.getElementById('webcamButton');
|
|
214
|
-
enableWebcamButton.addEventListener('click', enableCam);
|
|
215
|
-
}
|
|
216
|
-
else {
|
|
217
|
-
console.warn('getUserMedia() is not supported by your browser');
|
|
218
|
-
}
|
|
219
|
-
//# sourceMappingURL=Untitled-1.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Untitled-1.js","sourceRoot":"","sources":["../../src/transformers/Untitled-1.ts"],"names":[],"mappings":"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"}
|