Spaces:
Running
Running
| 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; | |
| } | |
| } |