PHP Classes

How to Use a PHP Face Recognition Library to Check If a Face is Similar to Others in an Application Database Using the Package Face ID PHP: Recognize faces by analyzing image descriptors

Recommend this page to a friend!
  Info   Example   Screenshots   View files Files   Install with Composer Install with Composer   Download Download   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2025-04-07 (11 days ago) RSS 2.0 feedNot yet rated by the usersTotal: Not yet counted Not yet ranked
Version License PHP version Categories
faceidphp 1.0MIT/X Consortium ...7Algorithms, Artificial intelligence, P..., A...
Description 

Author

This package can recognize faces by analyzing image descriptors.

It provides an application that uses the Face API JavaScript library to extract the points of a face that describe the face shapes.

The face descriptors are sent to the Web server and processed by a controller class that stores the information in a database with table records the users of the faces.

Another controller class can check the similarity of faces of different users by using cosine similarity and Euclidean distance of the points of the user faces.

Picture of Rodrigo Faustino
  Performance   Level  
Name: Rodrigo Faustino <contact>
Classes: 38 packages by
Country: Brazil Brazil
Innovation award
Innovation award
Nominee: 24x

Winner: 4x

Instructions

Example

<?php

namespace App;

require
"../vendor/autoload.php";

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, DELETE, PUT, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
if (
$_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    exit(
0);
}

use
App\Database\Conexao;
use
App\Database\UserDAO;
use
App\Model\User;
use
App\Controller\UserController;
use
App\Controller\FaceRecognitionController;
use
Dotenv\Dotenv;

$dotenv = Dotenv::createImmutable(dirname(__FILE__, 2));
$dotenv->load();


$conexao = Conexao::getConexao();
$userDAO = new UserDAO($conexao);
$userController = new UserController($userDAO);
$faceRecognition = new FaceRecognitionController($userDAO, 0.6);


$body = json_decode(file_get_contents('php://input'), true);

switch (
$_SERVER["REQUEST_METHOD"]) {
    case
"POST":
       
$resultado = '';
        if (isset(
$body['acao'])) {
           
$user = new User();
            switch (
$body['acao']) {
                case
'registrar':
                   
$user->setEmail($body['email']);
                   
$user->setRostos($body['rosto']);
                   
$resultado = $userController->inserir($user);
                    break;
                case
'login':
                    if (isset(
$body['descriptor'])) {
                       
$descriptor = $body['descriptor'];
                       
$debug = $body['debug'];
                       
$resultado = $faceRecognition->recognize($descriptor, $debug);
                    } else {
                       
$resultado = ['status' => false, 'message' => 'Descriptor não informado'];
                    }
                    break;
            }
        }
        echo
json_encode($resultado);
        break;
    case
"GET":
        if (isset(
$_GET['relatorio'])) {
           
$resultado = $userController->buscarTodos();
            echo
json_encode(["usuarios" => $resultado]);
        } else {
           
$id = $_GET['id'] ?? null;
           
$resultado = $userController->buscarPorId($id);
            echo
json_encode(["usuarios" => $resultado]);
        }
        break;
    case
"DELETE":
       
$id = $_GET['id'] ?? '';
       
$resultado = $userController->excluir($id);
        echo
json_encode($resultado);
        break;
}


Details

Aplicação de Reconhecimento Facial

Esta aplicação é um Proof of Concept (POC) para um sistema de autenticação baseado em reconhecimento facial. O frontend é responsável por extrair os descritores faciais durante o registro, armazenando três descritores por indivíduo. O backend, além de salvar esses descritores no banco de dados, realiza a verificação utilizando Distância Euclidiana ou Similaridade do Cosseno para calcular a proximidade entre os pontos salvos e os pontos da tentativa de autenticação.

A precisão do reconhecimento pode ser ajustada através do parâmetro $threshold. Por padrão, um valor de 0.6 (60%) é utilizado, mas pode ser configurado para 0.9 (90%) para tornar o reconhecimento mais rigoroso e preciso.

Tecnologias Utilizadas

A aplicação é composta por um cliente web e um servidor backend, que se comunicam por meio de uma API RESTful.

  • Frontend:

HTML + CSS + JavaScript (ES6) Uso da biblioteca face-api.js para extração dos descritores faciais Comunicação com o backend via fetch API e JSON - Backend:

PHP 8+ seguindo o padrão PSR-4 Banco de dados MySQL API REST estruturada para manipulação dos dados Implementação dos algoritmos Distância Euclidiana e Similaridade do Cosseno para o reconhecimento facial - Segurança:

Os descritores faciais são criptografados antes de serem armazenados Autenticação baseada na correspondência dos descritores com um limiar de similaridade configurável - O que são Descritores Faciais? Os descritores faciais são vetores numéricos gerados a partir dos pontos-chave do rosto de um indivíduo. Eles representam características únicas da face, permitindo que um modelo de IA compare diferentes rostos.

Durante o registro, um vetor de descritores é gerado para cada usuário e armazenado no banco de dados. Na autenticação, um novo vetor é gerado e comparado com os vetores armazenados, utilizando um dos algoritmos disponíveis:

Distância Euclidiana: Mede a proximidade entre dois vetores de descritores. Quanto menor a distância, maior a similaridade entre os rostos. Similaridade do Cosseno: Mede o ângulo entre dois vetores. Valores próximos de 1 indicam alta similaridade, enquanto valores próximos de 0 indicam baixa similaridade. Exemplo de um descritor facial:

[
    0.123, -0.456, 0.789, -0.321, 0.654, -0.987, 0.432, -0.210, ...
]

Pontos

Distância Euclidiana

Histórico

A Distância Euclidiana recebe seu nome do matemático grego Euclides, que formulou os fundamentos da geometria euclidiana. É uma métrica para medir a "linha reta" entre dois pontos em um espaço n-dimensional.

Aplicações

A Distância Euclidiana é amplamente utilizada em: - Reconhecimento Facial (comparação de descritores faciais); - Busca de Similaridade (comparação entre imagens, textos, etc.); - Análise de Clusters (método K-Means); - Sistemas de Recomendação (medida de proximidade entre preferências de usuários).

Cálculo da Distância Euclidiana

A fórmula da Distância Euclidiana em um espaço n-dimensional é:

\[ d(A, B) = \sqrt{ \sum_{i=1}^{n} (A_i - B_i)^2 } \]

Exemplo prático: Se tivermos dois pontos A e B no espaço 3D:

\[ A(3, 4, 5), B(1, 1, 1) \]

A distância será:

\[ d(A, B) = \sqrt{(3-1)^2 + (4-1)^2 + (5-1)^2} \] \[ d(A, B) = \sqrt{4 + 9 + 16} = \sqrt{29} = 5.39 \]

No PHP, poderíamos calcular com:

function euclideanDistance(array $vec1, array $vec2): float {
    $sum = 0.0;
    for ($i = 0; $i < count($vec1); $i++) {
        $sum += pow($vec1[$i] - $vec2[$i], 2);
    }
    return sqrt($sum);
}

Similaridade do Cosseno

Histórico

A Similaridade do Cosseno surgiu na área de recuperação de informações e mineração de dados. É baseada no cálculo do ângulo entre dois vetores, em vez da distância absoluta entre eles.

Aplicações

A Similaridade do Cosseno é útil em: - Processamento de Linguagem Natural (reconhecimento de similaridade entre textos); - Busca de Similaridade em Bancos de Dados; - Sistemas de Recomendação; - Reconhecimento Facial (como alternativa à distância euclidiana quando os dados precisam ser normalizados).

Cálculo da Similaridade do Cosseno

A fórmula da Similaridade do Cosseno é:

\[ S(A, B) = \frac{ A \cdot B }{ ||A|| \times ||B|| } \]

Onde: - \( A \cdot B \) é o produto escalar dos vetores; - \( ||A|| \) e \( ||B|| \) são as normas (magnitude) dos vetores; - O resultado varia de -1 (totalmente opostos) a 1 (idênticos).

Exemplo prático: Se tivermos os vetores:

\[ A(3, 4, 5), B(1, 1, 1) \]

Primeiro, calculamos o produto escalar:

\[ A \cdot B = (3 \times 1) + (4 \times 1) + (5 \times 1) = 3 + 4 + 5 = 12 \]

Agora, as magnitudes:

\[ ||A|| = \sqrt{3^2 + 4^2 + 5^2} = \sqrt{50} \] \[ ||B|| = \sqrt{1^2 + 1^2 + 1^2} = \sqrt{3} \]

Finalmente, a similaridade:

\[ S(A, B) = \frac{12}{\sqrt{50} \times \sqrt{3}} \approx 0.98 \]

No PHP, implementamos assim:

function cosineSimilarity(array $vec1, array $vec2): float {
    $dotProduct = array_sum(array_map(fn($a, $b) => $a * $b, $vec1, $vec2));
    $magnitudeA = sqrt(array_sum(array_map(fn($a) => $a * $a, $vec1)));
    $magnitudeB = sqrt(array_sum(array_map(fn($b) => $b * $b, $vec2)));
    
    return ($magnitudeA $magnitudeB) == 0 ? 0 : $dotProduct / ($magnitudeA $magnitudeB);
}

Comparação entre os Algoritmos

| Métrica | Distância Euclidiana | Similaridade do Cosseno | |-------------------------|-----------------------|----------------------| | Base Teórica | Distância geométrica | Ângulo entre vetores | | Valores Possíveis | \([0, \infty)\) | \([-1,1]\) | | Sensível à Magnitude? | Sim | Não | | Melhor para... | Análise espacial, clustering | NLP, recomendação |

Recomendações:

  • Use Distância Euclidiana para clustering e agrupamentos.
  • Use Similaridade do Cosseno para comparação de perfis e sistemas de recomendação.

Diferenciais do Projeto

  1. Suporte a múltiplos algoritmos: O sistema pode alternar entre Distância Euclidiana e Similaridade do Cosseno dinamicamente.
  2. Criptografia dos descritores: Os dados faciais são armazenados de forma segura.
  3. Alta precisão configurável: O sistema pode ser ajustado para diferentes níveis de sensibilidade no reconhecimento.
  4. Estrutura modular e escalável: Utiliza PSR-4 no backend, facilitando a manutenção e escalabilidade.

Screenshots (1)  
  • img/plot.png
  Files folder image Files (42)  
File Role Description
Files folder imageapp (1 file, 4 directories)
Files folder imagecss (1 file)
Files folder imagejs (4 files, 2 directories)
Files folder imagelogs (1 file)
Files folder imagemodels (11 files)
Accessible without login Plain text file .env Data Auxiliary data
Accessible without login Plain text file .env.example Data Auxiliary data
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file composer.lock Data Auxiliary data
Accessible without login HTML file index.html Doc. Documentation
Accessible without login Plain text file README.md Doc. Documentation

  Files folder image Files (42)  /  app  
File Role Description
Files folder imageController (2 files)
Files folder imageDatabase (3 files)
Files folder imageLibrary (1 file)
Files folder imageModel (1 file)
  Accessible without login Plain text file UserRouter.php Example Example script

  Files folder image Files (42)  /  app  /  Controller  
File Role Description
  Plain text file FaceRecognitionController.php Class Class source
  Plain text file UserController.php Class Class source

  Files folder image Files (42)  /  app  /  Database  
File Role Description
  Plain text file Conexao.php Class Class source
  Accessible without login Plain text file import.sql Data Auxiliary data
  Plain text file UserDAO.php Class Class source

  Files folder image Files (42)  /  app  /  Library  
File Role Description
  Plain text file CriptoX.php Class Class source

  Files folder image Files (42)  /  app  /  Model  
File Role Description
  Plain text file User.php Class Class source

  Files folder image Files (42)  /  css  
File Role Description
  Accessible without login Plain text file App.css Data Auxiliary data

  Files folder image Files (42)  /  js  
File Role Description
Files folder imagemain (2 files, 1 directory)
Files folder imageutils (2 files)
  Accessible without login Plain text file face-api.js Data Auxiliary data
  Accessible without login Plain text file face-api.js.map Data Auxiliary data
  Accessible without login Plain text file plotly-latest.min.js Data Auxiliary data
  Accessible without login Plain text file sweetalert2.11.js Data Auxiliary data

  Files folder image Files (42)  /  js  /  main  
File Role Description
Files folder imagecomponentes (6 files)
  Accessible without login Plain text file Main.js Data Auxiliary data
  Accessible without login Plain text file ModelLoader.js Data Auxiliary data

  Files folder image Files (42)  /  js  /  main  /  componentes  
File Role Description
  Accessible without login Plain text file Camera.js Data Auxiliary data
  Accessible without login Plain text file FaceDebugGraph.js Data Auxiliary data
  Accessible without login Plain text file FaceRegister.js Data Auxiliary data
  Accessible without login Plain text file Navbar.js Data Auxiliary data
  Accessible without login Plain text file RecognitionBackend.js Data Auxiliary data
  Accessible without login Plain text file User.js Data Auxiliary data

  Files folder image Files (42)  /  js  /  utils  
File Role Description
  Accessible without login Plain text file api.js Data Auxiliary data
  Accessible without login Plain text file Modal.js Data Auxiliary data

  Files folder image Files (42)  /  logs  
File Role Description
  Accessible without login Plain text file face_recognition.log Data Auxiliary data

  Files folder image Files (42)  /  models  
File Role Description
  Accessible without login Plain text file age_gender_model-weights_manifest.json Data Auxiliary data
  Accessible without login Plain text file face_expression_mo...ights_manifest.json Data Auxiliary data
  Accessible without login Plain text file face_landmark_68_m...ights_manifest.json Data Auxiliary data
  Accessible without login Plain text file face_landmark_68_t...ights_manifest.json Data Auxiliary data
  Accessible without login Plain text file face_recognition_model-shard2 Data Auxiliary data
  Accessible without login Plain text file face_recognition_m...ights_manifest.json Data Auxiliary data
  Accessible without login HTML file index.html Doc. Documentation
  Accessible without login Plain text file mtcnn_model-weights_manifest.json Data Auxiliary data
  Accessible without login Plain text file ssd_mobilenetv1_model-shard2 Data Auxiliary data
  Accessible without login Plain text file ssd_mobilenetv1_mo...ights_manifest.json Data Auxiliary data
  Accessible without login Plain text file tiny_face_detector...ights_manifest.json Data Auxiliary data

The PHP Classes site has supported package installation using the Composer tool since 2013, as you may verify by reading this instructions page.
Install with Composer Install with Composer
 Version Control Unique User Downloads  
 100%
Total:0
This week:0