mediapipe-nodejs
Version:
A Node.js library for running MediaPipe models that are typically browser-only. This package uses a local Express (web) server and Playwright (headless browser) to bridge the gap between Node.js and MediaPipe's browser-based APIs.
66 lines (65 loc) • 2.29 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.startMediaPipeClient = startMediaPipeClient;
exports.installPlaywright = installPlaywright;
const child_process_1 = require("child_process");
const express_1 = __importDefault(require("express"));
const path_1 = require("path");
const playwright_1 = require("playwright");
async function startMediaPipeClient(options) {
if (options.auto_install_playwright ?? true) {
installPlaywright();
}
let { port } = options;
let app = (0, express_1.default)();
app.use(express_1.default.static((0, path_1.join)(__dirname, '..', 'public')));
app.use('/npm/@mediapipe/tasks-vision', express_1.default.static((0, path_1.dirname)(require.resolve('@mediapipe/tasks-vision'))));
let server = await new Promise((resolve, reject) => {
let server = app.listen(port, () => {
resolve(server);
});
server.on('error', reject);
});
let browser = options.browser ?? (await playwright_1.chromium.launch({ headless: options.headless }));
let page = await browser.newPage();
await page.goto(`http://localhost:${port}`);
async function stop() {
await page.close();
if (!options.browser) {
await browser.close();
}
await new Promise((resolve, reject) => {
server.close(err => {
if (err) {
reject(err);
}
else {
resolve();
}
});
});
}
function attachImageDirection(options) {
app.use(options.url_prefix, express_1.default.static(options.directory));
}
async function detectFaceLandmarks(options) {
return page.evaluate(options => {
let win = window;
return win.detectFaceLandmarks(options);
}, options);
}
return {
attachImageDirection,
detectFaceLandmarks,
stop,
close: stop,
browser,
page,
};
}
function installPlaywright() {
(0, child_process_1.execSync)('npx playwright install chromium');
}