@zappar/zappar-cv 0.4.0-beta.8 → 2.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +2 -2
- package/lib/additional.d.ts +3 -1
- package/lib/additional.js +1 -2
- package/lib/camera-source-map.js +16 -24
- package/lib/camera-source.js +17 -21
- package/lib/cameramodel.js +18 -23
- package/lib/compatibility.js +1 -3
- package/lib/deserializer.js +1 -5
- package/lib/direct.js +12 -16
- package/lib/drawcamera.js +26 -31
- package/lib/drawface.js +5 -9
- package/lib/drawfaceproject.js +5 -9
- package/lib/drawplane.js +6 -11
- package/lib/event.js +5 -13
- package/lib/facelandmark.d.ts +1 -2
- package/lib/facelandmark.js +11 -18
- package/lib/facelandmarkdata.js +1 -4
- package/lib/facelandmarkinterface.js +1 -2
- package/lib/facemesh.js +10 -17
- package/lib/gen/zappar-client.js +5 -24
- package/lib/gen/zappar-cwrap.js +1 -12
- package/lib/gen/zappar-native.d.ts +0 -1
- package/lib/gen/zappar-native.js +10 -13
- package/lib/gen/zappar-server.js +5 -13
- package/lib/gen/zappar.d.ts +7 -2
- package/lib/gen/zappar.js +5 -13
- package/lib/gfx.js +1 -4
- package/lib/gl-state-manager.d.ts +9 -0
- package/lib/gl-state-manager.js +31 -0
- package/lib/html-element-source.js +23 -27
- package/lib/image-process-gl.js +73 -32
- package/lib/imagebitmap-camera-source.js +30 -34
- package/lib/imagetracker.d.ts +28 -0
- package/lib/imagetracker.js +115 -0
- package/lib/index-standalone.d.ts +3 -0
- package/lib/index-standalone.js +5 -0
- package/lib/index.d.ts +2 -1
- package/lib/index.js +6 -27
- package/lib/landmarkdatagenerate.js +25 -30
- package/lib/loglevel.js +9 -16
- package/lib/messages.js +4 -8
- package/lib/mstp-camera-source.js +22 -26
- package/lib/native.d.ts +2 -1
- package/lib/native.js +194 -132
- package/lib/options.d.ts +3 -0
- package/lib/options.js +1 -0
- package/lib/permission.js +13 -27
- package/lib/pipeline.d.ts +1 -2
- package/lib/pipeline.js +34 -39
- package/lib/profile.js +40 -45
- package/lib/riff-reader.d.ts +18 -0
- package/lib/riff-reader.js +52 -0
- package/lib/sequencerecorder.js +7 -12
- package/lib/sequencesource.d.ts +2 -0
- package/lib/sequencesource.js +28 -25
- package/lib/serializer.js +1 -5
- package/lib/shader.js +2 -7
- package/lib/source.js +1 -5
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -4
- package/lib/worker-client.d.ts +1 -1
- package/lib/worker-client.js +9 -21
- package/lib/worker-imagebitmap.js +9 -13
- package/lib/worker-server.js +33 -37
- package/lib/worker.js +6 -10
- package/lib/workerinterface.js +1 -2
- package/lib/zcv.js +125 -115
- package/lib/zcv.wasm +0 -0
- package/package.json +14 -16
- package/umd/169.zappar-cv.js +1 -0
- package/umd/{482727c0e7dd40d73f5aae47f238ad61.zbin → 482727c0e7dd40d73f5a.zbin} +0 -0
- package/umd/557cf735d27efb96e262.wasm +0 -0
- package/umd/752.zappar-cv.js +1 -0
- package/umd/{b4f46e148a3b3b5aef90717d8d60e3fc.zbin → b4f46e148a3b3b5aef90.zbin} +0 -0
- package/umd/{f7b62a3a53b5c9b3222ba8dc53cb8b11.zbin → f7b62a3a53b5c9b3222b.zbin} +0 -0
- package/umd/zappar-cv.js +1 -1
- package/umd/zappar-cv.worker.js +1 -1
- package/umd/fbf9061bc2d2826ecf97c8ba2b51e7a5.wasm +0 -0
package/lib/worker-client.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,41 +7,30 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
8
|
});
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
exports.messageManager = new messages_1.MsgManager();
|
|
15
|
-
let Worker;
|
|
16
|
-
if (typeof Z_STANDALONE !== 'undefined' && Z_STANDALONE) {
|
|
17
|
-
Worker = require('worker-loader?inline=fallback!./worker');
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
Worker = require('worker-loader!./worker');
|
|
21
|
-
}
|
|
22
|
-
if (Worker.default)
|
|
23
|
-
Worker = Worker.default;
|
|
24
|
-
function launchWorker() {
|
|
10
|
+
import { MsgManager } from "./messages";
|
|
11
|
+
export let messageManager = new MsgManager();
|
|
12
|
+
export function launchWorker(worker) {
|
|
25
13
|
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
-
|
|
14
|
+
if (!worker)
|
|
15
|
+
worker = new Worker(new URL("./worker", import.meta.url), { type: 'module' });
|
|
27
16
|
worker.postMessage({
|
|
28
17
|
t: "wasm",
|
|
29
|
-
url:
|
|
18
|
+
url: new URL("./zcv.wasm", import.meta.url).toString()
|
|
30
19
|
});
|
|
31
20
|
yield waitForLoad(worker);
|
|
32
21
|
function sendOutgoing() {
|
|
33
|
-
let msgs =
|
|
22
|
+
let msgs = messageManager.getOutgoingMessages();
|
|
34
23
|
for (let msg of msgs) {
|
|
35
24
|
worker.postMessage(msg.msg, msg.transferables);
|
|
36
25
|
}
|
|
37
26
|
}
|
|
38
|
-
|
|
27
|
+
messageManager.onOutgoingMessage.bind(sendOutgoing);
|
|
39
28
|
sendOutgoing();
|
|
40
29
|
worker.addEventListener("message", evt => {
|
|
41
|
-
|
|
30
|
+
messageManager.postIncomingMessage(evt.data);
|
|
42
31
|
});
|
|
43
32
|
});
|
|
44
33
|
}
|
|
45
|
-
exports.launchWorker = launchWorker;
|
|
46
34
|
function waitForLoad(w) {
|
|
47
35
|
return new Promise(resolve => {
|
|
48
36
|
let listener = (msg) => {
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const image_process_gl_1 = require("./image-process-gl");
|
|
5
|
-
const profile_1 = require("./profile");
|
|
6
|
-
const gl_matrix_1 = require("gl-matrix");
|
|
1
|
+
import { ImageProcessGL } from "./image-process-gl";
|
|
2
|
+
import { profile } from "./profile";
|
|
3
|
+
import { mat4 } from "gl-matrix";
|
|
7
4
|
let pixels;
|
|
8
5
|
let texture;
|
|
9
6
|
let _imageProcessor;
|
|
@@ -14,11 +11,11 @@ function getImageProcessor() {
|
|
|
14
11
|
_gl = canvas.getContext("webgl");
|
|
15
12
|
if (!_gl)
|
|
16
13
|
throw new Error("Unable to get offscreen GL context");
|
|
17
|
-
_imageProcessor = new
|
|
14
|
+
_imageProcessor = new ImageProcessGL(_gl);
|
|
18
15
|
}
|
|
19
16
|
return [_imageProcessor, _gl];
|
|
20
17
|
}
|
|
21
|
-
function handleImageBitmap(m, r, server, mgr) {
|
|
18
|
+
export function handleImageBitmap(m, r, server, mgr) {
|
|
22
19
|
// img: ImageBitmap,
|
|
23
20
|
// rot: number,
|
|
24
21
|
// tokenId: number,
|
|
@@ -37,9 +34,9 @@ function handleImageBitmap(m, r, server, mgr) {
|
|
|
37
34
|
}
|
|
38
35
|
if (!texture)
|
|
39
36
|
return;
|
|
40
|
-
if (!pixels || pixels.byteLength <
|
|
41
|
-
console.log("Generating pixel buffer",
|
|
42
|
-
pixels = new ArrayBuffer(
|
|
37
|
+
if (!pixels || pixels.byteLength < profile.dataWidth * profile.dataHeight) {
|
|
38
|
+
console.log("Generating pixel buffer", profile.dataWidth * profile.dataHeight);
|
|
39
|
+
pixels = new ArrayBuffer(profile.dataWidth * profile.dataHeight);
|
|
43
40
|
}
|
|
44
41
|
imageProcessor.uploadFrame(texture, m.i, m.r, m.userFacing);
|
|
45
42
|
let info = imageProcessor.readFrame(texture, pixels);
|
|
@@ -49,7 +46,7 @@ function handleImageBitmap(m, r, server, mgr) {
|
|
|
49
46
|
dataHeight: info.dataHeight,
|
|
50
47
|
frame: m.i,
|
|
51
48
|
userFacing: info.userFacing,
|
|
52
|
-
uvTransform: info.uvTransform ||
|
|
49
|
+
uvTransform: info.uvTransform || mat4.create(),
|
|
53
50
|
tokenId: m.tokenId, p: m.p
|
|
54
51
|
};
|
|
55
52
|
mgr.postOutgoingMessage(msg, [m.i]);
|
|
@@ -60,4 +57,3 @@ function handleImageBitmap(m, r, server, mgr) {
|
|
|
60
57
|
server.exploreState();
|
|
61
58
|
}
|
|
62
59
|
}
|
|
63
|
-
exports.handleImageBitmap = handleImageBitmap;
|
package/lib/worker-server.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,19 +7,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
8
|
});
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const profile_1 = require("./profile");
|
|
21
|
-
exports.messageManager = new messages_1.MsgManager();
|
|
10
|
+
import * as ZNM from "./zcv";
|
|
11
|
+
import { getRuntimeObject } from "./gen/zappar-cwrap";
|
|
12
|
+
import { zappar_server } from "./gen/zappar-server";
|
|
13
|
+
import { MsgManager } from "./messages";
|
|
14
|
+
import { mat4 } from "gl-matrix";
|
|
15
|
+
import { frame_pixel_format_t } from "./gen/zappar-native";
|
|
16
|
+
import { handleImageBitmap } from "./worker-imagebitmap";
|
|
17
|
+
import { profile } from "./profile";
|
|
18
|
+
export let messageManager = new MsgManager();
|
|
22
19
|
let latestCameraToScreenRotation = 0;
|
|
23
|
-
function launchWorkerServer(wasmUrl) {
|
|
20
|
+
export function launchWorkerServer(wasmUrl) {
|
|
24
21
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25
22
|
let mod = ZNM.default({
|
|
26
23
|
locateFile: (path, prefix) => {
|
|
@@ -30,21 +27,21 @@ function launchWorkerServer(wasmUrl) {
|
|
|
30
27
|
return prefix + path;
|
|
31
28
|
},
|
|
32
29
|
onRuntimeInitialized: () => {
|
|
33
|
-
let r =
|
|
34
|
-
let server = new
|
|
35
|
-
|
|
30
|
+
let r = getRuntimeObject(mod);
|
|
31
|
+
let server = new zappar_server(r, (pipelineId, ab) => {
|
|
32
|
+
messageManager.postOutgoingMessage({
|
|
36
33
|
p: pipelineId,
|
|
37
34
|
t: "zappar",
|
|
38
35
|
d: ab
|
|
39
36
|
}, [ab]);
|
|
40
37
|
});
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
messageManager.postOutgoingMessage("loaded", []);
|
|
39
|
+
messageManager.onIncomingMessage.bind((msg) => {
|
|
43
40
|
var _a;
|
|
44
41
|
switch (msg.t) {
|
|
45
42
|
case "zappar":
|
|
46
43
|
server.processBuffer(msg.d);
|
|
47
|
-
|
|
44
|
+
messageManager.postOutgoingMessage({ t: "buf", d: msg.d }, [msg.d]);
|
|
48
45
|
break;
|
|
49
46
|
case "buf":
|
|
50
47
|
(_a = server.serializersByPipelineId.get(msg.p)) === null || _a === void 0 ? void 0 : _a.bufferReturn(msg.d);
|
|
@@ -66,7 +63,7 @@ function launchWorkerServer(wasmUrl) {
|
|
|
66
63
|
t: "cameraFrameRecycleS2C",
|
|
67
64
|
att
|
|
68
65
|
};
|
|
69
|
-
|
|
66
|
+
messageManager.postOutgoingMessage(ret, [msgt.d]);
|
|
70
67
|
break;
|
|
71
68
|
}
|
|
72
69
|
case "streamC2S": {
|
|
@@ -81,7 +78,7 @@ function launchWorkerServer(wasmUrl) {
|
|
|
81
78
|
}
|
|
82
79
|
case "imageBitmapC2S": {
|
|
83
80
|
let msgt = msg;
|
|
84
|
-
|
|
81
|
+
handleImageBitmap(msgt, r, server, messageManager);
|
|
85
82
|
break;
|
|
86
83
|
}
|
|
87
84
|
}
|
|
@@ -90,12 +87,11 @@ function launchWorkerServer(wasmUrl) {
|
|
|
90
87
|
});
|
|
91
88
|
});
|
|
92
89
|
}
|
|
93
|
-
exports.launchWorkerServer = launchWorkerServer;
|
|
94
90
|
;
|
|
95
91
|
let streamDataBufferPointer = 0;
|
|
96
92
|
let streamDataBufferLength = 0;
|
|
97
93
|
let tokenId = 1;
|
|
98
|
-
const cameraToDeviceTransform =
|
|
94
|
+
const cameraToDeviceTransform = mat4.create();
|
|
99
95
|
const cameraModel = new Float32Array([300, 300, 160, 120, 0, 0]);
|
|
100
96
|
function consumeStream(mod, r, stream, p, userFacing, server, source) {
|
|
101
97
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -142,14 +138,14 @@ function consumeStream(mod, r, stream, p, userFacing, server, source) {
|
|
|
142
138
|
}
|
|
143
139
|
let clone = frame.clone();
|
|
144
140
|
if (userFacing)
|
|
145
|
-
|
|
141
|
+
mat4.fromScaling(cameraToDeviceTransform, [-1, 1, -1]);
|
|
146
142
|
else
|
|
147
|
-
|
|
148
|
-
let focalLength = 300.0 *
|
|
143
|
+
mat4.identity(cameraToDeviceTransform);
|
|
144
|
+
let focalLength = 300.0 * profile.dataWidth / 320.0;
|
|
149
145
|
cameraModel[0] = focalLength;
|
|
150
146
|
cameraModel[1] = focalLength;
|
|
151
|
-
cameraModel[2] =
|
|
152
|
-
cameraModel[3] =
|
|
147
|
+
cameraModel[2] = profile.dataWidth * 0.5;
|
|
148
|
+
cameraModel[3] = profile.dataHeight * 0.5;
|
|
153
149
|
const ret = {
|
|
154
150
|
token: token,
|
|
155
151
|
d: clone,
|
|
@@ -163,7 +159,7 @@ function consumeStream(mod, r, stream, p, userFacing, server, source) {
|
|
|
163
159
|
cameraModel,
|
|
164
160
|
source
|
|
165
161
|
};
|
|
166
|
-
|
|
162
|
+
messageManager.postOutgoingMessage(ret, [ret.d, ret.uvTransform.buffer]);
|
|
167
163
|
const pipeline = server._pipeline_by_instance.get(p);
|
|
168
164
|
if (pipeline) {
|
|
169
165
|
r.pipeline_camera_frame_submit_raw_pointer(pipeline, streamDataBufferPointer, size, framePixelFormatFromFormat(frame.format), width, height, token, cameraToDeviceTransform, latestCameraToScreenRotation, cameraModel, userFacing);
|
|
@@ -176,17 +172,17 @@ function consumeStream(mod, r, stream, p, userFacing, server, source) {
|
|
|
176
172
|
}
|
|
177
173
|
function framePixelFormatFromFormat(f) {
|
|
178
174
|
switch (f) {
|
|
179
|
-
case "I420": return
|
|
180
|
-
case "I420A": return
|
|
181
|
-
case "I422": return
|
|
182
|
-
case "I444": return
|
|
183
|
-
case "NV12": return
|
|
175
|
+
case "I420": return frame_pixel_format_t.FRAME_PIXEL_FORMAT_I420;
|
|
176
|
+
case "I420A": return frame_pixel_format_t.FRAME_PIXEL_FORMAT_I420A;
|
|
177
|
+
case "I422": return frame_pixel_format_t.FRAME_PIXEL_FORMAT_I422;
|
|
178
|
+
case "I444": return frame_pixel_format_t.FRAME_PIXEL_FORMAT_I444;
|
|
179
|
+
case "NV12": return frame_pixel_format_t.FRAME_PIXEL_FORMAT_NV12;
|
|
184
180
|
case "RGBA":
|
|
185
181
|
case "RGBX":
|
|
186
|
-
return
|
|
182
|
+
return frame_pixel_format_t.FRAME_PIXEL_FORMAT_RGBA;
|
|
187
183
|
case "BGRA":
|
|
188
184
|
case "BGRX":
|
|
189
|
-
return
|
|
185
|
+
return frame_pixel_format_t.FRAME_PIXEL_FORMAT_BGRA;
|
|
190
186
|
}
|
|
191
|
-
return
|
|
187
|
+
return frame_pixel_format_t.FRAME_PIXEL_FORMAT_Y;
|
|
192
188
|
}
|
package/lib/worker.js
CHANGED
|
@@ -1,23 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const worker_server_1 = require("./worker-server");
|
|
1
|
+
import { launchWorkerServer, messageManager } from "./worker-server";
|
|
4
2
|
const ctx = self;
|
|
5
|
-
|
|
6
|
-
let msgs =
|
|
3
|
+
messageManager.onOutgoingMessage.bind(() => {
|
|
4
|
+
let msgs = messageManager.getOutgoingMessages();
|
|
7
5
|
for (let msg of msgs) {
|
|
8
6
|
ctx.postMessage(msg.msg, msg.transferables);
|
|
9
7
|
}
|
|
10
8
|
});
|
|
11
9
|
let launchHandler = (evt) => {
|
|
12
10
|
if (evt && evt.data && evt.data.t === "wasm") {
|
|
13
|
-
let url = location.href.startsWith("blob") ? evt.data.url :
|
|
14
|
-
|
|
15
|
-
url = url.default;
|
|
16
|
-
worker_server_1.launchWorkerServer(url);
|
|
11
|
+
let url = location.href.startsWith("blob") ? evt.data.url : new URL("./zcv.wasm", import.meta.url).toString();
|
|
12
|
+
launchWorkerServer(url);
|
|
17
13
|
ctx.removeEventListener("message", launchHandler);
|
|
18
14
|
}
|
|
19
15
|
};
|
|
20
16
|
ctx.addEventListener("message", launchHandler);
|
|
21
17
|
ctx.addEventListener("message", evt => {
|
|
22
|
-
|
|
18
|
+
messageManager.postIncomingMessage(evt.data);
|
|
23
19
|
});
|
package/lib/workerinterface.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|