Skip to content

Commit 623052b

Browse files
renamed package
1 parent 64cf04a commit 623052b

29 files changed

+59
-176
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
node_modules
2-
_data
32
.rpt2_cache

.npmignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
node_modules
2+
.rpt2_cache
3+
4+
examples
5+
test
6+
proto
7+
weights

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# face-recognition.min.js
1+
# face-api.js
22

3-
**face recognition API for the browser with tensorflow.js**
3+
**JavaScript API for face detection and face recognition in the browser with tensorflow.js**
44

55
This project implements a ResNet-34 like architecture using the tensorflow.js core API ([@tensorflow/tfjs-core](https://github.com/tensorflow/tfjs-core)) for realtime face recognition in the browser. The neural net is equivalent to the **FaceRecognizerNet** used in [face-recognition.js](https://github.com/justadudewhohacks/face-recognition.js) and the net used in the [dlib](https://github.com/davisking/dlib/blob/master/examples/dnn_face_recognition_ex.cpp) face recognition example. The weights have been trained by [davisking](https://github.com/davisking) and the model achieves a prediction accuracy of 99.38% on the LFW (Labeled Faces in the Wild) benchmark for face recognition.
66

@@ -29,7 +29,7 @@ Download the weights file from your server and initialize the net (note, that yo
2929
``` javascript
3030
const res = await axios.get('face_recognition_model.weights', { responseType: 'arraybuffer' })
3131
const weights = new Float32Array(res.data)
32-
const net = facerecognition.faceRecognitionNet(weights)
32+
const net = faceapi.faceRecognitionNet(weights)
3333
```
3434

3535
Compute and compare two 150 x 150 sized face images:
@@ -43,7 +43,7 @@ const imgData2 = ...
4343

4444
const descriptor1 = await net.computeFaceDescriptor(imgData1)
4545
const descriptor2 = await net.computeFaceDescriptor(imgData2)
46-
const distance = facerecognition.euclidianDistance(descriptor1, descriptor2)
46+
const distance = faceapi.euclidianDistance(descriptor1, descriptor2)
4747

4848
if (distance < 0.6)
4949
console.log('match')

dist/face-recognition.js renamed to dist/face-api.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
(function (global, factory) {
22
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('crypto')) :
33
typeof define === 'function' && define.amd ? define(['exports', 'crypto'], factory) :
4-
(factory((global.facerecognition = global.facerecognition || {}),global.crypto));
4+
(factory((global.faceapi = global.faceapi || {}),global.crypto));
55
}(this, (function (exports,crypto) { 'use strict';
66

77
crypto = crypto && crypto.hasOwnProperty('default') ? crypto['default'] : crypto;
@@ -1650,11 +1650,11 @@
16501650
seedrandom.xor4096 = xor4096;
16511651
seedrandom.tychei = tychei;
16521652

1653-
var C__Users_user_dev_faceRecognition_min_js_node_modules_seedrandom = seedrandom;
1653+
var C__Users_user_dev_faceApi_js_node_modules_seedrandom = seedrandom;
16541654

16551655
var seedrandom$1 = /*#__PURE__*/Object.freeze({
1656-
default: C__Users_user_dev_faceRecognition_min_js_node_modules_seedrandom,
1657-
__moduleExports: C__Users_user_dev_faceRecognition_min_js_node_modules_seedrandom
1656+
default: C__Users_user_dev_faceApi_js_node_modules_seedrandom,
1657+
__moduleExports: C__Users_user_dev_faceApi_js_node_modules_seedrandom
16581658
});
16591659

16601660
var MPRandGauss = (function () {

dist/face-api.min.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/face-recognition.min.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

dist/transformInputs.d.ts

Lines changed: 0 additions & 12 deletions
This file was deleted.

dist/transformInputs.js

Lines changed: 0 additions & 42 deletions
This file was deleted.

dist/transformInputs.js.map

Lines changed: 0 additions & 1 deletion
This file was deleted.

examples/public/commons.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ async function fetchImage(uri) {
1515
async function initFaceDetectionNet() {
1616
const res = await axios.get('face_detection_model.weights', { responseType: 'arraybuffer' })
1717
const weights = new Float32Array(res.data)
18-
return facerecognition.faceDetectionNet(weights)
18+
return faceapi.faceDetectionNet(weights)
1919
}
2020

2121
async function initFaceRecognitionNet() {
2222
const res = await axios.get('face_recognition_model.weights', { responseType: 'arraybuffer' })
2323
const weights = new Float32Array(res.data)
24-
return facerecognition.faceRecognitionNet(weights)
24+
return faceapi.faceRecognitionNet(weights)
2525
}
2626

2727
// fetch first image of each class and compute their descriptors
@@ -32,7 +32,7 @@ async function initTrainDescriptorsByClass(net, numImagesForTraining = 1) {
3232
async className => {
3333
const descriptors = []
3434
for (let i = 1; i < (numImagesForTraining + 1); i++) {
35-
const img = await facerecognition.bufferToImage(
35+
const img = await faceapi.bufferToImage(
3636
await fetchImage(getFaceImageUri(className, i))
3737
)
3838
descriptors.push(await net.computeFaceDescriptor(img))
@@ -47,9 +47,9 @@ async function initTrainDescriptorsByClass(net, numImagesForTraining = 1) {
4747

4848
function getBestMatch(descriptorsByClass, queryDescriptor) {
4949
function computeMeanDistance(descriptorsOfClass) {
50-
return facerecognition.round(
50+
return faceapi.round(
5151
descriptorsOfClass
52-
.map(d => facerecognition.euclideanDistance(d, queryDescriptor))
52+
.map(d => faceapi.euclideanDistance(d, queryDescriptor))
5353
.reduce((d1, d2) => d1 + d2, 0)
5454
/ (descriptorsOfClass.length || 1)
5555
)

examples/views/detectAndDrawFaces.html

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<!DOCTYPE html>
22
<html>
33
<head>
4-
<script src="face-recognition.js"></script>
4+
<script src="face-api.js"></script>
55
<script src="axios.min.js"></script>
66
<script src="commons.js"></script>
77
<link rel="stylesheet" href="styles.css">
@@ -46,13 +46,13 @@
4646
let net
4747

4848
function onIncreaseThreshold() {
49-
minConfidence = Math.min(facerecognition.round(minConfidence + 0.1), 1.0)
49+
minConfidence = Math.min(faceapi.round(minConfidence + 0.1), 1.0)
5050
$('#minConfidence').val(minConfidence)
5151
updateResults()
5252
}
5353

5454
function onDecreaseThreshold() {
55-
minConfidence = Math.max(facerecognition.round(minConfidence - 0.1), 0.1)
55+
minConfidence = Math.max(faceapi.round(minConfidence - 0.1), 0.1)
5656
$('#minConfidence').val(minConfidence)
5757
updateResults()
5858
}
@@ -64,18 +64,18 @@
6464
canvas.width = width
6565
canvas.height = height
6666

67-
const input = new facerecognition.NetInput(inputImgEl)
67+
const input = new faceapi.NetInput(inputImgEl)
6868
const detections = await net.locateFaces(input, minConfidence)
69-
facerecognition.drawDetection('overlay', detections.map(det => det.forSize(width, height)))
69+
faceapi.drawDetection('overlay', detections.map(det => det.forSize(width, height)))
7070

71-
const faceImages = await facerecognition.extractFaces(input.canvases[0], detections)
71+
const faceImages = await faceapi.extractFaces(input.canvases[0], detections)
7272
$('#facesContainer').empty()
7373
faceImages.forEach(canvas => $('#facesContainer').append(canvas))
7474
}
7575

7676
async function onSelectionChanged(uri) {
7777
const imgBuf = await fetchImage(uri)
78-
$(`#inputImg`).get(0).src = (await facerecognition.bufferToImage(imgBuf)).src
78+
$(`#inputImg`).get(0).src = (await faceapi.bufferToImage(imgBuf)).src
7979
updateResults()
8080
}
8181

examples/views/detectAndRecognizeFaces.html

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<!DOCTYPE html>
22
<html>
33
<head>
4-
<script src="face-recognition.js"></script>
4+
<script src="face-api.js"></script>
55
<script src="axios.min.js"></script>
66
<script src="commons.js"></script>
77
<link rel="stylesheet" href="styles.css">
@@ -47,13 +47,13 @@
4747
let trainDescriptorsByClass = []
4848

4949
function onIncreaseThreshold() {
50-
minConfidence = Math.min(facerecognition.round(minConfidence + 0.1), 1.0)
50+
minConfidence = Math.min(faceapi.round(minConfidence + 0.1), 1.0)
5151
$('#minConfidence').val(minConfidence)
5252
updateResults()
5353
}
5454

5555
function onDecreaseThreshold() {
56-
minConfidence = Math.max(facerecognition.round(minConfidence - 0.1), 0.1)
56+
minConfidence = Math.max(faceapi.round(minConfidence - 0.1), 0.1)
5757
$('#minConfidence').val(minConfidence)
5858
updateResults()
5959
}
@@ -65,13 +65,13 @@
6565
canvas.width = width
6666
canvas.height = height
6767

68-
const input = new facerecognition.NetInput(inputImgEl)
68+
const input = new faceapi.NetInput(inputImgEl)
6969
const detections = await detectionNet.locateFaces(input, minConfidence)
7070

7171
const detectionsForSize = detections.map(det => det.forSize(width, height))
72-
facerecognition.drawDetection('overlay', detectionsForSize, { withScore: false })
72+
faceapi.drawDetection('overlay', detectionsForSize, { withScore: false })
7373

74-
const faceTensors = (await facerecognition.extractFaceTensors(input, detections))
74+
const faceTensors = (await faceapi.extractFaceTensors(input, detections))
7575
const descriptors = await Promise.all(faceTensors.map(t => recognitionNet.computeFaceDescriptor(t)))
7676

7777
// free memory for face image tensors after we computed their descriptors
@@ -81,13 +81,13 @@
8181
const bestMatch = getBestMatch(trainDescriptorsByClass, descriptor)
8282
const text = `${bestMatch.distance < threshold ? bestMatch.className : 'unkown'} (${bestMatch.distance})`
8383
const { x, y } = detectionsForSize[i].box
84-
facerecognition.drawText(canvas.getContext('2d'), x, y, text, facerecognition.getDefaultDrawOptions())
84+
faceapi.drawText(canvas.getContext('2d'), x, y, text, faceapi.getDefaultDrawOptions())
8585
})
8686
}
8787

8888
async function onSelectionChanged(uri) {
8989
const imgBuf = await fetchImage(uri)
90-
$(`#inputImg`).get(0).src = (await facerecognition.bufferToImage(imgBuf)).src
90+
$(`#inputImg`).get(0).src = (await faceapi.bufferToImage(imgBuf)).src
9191
updateResults()
9292
}
9393

examples/views/faceDetection.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<!DOCTYPE html>
22
<html>
33
<head>
4-
<script src="face-recognition.js"></script>
4+
<script src="face-api.js"></script>
55
<script src="axios.min.js"></script>
66
<script src="commons.js"></script>
77
<link rel="stylesheet" href="styles.css">
@@ -45,13 +45,13 @@
4545
let net, result
4646

4747
function onIncreaseThreshold() {
48-
minConfidence = Math.min(facerecognition.round(minConfidence + 0.1), 1.0)
48+
minConfidence = Math.min(faceapi.round(minConfidence + 0.1), 1.0)
4949
$('#minConfidence').val(minConfidence)
5050
updateResults()
5151
}
5252

5353
function onDecreaseThreshold() {
54-
minConfidence = Math.max(facerecognition.round(minConfidence - 0.1), 0.1)
54+
minConfidence = Math.max(faceapi.round(minConfidence - 0.1), 0.1)
5555
$('#minConfidence').val(minConfidence)
5656
updateResults()
5757
}
@@ -63,14 +63,14 @@
6363
canvas.width = width
6464
canvas.height = height
6565

66-
const input = new facerecognition.NetInput(inputImgEl)
66+
const input = new faceapi.NetInput(inputImgEl)
6767
result = await net.locateFaces(input, minConfidence)
68-
facerecognition.drawDetection('overlay', result.map(det => det.forSize(width, height)))
68+
faceapi.drawDetection('overlay', result.map(det => det.forSize(width, height)))
6969
}
7070

7171
async function onSelectionChanged(uri) {
7272
const imgBuf = await fetchImage(uri)
73-
$(`#inputImg`).get(0).src = (await facerecognition.bufferToImage(imgBuf)).src
73+
$(`#inputImg`).get(0).src = (await faceapi.bufferToImage(imgBuf)).src
7474
updateResults()
7575
}
7676

examples/views/faceDetectionVideo.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<!DOCTYPE html>
22
<html>
33
<head>
4-
<script src="face-recognition.js"></script>
4+
<script src="face-api.js"></script>
55
<script src="axios.min.js"></script>
66
<script src="commons.js"></script>
77
<link rel="stylesheet" href="styles.css">
@@ -55,25 +55,25 @@
5555
let net, result
5656

5757
function onIncreaseThreshold() {
58-
minConfidence = Math.min(facerecognition.round(minConfidence + 0.1), 1.0)
58+
minConfidence = Math.min(faceapi.round(minConfidence + 0.1), 1.0)
5959
$('#minConfidence').val(minConfidence)
6060
}
6161

6262
function onDecreaseThreshold() {
63-
minConfidence = Math.max(facerecognition.round(minConfidence - 0.1), 0.1)
63+
minConfidence = Math.max(faceapi.round(minConfidence - 0.1), 0.1)
6464
$('#minConfidence').val(minConfidence)
6565
}
6666

6767
function displayTimeStats(timeInMs) {
6868
$('#time').val(`${timeInMs} ms`)
69-
$('#fps').val(`${facerecognition.round(1000 / timeInMs)}`)
69+
$('#fps').val(`${faceapi.round(1000 / timeInMs)}`)
7070
}
7171

7272
async function onPlay(videoEl) {
7373
if(videoEl.paused || videoEl.ended)
7474
return false
7575

76-
const input = new facerecognition.NetInput(videoEl)
76+
const input = new faceapi.NetInput(videoEl)
7777
const { width, height } = input
7878
const canvas = $('#overlay').get(0)
7979
canvas.width = width
@@ -83,7 +83,7 @@
8383
result = await net.locateFaces(input, minConfidence)
8484
displayTimeStats(Date.now() - ts)
8585

86-
facerecognition.drawDetection('overlay', result.map(det => det.forSize(width, height)))
86+
faceapi.drawDetection('overlay', result.map(det => det.forSize(width, height)))
8787
setTimeout(() => onPlay(videoEl))
8888
}
8989

examples/views/faceRecognition.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<!DOCTYPE html>
22
<html>
33
<head>
4-
<script src="face-recognition.js"></script>
4+
<script src="face-api.js"></script>
55
<script src="axios.min.js"></script>
66
<script src="commons.js"></script>
77
<link rel="stylesheet" href="styles.css">
@@ -101,7 +101,7 @@
101101

102102
function displayTimeStats(timeInMs) {
103103
$('#time').val(`${timeInMs} ms`)
104-
$('#fps').val(`${facerecognition.round(1000 / timeInMs)}`)
104+
$('#fps').val(`${faceapi.round(1000 / timeInMs)}`)
105105
}
106106

107107
function displayImage(src) {
@@ -111,7 +111,7 @@
111111
async function runFaceRecognition() {
112112
async function next() {
113113
const imgBuf = await fetchImage(getFaceImageUri(classes[currClassIdx], currImageIdx))
114-
const input = await facerecognition.bufferToImage(imgBuf)
114+
const input = await faceapi.bufferToImage(imgBuf)
115115
const imgEl = $('#face').get(0)
116116
imgEl.src = input.src
117117

0 commit comments

Comments
 (0)