major update
parent
0b6b67996f
commit
7c02d78df9
108
README.md
108
README.md
|
@ -3,7 +3,6 @@
|
|||
## Note
|
||||
|
||||
This is updated **face-api.js** with latest available TensorFlow/JS as the original face-api.js is not compatible with **tfjs 2.0+**.
|
||||
Currently based on **TFJS-Core 2.4.0**.
|
||||
|
||||
Forked from **face-api.js** version **0.22.2** released on March 22nd, 2020
|
||||
|
||||
|
@ -17,12 +16,13 @@ Forked from **face-api.js** version **0.22.2** released on March 22nd, 2020
|
|||
- Compatible with TensorFlow/JS 2.0+
|
||||
- Updated type casting for TypeScript type checking
|
||||
- Removed unnecesary package dependencies (karma, jasmine, etc.)
|
||||
- Typescript build process now targets ES2017 and instead of dual ES5/ES6
|
||||
- Typescript build process now targets ES2018 and instead of dual ES5/ES6
|
||||
- Browser bundle process uses ESBuild instead of Rollup
|
||||
- New TensorFlow/JS dependencies since backends were removed from @tensorflow/tfjs-core
|
||||
- Updated mobileNetv1 model due to batchNorm() dependency
|
||||
- Fully tree shakable when imported as an ESM module
|
||||
- Added `version` class that returns JSON objecgt with version of FaceAPI as well as linked TFJS
|
||||
- Added `version` class that returns JSON object with version of FaceAPI as well as linked TFJS
|
||||
- Added calls for `setPlatform` to automatically prepare TFJS in browser
|
||||
- Removed following models as they are either obsolete or non-functional with tfjs 2.0+
|
||||
- mtcnn: Mostly obsolete
|
||||
- tinyYolov2: Non-functional since weights are missing
|
||||
|
@ -32,48 +32,63 @@ Due to reduced code and changed build process, resulting bundle is about **>5x s
|
|||
|
||||
## Installation
|
||||
|
||||
**Imporant!**: This version of **face-api** does not embedd full version of **TensorFlow/JS (tfjs)** to keep package as small as possible (322KB minified), enable dynamic loading of different tfjs backends as well as to enable reusability of tfjs for different purposes.
|
||||
There are several ways to use Face-API:
|
||||
|
||||
*Load tfjs explicitly before loading face-api.*
|
||||
*Note: package `@tensorflow/tfjs` is bundle, if you want to keep your project small, import `@tensorflow/tfjs-core` plus a specific backend such as `@tensorflow/tfjs-backend-cpu`, `@tensorflow/tfjs-backend-webgl` or `@tensorflow/tfjs-node`*
|
||||
### IIFE script
|
||||
*Size: 936KB minified*
|
||||
|
||||
For example as a script:
|
||||
This is simplest way for usage within Browser as it includes full version of TensorFlow/JS prepackaged with no external dependencies.
|
||||
Simply include this in your `HTML` file and it's ready to use.
|
||||
|
||||
```html
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/tensorflow/2.3.0/tf.es2017.js"></script>
|
||||
<script src="/dist/face-api.js"></script> <!-- full version / 960KB -->
|
||||
or
|
||||
<script src="/dist/face-api.min.js"></script> <!-- minified version / 320KB -->
|
||||
```
|
||||
```html
|
||||
<script src="dist/face-api.js"><script>
|
||||
```
|
||||
|
||||
Or install a module:
|
||||
IIFE script auto-registers global namespace `faceapi` within Window object.
|
||||
And if you want to access `TensorFlow/JS` classes directly, they are exported as `faceapi.tf`
|
||||
|
||||
```bash
|
||||
npm install @tensorflow/tfjs @vladmandic/face-api
|
||||
```
|
||||
Pre-packaged version of `TFJS` is **2.6.0**
|
||||
|
||||
Use module using `require` (recommended for VanillaJS):
|
||||
### ESM module
|
||||
*Size: 164KB non-minified*
|
||||
|
||||
```js
|
||||
const tf = require('@tensorflow/tfjs');
|
||||
const faceapi = require('@vladmandic/face-api');
|
||||
```
|
||||
If you're using bundler *(such as rollup, webpack, esbuild)* to package your client application, you can import ESM version of FaceAPI which supports full tree shaking
|
||||
Note that this version does NOT pre-package `TFJS`, so you'll need to include it before you import `FaceAPI`
|
||||
You can use any version of `TFJS` 2.0+
|
||||
|
||||
Use module in a JavaScript project using `import`:
|
||||
(NodeJS requires `"type": "module"` inside `package.json` to support `import` statements)
|
||||
```js
|
||||
import * as tf from 'https://cdnjs.cloudflare.com/ajax/libs/tensorflow/2.6.0/tf.min.js'; // load directly from CDN
|
||||
import * as faceapi from 'dist/face-api.esm.js';
|
||||
```
|
||||
*Experimental*:
|
||||
You could use same syntax within your main `JS` file if it's imported with `<script type="module">`
|
||||
|
||||
```js
|
||||
import tf from '@tensorflow/tfjs';
|
||||
import faceapi from '@vladmandic/face-api';
|
||||
```
|
||||
```html
|
||||
<script src="tf.min.js">
|
||||
<script src="./index.js" type="module">
|
||||
```
|
||||
and then in `index.js`
|
||||
|
||||
Use module in a TypeScript project:
|
||||
(TSC will compile this to `require` statements)
|
||||
```js
|
||||
import * as tf from 'https://cdnjs.cloudflare.com/ajax/libs/tensorflow/2.6.0/tf.min.js'; // load directly from CDN
|
||||
import * as faceapi from 'dist/face-api.esm.js';
|
||||
```
|
||||
|
||||
```js
|
||||
import * as tf from '@tensorflow/tfjs';
|
||||
import * as faceapi from '@vladmandic/face-api';
|
||||
```
|
||||
### NPM module
|
||||
*Size: 45,104KB unpacked (including sources and pre-trained model weights)*
|
||||
|
||||
Simmilar to ESM module, but with full sources as it points to `build/src/index.js` instead
|
||||
Recommended for NodeJS projects
|
||||
|
||||
Install with:
|
||||
```shell
|
||||
npm install @tensorflow/tfjs @vladmandic/face-api
|
||||
```
|
||||
And then use with:
|
||||
```js
|
||||
import * as tf from '@tensorflow/tfjs';
|
||||
import * as faceapi from '@vladmandic/face-api';
|
||||
```
|
||||
|
||||
## Weights
|
||||
|
||||
|
@ -81,20 +96,25 @@ Pretrained models and their weights are includes in `./model`.
|
|||
|
||||
## Build
|
||||
|
||||
Included in `./dist` are:
|
||||
|
||||
- face-api.cjs: CJS format, used by NodeJS import/require (default for node and browser require/import)
|
||||
- face-api.ejs: ESM format, used by Browser (provided as an alternative)
|
||||
- face-api.js: IIFE format, used by Browser (default for browser script)
|
||||
- face-api.min.js: Minified IIFE format, used by Browser
|
||||
|
||||
If you want to do a full rebuild use:
|
||||
|
||||
If you want to do a full rebuild, either download npm module
|
||||
```shell
|
||||
npm install @vladmandic/face-api
|
||||
cd node_modules/@vladmandic/face-api
|
||||
```
|
||||
|
||||
or clone a git project
|
||||
```shell
|
||||
git clone https://github.com/vladmandic/face-api
|
||||
cd face-api
|
||||
```
|
||||
|
||||
Then install all dependencies and run rebuild:
|
||||
```shell
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
|
||||
Which will compile everything in `./src` into `./build` and create both standard and minified bundles as well as a sourcemap in `./dist`
|
||||
Which will compile everything in `./src` into `./build` and create both ESM (standard) and IIFE (minified) bundles as well as sourcemaps in `./dist`
|
||||
|
||||
## Documentation
|
||||
|
||||
|
|
|
@ -3,21 +3,16 @@
|
|||
"version": "0.5.3",
|
||||
"description": "JavaScript module for Face Detection and Face Recognition Using Tensorflow/JS",
|
||||
"main": "build/src/index.js",
|
||||
"browser": "dist/face-api.esm.js",
|
||||
"typings": "./build/src/index.d.ts",
|
||||
"browser": "dist/face-api.js",
|
||||
"typings": "build/src/index.d.ts",
|
||||
"engines": {
|
||||
"node": ">=12.0.0"
|
||||
},
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"compile": "tsc",
|
||||
"clean": "rimraf build/ dist/",
|
||||
"cjs": "esbuild --bundle --outfile=./dist/face-api.cjs.js --target=esnext --platform=browser --format=cjs --sourcemap --external:@tensorflow/tfjs --log-level=error --tsconfig=./tsconfig.json build/src/index.js",
|
||||
"node": "esbuild --bundle --outfile=./dist/face-api.node.js --target=esnext --platform=node --format=esm --sourcemap --external:@tensorflow/tfjs --log-level=error --tsconfig=./tsconfig.json build/src/index.js",
|
||||
"esm": "esbuild --bundle --outfile=./dist/face-api.esm.js --target=esnext --platform=browser --format=esm --sourcemap --external:@tensorflow/tfjs --log-level=error --tsconfig=./tsconfig.json build/src/index.js",
|
||||
"iife": "esbuild --bundle --outfile=./dist/face-api.iife.js --target=esnext --platform=browser --format=iife --global-name=faceapi --sourcemap --external:@tensorflow/tfjs --log-level=error --tsconfig=./tsconfig.json build/src/index.js",
|
||||
"minify": "esbuild --bundle --outfile=./dist/face-api.min.js --target=esnext --platform=browser --format=iife --sourcemap --global-name=faceapi --external:@tensorflow/tfjs --log-level=error --minify --tsconfig=./tsconfig.json build/src/index.js",
|
||||
"build": "npm run clean && npm run compile && npm run cjs && npm run esm && npm run iife && npm run node && npm run minify"
|
||||
"build-esm": "esbuild --bundle --format=esm --target=esnext --platform=browser --sourcemap --outfile=./dist/face-api.esm.js --external:@tensorflow/tfjs --log-level=error --tsconfig=./tsconfig.json build/src/index.js",
|
||||
"build-iife": "esbuild --bundle --format=iife --target=esnext --platform=browser --sourcemap --outfile=./dist/face-api.js --global-name=faceapi --minify --log-level=error --tsconfig=./tsconfig.json build/src/index.js",
|
||||
"build": "rimraf build/ dist/ && tsc && npm run build-esm && npm run build-iife"
|
||||
},
|
||||
"keywords": [
|
||||
"tensorflow",
|
||||
|
@ -45,11 +40,11 @@
|
|||
"@tensorflow/tfjs": "^2.6.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^14.11.7",
|
||||
"@types/node": "^14.11.8",
|
||||
"esbuild": "^0.6.34",
|
||||
"rimraf": "^3.0.2",
|
||||
"ts-node": "^9.0.0",
|
||||
"tslib": "^2.0.2",
|
||||
"typescript": "^4.1.0-dev.20201008"
|
||||
"tslib": "^2.0.3",
|
||||
"typescript": "^4.1.0-dev.20201011"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"NeuralNetwork.d.ts","sourceRoot":"","sources":["../../src/NeuralNetwork.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAKxC,8BAAsB,aAAa,CAAC,UAAU;IAKhC,SAAS,CAAC,KAAK,EAAE,MAAM;IAHnC,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAY;IACrD,SAAS,CAAC,cAAc,EAAE,YAAY,EAAE,CAAK;gBAEvB,KAAK,EAAE,MAAM;IAWnC,IAAW,MAAM,IAAI,UAAU,GAAG,SAAS,CAAwB;IACnE,IAAW,aAAa,IAAI,YAAY,EAAE,CAA+B;IACzE,IAAW,QAAQ,IAAI,OAAO,CAAyB;IAEhD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,MAAM;IAK9C,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM;IAM1D,YAAY;;;;IAOZ,kBAAkB;;;;IAIlB,eAAe;;;;IAIf,QAAQ;IAMR,MAAM;IAQN,OAAO,CAAC,gBAAgB,GAAE,OAAc;IAUxC,eAAe,IAAI,YAAY;IAQzB,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IASpE,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;IASnC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS;IAoB/C,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC,cAAc;IAU9C,cAAc,CAAC,OAAO,EAAE,YAAY;IAU3C,OAAO,CAAC,oBAAoB;IAqB5B,SAAS,CAAC,QAAQ,CAAC,mBAAmB,IAAI,MAAM;IAChD,SAAS,CAAC,QAAQ,CAAC,0BAA0B,CAAC,SAAS,EAAE,EAAE,CAAC,cAAc,GAAG;QAAE,MAAM,EAAE,UAAU,CAAC;QAAC,aAAa,EAAE,YAAY,EAAE,CAAA;KAAE;IAClI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG;QAAE,MAAM,EAAE,UAAU,CAAC;QAAC,aAAa,EAAE,YAAY,EAAE,CAAA;KAAE;CAC/G"}
|
||||
{"version":3,"file":"NeuralNetwork.d.ts","sourceRoot":"","sources":["../../src/NeuralNetwork.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAKxC,8BAAsB,aAAa,CAAC,UAAU;IAKhC,SAAS,CAAC,KAAK,EAAE,MAAM;IAHnC,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAY;IACrD,SAAS,CAAC,cAAc,EAAE,YAAY,EAAE,CAAK;gBAEvB,KAAK,EAAE,MAAM;IAWnC,IAAW,MAAM,IAAI,UAAU,GAAG,SAAS,CAAwB;IACnE,IAAW,aAAa,IAAI,YAAY,EAAE,CAA+B;IACzE,IAAW,QAAQ,IAAI,OAAO,CAAyB;IAEhD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,MAAM;IAK9C,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM;IAM1D,YAAY;;;;IAOZ,kBAAkB;;;;IAIlB,eAAe;;;;IAIf,QAAQ;IAMR,MAAM;IAQN,OAAO,CAAC,gBAAgB,GAAE,OAAc;IAUxC,eAAe,IAAI,YAAY;IAQzB,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IASpE,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;IASnC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS;IAmB/C,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC,cAAc;IAU9C,cAAc,CAAC,OAAO,EAAE,YAAY;IAU3C,OAAO,CAAC,oBAAoB;IAqB5B,SAAS,CAAC,QAAQ,CAAC,mBAAmB,IAAI,MAAM;IAChD,SAAS,CAAC,QAAQ,CAAC,0BAA0B,CAAC,SAAS,EAAE,EAAE,CAAC,cAAc,GAAG;QAAE,MAAM,EAAE,UAAU,CAAC;QAAC,aAAa,EAAE,YAAY,EAAE,CAAA;KAAE;IAClI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG;QAAE,MAAM,EAAE,UAAU,CAAC;QAAC,aAAa,EAAE,YAAY,EAAE,CAAA;KAAE;CAC/G"}
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"NeuralNetwork.js","sourceRoot":"","sources":["../../src/NeuralNetwork.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"NeuralNetwork.js","sourceRoot":"","sources":["../../src/NeuralNetwork.ts"],"names":[],"mappings":"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"}
|
|
@ -0,0 +1,8 @@
|
|||
export declare class PlatformBrowser {
|
||||
private textEncoder;
|
||||
fetch(path: string, init?: RequestInit): Promise<Response>;
|
||||
now(): number;
|
||||
encode(text: string, encoding: string): Uint8Array;
|
||||
decode(bytes: Uint8Array, encoding: string): string;
|
||||
}
|
||||
//# sourceMappingURL=Platform.d.ts.map
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"Platform.d.ts","sourceRoot":"","sources":["../../src/Platform.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAc;IAEjC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI1D,GAAG,IAAI,MAAM;IAIb,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAUlD,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;CAGpD"}
|
|
@ -0,0 +1,21 @@
|
|||
export class PlatformBrowser {
|
||||
fetch(path, init) {
|
||||
return fetch(path, init);
|
||||
}
|
||||
now() {
|
||||
return performance.now();
|
||||
}
|
||||
encode(text, encoding) {
|
||||
if (encoding !== 'utf-8' && encoding !== 'utf8') {
|
||||
throw new Error(`Browser's encoder only supports utf-8, but got ${encoding}`);
|
||||
}
|
||||
if (this.textEncoder == null) {
|
||||
this.textEncoder = new TextEncoder();
|
||||
}
|
||||
return this.textEncoder.encode(text);
|
||||
}
|
||||
decode(bytes, encoding) {
|
||||
return new TextDecoder(encoding).decode(bytes);
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=Platform.js.map
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"Platform.js","sourceRoot":"","sources":["../../src/Platform.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAe;IAG1B,KAAK,CAAC,IAAY,EAAE,IAAkB;QACpC,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,GAAG;QACD,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,QAAgB;QACnC,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,MAAM,EAAE;YAC/C,MAAM,IAAI,KAAK,CACX,kDAAkD,QAAQ,EAAE,CAAC,CAAC;SACnE;QACD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;YAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;SACtC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,CAAC,KAAiB,EAAE,QAAgB;QACxC,OAAO,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;CACF"}
|
|
@ -20,7 +20,7 @@ export * from './NeuralNetwork';
|
|||
export * from './resizeResults';
|
||||
export declare const version: {
|
||||
faceapi: string;
|
||||
node: string | boolean;
|
||||
browser: string | boolean;
|
||||
node: boolean;
|
||||
browser: boolean;
|
||||
};
|
||||
//# sourceMappingURL=index.d.ts.map
|
|
@ -21,7 +21,10 @@ export * from './euclideanDistance';
|
|||
export * from './NeuralNetwork';
|
||||
export * from './resizeResults';
|
||||
import * as pkg from '../package.json';
|
||||
const node = typeof process !== 'undefined' ? process.version : false;
|
||||
const browser = typeof navigator !== 'undefined' ? navigator.userAgent : false;
|
||||
const node = (typeof process !== 'undefined');
|
||||
const browser = (typeof navigator !== 'undefined') && (typeof navigator.userAgent !== 'undefined');
|
||||
export const version = { faceapi: pkg.version, node, browser };
|
||||
import { PlatformBrowser } from './Platform';
|
||||
if (!tf.env().platform && tf.env().get('IS_BROWSER'))
|
||||
tf.env().setPlatform('browser', new PlatformBrowser);
|
||||
//# sourceMappingURL=index.js.map
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,sCAAsC;AAEtC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAE3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAEhC,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAC;AACvC,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;AACrE,MAAM,OAAO,GAAG,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAA;AAC9E,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC"}
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,sCAAsC;AAEtC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAE3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAEhC,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAC;AACvC,MAAM,IAAI,GAAG,CAAC,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC;AAC9C,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,KAAK,WAAW,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC;AACnG,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAE/D,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAC3C,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC;IAAE,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,eAAe,CAAC,CAAC"}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -725,7 +725,7 @@ function extendWithFaceDetection(sourceObj, detection) {
|
|||
|
||||
// build/src/env/createBrowserEnv.js
|
||||
function createBrowserEnv() {
|
||||
const fetch = window["fetch"] || function() {
|
||||
const fetch2 = window["fetch"] || function() {
|
||||
throw new Error("fetch - missing fetch implementation for browser environment");
|
||||
};
|
||||
const readFile = function() {
|
||||
|
@ -739,7 +739,7 @@ function createBrowserEnv() {
|
|||
Video: HTMLVideoElement,
|
||||
createCanvasElement: () => document.createElement("canvas"),
|
||||
createImageElement: () => document.createElement("img"),
|
||||
fetch,
|
||||
fetch: fetch2,
|
||||
readFile
|
||||
};
|
||||
}
|
||||
|
@ -784,7 +784,7 @@ function createNodejsEnv() {
|
|||
}
|
||||
throw new Error("createImageElement - missing Image implementation for nodejs environment");
|
||||
};
|
||||
const fetch = global["fetch"] || function() {
|
||||
const fetch2 = global["fetch"] || function() {
|
||||
throw new Error("fetch - missing fetch implementation for nodejs environment");
|
||||
};
|
||||
const fileSystem = createFileSystem();
|
||||
|
@ -801,7 +801,7 @@ function createNodejsEnv() {
|
|||
},
|
||||
createCanvasElement,
|
||||
createImageElement,
|
||||
fetch,
|
||||
fetch: fetch2,
|
||||
...fileSystem
|
||||
};
|
||||
}
|
||||
|
@ -822,8 +822,8 @@ function getEnv() {
|
|||
}
|
||||
return environment;
|
||||
}
|
||||
function setEnv(env16) {
|
||||
environment = env16;
|
||||
function setEnv(env17) {
|
||||
environment = env17;
|
||||
}
|
||||
function initialize() {
|
||||
if (isBrowser()) {
|
||||
|
@ -833,22 +833,22 @@ function initialize() {
|
|||
return setEnv(createNodejsEnv());
|
||||
}
|
||||
}
|
||||
function monkeyPatch(env16) {
|
||||
function monkeyPatch(env17) {
|
||||
if (!environment) {
|
||||
initialize();
|
||||
}
|
||||
if (!environment) {
|
||||
throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");
|
||||
}
|
||||
const {Canvas = environment.Canvas, Image = environment.Image} = env16;
|
||||
const {Canvas = environment.Canvas, Image = environment.Image} = env17;
|
||||
environment.Canvas = Canvas;
|
||||
environment.Image = Image;
|
||||
environment.createCanvasElement = env16.createCanvasElement || (() => new Canvas());
|
||||
environment.createImageElement = env16.createImageElement || (() => new Image());
|
||||
environment.ImageData = env16.ImageData || environment.ImageData;
|
||||
environment.Video = env16.Video || environment.Video;
|
||||
environment.fetch = env16.fetch || environment.fetch;
|
||||
environment.readFile = env16.readFile || environment.readFile;
|
||||
environment.createCanvasElement = env17.createCanvasElement || (() => new Canvas());
|
||||
environment.createImageElement = env17.createImageElement || (() => new Image());
|
||||
environment.ImageData = env17.ImageData || environment.ImageData;
|
||||
environment.Video = env17.Video || environment.Video;
|
||||
environment.fetch = env17.fetch || environment.fetch;
|
||||
environment.readFile = env17.readFile || environment.readFile;
|
||||
}
|
||||
const env = {
|
||||
getEnv,
|
||||
|
@ -1303,8 +1303,8 @@ async function extractFaceTensors(imageTensor, detections) {
|
|||
|
||||
// build/src/dom/fetchOrThrow.js
|
||||
async function fetchOrThrow(url, init) {
|
||||
const fetch = env.getEnv().fetch;
|
||||
const res = await fetch(url, init);
|
||||
const fetch2 = env.getEnv().fetch;
|
||||
const res = await fetch2(url, init);
|
||||
if (!(res.status < 400)) {
|
||||
throw new Error(`failed to fetch: (${res.status}) ${res.statusText}, from url: ${res.url}`);
|
||||
}
|
||||
|
@ -4403,11 +4403,37 @@ function resizeResults(results, dimensions) {
|
|||
// build/package.json
|
||||
var version = "0.5.3";
|
||||
|
||||
// build/src/Platform.js
|
||||
class PlatformBrowser {
|
||||
fetch(path, init) {
|
||||
return fetch(path, init);
|
||||
}
|
||||
now() {
|
||||
return performance.now();
|
||||
}
|
||||
encode(text, encoding) {
|
||||
if (encoding !== "utf-8" && encoding !== "utf8") {
|
||||
throw new Error(`Browser's encoder only supports utf-8, but got ${encoding}`);
|
||||
}
|
||||
if (this.textEncoder == null) {
|
||||
this.textEncoder = new TextEncoder();
|
||||
}
|
||||
return this.textEncoder.encode(text);
|
||||
}
|
||||
decode(bytes, encoding) {
|
||||
return new TextDecoder(encoding).decode(bytes);
|
||||
}
|
||||
}
|
||||
|
||||
// build/src/index.js
|
||||
import * as tf42 from "@tensorflow/tfjs";
|
||||
const node = typeof process !== "undefined" ? process.version : false;
|
||||
const browser3 = typeof navigator !== "undefined" ? navigator.userAgent : false;
|
||||
import {
|
||||
env as env16
|
||||
}, * as tf42 from "@tensorflow/tfjs";
|
||||
const node = typeof process !== "undefined";
|
||||
const browser3 = typeof navigator !== "undefined" && typeof navigator.userAgent !== "undefined";
|
||||
const version2 = {faceapi: version, node, browser: browser3};
|
||||
if (!env16().platform && env16().get("IS_BROWSER"))
|
||||
env16().setPlatform("browser", new PlatformBrowser());
|
||||
export {
|
||||
AgeGenderNet,
|
||||
BoundingBox,
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -5,8 +5,8 @@
|
|||
<meta http-equiv="content-type">
|
||||
<meta content="text/html">
|
||||
<meta charset="UTF-8">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/tensorflow/2.3.0/tf.es2017.js"></script>
|
||||
<script src="https://vladmandic.github.io/face-api/dist/face-api.js"></script>
|
||||
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/tensorflow/2.6.0/tf.min.js"></script> -->
|
||||
<script src="../dist/face-api.js"></script>
|
||||
<style>
|
||||
body { font-family: monospace; background: black; color: white; font-size: 16px; line-height: 22px; margin: 0; }
|
||||
</style>
|
||||
|
@ -27,7 +27,7 @@
|
|||
// helper function to pretty-print json object to string
|
||||
function str(json) {
|
||||
let text = '<font color="lightblue">';
|
||||
text += JSON.stringify(json).replace(/{|}|"|\[|\]/g, '').replace(/,/g, ', ');
|
||||
text += json ? JSON.stringify(json).replace(/{|}|"|\[|\]/g, '').replace(/,/g, ', ') : '';
|
||||
text += '</font>';
|
||||
return text;
|
||||
}
|
||||
|
@ -120,11 +120,15 @@
|
|||
async function main() {
|
||||
// initialize tfjs
|
||||
log('FaceAPI Test');
|
||||
window.tf = faceapi.tf;
|
||||
await faceapi.tf.setBackend('webgl');
|
||||
await faceapi.tf.enableProdMode();
|
||||
await faceapi.tf.ENV.set('DEBUG', false);
|
||||
await faceapi.tf.ready();
|
||||
|
||||
// check version
|
||||
log(`Version: ${str(faceapi.version)}`);
|
||||
log(`Version: TensorFlow/JS ${str(faceapi.tf?.version_core || '(not loaded)')} FaceAPI ${str(faceapi?.version || '(not loaded)')} Backend: ${str(faceapi.tf?.getBackend() || '(not loaded)')}`);
|
||||
log(`Flags: ${JSON.stringify(faceapi.tf.ENV.flags)}`);
|
||||
|
||||
// load face-api models
|
||||
log('Loading FaceAPI models');
|
||||
|
|
|
@ -77,9 +77,9 @@
|
|||
"integrity": "sha512-nU9WNSGpEU6GzKo5bvJBMa/OZRe1bR5Z2W6T0XiEY8CBiPNS+oJFJNm0NY8kQj/WnDS0Hfue38P46q7gV/9XMA=="
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "14.11.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.7.tgz",
|
||||
"integrity": "sha512-hSEXknS4KiayUdZ7401J/T6eykXHJkDEipnyQMJ4/GstK4kWjbHnwXlcpvIWfPKiEH1JU96DkbzJ1nHRmpmKLw=="
|
||||
"version": "14.11.8",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.8.tgz",
|
||||
"integrity": "sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw=="
|
||||
},
|
||||
"@types/node-fetch": {
|
||||
"version": "2.5.7",
|
||||
|
@ -436,15 +436,15 @@
|
|||
}
|
||||
},
|
||||
"tslib": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.2.tgz",
|
||||
"integrity": "sha512-wAH28hcEKwna96/UacuWaVspVLkg4x1aDM9JlzqaQTOFczCktkVAb5fmXChgandR1EraDPs2w8P+ozM+oafwxg==",
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz",
|
||||
"integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==",
|
||||
"dev": true
|
||||
},
|
||||
"typescript": {
|
||||
"version": "4.1.0-dev.20201008",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.0-dev.20201008.tgz",
|
||||
"integrity": "sha512-+g2TfvYueD60iu2YXz5czsDRdY4M/h9RvmwrorTTNmnTQaUOeb7spT4EyHa1g5TjhqHa/8+lCgCdPkuEQqg9WA==",
|
||||
"version": "4.1.0-dev.20201011",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.0-dev.20201011.tgz",
|
||||
"integrity": "sha512-+Lfj2Q+dXFAJbfB1jQQRlhTssgl0CQVo8a+CNzlNXsnC1cN1yoH40wkEjWd6uB8NGkamxKda1xrEb2miJtpP5g==",
|
||||
"dev": true
|
||||
},
|
||||
"wrap-ansi": {
|
||||
|
|
23
package.json
23
package.json
|
@ -1,23 +1,18 @@
|
|||
{
|
||||
"name": "@vladmandic/face-api",
|
||||
"version": "0.5.3",
|
||||
"version": "0.6.0",
|
||||
"description": "JavaScript module for Face Detection and Face Recognition Using Tensorflow/JS",
|
||||
"main": "build/src/index.js",
|
||||
"browser": "dist/face-api.esm.js",
|
||||
"typings": "./build/src/index.d.ts",
|
||||
"browser": "dist/face-api.js",
|
||||
"typings": "build/src/index.d.ts",
|
||||
"engines": {
|
||||
"node": ">=12.0.0"
|
||||
},
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"compile": "tsc",
|
||||
"clean": "rimraf build/ dist/",
|
||||
"cjs": "esbuild --bundle --outfile=./dist/face-api.cjs.js --target=esnext --platform=browser --format=cjs --sourcemap --external:@tensorflow/tfjs --log-level=error --tsconfig=./tsconfig.json build/src/index.js",
|
||||
"node": "esbuild --bundle --outfile=./dist/face-api.node.js --target=esnext --platform=node --format=esm --sourcemap --external:@tensorflow/tfjs --log-level=error --tsconfig=./tsconfig.json build/src/index.js",
|
||||
"esm": "esbuild --bundle --outfile=./dist/face-api.esm.js --target=esnext --platform=browser --format=esm --sourcemap --external:@tensorflow/tfjs --log-level=error --tsconfig=./tsconfig.json build/src/index.js",
|
||||
"iife": "esbuild --bundle --outfile=./dist/face-api.iife.js --target=esnext --platform=browser --format=iife --global-name=faceapi --sourcemap --external:@tensorflow/tfjs --log-level=error --tsconfig=./tsconfig.json build/src/index.js",
|
||||
"minify": "esbuild --bundle --outfile=./dist/face-api.min.js --target=esnext --platform=browser --format=iife --sourcemap --global-name=faceapi --external:@tensorflow/tfjs --log-level=error --minify --tsconfig=./tsconfig.json build/src/index.js",
|
||||
"build": "npm run clean && npm run compile && npm run cjs && npm run esm && npm run iife && npm run node && npm run minify"
|
||||
"build-esm": "esbuild --bundle --format=esm --target=esnext --platform=browser --sourcemap --outfile=./dist/face-api.esm.js --external:@tensorflow/tfjs --log-level=error --tsconfig=./tsconfig.json build/src/index.js",
|
||||
"build-iife": "esbuild --bundle --format=iife --target=esnext --platform=browser --sourcemap --outfile=./dist/face-api.js --global-name=faceapi --minify --log-level=error --tsconfig=./tsconfig.json build/src/index.js",
|
||||
"build": "rimraf build/ dist/ && tsc && npm run build-esm && npm run build-iife"
|
||||
},
|
||||
"keywords": [
|
||||
"tensorflow",
|
||||
|
@ -45,11 +40,11 @@
|
|||
"@tensorflow/tfjs": "^2.6.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^14.11.7",
|
||||
"@types/node": "^14.11.8",
|
||||
"esbuild": "^0.6.34",
|
||||
"rimraf": "^3.0.2",
|
||||
"ts-node": "^9.0.0",
|
||||
"tslib": "^2.0.2",
|
||||
"typescript": "^4.1.0-dev.20201008"
|
||||
"tslib": "^2.0.3",
|
||||
"typescript": "^4.1.0-dev.20201011"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -114,7 +114,6 @@ export abstract class NeuralNetwork<TNetParams> {
|
|||
filePaths.map(filePath => readFile(filePath).then(buf => buf.buffer))
|
||||
)
|
||||
const loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk)
|
||||
|
||||
const manifest = JSON.parse((await readFile(manifestUri)).toString())
|
||||
const weightMap = await loadWeights(manifest, modelBaseUri)
|
||||
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
export class PlatformBrowser {
|
||||
private textEncoder: TextEncoder;
|
||||
|
||||
fetch(path: string, init?: RequestInit): Promise<Response> {
|
||||
return fetch(path, init);
|
||||
}
|
||||
|
||||
now(): number {
|
||||
return performance.now();
|
||||
}
|
||||
|
||||
encode(text: string, encoding: string): Uint8Array {
|
||||
if (encoding !== 'utf-8' && encoding !== 'utf8') {
|
||||
throw new Error(
|
||||
`Browser's encoder only supports utf-8, but got ${encoding}`);
|
||||
}
|
||||
if (this.textEncoder == null) {
|
||||
this.textEncoder = new TextEncoder();
|
||||
}
|
||||
return this.textEncoder.encode(text);
|
||||
}
|
||||
decode(bytes: Uint8Array, encoding: string): string {
|
||||
return new TextDecoder(encoding).decode(bytes);
|
||||
}
|
||||
}
|
|
@ -24,6 +24,9 @@ export * from './NeuralNetwork';
|
|||
export * from './resizeResults';
|
||||
|
||||
import * as pkg from '../package.json';
|
||||
const node = typeof process !== 'undefined' ? process.version : false
|
||||
const browser = typeof navigator !== 'undefined' ? navigator.userAgent : false
|
||||
const node = (typeof process !== 'undefined');
|
||||
const browser = (typeof navigator !== 'undefined') && (typeof navigator.userAgent !== 'undefined');
|
||||
export const version = { faceapi: pkg.version, node, browser };
|
||||
|
||||
import {PlatformBrowser} from './Platform';
|
||||
if (!tf.env().platform && tf.env().get('IS_BROWSER')) tf.env().setPlatform('browser', new PlatformBrowser);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"lib": ["es2018", "dom"],
|
||||
"module": "es2020",
|
||||
"module": "esnext",
|
||||
"moduleResolution": "node",
|
||||
"outDir": "build",
|
||||
"target": "es2018",
|
||||
|
|
Loading…
Reference in New Issue