From 9dd168733fa67e5ac630e83b4407b6066c931b8f Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 19 Apr 2021 09:30:04 -0400 Subject: [PATCH] update gestures --- CHANGELOG.md | 3 ++- demo/index.js | 9 ++++++--- src/draw/draw.ts | 2 +- src/gesture/gesture.ts | 21 +++++++++++++++++---- src/human.ts | 7 ++++++- wiki | 2 +- 6 files changed, 33 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c20f8e1..f962837a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,8 +9,9 @@ Repository: **** ## Changelog -### **HEAD -> main** 2021/04/16 mandic00@live.com +### **HEAD -> main** 2021/04/18 mandic00@live.com +- full test run - full rebuild - new look - added benchmarks diff --git a/demo/index.js b/demo/index.js index 37781f1c..31961e76 100644 --- a/demo/index.js +++ b/demo/index.js @@ -64,6 +64,7 @@ const ui = { framesDetect: 0, // internal, statistics on frames detected bench: true, // show gl fps benchmark window lastFrame: 0, // time of last frame processing + viewportSet: false, // internal, has custom viewport been set }; // global variables @@ -559,10 +560,12 @@ function setupMenu() { } async function resize() { - window.onresize = null; const viewportScale = Math.min(1, Math.round(100 * window.innerWidth / 960) / 100); - const viewport = document.querySelector('meta[name=viewport]'); - viewport.setAttribute('content', `width=device-width, shrink-to-fit=yes, minimum-scale=0.2, maximum-scale=2.0, user-scalable=yes, initial-scale=${viewportScale}`); + if (!ui.viewportSet) { + const viewport = document.querySelector('meta[name=viewport]'); + viewport.setAttribute('content', `width=device-width, shrink-to-fit=yes, minimum-scale=0.2, maximum-scale=2.0, user-scalable=yes, initial-scale=${viewportScale}`); + ui.viewportSet = true; + } const x = [`${document.getElementById('btnDisplay').offsetLeft}px`, `${document.getElementById('btnImage').offsetLeft}px`, `${document.getElementById('btnProcess').offsetLeft}px`, `${document.getElementById('btnModel').offsetLeft}px`]; const top = `${document.getElementById('menubar').clientHeight - 3}px`; diff --git a/src/draw/draw.ts b/src/draw/draw.ts index 4c60c5a1..ed000911 100644 --- a/src/draw/draw.ts +++ b/src/draw/draw.ts @@ -49,7 +49,7 @@ export const options: DrawOptions = { labelColor: 'rgba(173, 216, 230, 1)', // 'lightblue' with dark alpha channel shadowColor: 'black', font: 'small-caps 16px "Segoe UI"', - lineHeight: 20, + lineHeight: 24, lineWidth: 6, pointSize: 2, roundRect: 28, diff --git a/src/gesture/gesture.ts b/src/gesture/gesture.ts index 25f0998c..61df3b8a 100644 --- a/src/gesture/gesture.ts +++ b/src/gesture/gesture.ts @@ -52,14 +52,27 @@ export const iris = (res) => { const sizeYRight = res[i].annotations.rightEyeIris[4][1] - res[i].annotations.rightEyeIris[2][1]; const areaRight = Math.abs(sizeXRight * sizeYRight); + let center = false; const difference = Math.abs(areaLeft - areaRight) / Math.max(areaLeft, areaRight); - if (difference < 0.25) gestures.push({ iris: i, gesture: 'facing center' }); + if (difference < 0.25) { + center = true; + gestures.push({ iris: i, gesture: 'facing center' }); + } const rightIrisCenterX = Math.abs(res[i].mesh[33][0] - res[i].annotations.rightEyeIris[0][0]) / res[i].annotations.rightEyeIris[0][0]; const leftIrisCenterX = Math.abs(res[i].mesh[263][0] - res[i].annotations.leftEyeIris[0][0]) / res[i].annotations.leftEyeIris[0][0]; - if (leftIrisCenterX > 0.025 && rightIrisCenterX > 0.025) gestures.push({ iris: i, gesture: 'looking center' }); - else if (leftIrisCenterX > 0.025) gestures.push({ iris: i, gesture: 'looking right' }); - else if (rightIrisCenterX > 0.025) gestures.push({ iris: i, gesture: 'looking left' }); + if (leftIrisCenterX > 0.033 || rightIrisCenterX > 0.033) center = false; + if (leftIrisCenterX > 0.033) gestures.push({ iris: i, gesture: 'looking right' }); + if (rightIrisCenterX > 0.033) gestures.push({ iris: i, gesture: 'looking left' }); + + const rightIrisCenterY = Math.abs(res[i].mesh[145][1] - res[i].annotations.rightEyeIris[0][1]) / res[i].annotations.rightEyeIris[0][1]; + const leftIrisCenterY = Math.abs(res[i].mesh[374][1] - res[i].annotations.leftEyeIris[0][1]) / res[i].annotations.leftEyeIris[0][1]; + if (leftIrisCenterY < 0.015 || rightIrisCenterY < 0.015 || leftIrisCenterY > 0.030 || rightIrisCenterY > 0.030) center = false; + if (leftIrisCenterY < 0.015 || rightIrisCenterY < 0.015) gestures.push({ iris: i, gesture: 'looking down' }); + if (leftIrisCenterY > 0.030 || rightIrisCenterY > 0.030) gestures.push({ iris: i, gesture: 'looking up' }); + + // still center; + if (center) gestures.push({ iris: i, gesture: 'looking center' }); } return gestures; }; diff --git a/src/human.ts b/src/human.ts index 96b142f1..1229250b 100644 --- a/src/human.ts +++ b/src/human.ts @@ -401,7 +401,12 @@ export class Human { // disable video optimization for inputs of type image let previousVideoOptimized; - if (input && this.config.videoOptimized && (input instanceof HTMLImageElement || input instanceof Image || input instanceof ImageData || (typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap) || input instanceof tf.Tensor)) { + if (input && this.config.videoOptimized && ( + (typeof HTMLImageElement !== 'undefined' && input instanceof HTMLImageElement) + || (typeof Image !== 'undefined' && input instanceof Image) + || (typeof ImageData !== 'undefined' && input instanceof ImageData) + || (typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap)) + ) { log('disabling video optimization'); previousVideoOptimized = this.config.videoOptimized; this.config.videoOptimized = false; diff --git a/wiki b/wiki index ddf8fb11..a137e535 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit ddf8fb116b159dc3dabea4cb858b608fa5914355 +Subproject commit a137e535d323ce971865ff3d592eaf964ea65ee2