From 203178e28f8aaa2b5e77217acfc4b39af7026cf8 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 18 Apr 2021 19:33:40 -0400 Subject: [PATCH] mobile demo optimization and iris gestures --- CHANGELOG.md | 8 +++--- demo/helpers/menu.js | 16 +++++------ demo/helpers/webrtc.js | 25 +++++++++-------- demo/index.html | 4 +-- demo/index.js | 42 +++++++++++++++++++---------- dist/human.esm-nobundle.js | 6 ++--- dist/human.esm-nobundle.js.map | 4 +-- dist/human.esm.js | 6 ++--- dist/human.esm.js.map | 4 +-- dist/human.js | 6 ++--- dist/human.js.map | 4 +-- dist/human.node-gpu.js | 14 +++++----- dist/human.node-gpu.js.map | 4 +-- dist/human.node-wasm.js | 14 +++++----- dist/human.node-wasm.js.map | 4 +-- dist/human.node.js | 14 +++++----- dist/human.node.js.map | 4 +-- package.json | 4 +-- server/build.log | 17 ++++++++++++ src/draw/draw.ts | 26 +++++++++++++++--- src/gesture/gesture.ts | 10 +++++-- typedoc/assets/js/search.js | 2 +- typedoc/interfaces/drawoptions.html | 11 ++++++++ types/draw/draw.d.ts | 1 + 24 files changed, 160 insertions(+), 90 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d397ce4a..9c20f8e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # @vladmandic/human -Version: **1.5.2** +Version: **1.6.0** Description: **Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition** Author: **Vladimir Mandic ** @@ -11,9 +11,9 @@ Repository: **** ### **HEAD -> main** 2021/04/16 mandic00@live.com - -### **origin/main** 2021/04/16 mandic00@live.com - +- full rebuild +- new look +- added benchmarks - added node-multiprocess demo - fix image orientation - flat app style diff --git a/demo/helpers/menu.js b/demo/helpers/menu.js index d311c281..ccbc9a7d 100644 --- a/demo/helpers/menu.js +++ b/demo/helpers/menu.js @@ -118,7 +118,7 @@ class Menu { this.menu.appendChild(this.container); if (typeof parent === 'object') parent.appendChild(this.menu); - else document.getElementById(parent)?.appendChild(this.menu); + else document.getElementById(parent).appendChild(this.menu); } get newID() { @@ -131,11 +131,11 @@ class Menu { } get width() { - return this.menu?.offsetWidth || 0; + return this.menu.offsetWidth || 0; } get height() { - return this.menu?.offsetHeight || 0; + return this.menu.offsetHeight || 0; } hide() { @@ -203,8 +203,8 @@ class Menu { el.innerHTML = `${title}`; if (this.container) this.container.appendChild(el); el.addEventListener('change', (evt) => { - object[variable] = evt.target?.checked; - if (callback) callback(evt.target?.checked); + object[variable] = evt.target.checked; + if (callback) callback(evt.target.checked); }); return el; } @@ -223,7 +223,7 @@ class Menu { el.style.fontVariant = document.body.style.fontVariant; if (this.container) this.container.appendChild(el); el.addEventListener('change', (evt) => { - if (callback) callback(items[evt.target?.selectedIndex]); + if (callback) callback(items[evt.target.selectedIndex]); }); return el; } @@ -235,9 +235,9 @@ class Menu { if (this.container) this.container.appendChild(el); el.addEventListener('change', (evt) => { if (evt.target) { - object[variable] = parseInt(evt.target?.value) === parseFloat(evt.target?.value) ? parseInt(evt.target?.value) : parseFloat(evt.target?.value); + object[variable] = parseInt(evt.target.value) === parseFloat(evt.target.value) ? parseInt(evt.target.value) : parseFloat(evt.target.value); evt.target.setAttribute('value', evt.target.value); - if (callback) callback(evt.target?.value); + if (callback) callback(evt.target.value); } }); el.input = el.children[0]; diff --git a/demo/helpers/webrtc.js b/demo/helpers/webrtc.js index 56ccabd8..c31de4b3 100644 --- a/demo/helpers/webrtc.js +++ b/demo/helpers/webrtc.js @@ -17,18 +17,21 @@ async function webRTC(server, streamName, elementName) { const connection = new RTCPeerConnection(); connection.oniceconnectionstatechange = () => log('connection', connection.iceConnectionState); connection.onnegotiationneeded = async () => { - const offer = await connection.createOffer(); - await connection.setLocalDescription(offer); - const res = await fetch(`${server}/stream/receiver/${suuid}`, { - method: 'POST', - headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, - body: new URLSearchParams({ - suuid: `${suuid}`, - data: `${btoa(connection.localDescription?.sdp || '')}`, - }), - }); + let offer; + if (connection.localDescription) { + offer = await connection.createOffer(); + await connection.setLocalDescription(offer); + const res = await fetch(`${server}/stream/receiver/${suuid}`, { + method: 'POST', + headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, + body: new URLSearchParams({ + suuid: `${suuid}`, + data: `${btoa(connection.localDescription.sdp || '')}`, + }), + }); + } const data = res && res.ok ? await res.text() : ''; - if (data.length === 0) { + if (data.length === 0 || !offer) { log('cannot connect:', server); } else { connection.setRemoteDescription(new RTCSessionDescription({ diff --git a/demo/index.html b/demo/index.html index 252d7687..62fba7e8 100644 --- a/demo/index.html +++ b/demo/index.html @@ -16,7 +16,7 @@