Первые ответы кода верны, но ответы слишком поздно. Ответы в течение 15 секунд на моем локальном сервере, но ~1 минута на Linux-сервере Digitalocean с тем же приложением.
- Время ответа 15–20 секунд локально (нужно уменьшить)
- время отклика 1 минута на Linux-сервере digitalocean (не знаю почему, но думаю, речь идет о мощности процессора для обработки лиц.)
- Правильное значение ответов
import * as FaceAPI from 'face-api.js';
import path from 'path';
FaceAPI.env.monkeyPatch({ Canvas, Image, ImageData });
private async loadModels(): Promise {
const modelsFolderPath = path.join(__dirname, '../../public/face-recognition-models');
await FaceAPI.nets.ssdMobilenetv1.loadFromDisk(modelsFolderPath); // Face detection
await FaceAPI.nets.faceLandmark68Net.loadFromDisk(modelsFolderPath); // Face landmarks
await FaceAPI.nets.faceRecognitionNet.loadFromDisk(modelsFolderPath); // Face recognition
}
public async compareFacesByBuffer(image1AsBuffer: Buffer, image2AsBuffer: Buffer, threshold = 0.6): Promise {
// load face-api.js models
await this.loadModels();
// load images
const image1 = await loadImage(image1AsBuffer);
const image2 = await loadImage(image2AsBuffer);
// detect and get face descriptors
const result1 = await FaceAPI.detectSingleFace(image1).withFaceLandmarks().withFaceDescriptor();
const result2 = await FaceAPI.detectSingleFace(image2).withFaceLandmarks().withFaceDescriptor();
if (!result1 || !result2) {
throw new Error('No face detected in one or both images');
}
// calculate the euclidean distance
const distance = FaceAPI.euclideanDistance(result1.descriptor, result2.descriptor);
console.log('Distance: ', distance);
// compare with the threshold
return distance < threshold;
}
Я тоже пробовал этот код, но он выдает неправильный результат, хотя и отвечает через 2 секунды. Распознает двух разных людей как одного и того же человека.
- Время ответа на местном уровне 2–3 секунды.
Ответы неверного значения< /li>
import * as FaceAPI from 'face-api.js';
import path from 'path';
FaceAPI.env.monkeyPatch({ Canvas, Image, ImageData });
export class FaceCompareService {
private async loadModels(): Promise {
const modelsFolderPath = path.join(__dirname, '../../public/face-recognition-models');
await FaceAPI.nets.faceRecognitionNet.loadFromDisk(modelsFolderPath); // Face recognition
}
public async compareFacesByBuffer(image1AsBuffer: Buffer, image2AsBuffer: Buffer, threshold = 0.6): Promise {
// load face-api.js models
await this.loadModels();
// load images
const image1 = await loadImage(image1AsBuffer);
const image2 = await loadImage(image2AsBuffer);
// detect and get face descriptors
const descriptor1 = await FaceAPI.computeFaceDescriptor(image1);
const descriptor2 = await FaceAPI.computeFaceDescriptor(image2);
if (!descriptor1 || !descriptor2) {
throw new Error('No face detected in one or both images');
}
// calculate the euclidean distance
const distance = FaceAPI.euclideanDistance(descriptor1, descriptor2);
console.log('Distance: ', distance);
// compare with the threshold
return distance < threshold;
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... ace-api-js