Advertisement
Fhernd

azure_face_api.php

Jan 11th, 2025
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.99 KB | None | 0 0
  1. <?php
  2.  
  3. require 'vendor/autoload.php';
  4.  
  5. use GuzzleHttp\Client;
  6.  
  7. const AZURE_FACE_API_ENDPOINT = 'https://<tu-endpoint-face-api>.cognitiveservices.azure.com/face/v1.0';
  8. const AZURE_FACE_API_KEY = '<tu-api-key>';
  9.  
  10. // Recibe y procesa la solicitud
  11. if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  12.     // Verificar si se ha subido un archivo
  13.     if (!isset($_FILES['image']) || $_FILES['image']['error'] !== UPLOAD_ERR_OK) {
  14.         http_response_code(400);
  15.         echo json_encode(['error' => 'No se subió ninguna imagen válida']);
  16.         exit;
  17.     }
  18.  
  19.     // Ruta temporal de la imagen subida
  20.     $uploadedImagePath = $_FILES['image']['tmp_name'];
  21.  
  22.     // Ruta de la imagen de referencia
  23.     $referenceImagePath = __DIR__ . '/storage/reference.jpg';
  24.  
  25.     try {
  26.         // 1. Detectar rostros en la imagen subida
  27.         $uploadedFaceId = detectFace($uploadedImagePath);
  28.  
  29.         // 2. Detectar rostros en la imagen de referencia
  30.         $referenceFaceId = detectFace($referenceImagePath);
  31.  
  32.         // 3. Comparar ambos rostros
  33.         $isMatch = compareFaces($uploadedFaceId, $referenceFaceId);
  34.  
  35.         // Respuesta del endpoint
  36.         echo json_encode([
  37.             'success' => true,
  38.             'match' => $isMatch,
  39.             'message' => $isMatch ? 'El rostro coincide con el registrado' : 'El rostro no coincide'
  40.         ]);
  41.     } catch (Exception $e) {
  42.         http_response_code(500);
  43.         echo json_encode(['error' => $e->getMessage()]);
  44.     }
  45.     exit;
  46. }
  47.  
  48. // Función para detectar un rostro en una imagen y obtener su Face ID
  49. function detectFace($imagePath) {
  50.     $client = new Client();
  51.     $url = AZURE_FACE_API_ENDPOINT . '/detect';
  52.  
  53.     // Realiza la solicitud POST a la API de Azure Face
  54.     $response = $client->post($url, [
  55.         'headers' => [
  56.             'Ocp-Apim-Subscription-Key' => AZURE_FACE_API_KEY,
  57.             'Content-Type' => 'application/octet-stream',
  58.         ],
  59.         'body' => file_get_contents($imagePath),
  60.         'query' => [
  61.             'returnFaceId' => 'true'
  62.         ]
  63.     ]);
  64.  
  65.     $result = json_decode($response->getBody(), true);
  66.  
  67.     if (empty($result) || !isset($result[0]['faceId'])) {
  68.         throw new Exception('No se detectaron rostros en la imagen');
  69.     }
  70.  
  71.     return $result[0]['faceId'];
  72. }
  73.  
  74. // Función para comparar dos Face IDs
  75. function compareFaces($faceId1, $faceId2) {
  76.     $client = new Client();
  77.     $url = AZURE_FACE_API_ENDPOINT . '/verify';
  78.  
  79.     // Realiza la solicitud POST a la API de Azure Face para comparar los rostros
  80.     $response = $client->post($url, [
  81.         'headers' => [
  82.             'Ocp-Apim-Subscription-Key' => AZURE_FACE_API_KEY,
  83.             'Content-Type' => 'application/json',
  84.         ],
  85.         'json' => [
  86.             'faceId1' => $faceId1,
  87.             'faceId2' => $faceId2
  88.         ]
  89.     ]);
  90.  
  91.     $result = json_decode($response->getBody(), true);
  92.  
  93.     if (isset($result['isIdentical']) && $result['isIdentical'] === true) {
  94.         return true;
  95.     }
  96.  
  97.     return false;
  98. }
  99.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement