fix linting and tests
parent
d1e5e71079
commit
5e88795227
|
@ -0,0 +1,3 @@
|
|||
node_modules
|
||||
pnpm-lock.yaml
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
# @vladmandic/face-api
|
||||
|
||||
Version: **1.1.7**
|
||||
Version: **1.1.8**
|
||||
Description: **FaceAPI: AI-powered Face Detection, Description & Recognition using Tensorflow/JS**
|
||||
|
||||
Author: **Vladimir Mandic <mandic00@live.com>**
|
||||
|
@ -9,6 +9,12 @@ Repository: **<git+https://github.com/vladmandic/face-api.git>**
|
|||
|
||||
## Changelog
|
||||
|
||||
### **1.1.8** 2021/04/01 mandic00@live.com
|
||||
|
||||
|
||||
### **origin/master** 2021/04/01 mandic00@live.com
|
||||
|
||||
|
||||
### **1.1.7** 2021/03/31 mandic00@live.com
|
||||
|
||||
- enable minify
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
@ -443,6 +444,8 @@ Compared to [face-api.js](https://github.com/justadudewhohacks/face-api.js) vers
|
|||
|
||||
<br>
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
|
|
@ -13,7 +13,7 @@ var __export = (target, all) => {
|
|||
for (var name in all)
|
||||
__defProp(target, name, {get: all[name], enumerable: true});
|
||||
};
|
||||
var __exportStar = (target, module2, desc) => {
|
||||
var __reExport = (target, module2, desc) => {
|
||||
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
||||
for (let key of __getOwnPropNames(module2))
|
||||
if (!__hasOwnProp.call(target, key) && key !== "default")
|
||||
|
@ -24,8 +24,8 @@ var __exportStar = (target, module2, desc) => {
|
|||
|
||||
// dist/tfjs.esm.js
|
||||
var tfjs_esm_exports = {};
|
||||
__exportStar(tfjs_esm_exports, dist_star);
|
||||
__exportStar(tfjs_esm_exports, tfjs_backend_wasm_star);
|
||||
__reExport(tfjs_esm_exports, dist_star);
|
||||
__reExport(tfjs_esm_exports, tfjs_backend_wasm_star);
|
||||
import * as dist_star from "@tensorflow/tfjs/dist/index.js";
|
||||
import * as tfjs_backend_wasm_star from "@tensorflow/tfjs-backend-wasm";
|
||||
|
||||
|
@ -2080,7 +2080,7 @@ function drawFaceLandmarks(canvasArg, faceLandmarks) {
|
|||
}
|
||||
|
||||
// package.json
|
||||
var version = "1.1.7";
|
||||
var version = "1.1.8";
|
||||
|
||||
// src/xception/extractParams.ts
|
||||
function extractorsFactory2(extractWeights, paramMappings) {
|
||||
|
|
|
@ -490,7 +490,7 @@ var __export2 = (target, all4) => {
|
|||
for (var name in all4)
|
||||
__defProp2(target, name, {get: all4[name], enumerable: true});
|
||||
};
|
||||
var __exportStar = (target, module2, desc) => {
|
||||
var __reExport = (target, module2, desc) => {
|
||||
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
||||
for (let key of __getOwnPropNames(module2))
|
||||
if (!__hasOwnProp.call(target, key) && key !== "default")
|
||||
|
@ -499,7 +499,7 @@ var __exportStar = (target, module2, desc) => {
|
|||
return target;
|
||||
};
|
||||
var __toModule = (module2) => {
|
||||
return __exportStar(__markAsModule(__defProp2(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
|
||||
return __reExport(__markAsModule(__defProp2(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
|
||||
};
|
||||
var require_browser = __commonJS(() => {
|
||||
});
|
||||
|
@ -19262,6 +19262,22 @@ __export2(kernel_impls_exports, {
|
|||
* limitations under the License.
|
||||
* =============================================================================
|
||||
*/
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2020 Google Inc. All Rights Reserved.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* =============================================================================
|
||||
*/
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2017 Google LLC. All Rights Reserved.
|
||||
|
@ -70946,6 +70962,38 @@ function sliceImpl2(vals, begin, size, shape, dtype) {
|
|||
}
|
||||
return outBuf.values;
|
||||
}
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2020 Google LLC. All Rights Reserved.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* =============================================================================
|
||||
*/
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2020 Google LLC. All Rights Reserved.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* =============================================================================
|
||||
*/
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2019 Google LLC. All Rights Reserved.
|
||||
|
@ -76594,7 +76642,7 @@ function drawFaceLandmarks(canvasArg, faceLandmarks) {
|
|||
}
|
||||
|
||||
// package.json
|
||||
var version10 = "1.1.7";
|
||||
var version10 = "1.1.8";
|
||||
|
||||
// src/xception/extractParams.ts
|
||||
function extractorsFactory2(extractWeights, paramMappings) {
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -616,7 +616,7 @@ var faceapi = (() => {
|
|||
for (var name in all4)
|
||||
__defProp2(target, name, {get: all4[name], enumerable: true});
|
||||
};
|
||||
var __exportStar = (target, module2, desc) => {
|
||||
var __reExport = (target, module2, desc) => {
|
||||
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
||||
for (let key of __getOwnPropNames(module2))
|
||||
if (!__hasOwnProp.call(target, key) && key !== "default")
|
||||
|
@ -625,7 +625,7 @@ var faceapi = (() => {
|
|||
return target;
|
||||
};
|
||||
var __toModule = (module2) => {
|
||||
return __exportStar(__markAsModule(__defProp2(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
|
||||
return __reExport(__markAsModule(__defProp2(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
|
||||
};
|
||||
var require_browser = __commonJS(() => {
|
||||
});
|
||||
|
@ -19388,6 +19388,22 @@ Expected: ${expectedFlat}.`);
|
|||
* limitations under the License.
|
||||
* =============================================================================
|
||||
*/
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2020 Google Inc. All Rights Reserved.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* =============================================================================
|
||||
*/
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2017 Google LLC. All Rights Reserved.
|
||||
|
@ -71072,6 +71088,38 @@ return a / b;`;
|
|||
}
|
||||
return outBuf.values;
|
||||
}
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2020 Google LLC. All Rights Reserved.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* =============================================================================
|
||||
*/
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2020 Google LLC. All Rights Reserved.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* =============================================================================
|
||||
*/
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2019 Google LLC. All Rights Reserved.
|
||||
|
@ -76720,7 +76768,7 @@ return a / b;`;
|
|||
}
|
||||
|
||||
// package.json
|
||||
var version10 = "1.1.7";
|
||||
var version10 = "1.1.8";
|
||||
|
||||
// src/xception/extractParams.ts
|
||||
function extractorsFactory2(extractWeights, paramMappings) {
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -17,7 +17,7 @@ var __export = (target, all) => {
|
|||
for (var name in all)
|
||||
__defProp(target, name, {get: all[name], enumerable: true});
|
||||
};
|
||||
var __exportStar = (target, module2, desc) => {
|
||||
var __reExport = (target, module2, desc) => {
|
||||
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
||||
for (let key of __getOwnPropNames(module2))
|
||||
if (!__hasOwnProp.call(target, key) && key !== "default")
|
||||
|
@ -26,7 +26,7 @@ var __exportStar = (target, module2, desc) => {
|
|||
return target;
|
||||
};
|
||||
var __toModule = (module2) => {
|
||||
return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
|
||||
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
|
||||
};
|
||||
|
||||
// dist/tfjs.esm.js
|
||||
|
@ -38,7 +38,7 @@ var require_tfjs_esm = __commonJS((exports) => {
|
|||
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
||||
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
|
||||
var __markAsModule2 = (target) => __defProp2(target, "__esModule", {value: true});
|
||||
var __exportStar2 = (target, module22, desc) => {
|
||||
var __reExport2 = (target, module22, desc) => {
|
||||
if (module22 && typeof module22 === "object" || typeof module22 === "function") {
|
||||
for (let key of __getOwnPropNames2(module22))
|
||||
if (!__hasOwnProp2.call(target, key) && key !== "default")
|
||||
|
@ -47,10 +47,10 @@ var require_tfjs_esm = __commonJS((exports) => {
|
|||
return target;
|
||||
};
|
||||
var __toModule2 = (module22) => {
|
||||
return __exportStar2(__markAsModule2(__defProp2(module22 != null ? __create2(__getProtoOf2(module22)) : {}, "default", module22 && module22.__esModule && "default" in module22 ? {get: () => module22.default, enumerable: true} : {value: module22, enumerable: true})), module22);
|
||||
return __reExport2(__markAsModule2(__defProp2(module22 != null ? __create2(__getProtoOf2(module22)) : {}, "default", module22 && module22.__esModule && "default" in module22 ? {get: () => module22.default, enumerable: true} : {value: module22, enumerable: true})), module22);
|
||||
};
|
||||
__markAsModule2(exports);
|
||||
__exportStar2(exports, __toModule2(require("@tensorflow/tfjs")));
|
||||
__reExport2(exports, __toModule2(require("@tensorflow/tfjs")));
|
||||
});
|
||||
|
||||
// src/index.ts
|
||||
|
@ -2262,7 +2262,7 @@ function drawFaceLandmarks(canvasArg, faceLandmarks) {
|
|||
}
|
||||
|
||||
// package.json
|
||||
var version = "1.1.7";
|
||||
var version = "1.1.8";
|
||||
|
||||
// src/ageGenderNet/AgeGenderNet.ts
|
||||
var tf20 = __toModule(require_tfjs_esm());
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -17,7 +17,7 @@ var __export = (target, all) => {
|
|||
for (var name in all)
|
||||
__defProp(target, name, {get: all[name], enumerable: true});
|
||||
};
|
||||
var __exportStar = (target, module2, desc) => {
|
||||
var __reExport = (target, module2, desc) => {
|
||||
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
||||
for (let key of __getOwnPropNames(module2))
|
||||
if (!__hasOwnProp.call(target, key) && key !== "default")
|
||||
|
@ -26,7 +26,7 @@ var __exportStar = (target, module2, desc) => {
|
|||
return target;
|
||||
};
|
||||
var __toModule = (module2) => {
|
||||
return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
|
||||
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
|
||||
};
|
||||
|
||||
// dist/tfjs.esm.js
|
||||
|
@ -38,7 +38,7 @@ var require_tfjs_esm = __commonJS((exports) => {
|
|||
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
||||
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
|
||||
var __markAsModule2 = (target) => __defProp2(target, "__esModule", {value: true});
|
||||
var __exportStar2 = (target, module22, desc) => {
|
||||
var __reExport2 = (target, module22, desc) => {
|
||||
if (module22 && typeof module22 === "object" || typeof module22 === "function") {
|
||||
for (let key of __getOwnPropNames2(module22))
|
||||
if (!__hasOwnProp2.call(target, key) && key !== "default")
|
||||
|
@ -47,10 +47,10 @@ var require_tfjs_esm = __commonJS((exports) => {
|
|||
return target;
|
||||
};
|
||||
var __toModule2 = (module22) => {
|
||||
return __exportStar2(__markAsModule2(__defProp2(module22 != null ? __create2(__getProtoOf2(module22)) : {}, "default", module22 && module22.__esModule && "default" in module22 ? {get: () => module22.default, enumerable: true} : {value: module22, enumerable: true})), module22);
|
||||
return __reExport2(__markAsModule2(__defProp2(module22 != null ? __create2(__getProtoOf2(module22)) : {}, "default", module22 && module22.__esModule && "default" in module22 ? {get: () => module22.default, enumerable: true} : {value: module22, enumerable: true})), module22);
|
||||
};
|
||||
__markAsModule2(exports);
|
||||
__exportStar2(exports, __toModule2(require("@tensorflow/tfjs-node-gpu")));
|
||||
__reExport2(exports, __toModule2(require("@tensorflow/tfjs-node-gpu")));
|
||||
});
|
||||
|
||||
// src/index.ts
|
||||
|
@ -2262,7 +2262,7 @@ function drawFaceLandmarks(canvasArg, faceLandmarks) {
|
|||
}
|
||||
|
||||
// package.json
|
||||
var version = "1.1.7";
|
||||
var version = "1.1.8";
|
||||
|
||||
// src/ageGenderNet/AgeGenderNet.ts
|
||||
var tf20 = __toModule(require_tfjs_esm());
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -17,7 +17,7 @@ var __export = (target, all) => {
|
|||
for (var name in all)
|
||||
__defProp(target, name, {get: all[name], enumerable: true});
|
||||
};
|
||||
var __exportStar = (target, module2, desc) => {
|
||||
var __reExport = (target, module2, desc) => {
|
||||
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
||||
for (let key of __getOwnPropNames(module2))
|
||||
if (!__hasOwnProp.call(target, key) && key !== "default")
|
||||
|
@ -26,7 +26,7 @@ var __exportStar = (target, module2, desc) => {
|
|||
return target;
|
||||
};
|
||||
var __toModule = (module2) => {
|
||||
return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
|
||||
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
|
||||
};
|
||||
|
||||
// dist/tfjs.esm.js
|
||||
|
@ -38,7 +38,7 @@ var require_tfjs_esm = __commonJS((exports) => {
|
|||
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
||||
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
|
||||
var __markAsModule2 = (target) => __defProp2(target, "__esModule", {value: true});
|
||||
var __exportStar2 = (target, module22, desc) => {
|
||||
var __reExport2 = (target, module22, desc) => {
|
||||
if (module22 && typeof module22 === "object" || typeof module22 === "function") {
|
||||
for (let key of __getOwnPropNames2(module22))
|
||||
if (!__hasOwnProp2.call(target, key) && key !== "default")
|
||||
|
@ -47,10 +47,10 @@ var require_tfjs_esm = __commonJS((exports) => {
|
|||
return target;
|
||||
};
|
||||
var __toModule2 = (module22) => {
|
||||
return __exportStar2(__markAsModule2(__defProp2(module22 != null ? __create2(__getProtoOf2(module22)) : {}, "default", module22 && module22.__esModule && "default" in module22 ? {get: () => module22.default, enumerable: true} : {value: module22, enumerable: true})), module22);
|
||||
return __reExport2(__markAsModule2(__defProp2(module22 != null ? __create2(__getProtoOf2(module22)) : {}, "default", module22 && module22.__esModule && "default" in module22 ? {get: () => module22.default, enumerable: true} : {value: module22, enumerable: true})), module22);
|
||||
};
|
||||
__markAsModule2(exports);
|
||||
__exportStar2(exports, __toModule2(require("@tensorflow/tfjs-node")));
|
||||
__reExport2(exports, __toModule2(require("@tensorflow/tfjs-node")));
|
||||
});
|
||||
|
||||
// src/index.ts
|
||||
|
@ -2262,7 +2262,7 @@ function drawFaceLandmarks(canvasArg, faceLandmarks) {
|
|||
}
|
||||
|
||||
// package.json
|
||||
var version = "1.1.7";
|
||||
var version = "1.1.8";
|
||||
|
||||
// src/ageGenderNet/AgeGenderNet.ts
|
||||
var tf20 = __toModule(require_tfjs_esm());
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -17,7 +17,7 @@ var __export = (target, all4) => {
|
|||
for (var name in all4)
|
||||
__defProp(target, name, {get: all4[name], enumerable: true});
|
||||
};
|
||||
var __exportStar = (target, module, desc) => {
|
||||
var __reExport = (target, module, desc) => {
|
||||
if (module && typeof module === "object" || typeof module === "function") {
|
||||
for (let key of __getOwnPropNames(module))
|
||||
if (!__hasOwnProp.call(target, key) && key !== "default")
|
||||
|
@ -26,7 +26,7 @@ var __exportStar = (target, module, desc) => {
|
|||
return target;
|
||||
};
|
||||
var __toModule = (module) => {
|
||||
return __exportStar(__markAsModule(__defProp(module != null ? __create(__getProtoOf(module)) : {}, "default", module && module.__esModule && "default" in module ? {get: () => module.default, enumerable: true} : {value: module, enumerable: true})), module);
|
||||
return __reExport(__markAsModule(__defProp(module != null ? __create(__getProtoOf(module)) : {}, "default", module && module.__esModule && "default" in module ? {get: () => module.default, enumerable: true} : {value: module, enumerable: true})), module);
|
||||
};
|
||||
|
||||
// (disabled):node_modules/.pnpm/node-fetch@2.6.1/node_modules/node-fetch/browser.js
|
||||
|
@ -19468,6 +19468,24 @@ __export(kernel_impls_exports, {
|
|||
* =============================================================================
|
||||
*/
|
||||
|
||||
// node_modules/.pnpm/@tensorflow/tfjs-core@3.3.0/node_modules/@tensorflow/tfjs-core/dist/base.js
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2020 Google Inc. All Rights Reserved.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* =============================================================================
|
||||
*/
|
||||
|
||||
// node_modules/.pnpm/@tensorflow/tfjs-core@3.3.0/node_modules/@tensorflow/tfjs-core/dist/index.js
|
||||
/**
|
||||
* @license
|
||||
|
@ -72848,6 +72866,42 @@ function sliceImpl2(vals, begin, size, shape, dtype) {
|
|||
return outBuf.values;
|
||||
}
|
||||
|
||||
// node_modules/.pnpm/@tensorflow/tfjs-backend-cpu@3.3.0/node_modules/@tensorflow/tfjs-backend-cpu/dist/shared.js
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2020 Google LLC. All Rights Reserved.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* =============================================================================
|
||||
*/
|
||||
|
||||
// node_modules/.pnpm/@tensorflow/tfjs-backend-wasm@3.3.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernel_utils/shared.js
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2020 Google LLC. All Rights Reserved.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* =============================================================================
|
||||
*/
|
||||
|
||||
// node_modules/.pnpm/@tensorflow/tfjs-backend-wasm@3.3.0/node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Concat.js
|
||||
/**
|
||||
* @license
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -25,7 +25,7 @@
|
|||
"dev": "node --trace-warnings server/serve.js",
|
||||
"build": "rimraf dist/* types/* typedoc/* && node server/build.js",
|
||||
"lint": "eslint src/**/* demo/*.js server/*.js",
|
||||
"test": "eslint src/**/* demo/*.js server/*.js"
|
||||
"test": "node --trace-warnings test/test-node.js"
|
||||
},
|
||||
"keywords": [
|
||||
"tensorflow",
|
||||
|
@ -50,7 +50,7 @@
|
|||
"canvas": "^2.7.0",
|
||||
"chokidar": "^3.5.1",
|
||||
"dayjs": "^1.10.4",
|
||||
"esbuild": "^0.11.2",
|
||||
"esbuild": "^0.11.4",
|
||||
"eslint": "^7.23.0",
|
||||
"eslint-config-airbnb-base": "^14.2.1",
|
||||
"eslint-plugin-import": "^2.22.1",
|
||||
|
|
|
@ -0,0 +1,65 @@
|
|||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
// eslint-disable-next-line import/no-extraneous-dependencies, node/no-unpublished-require
|
||||
const log = require('@vladmandic/pilogger');
|
||||
// eslint-disable-next-line import/no-extraneous-dependencies, node/no-unpublished-require
|
||||
const tf = require('@tensorflow/tfjs-node');
|
||||
const faceapi = require('../dist/face-api.node.js'); // this is equivalent to '@vladmandic/faceapi'
|
||||
|
||||
const modelPathRoot = '../model';
|
||||
const minConfidence = 0.15;
|
||||
const maxResults = 5;
|
||||
let optionsSSDMobileNet;
|
||||
|
||||
async function image(img) {
|
||||
const buffer = fs.readFileSync(img);
|
||||
const decoded = tf.node.decodeImage(buffer);
|
||||
const casted = decoded.toFloat();
|
||||
const result = casted.expandDims(0);
|
||||
decoded.dispose();
|
||||
casted.dispose();
|
||||
return result;
|
||||
}
|
||||
|
||||
async function detect(tensor) {
|
||||
try {
|
||||
const result = await faceapi
|
||||
.detectAllFaces(tensor, optionsSSDMobileNet)
|
||||
.withFaceLandmarks()
|
||||
.withFaceExpressions()
|
||||
.withFaceDescriptors()
|
||||
.withAgeAndGender();
|
||||
return result;
|
||||
} catch (err) {
|
||||
log.error('Caught error', err.message);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
await faceapi.tf.setBackend('tensorflow');
|
||||
await faceapi.tf.enableProdMode();
|
||||
await faceapi.tf.ENV.set('DEBUG', false);
|
||||
await faceapi.tf.ready();
|
||||
log.state('passed: tf initialized');
|
||||
|
||||
const modelPath = path.join(__dirname, modelPathRoot);
|
||||
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);
|
||||
optionsSSDMobileNet = new faceapi.SsdMobilenetv1Options({ minConfidence, maxResults });
|
||||
log.state('passed: models loaded');
|
||||
|
||||
const tensor = await image('demo/sample1.jpg');
|
||||
if (tensor) log.state('passed: image loaded');
|
||||
else log.error('failed: image load');
|
||||
|
||||
const result = await detect(tensor);
|
||||
if (result && result.length > 0) log.state('passed: detected faces', result.length);
|
||||
else log.error('failed: detect faces');
|
||||
tensor.dispose();
|
||||
}
|
||||
|
||||
main();
|
Loading…
Reference in New Issue