# face-api.js **Repository Path**: topmonkey/face-api.js ## Basic Information - **Project Name**: face-api.js - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-02-02 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # face-api.js [![Build Status](https://travis-ci.org/justadudewhohacks/face-api.js.svg?branch=master)](https://travis-ci.org/justadudewhohacks/face-api.js) [![Slack](https://slack.bri.im/badge.svg)](https://slack.bri.im) **在tensorflow.js核心([tensorflow/tfjs-core](https://github.com/tensorflow/tfjs))之上实现的浏览器和nodejs的JavaScript人脸识别API** ![faceapi](https://images.gitee.com/uploads/images/2020/0203/165952_2c0b7b5c_398940.gif) ## **[点击我查看演示!](https://justadudewhohacks.github.io/face-api.js/)** ## 教程 * **[face-api.js — 在浏览器中使用tensorflow.js进行人脸识别的JavaScript API](https://itnext.io/face-api-js-javascript-api-for-face-recognition-in-the-browser-with-tensorflow-js-bcc2a6c4cf07)** * **[使用face-api.js'MTCNN(多任务级联卷积神经网络)人脸检测器的实时JavaScript人脸跟踪和识别](https://itnext.io/realtime-javascript-face-tracking-and-face-recognition-using-face-api-js-mtcnn-face-detector-d924dd8b5740)** * **[实时摄像头人脸检测和表情识别 - 视频](https://youtu.be/CVClHLwv-4I)** * **[使用JavaScript的简单人脸识别教程 - 视频](https://youtu.be/AZ4PdALMqx0)** * **[将face-api.js与Vue.js和Electron一起使用](https://medium.com/@andreas.schallwig/do-not-laugh-a-simple-ai-powered-game-3e22ad0f8166)** * **[为用户添加遮罩 - Gant Laborde和Jason一起学习](https://www.learnwithjason.dev/fun-with-machine-learning-pt-2)** ## 目录 * **[特点](#features)** * **[运行示例](#running-the-examples)** * **[浏览器的face-api.js](#face-api.js-for-the-browser)** * **[Nodejs的face-api.js](#face-api.js-for-nodejs)** * **[用法](#getting-started)** * **[加载模型](#getting-started-loading-models)** * **[高级API](#high-level-api)** * **[显示检测结果](#getting-started-displaying-detection-results)** * **[人脸检测选项](#getting-started-face-detection-options)** * **[工具类](#getting-started-utility-classes)** * **[其他有用的工具](#other-useful-utility)** * **[可用模型](#models)** * **[人脸检测](#models-face-detection)** * **[人脸标记检测](#models-face-landmark-detection)** * **[人脸识别](#models-face-recognition)** * **[人脸表情识别](#models-face-expression-recognition)** * **[年龄估计与性别识别](#models-age-and-gender-recognition)** * **[API文档](https://justadudewhohacks.github.io/face-api.js/docs/globals.html)** # 特点 ## 人脸识别 ![face-recognition](https://images.gitee.com/uploads/images/2020/0203/155314_78fa9d13_398940.gif) ## 人脸标记检测 ![face_landmark_detection](https://images.gitee.com/uploads/images/2020/0203/155313_c6ce77e1_398940.jpeg) ## 人脸表情识别 ![preview_face-expression-recognition](https://images.gitee.com/uploads/images/2020/0203/155313_18935ac5_398940.png) ## 年龄估计与性别识别 ![age_gender_recognition](https://images.gitee.com/uploads/images/2020/0203/155318_1928e489_398940.jpeg) # 运行示例 克隆存储库: ``` bash git clone https://github.com/justadudewhohacks/face-api.js.git ``` ## 运行浏览器示例 ``` bash cd face-api.js/examples/examples-browser npm i npm start ``` 浏览器打开 http://localhost:3000/. ## 运行Nodejs示例 ``` bash cd face-api.js/examples/examples-nodejs npm i ``` 现在使用ts node运行以下示例之一: ``` bash ts-node faceDetection.ts ``` 或者简单地编译和运行node: ``` bash tsc faceDetection.ts node faceDetection.js ``` # 浏览器的face-api.js 只需包含 [dist/face-api.js](https://github.com/justadudewhohacks/face-api.js/tree/master/dist)中的最新脚本。 或者通过npm安装: ``` bash npm i face-api.js ``` # Nodejs的face-api.js 我们可以在nodejs环境中使用等价的API,方法是多填充一些浏览器细节,比如HTMLImageElement、htmlCanvaseElement和ImageData。最简单的方法是安装node canvas包。 或者,您可以简单地从图像数据构造自己的张量(tensors),并将张量(tensors)作为输入传递给API。 此外,您还需要安装@tensorflow/tfjs-node (不是必需,但强烈建议), 通过编译和绑定到本地的Tensorflow C++库,这大大加快了速度: ``` bash npm i face-api.js canvas @tensorflow/tfjs-node ``` 现在,我们只需对环境进行修补即可使用polyfill: ``` javascript // 将nodejs绑定导入到本机tensorflow, // 不是必要,但会大大加快速度(需要python) import '@tensorflow/tfjs-node'; // 为htmlcanvaseelement、HTMLImageElement、ImageData实现nodejs包装器 import * as canvas from 'canvas'; import * as faceapi from 'face-api.js'; // 修补nodejs环境,我们需要提供 // HTMLCanvasElement and HTMLImageElement const { Canvas, Image, ImageData } = canvas faceapi.env.monkeyPatch({ Canvas, Image, ImageData }) ``` # 入门 ## 加载模型 所有全局神经网络实例都通过faceapi.nets导出: ``` javascript console.log(faceapi.nets) // ageGenderNet // faceExpressionNet // faceLandmark68Net // faceLandmark68TinyNet // faceRecognitionNet // ssdMobilenetv1 // tinyFaceDetector // tinyYolov2 ``` 要加载模型,必须提供相应的manifest.json文件以及作为资源的模型权重文件(shard)。只需将它们复制到public或assets文件夹。模型的manifest.json和shard文件必须位于同一目录中/可以在同一路径下访问。 假设模型位于**public/models**中: ``` javascript await faceapi.nets.ssdMobilenetv1.loadFromUri('/models') // 相应的其它模型: // await faceapi.nets.faceLandmark68Net.loadFromUri('/models') // await faceapi.nets.faceRecognitionNet.loadFromUri('/models') // ... ``` 在nodejs环境中,您还可以直接从磁盘加载模型: ``` javascript await faceapi.nets.ssdMobilenetv1.loadFromDisk('./models') ``` 也可以从tf.namedSensorMap加载模型: ``` javascript await faceapi.nets.ssdMobilenetv1.loadFromWeightMap(weightMap) ``` 或者,也可以创建自己的神经网络实例: ``` javascript const net = new faceapi.SsdMobilenetv1() await net.loadFromUri('/models') ``` 也可以将权重加载为Float32Array (如果你想使用未压缩的模型): ``` javascript // 使用fetch net.load(await faceapi.fetchNetWeights('/models/face_detection_model.weights')) // 使用axios const res = await axios.get('/models/face_detection_model.weights', { responseType: 'arraybuffer' }) const weights = new Float32Array(res.data) net.load(weights) ``` ## 高级API 在下面的**input**中可以是HTML img, video或canvas的元素,或是该元素的id。 ``` html