update dependencies

pull/54/head
Vladimir Mandic 2021-05-18 08:11:17 -04:00
parent 107297015e
commit 7b8b30bfc9
16 changed files with 19273 additions and 19059 deletions

View File

@ -1,6 +1,6 @@
# @vladmandic/face-api # @vladmandic/face-api
Version: **1.2.3** Version: **1.2.4**
Description: **FaceAPI: AI-powered Face Detection & Rotation Tracking, Face Description & Recognition, Age & Gender & Emotion Prediction for Browser and NodeJS using TensorFlow/JS** Description: **FaceAPI: AI-powered Face Detection & Rotation Tracking, Face Description & Recognition, Age & Gender & Emotion Prediction for Browser and NodeJS using TensorFlow/JS**
Author: **Vladimir Mandic <mandic00@live.com>** Author: **Vladimir Mandic <mandic00@live.com>**
@ -9,6 +9,12 @@ Repository: **<git+https://github.com/vladmandic/face-api.git>**
## Changelog ## Changelog
### **1.2.4** 2021/05/18 mandic00@live.com
### **origin/master** 2021/05/04 mandic00@live.com
### **1.2.3** 2021/05/04 mandic00@live.com ### **1.2.3** 2021/05/04 mandic00@live.com

View File

@ -1,6 +1,10 @@
const fs = require('fs'); const fs = require('fs');
// eslint-disable-next-line import/no-extraneous-dependencies, node/no-unpublished-require
const tf = require('@tensorflow/tfjs-node'); const tf = require('@tensorflow/tfjs-node');
// eslint-disable-next-line import/no-extraneous-dependencies, node/no-unpublished-require
const image = require('@canvas/image'); // @canvas/image can decode jpeg, png, webp const image = require('@canvas/image'); // @canvas/image can decode jpeg, png, webp
// eslint-disable-next-line import/no-extraneous-dependencies, node/no-unpublished-require
const log = require('@vladmandic/pilogger');
const faceapi = require('../dist/face-api.node.js'); // this is equivalent to '@vladmandic/faceapi' const faceapi = require('../dist/face-api.node.js'); // this is equivalent to '@vladmandic/faceapi'
const modelPath = 'model/'; const modelPath = 'model/';
@ -8,24 +12,36 @@ const imageFile = 'demo/sample1.jpg';
const ssdOptions = { minConfidence: 0.1, maxResults: 10 }; const ssdOptions = { minConfidence: 0.1, maxResults: 10 };
async function main() { async function main() {
log.header();
const buffer = fs.readFileSync(imageFile); // read image from disk const buffer = fs.readFileSync(imageFile); // read image from disk
const canvas = await image.imageFromBuffer(buffer); // decode to canvas const canvas = await image.imageFromBuffer(buffer); // decode to canvas
const imageData = image.getImageData(canvas); // read decoded image data from canvas const imageData = image.getImageData(canvas); // read decoded image data from canvas
console.log('image:', imageFile, canvas.width, canvas.height); log.info('image:', imageFile, canvas.width, canvas.height);
const tensor = tf.tidy(() => { // create tensor from image data const tensor = tf.tidy(() => { // create tensor from image data
const data = tf.tensor(Array.from(imageData.data), [canvas.height, canvas.width, 4], 'int32'); // create rgba image tensor from flat array and flip to height x width const data = tf.tensor(Array.from(imageData?.data || []), [canvas.height, canvas.width, 4], 'int32'); // create rgba image tensor from flat array and flip to height x width
const channels = tf.split(data, 4, 2); // split rgba to channels const channels = tf.split(data, 4, 2); // split rgba to channels
const rgb = tf.stack([channels[0], channels[1], channels[2]], 2); // stack channels back to rgb const rgb = tf.stack([channels[0], channels[1], channels[2]], 2); // stack channels back to rgb
const reshape = tf.reshape(rgb, [1, canvas.height, canvas.width, 3]); // move extra dim from the end of tensor and use it as batch number instead const reshape = tf.reshape(rgb, [1, canvas.height, canvas.width, 3]); // move extra dim from the end of tensor and use it as batch number instead
return reshape; return reshape;
}); });
console.log('tensor:', tensor.shape, tensor.size); log.info('tensor:', tensor.shape, tensor.size);
// load models
await faceapi.nets.ssdMobilenetv1.loadFromDisk(modelPath);
await faceapi.nets.ageGenderNet.loadFromDisk(modelPath);
await faceapi.nets.faceLandmark68Net.loadFromDisk(modelPath);
await faceapi.nets.faceRecognitionNet.loadFromDisk(modelPath);
await faceapi.nets.faceExpressionNet.loadFromDisk(modelPath);
await faceapi.nets.ssdMobilenetv1.loadFromDisk(modelPath); // load basic model only
const optionsSSDMobileNet = new faceapi.SsdMobilenetv1Options(ssdOptions); // create options object const optionsSSDMobileNet = new faceapi.SsdMobilenetv1Options(ssdOptions); // create options object
const result = await faceapi.detectAllFaces(tensor, optionsSSDMobileNet); // run detection const result = await faceapi // run detection
console.log('results:', result); .detectAllFaces(tensor, optionsSSDMobileNet)
.withFaceLandmarks()
.withFaceExpressions()
.withFaceDescriptors()
.withAgeAndGender();
log.data('results:', result);
} }
main(); main();

View File

@ -6,9 +6,14 @@
*/ */
var __defProp = Object.defineProperty; var __defProp = Object.defineProperty;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __require = (x) => {
if (typeof require !== "undefined")
return require(x);
throw new Error('Dynamic require of "' + x + '" is not supported');
};
var __export = (target, all) => { var __export = (target, all) => {
for (var name in all) for (var name in all)
__defProp(target, name, {get: all[name], enumerable: true}); __defProp(target, name, {get: all[name], enumerable: true});
@ -793,7 +798,7 @@ function createFileSystem(fs) {
let requireFsError = ""; let requireFsError = "";
if (!fs) { if (!fs) {
try { try {
fs = require("fs"); fs = __require("fs");
} catch (err) { } catch (err) {
requireFsError = err.toString(); requireFsError = err.toString();
} }
@ -849,7 +854,7 @@ function isBrowser() {
// src/env/isNodejs.ts // src/env/isNodejs.ts
function isNodejs() { function isNodejs() {
return typeof global === "object" && typeof require === "function" && typeof module !== "undefined" && typeof process !== "undefined" && !!process.version; return typeof global === "object" && typeof __require === "function" && typeof module !== "undefined" && typeof process !== "undefined" && !!process.version;
} }
// src/env/index.ts // src/env/index.ts
@ -2080,7 +2085,7 @@ function drawFaceLandmarks(canvasArg, faceLandmarks) {
} }
// package.json // package.json
var version = "1.2.3"; var version = "1.2.4";
// src/xception/extractParams.ts // src/xception/extractParams.ts
function extractorsFactory2(extractWeights, paramMappings) { function extractorsFactory2(extractWeights, paramMappings) {

File diff suppressed because one or more lines are too long

3898
dist/face-api.esm.js vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

3898
dist/face-api.js vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -7,12 +7,14 @@
var __create = Object.create; var __create = Object.create;
var __defProp = Object.defineProperty; var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf; var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty; var __hasOwnProp = Object.prototype.hasOwnProperty;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __markAsModule = (target) => __defProp(target, "__esModule", {value: true}); var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
var __commonJS = (cb, mod) => () => (mod || cb((mod = {exports: {}}).exports, mod), mod.exports); var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[Object.keys(cb)[0]])((mod = {exports: {}}).exports, mod), mod.exports;
};
var __export = (target, all) => { var __export = (target, all) => {
for (var name in all) for (var name in all)
__defProp(target, name, {get: all[name], enumerable: true}); __defProp(target, name, {get: all[name], enumerable: true});
@ -30,13 +32,14 @@ var __toModule = (module2) => {
}; };
// dist/tfjs.esm.js // dist/tfjs.esm.js
var require_tfjs_esm = __commonJS((exports) => { var require_tfjs_esm = __commonJS({
"dist/tfjs.esm.js"(exports) {
var __create2 = Object.create; var __create2 = Object.create;
var __defProp2 = Object.defineProperty; var __defProp2 = Object.defineProperty;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __getProtoOf2 = Object.getPrototypeOf; var __getProtoOf2 = Object.getPrototypeOf;
var __hasOwnProp2 = Object.prototype.hasOwnProperty; var __hasOwnProp2 = Object.prototype.hasOwnProperty;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __markAsModule2 = (target) => __defProp2(target, "__esModule", {value: true}); var __markAsModule2 = (target) => __defProp2(target, "__esModule", {value: true});
var __reExport2 = (target, module22, desc) => { var __reExport2 = (target, module22, desc) => {
if (module22 && typeof module22 === "object" || typeof module22 === "function") { if (module22 && typeof module22 === "object" || typeof module22 === "function") {
@ -51,6 +54,7 @@ var require_tfjs_esm = __commonJS((exports) => {
}; };
__markAsModule2(exports); __markAsModule2(exports);
__reExport2(exports, __toModule2(require("@tensorflow/tfjs"))); __reExport2(exports, __toModule2(require("@tensorflow/tfjs")));
}
}); });
// src/index.ts // src/index.ts
@ -2262,7 +2266,7 @@ function drawFaceLandmarks(canvasArg, faceLandmarks) {
} }
// package.json // package.json
var version = "1.2.3"; var version = "1.2.4";
// src/ageGenderNet/AgeGenderNet.ts // src/ageGenderNet/AgeGenderNet.ts
var tf20 = __toModule(require_tfjs_esm()); var tf20 = __toModule(require_tfjs_esm());

File diff suppressed because one or more lines are too long

View File

@ -7,12 +7,14 @@
var __create = Object.create; var __create = Object.create;
var __defProp = Object.defineProperty; var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf; var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty; var __hasOwnProp = Object.prototype.hasOwnProperty;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __markAsModule = (target) => __defProp(target, "__esModule", {value: true}); var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
var __commonJS = (cb, mod) => () => (mod || cb((mod = {exports: {}}).exports, mod), mod.exports); var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[Object.keys(cb)[0]])((mod = {exports: {}}).exports, mod), mod.exports;
};
var __export = (target, all) => { var __export = (target, all) => {
for (var name in all) for (var name in all)
__defProp(target, name, {get: all[name], enumerable: true}); __defProp(target, name, {get: all[name], enumerable: true});
@ -30,13 +32,14 @@ var __toModule = (module2) => {
}; };
// dist/tfjs.esm.js // dist/tfjs.esm.js
var require_tfjs_esm = __commonJS((exports) => { var require_tfjs_esm = __commonJS({
"dist/tfjs.esm.js"(exports) {
var __create2 = Object.create; var __create2 = Object.create;
var __defProp2 = Object.defineProperty; var __defProp2 = Object.defineProperty;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __getProtoOf2 = Object.getPrototypeOf; var __getProtoOf2 = Object.getPrototypeOf;
var __hasOwnProp2 = Object.prototype.hasOwnProperty; var __hasOwnProp2 = Object.prototype.hasOwnProperty;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __markAsModule2 = (target) => __defProp2(target, "__esModule", {value: true}); var __markAsModule2 = (target) => __defProp2(target, "__esModule", {value: true});
var __reExport2 = (target, module22, desc) => { var __reExport2 = (target, module22, desc) => {
if (module22 && typeof module22 === "object" || typeof module22 === "function") { if (module22 && typeof module22 === "object" || typeof module22 === "function") {
@ -51,6 +54,7 @@ var require_tfjs_esm = __commonJS((exports) => {
}; };
__markAsModule2(exports); __markAsModule2(exports);
__reExport2(exports, __toModule2(require("@tensorflow/tfjs-node-gpu"))); __reExport2(exports, __toModule2(require("@tensorflow/tfjs-node-gpu")));
}
}); });
// src/index.ts // src/index.ts
@ -2262,7 +2266,7 @@ function drawFaceLandmarks(canvasArg, faceLandmarks) {
} }
// package.json // package.json
var version = "1.2.3"; var version = "1.2.4";
// src/ageGenderNet/AgeGenderNet.ts // src/ageGenderNet/AgeGenderNet.ts
var tf20 = __toModule(require_tfjs_esm()); var tf20 = __toModule(require_tfjs_esm());

File diff suppressed because one or more lines are too long

18
dist/face-api.node.js vendored
View File

@ -7,12 +7,14 @@
var __create = Object.create; var __create = Object.create;
var __defProp = Object.defineProperty; var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf; var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty; var __hasOwnProp = Object.prototype.hasOwnProperty;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __markAsModule = (target) => __defProp(target, "__esModule", {value: true}); var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
var __commonJS = (cb, mod) => () => (mod || cb((mod = {exports: {}}).exports, mod), mod.exports); var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[Object.keys(cb)[0]])((mod = {exports: {}}).exports, mod), mod.exports;
};
var __export = (target, all) => { var __export = (target, all) => {
for (var name in all) for (var name in all)
__defProp(target, name, {get: all[name], enumerable: true}); __defProp(target, name, {get: all[name], enumerable: true});
@ -30,13 +32,14 @@ var __toModule = (module2) => {
}; };
// dist/tfjs.esm.js // dist/tfjs.esm.js
var require_tfjs_esm = __commonJS((exports) => { var require_tfjs_esm = __commonJS({
"dist/tfjs.esm.js"(exports) {
var __create2 = Object.create; var __create2 = Object.create;
var __defProp2 = Object.defineProperty; var __defProp2 = Object.defineProperty;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __getProtoOf2 = Object.getPrototypeOf; var __getProtoOf2 = Object.getPrototypeOf;
var __hasOwnProp2 = Object.prototype.hasOwnProperty; var __hasOwnProp2 = Object.prototype.hasOwnProperty;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __markAsModule2 = (target) => __defProp2(target, "__esModule", {value: true}); var __markAsModule2 = (target) => __defProp2(target, "__esModule", {value: true});
var __reExport2 = (target, module22, desc) => { var __reExport2 = (target, module22, desc) => {
if (module22 && typeof module22 === "object" || typeof module22 === "function") { if (module22 && typeof module22 === "object" || typeof module22 === "function") {
@ -51,6 +54,7 @@ var require_tfjs_esm = __commonJS((exports) => {
}; };
__markAsModule2(exports); __markAsModule2(exports);
__reExport2(exports, __toModule2(require("@tensorflow/tfjs-node"))); __reExport2(exports, __toModule2(require("@tensorflow/tfjs-node")));
}
}); });
// src/index.ts // src/index.ts
@ -2262,7 +2266,7 @@ function drawFaceLandmarks(canvasArg, faceLandmarks) {
} }
// package.json // package.json
var version = "1.2.3"; var version = "1.2.4";
// src/ageGenderNet/AgeGenderNet.ts // src/ageGenderNet/AgeGenderNet.ts
var tf20 = __toModule(require_tfjs_esm()); var tf20 = __toModule(require_tfjs_esm());

File diff suppressed because one or more lines are too long

3887
dist/tfjs.esm.js vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long