From ab87288e7d283623d18e27296598f1ea935a0977 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Wed, 16 Dec 2020 14:49:14 -0500 Subject: [PATCH] republish due to tfjs 2.8.0 issues --- package.json | 20 +++++++++--------- src/human.js | 56 +++++++++++++++++---------------------------------- src/sample.js | 6 ++++-- 3 files changed, 33 insertions(+), 49 deletions(-) diff --git a/package.json b/package.json index 9dc5e5f8..e6563338 100644 --- a/package.json +++ b/package.json @@ -22,16 +22,16 @@ "dependencies": {}, "peerDependencies": {}, "devDependencies": { - "@tensorflow/tfjs": "^2.8.0", - "@tensorflow/tfjs-backend-cpu": "^2.8.0", - "@tensorflow/tfjs-backend-wasm": "^2.8.0", - "@tensorflow/tfjs-backend-webgl": "^2.8.0", - "@tensorflow/tfjs-converter": "^2.8.0", - "@tensorflow/tfjs-core": "^2.8.0", - "@tensorflow/tfjs-data": "^2.8.0", - "@tensorflow/tfjs-layers": "^2.8.0", - "@tensorflow/tfjs-node": "^2.8.0", - "@tensorflow/tfjs-node-gpu": "^2.8.0", + "@tensorflow/tfjs": "^2.7.0", + "@tensorflow/tfjs-backend-cpu": "^2.7.0", + "@tensorflow/tfjs-backend-wasm": "^2.7.0", + "@tensorflow/tfjs-backend-webgl": "^2.7.0", + "@tensorflow/tfjs-converter": "^2.7.0", + "@tensorflow/tfjs-core": "^2.7.0", + "@tensorflow/tfjs-data": "^2.7.0", + "@tensorflow/tfjs-layers": "^2.7.0", + "@tensorflow/tfjs-node": "^2.7.0", + "@tensorflow/tfjs-node-gpu": "^2.7.0", "@vladmandic/pilogger": "^0.2.10", "chokidar": "^3.4.3", "dayjs": "^1.9.7", diff --git a/src/human.js b/src/human.js index a90d6f16..90bf3341 100644 --- a/src/human.js +++ b/src/human.js @@ -423,44 +423,26 @@ class Human { } async warmup(userConfig) { + const b64toBlob = (base64, type = 'application/octet-stream') => fetch(`data:${type};base64,${base64}`).then((res) => res.blob()); + if (userConfig) this.config = mergeDeep(this.config, userConfig); - return new Promise((resolve) => { - const video = this.config.videoOptimized; - this.config.videoOptimized = false; - let src; - let size; - switch (this.config.warmup) { - case 'face': - size = 256; - src = sample.face; - break; - case 'full': - size = 1200; - src = sample.body; - break; - default: - size = 0; - src = null; - } - const img = new Image(size, size); - img.onload = () => { - const canvas = (typeof OffscreenCanvas !== 'undefined') ? new OffscreenCanvas(size, size) : document.createElement('canvas'); - canvas.width = size; - canvas.height = size; - const ctx = canvas.getContext('2d'); - ctx.drawImage(img, 0, 0); - const data = ctx.getImageData(0, 0, size, size); - const t0 = now(); - this.detect(data, config).then((warmup) => { - const t1 = now(); - log('Warmup', this.config.warmup, (t1 - t0), warmup); - this.config.videoOptimized = video; - resolve(warmup); - }); - }; - if (src) img.src = src; - else resolve(null); - }); + const video = this.config.videoOptimized; + this.config.videoOptimized = false; + let blob; + switch (this.config.warmup) { + case 'face': blob = await b64toBlob(sample.face); break; + case 'full': blob = await b64toBlob(sample.body); break; + default: blob = null; + } + if (!blob) return null; + const bitmap = await createImageBitmap(blob); + const t0 = now(); + const warmup = await this.detect(bitmap, config); + const t1 = now(); + bitmap.close(); + log('Warmup', this.config.warmup, (t1 - t0), warmup); + this.config.videoOptimized = video; + return warmup; } } diff --git a/src/sample.js b/src/sample.js index 2dac9fd0..c46844eb 100644 --- a/src/sample.js +++ b/src/sample.js @@ -1,4 +1,5 @@ -export const face = `data:image/jpeg;base64, +// data:image/jpeg;base64, +export const face = ` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob @@ -151,7 +152,8 @@ c6oaM5TUJ8EgGsG4kLNUHT0M64OaqMMikSRsuKbnFMRLG3zVehOaGNE445NNlnVFpDMu6uie9Vo1 ylFtbdT1xUWNWzU0/Zbwlgfmx8zGsHWtRHmMqE59aAMyNifvHPc1f0gtPdqkY5JosJHeNci2tktY euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`; -export const body = `data:image/jpeg;base64, +// data:image/jpeg;base64, +export const body = ` /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAsICAoIBwsKCQoNDAsNERwSEQ8PESIZGhQcKSQrKigk JyctMkA3LTA9MCcnOEw5PUNFSElIKzZPVU5GVEBHSEX/2wBDAQwNDREPESESEiFFLicuRUVFRUVF RUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUX/wAARCASwBLADASIA