PHP Classes

File: js/main/componentes/Recognition.js

Recommend this page to a friend!
  Classes of Rodrigo Faustino   App Livro Reconhecimento Facial   js/main/componentes/Recognition.js   Download  
File: js/main/componentes/Recognition.js
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: App Livro Reconhecimento Facial
Recognize users by their face pictures
Author: By
Last change:
Date: 15 days ago
Size: 2,412 bytes
 

Contents

Class file image Download
import User from './User.js'; import Presenca from './Presence.js'; export default class Recognition { constructor(camera, userApiUrl,faceapi) { this.camera = camera; this.camera.activateCamera(); this.userApi = new User(userApiUrl); this.presenca = new Presenca(userApiUrl); this.buscarFaces(); this.usuarios = []; this.detections= null; } async buscarFaces() { this.usuarios = await this.userApi.buscarFaces(); }; async compareFaces (){ this.detections = await faceapi.detectSingleFace(this.camera.videoElement, new faceapi.TinyFaceDetectorOptions()) .withFaceLandmarks() .withFaceDescriptor(); if (!this.detections) { alert("Nenhum rosto detectado."); return; } let matched = false; this.usuarios.forEach(async (userData) => { userData.faces.forEach(async (faceArray) => { const faceDescriptor = new Float32Array(faceArray); if (faceDescriptor.length === this.detections.descriptor.length) { const distance = faceapi.euclideanDistance(faceDescriptor, this.detections.descriptor); const similarity = (1 - distance) * 100; if (similarity >= 76) { matched = true; console.log(`Rosto reconhecido: ${userData.nome} com ${Math.round(similarity)} % de aproximidade`); const response = await this.presenca.registrarPresenca(userData.id, 'E'); if (response) { return; } } } }); }); if (!matched) { alert("Rosto não reconhecido.\n tente novamente"); } }; render() { const container = document.createElement('div'); container.className = 'camera-container'; const videoContainer = this.camera.render(); container.appendChild(videoContainer); const saveButton = document.createElement('button'); saveButton.textContent = 'Marcar presença'; saveButton.onclick = () => this.compareFaces(); container.appendChild(saveButton); return container; } }