"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); require("dotenv/config"); const express_1 = __importDefault(require("express")); const promises_1 = require("fs/promises"); const os_1 = require("os"); const path_1 = require("path"); const body_parser_1 = __importDefault(require("body-parser")); const multer_1 = __importDefault(require("multer")); const uuid_1 = require("uuid"); const log_1 = require("./log"); const env_1 = require("./env"); const shell_1 = require("./shell"); const PORT = (0, env_1.envInt)('PORT', 7474); const BIN = (0, env_1.envString)('BIN', 'openpose'); const CWD = (0, env_1.envString)('CWD', '.'); const log = (0, log_1.createLog)('openpose_api'); const app = (0, express_1.default)(); const tmp = (0, os_1.tmpdir)(); const storage = multer_1.default.diskStorage({ destination: function (req, file, cb) { cb(null, tmp); }, filename: function (req, file, cb) { cb(null, `${+new Date()}_${file.originalname}`); } }); async function exists(path) { try { await (0, promises_1.access)(path); return true; } catch { return false; } } app.use(body_parser_1.default.json()); app.use(body_parser_1.default.urlencoded({ extended: true })); const uploadImage = (0, multer_1.default)({ storage }); app.get('/', (req, res, next) => { return res.send('/'); }); //./build/examples/openpose/openpose.bin -v 1 -image_dir ./examples/media/ -write_images ./output -write_json ./json --face --hand app.post('/openpose', uploadImage.single('image'), async (req, res, next) => { const id = (0, uuid_1.v4)(); const dir = (0, path_1.join)(tmp, id); const image_dir = (0, path_1.join)(dir, 'image'); const json_dir = (0, path_1.join)(dir, 'json'); const json_file = (0, path_1.join)(json_dir, 'openpose_keypoints.json'); let json_exists = false; let openpose_str = '{}'; let output; let image_file; let image_ext; let sh; // const args = [ BIN, '--render_pose', '0', '-display', '0', '-image_dir', image_dir, '-write_json', json_dir ]; if (typeof req.file === 'undefined') { return next(new Error('No image uploaded')); } image_ext = (0, path_1.extname)((0, path_1.basename)(req.file.path)); image_file = (0, path_1.join)(image_dir, `openpose${image_ext}`); if (typeof req.body.face !== 'undefined' && req.body.face === 'true') { args.push('--face'); } if (typeof req.body.hand !== 'undefined' && req.body.hand === 'true') { args.push('--hand'); } try { await (0, promises_1.mkdir)(dir); } catch (err) { log.error(`Error making directory ${dir}`, err); return next(new Error('Error making dir')); } try { await (0, promises_1.mkdir)(image_dir); } catch (err) { log.error(`Error making directory ${image_dir}`, err); return next(new Error('Error making image_dir')); } try { await (0, promises_1.mkdir)(json_dir); } catch (err) { log.error(`Error making directory ${image_dir}`, err); return next(new Error('Error making image_dir')); } try { await (0, promises_1.copyFile)(req.file.path, image_file); } catch (err) { log.error(`Error copying file ${req.file.path}`, err); return next(new Error('Error copying temp image')); } sh = new shell_1.Shell(args, CWD, null, null, null, true); try { await sh.execute(); } catch (err) { log.error(`Error executing ${args.join(' ')}`, err); return next(new Error('Error running openpose')); } try { json_exists = await exists(json_file); } catch (err) { log.error(`Error checking json ${json_file} exists`, err); return next(new Error('Error checking json exists')); } if (json_exists) { try { openpose_str = await (0, promises_1.readFile)(json_file, 'utf8'); } catch (err) { log.error(`Error reading json file ${json_file}`, err); return next(new Error('Error reading json file')); } } else { log.error(`The json file ${json_file} does not exist`); return next(new Error('Error running openpose')); } try { output = JSON.parse(openpose_str); } catch (err) { log.error(`Error parsing openpose json`, err); return next(new Error('Error parsing openpose json')); } output.image = req.file.originalname; try { await (0, promises_1.rm)(dir, { recursive: true }); } catch (err) { log.error(`Error unlinking ${dir}`, err); return next(new Error('Error unlinking temp dir')); } return res.json(output); }); app.listen(PORT, () => { log.info(`Openpose API server running on port ${PORT}`); log.info(`Using openpose binary ${BIN}`); }); //# sourceMappingURL=index.js.map