face-api/README.md

152 lines
4.4 KiB
Markdown
Raw Normal View History

2020-08-18 13:54:53 +02:00
# FaceAPI
2020-08-27 14:58:00 +02:00
## 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+**.
2020-08-27 14:58:00 +02:00
2020-08-22 18:13:02 +02:00
Forked from **face-api.js** version **0.22.2** released on March 22nd, 2020
- <https://github.com/justadudewhohacks/face-api.js>
- <https://www.npmjs.com/package/face-api.js>
2020-08-18 13:54:53 +02:00
2020-10-13 22:57:06 +02:00
Currently based on **`TensorFlow/JS` 2.6.0**
If you want to access `TFJS` classes and methods directly, they are exported as `faceapi.tf`
2020-08-18 13:54:53 +02:00
## Differences
2020-10-13 22:57:06 +02:00
- Updated all type castings for TypeScript type checking to TypeScript 4.1
- Typescript build process now targets ES2018 and instead of dual ES5/ES6
- Compatible with TensorFlow/JS 2.0+
2020-10-13 22:57:06 +02:00
- Removed old tests, docs, examples
2020-08-22 18:13:02 +02:00
- Removed unnecesary package dependencies (karma, jasmine, etc.)
2020-10-13 22:57:06 +02:00
- Updated all package dependencies
- Browser bundle process uses ESBuild instead of Rollup
- New TensorFlow/JS dependencies since backends were removed from @tensorflow/tfjs-core
2020-08-26 18:43:33 +02:00
- Updated mobileNetv1 model due to batchNorm() dependency
- Fully tree shakable when imported as an ESM module
2020-10-11 18:41:17 +02:00
- Added `version` class that returns JSON object with version of FaceAPI as well as linked TFJS
2020-08-18 13:54:53 +02:00
- Removed following models as they are either obsolete or non-functional with tfjs 2.0+
2020-10-13 22:57:06 +02:00
- mtcnn: Obsolete
2020-08-18 13:54:53 +02:00
- tinyYolov2: Non-functional since weights are missing
2020-08-26 00:24:48 +02:00
Which means valid models are **tinyFaceDetector** and **mobileNetv1**
2020-08-27 14:58:00 +02:00
## Installation
2020-08-26 00:24:48 +02:00
2020-10-11 18:41:17 +02:00
There are several ways to use Face-API:
2020-09-09 15:29:24 +02:00
2020-10-11 18:50:50 +02:00
### 1. IIFE script
2020-10-13 22:57:06 +02:00
*Recommened for quick tests and backward compatibility with older Browsers that do not support ESM such as IE*
This is simplest way for usage within Browser
Simply download `dist/face-api.js`, include it in your `HTML` file & it's ready to use
2020-10-11 18:50:50 +02:00
```html
<script src="dist/face-api.js"><script>
```
2020-10-13 22:57:06 +02:00
IIFE script auto-registers global namespace `faceapi` within Window object which can be accessed directly from a `<script>` tag or from your JS file.
2020-10-11 18:50:50 +02:00
2020-10-13 22:57:06 +02:00
### 2. ESM module
2020-10-11 18:50:50 +02:00
2020-10-13 22:57:06 +02:00
*Recommended for usage within Browser*
2020-10-11 18:50:50 +02:00
2020-10-13 22:57:06 +02:00
#### 2.1 Directly
2020-10-11 18:50:50 +02:00
2020-10-13 22:57:06 +02:00
To use ESM import directly in a Browser, you must import your script (e.g. `index.js`) with a `type="module"`
```html
<script src="./index.js" type="module">
```
and then in your `index.js`
2020-10-11 18:50:50 +02:00
```js
import * as faceapi from 'dist/face-api.esm.js';
```
2020-10-13 22:57:06 +02:00
#### 2.2 With Bundler
Same as above, but expectation is that you'll package your script using a bundler such as `webpack`, `rollup` or `esbuild` in which case, you do not need to import a script as module - that depends on your bundler configuration
2020-10-11 18:50:50 +02:00
```js
import * as faceapi from 'dist/face-api.esm.js';
```
### 3. NPM module
2020-10-13 22:57:06 +02:00
#### 3.1 Import ESM
*Recommended for NodeJS projects*
2020-10-11 18:50:50 +02:00
Install with:
```shell
2020-10-13 22:57:06 +02:00
npm install @vladmandic/face-api
2020-10-11 18:50:50 +02:00
```
And then use with:
```js
import * as faceapi from '@vladmandic/face-api';
```
2020-10-13 22:57:06 +02:00
Alternatively, if you have issues, force ESM import using
```js
import * as faceapi from '@vladmandic/face-api/dist/face-api.esm.js';
```
#### 3.2. Import Sources
*Recommended for complex NodeJS projects that use TFJS for other purposes and not just FaceaPI*
This way you're importing FaceAPI sources directly and not a bundle, so you have to import `@tensorflow/tfjs` explicitly
3.2.1 For JavaScript projects
```js
import * as tf from '@tensorflow/tfjs';
import * as faceapi from '@vladmandic/face-api/build/index.js';
```
3.2.2 For TypeScript projects
```js
import * as tf from '@tensorflow/tfjs';
import * as faceapi from '@vladmandic/face-api/src/index.ts';
```
2020-09-01 15:28:44 +02:00
2020-08-26 00:24:48 +02:00
## Weights
2020-08-27 15:17:39 +02:00
Pretrained models and their weights are includes in `./model`.
2020-08-18 14:01:56 +02:00
## Build
2020-10-11 18:41:17 +02:00
If you want to do a full rebuild, either download npm module
```shell
npm install @vladmandic/face-api
cd node_modules/@vladmandic/face-api
```
2020-08-31 00:45:06 +02:00
2020-10-11 18:41:17 +02:00
or clone a git project
```shell
git clone https://github.com/vladmandic/face-api
cd face-api
```
2020-08-18 14:01:56 +02:00
2020-10-11 18:41:17 +02:00
Then install all dependencies and run rebuild:
2020-08-18 14:01:56 +02:00
```shell
2020-10-11 18:41:17 +02:00
npm install
2020-08-18 14:01:56 +02:00
npm run build
```
2020-10-11 18:41:17 +02:00
Which will compile everything in `./src` into `./build` and create both ESM (standard) and IIFE (minified) bundles as well as sourcemaps in `./dist`
2020-08-18 13:54:53 +02:00
## Documentation
2020-08-27 14:58:00 +02:00
For documentation refer to original project at <https://github.com/justadudewhohacks/face-api.js>
## Example
Single new example that uses both models as well as all of the extensions is included in `/example/index.html`
2020-08-27 15:19:03 +02:00
Example can be accessed directly using Git pages using URL: <https://vladmandic.github.io/face-api/example/>
2020-08-27 14:58:00 +02:00
2020-09-09 15:29:24 +02:00
*Note: Photos shown below are taken by me*
2020-08-27 14:58:00 +02:00
![alt text](example/screenshot.png)