update changelog

pull/50/head
Vladimir Mandic 2020-11-03 11:11:53 -05:00
parent 3fa66a05e4
commit e90969cc72
3 changed files with 17 additions and 9 deletions

View File

@ -1,7 +1,7 @@
# @vladmandic/human # @vladmandic/human
Version: **0.6.1** Version: **0.6.2**
Description: **human: 3D Face Detection, Iris Tracking and Age & Gender Prediction** Description: **human: 3D Face Detection, Iris Tracking and Age & Gender Prediction**
Author: **Vladimir Mandic <mandic00@live.com>** Author: **Vladimir Mandic <mandic00@live.com>**
@ -10,13 +10,21 @@ Repository: **<git+https://github.com/vladmandic/human.git>**
## Changelog ## Changelog
### **HEAD -> main** 2020/11/03 mandic00@live.com
- fix pause restart
- complete model refactoring
- fixed typo
### **0.6.2** 2020/11/02 mandic00@live.com
- optimized demo
- package update
### **0.6.1** 2020/11/02 mandic00@live.com ### **0.6.1** 2020/11/02 mandic00@live.com
- major performance improvements for all models - major performance improvements for all models
- revert "optimized canvas handling" - revert "optimized canvas handling"
- optimized canvas handling - optimized canvas handling
- minor optimization to imagefx - minor optimization to imagefx
- fix demo image sample
### **origin/main, origin/HEAD** 2020/11/01 mandic00@live.com
- added tfjs-vis to distribution - added tfjs-vis to distribution
### **0.5.5** 2020/11/01 mandic00@live.com ### **0.5.5** 2020/11/01 mandic00@live.com

View File

@ -126,10 +126,10 @@ function drawResults(input, result, canvas) {
// update log // update log
const engine = human.tf.engine(); const engine = human.tf.engine();
const gpu = engine.backendInstance ? `gpu: ${(engine.backendInstance.numBytesInGPU ? engine.backendInstance.numBytesInGPU : 0).toLocaleString()} bytes` : ''; const gpu = engine.backendInstance ? `gpu: ${(engine.backendInstance.numBytesInGPU ? engine.backendInstance.numBytesInGPU : 0).toLocaleString()} bytes` : '';
const memory = `system: ${engine.state.numBytes.toLocaleString()} bytes ${gpu} tensors: ${engine.state.numTensors.toLocaleString()}`; const memory = `system: ${engine.state.numBytes.toLocaleString()} bytes ${gpu} | tensors: ${engine.state.numTensors.toLocaleString()}`;
const processing = result.canvas ? `processing: ${result.canvas.width} x ${result.canvas.height}` : ''; const processing = result.canvas ? `processing: ${result.canvas.width} x ${result.canvas.height}` : '';
document.getElementById('log').innerText = ` document.getElementById('log').innerText = `
video: ${camera.name} facing: ${camera.facing} resolution: ${camera.width} x ${camera.height} ${processing} video: ${camera.name} | facing: ${camera.facing} | resolution: ${camera.width} x ${camera.height} ${processing}
backend: ${human.tf.getBackend()} | ${memory} | object size: ${(str(result)).length.toLocaleString()} bytes backend: ${human.tf.getBackend()} | ${memory} | object size: ${(str(result)).length.toLocaleString()} bytes
performance: ${str(result.performance)} performance: ${str(result.performance)}
`; `;
@ -306,7 +306,7 @@ function setupMenu() {
menu.addHTML('<hr style="min-width: 200px; border-style: inset; border-color: dimgray">'); menu.addHTML('<hr style="min-width: 200px; border-style: inset; border-color: dimgray">');
menu.addList('Backend', ['cpu', 'webgl', 'wasm', 'webgpu'], config.backend, (val) => config.backend = val); menu.addList('Backend', ['cpu', 'webgl', 'wasm', 'webgpu'], config.backend, (val) => config.backend = val);
menu.addBool('Enable Profiler', config, 'profile'); menu.addBool('Enable Profiler', config, 'profile');
menu.addBool('Memory Deallocator', config, 'deallocate'); menu.addBool('Memory Shield', config, 'deallocate');
menu.addBool('Use Web Worker', ui, 'useWorker'); menu.addBool('Use Web Worker', ui, 'useWorker');
menu.addHTML('<hr style="min-width: 200px; border-style: inset; border-color: dimgray">'); menu.addHTML('<hr style="min-width: 200px; border-style: inset; border-color: dimgray">');
menu.addLabel('Enabled Models'); menu.addLabel('Enabled Models');
@ -359,7 +359,7 @@ function setupMenu() {
menuFX.addBool('Draw Polygons', ui, 'drawPolygons'); menuFX.addBool('Draw Polygons', ui, 'drawPolygons');
menuFX.addBool('Fill Polygons', ui, 'fillPolygons'); menuFX.addBool('Fill Polygons', ui, 'fillPolygons');
menuFX.addHTML('<hr style="min-width: 200px; border-style: inset; border-color: dimgray">'); menuFX.addHTML('<hr style="min-width: 200px; border-style: inset; border-color: dimgray">');
menuFX.addLabel('Image Filters'); menuFX.addLabel('Image Processing');
menuFX.addBool('Enabled', config.filter, 'enabled'); menuFX.addBool('Enabled', config.filter, 'enabled');
menuFX.addRange('Image width', config.filter, 'width', 0, 3840, 10, (val) => config.filter.width = parseInt(val)); menuFX.addRange('Image width', config.filter, 'width', 0, 3840, 10, (val) => config.filter.width = parseInt(val));
menuFX.addRange('Image height', config.filter, 'height', 0, 2160, 10, (val) => config.filter.height = parseInt(val)); menuFX.addRange('Image height', config.filter, 'height', 0, 2160, 10, (val) => config.filter.height = parseInt(val));
@ -381,7 +381,7 @@ function setupMenu() {
async function main() { async function main() {
log('Human: demo starting ...'); log('Human: demo starting ...');
setupMenu(); setupMenu();
document.getElementById('log').innerText = `Human: version: ${human.version} TensorFlow/JS version: ${human.tf.version_core}`; document.getElementById('log').innerText = `Human: version ${human.version} TensorFlow/JS: version ${human.tf.version_core}`;
// this is not required, just pre-warms the library // this is not required, just pre-warms the library
status('loading'); status('loading');
await human.load(); await human.load();

View File

@ -50,8 +50,8 @@
</div> </div>
<div id="loader" class="loader"></div> <div id="loader" class="loader"></div>
<div id="status" class="status"></div> <div id="status" class="status"></div>
<video id="video" playsinline class="video"></video>
<canvas id="canvas" class="canvas"></canvas> <canvas id="canvas" class="canvas"></canvas>
<video id="video" playsinline class="video"></video>
<div id="samples-container" class="samples-container"></div> <div id="samples-container" class="samples-container"></div>
<div id="log" class="log"></div> <div id="log" class="log"></div>
</body> </body>