James Ketrenos 694a6e0a39 Face recognition is working
Signed-off-by: James Ketrenos <james_gitlab@ketrenos.com>
2020-01-05 01:18:31 -08:00

65 lines
1.9 KiB
JavaScript

"use strict";
process.env.TZ = "Etc/GMT";
require('@tensorflow/tfjs-node');
const config = require("config"),
Promise = require("bluebird"),
{ exists, mkdir, unlink } = require("./lib/util"),
faceapi = require("face-api.js"),
fs = require("fs"),
canvas = require("canvas");
const { Canvas, Image, ImageData } = canvas;
faceapi.env.monkeyPatch({ Canvas, Image, ImageData });
const maxConcurrency = require("os").cpus().length;
require("./console-line.js"); /* Monkey-patch console.log with line numbers */
faceapi.nets.ssdMobilenetv1.loadFromDisk('./models')
.then(() => {
console.log("ssdMobileNetv1 loaded.");
return faceapi.nets.faceLandmark68Net.loadFromDisk('./models');
}).then(() => {
console.log("landmark68 loaded.");
return faceapi.nets.faceRecognitionNet.loadFromDisk('./models');
}).then(async () => {
console.log("faceRecognitionNet loaded.");
let faces = [];
for (let a = 2; a < process.argv.length; a++) {
const file = process.argv[a];
process.stdout.write(`Loading ${file}...`);
const image = await canvas.loadImage(file),
detectors = await faceapi.detectAllFaces(image,
new faceapi.SsdMobilenetv1Options({
minConfidence: 0.8
})
).withFaceLandmarks().withFaceDescriptors();
process.stdout.write(`${detectors.length} faces.\n`);
detectors.forEach((face, index) => {
faces.push({
file: file,
index: index,
descriptor: face.descriptor
})
});
}
for (let i = 0; i < faces.length; i++) {
for (let j = 0; j < faces.length; j++) {
const a = faces[i], b = faces[j];
const distance = faceapi.euclideanDistance(a.descriptor, b.descriptor);
console.log(`${a.file}.${a.index} to ${b.file}.${b.index} = ${distance}`);
}
}
}).then(() => {
console.log("Face detection scanning completed.");
}).catch((error) => {
console.error(error);
process.exit(-1);
});