UNPKG

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
"use strict"; 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'); }