JavaScript - Problemas con Face.api.js

 
Vista:
Imágen de perfil de Julio

Problemas con Face.api.js

Publicado por Julio (1 intervención) el 23/08/2024 02:24:25
Hola, no puedo hacer mi proyecto correctamente por alguna complicación con el uso de face.api.js
mi aplicación deberia identificar una persona con la camara web y entregar sus datos (nombre, edad y puesto)
la camara web se enciende bien, el codigo parece ir bien, y manda errores como este

Error al cargar la imagen para Julio Valiente: Error: LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array
at new LabeledFaceDescriptors (face-api.js:1133:21)
at Number.<anonymous> (script2.js:32:20)
at Array.map (<anonymous>)
at loadLabeledImages (script2.js:20:18)
at HTMLVideoElement.<anonymous> (script2.js:68:46)

y finalmente no me entrega ninguno de los datos de la persona, ojala puedan ayudarme
aquí les dejo mi código

// Definir una base de datos de personas conocidas
async function loadLabeledImages() {
const knownPersons = [
{
name: "Julio Valiente",
age: 48,
position: "Gerente",
image: "/images/julio_valiente.jpg"
},
{
name: "Alexis Olmedo",
age: 27,
position: "Desarrolladora",
image: "/images/alexis_olmedo.jpg"
}
// Añade más personas aquí
];

return Promise.all(
knownPersons.map(person => {
try {
const img = faceapi.fetchImage(person.image);
const detections = faceapi.detectSingleFace(img).withFaceLandmarks(img).withFaceDescriptor(img);
console.log('scaneo de BD ok')

if (!detections) {
console.error(`No se detectó una cara en la imagen de ${person.name}`);
return null;
}

const descriptors = [detections.descriptor];
return new faceapi.LabeledFaceDescriptors(person.name, descriptors);
} catch (error) {
console.error(`Error al cargar la imagen para ${person.name}:`, error);
return null;
}
}, 200)
).then(descriptors => descriptors.filter(descriptor => descriptor !== null));
}

async function startVideo() {
const video = document.getElementById('video');

// Pedir acceso a la cámara
navigator.mediaDevices.getUserMedia({ video: {} })
.then(stream => {
video.srcObject = stream;
})
.catch(err => {
console.error("Error al acceder a la cámara", err);
});

video.addEventListener('play', async () => {
// Cargar los modelos necesarios

await faceapi.nets.ssdMobilenetv1.loadFromUri('/models');
console.log('Modelo ssdMobilenetv1 cargado');

await faceapi.nets.faceLandmark68Net.loadFromUri('/models');
console.log('Modelo faceLandmark68Net cargado');

await faceapi.nets.faceRecognitionNet.loadFromUri('/models');
console.log('Modelo faceRecognitionNet cargado');

await faceapi.nets.tinyFaceDetector.loadFromUri('/models');
console.log('Modelo TinyFaceDetector cargado');

const labeledFaceDescriptors = await loadLabeledImages();
const faceMatcher = new faceapi.FaceMatcher(labeledFaceDescriptors, 0.6);

setInterval(async () => {
const detections = await faceapi.detectAllFaces(video, new faceapi.TinyFaceDetectorOptions()).withFaceLandmarks().withFaceDescriptors();
console.log('Detecciones de rostros realizada:', detections); // Depuración

const resizedDetections = faceapi.resizeResults(detections, {
width: video.width,
height: video.height
});

// Comparar los rostros detectados con la base de datos

const results = resizedDetections.map(d => {
const match = faceMatcher.findBestMatch(d.descriptor);
console.log('Mejor Coincidencia:', match); // Depuración
return match;
});
const infoBox = document.getElementById('info-box');
infoBox.innerHTML = ''; // Limpiar la información previa

results.forEach(result => {
if (result.label !== 'unknown') { // Asegurarse de que no sea desconocido
const person = knownPersons.find(p => p.name === result.label);
if (person) {
console.log(`Coincidencia encontrada: ${person.name}`); // Depuración
infoBox.innerHTML += `<p>${person.name}, ${person.age} años, ${person.position}</p>`;
}
} else {
console.log('Rostro desconocido detectado');
}
});
}, 1000);
});
}
startVideo();
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder