faceapi / js /comparar.js
faustinopsy's picture
Upload 52 files
cc65f2f verified
var foto1 = [];
var foto2 = [];
async function imagem1() {
const verificado = document.getElementById("verificado")
const img1 = document.getElementById('img1');
verificado.innerText = "espere..."
let preview = document.getElementById('imagem1');
var inputs = document.querySelectorAll('input[type=file]');
let file = inputs[0].files[0];
const reader = new FileReader();
if(file) reader.readAsDataURL(file);
else preview.src = '';
reader.onloadend = function() {
preview.src = reader.result;
}
try {
const img = await faceapi.bufferToImage(file)
result = await faceapi.detectSingleFace(img).withFaceLandmarks().withFaceDescriptor().withFaceExpressions().withAgeAndGender()
const regionsToExtract =
[
new faceapi.Rect(result.detection._box._x,result.detection._box._y,
result.detection._box._width,result.detection._box._height)
]
const canvases = await faceapi.extractFaces(img, regionsToExtract)
displayExtractedFaces(canvases)
verificado.innerText = "Escolha a 2ª "
img1.innerText = 'Idade '+result.age.toFixed(2)+'\n'+' Genero '+result.gender+' - '+result.genderProbability.toFixed(2) * 100 +'%\n'+
'Neutro: '+result.expressions.Neutro.toFixed(2)* 100 +'%\n'+
'Feliz: '+result.expressions.Feliz.toFixed(2)* 100 +'%\n'+
'Triste: '+result.expressions.Triste.toFixed(2)* 100 +'%\n'+
'Medo: '+ result.expressions.Medo.toFixed(2)* 100 +'%\n'+
'Nojo: '+result.expressions.Nojo.toFixed(2)* 100 +'%\n'+
'Surpreso: '+ result.expressions.Surpreso.toFixed(2)* 100 +'%\n'+
'Raiva: '+result.expressions.Raiva.toFixed(2)* 100 +'%';
foto1.push(result.descriptor)
} catch (err) {
alert("Não foi possivel detectar o rosto")
return;
}
}
function displayExtractedFaces(faceImages) {
var canvas = document.createElement("canvas");
canvas = $('#overlay').get(0)
faceapi.matchDimensions(canvas, $('#imagem1').get(0))
$('#facesContainer').empty()
faceImages.forEach(canvas => $('#facesContainer').append(canvas))
document.getElementsByTagName("canvas")[2].setAttribute("id", 'cv3');
var c3 = document.getElementById("cv3");
var data3 = c3.toDataURL();
let preview2 = document.getElementById('imagem1');
preview2.src =data3;
c3.setAttribute("hidden", "hidden");
}
function displayExtractedFaces2(faceImages) {
var canvas = document.createElement("canvas");
canvas = $('#overlay').get(0)
faceapi.matchDimensions(canvas, $('#imagem2').get(0))
$('#facesContainer').empty()
faceImages.forEach(canvas => $('#facesContainer').append(canvas))
document.getElementsByTagName("canvas")[2].setAttribute("id", 'cv3');
var c3 = document.getElementById("cv3");
var data3 = c3.toDataURL();
let preview2 = document.getElementById('imagem2');
preview2.src =data3;
c3.setAttribute("hidden", "hidden");
}
async function imagem2() {
const verificado = document.getElementById("verificado")
const img2 = document.getElementById('img22');
verificado.innerText = "espere..."
let preview = document.getElementById('imagem2');
var inputs = document.querySelectorAll('input[type=file]');
let file = inputs[1].files[0];
const reader = new FileReader();
if(file) reader.readAsDataURL(file);
else preview.src = '';
reader.onloadend = function() {
preview.src = reader.result;
}
try {
const img = await faceapi.bufferToImage(file)
result = await faceapi.detectSingleFace(img).withFaceLandmarks().withFaceDescriptor().withFaceExpressions().withAgeAndGender()
const regionsToExtract =
[
new faceapi.Rect(result.detection._box._x,result.detection._box._y,
result.detection._box._width,result.detection._box._height)
]
const canvases = await faceapi.extractFaces(img, regionsToExtract)
displayExtractedFaces2(canvases)
img2.innerText = 'Idade '+result.age.toFixed(2)+'\n'+' Genero '+result.gender+' - '+result.genderProbability.toFixed(2) * 100 +'%\n'+
'Neutro: '+result.expressions.Neutro.toFixed(2)* 100 +'%\n'+
'Feliz: '+result.expressions.Feliz.toFixed(2)* 100 +'%\n'+
'Triste: '+result.expressions.Triste.toFixed(2)* 100 +'%\n'+
'Medo: '+ result.expressions.Medo.toFixed(2)* 100 +'%\n'+
'Nojo: '+result.expressions.Nojo.toFixed(2)* 100 +'%\n'+
'Surpreso: '+ result.expressions.Surpreso.toFixed(2)* 100 +'%\n'+
'Raiva: '+result.expressions.Raiva.toFixed(2)* 100 +'%';
foto2.push(result.descriptor)
verificado.innerText = "verificando...";
verificar();
} catch (err) {
alert("Não foi possivel detectar o rosto")
return;
}
}
async function verificar() {
const verificado = document.getElementById("verificado")
verificado.setAttribute("disabled", "true");
verificado.innerText = "verificando..."
var labeledFaceDescriptors = []
labeledFaceDescriptors.push(new faceapi.LabeledFaceDescriptors(
'person 1', foto1 ));
try {
var inputs = document.querySelectorAll('input[type=file]');
let file = inputs[1].files[0];
const img = await faceapi.bufferToImage(file)
const singleResult = await faceapi.detectSingleFace(img)
.withFaceLandmarks().withFaceDescriptor()
const faceMatcher = new faceapi.FaceMatcher(labeledFaceDescriptors)
const bestMatch = faceMatcher.findBestMatch(singleResult.descriptor)
if(bestMatch._distance<=0.50){
verificado.setAttribute("class", "greenclass")
verificado.innerText = "A mesma pessoa \n distância euclidiana entre os pontos: \n"+
(1 - bestMatch._distance.toFixed(2)) * 100 +'%'
verificado.removeAttribute("disabled")
}else{
verificado.setAttribute("class", "democlass")
verificado.innerText = "Não é a mesma pessoa \n distância euclidiana entre os pontos: \n"+
(1 - bestMatch._distance.toFixed(2)) * 100 +'%'
verificado.removeAttribute("disabled")
}
} catch (err) {
verificado.innerText = "Erro ao tentar detectar"
verificado.removeAttribute("disabled")
return;
}
}