Me crucé con una pregunta muy interesante en un foro de PHP:
¿Cómo detectar caras en imágenes?
Me intrigó el tema, así que me puse a investigar un poco y llegué a un paquete que prometía: mauricesvay/php-facedetection.
Sin perder mucho tiempo, armé mi proyecto (¡vía mi amigo composer, obvio!): composer require mauricesvay/php-facedetection
Y ahí me fui a ver la documentación... algo pobre por cierto... así que decidí escribir estas líneas a ver si puedo ayudar a algún colega :).
Ansioso por probar mi nuevo juguete hice lo que cualquiera haría... copié el archivo index.php a mi proyecto, hice algunas adaptaciones hasta llegar a:
<?php
require_once 'vendor/autoload.php';
$detector = new svay\FaceDetector('detection.dat');
$detector->faceDetect($argv[1]);
$detector->toJpeg();
Y... ¡a ver qué tal funciona esto!
Hice la ejecución correspondiente: php index.php ~/Pictures/Mauro\ 2011.jpg
Y obtuve unas tres pantallas de símbolos ilegibles... no exactamente lo que esperaba :(
Lo que pasaba en realidad era simple: el método toJpeg()
escupe la imagen directo a la salida... nada muy problemático en realidad.
Versión 2 de la llamada: php index.php ~/Pictures/Mauro\ 2011.jpg > cara.jpg
Ahora sí :)
Otro método que puede resultar interesante es cropFaceToJpeg
. Este método genera una nueva imagen que sólo contiene la cara en cuestión:
Y tiene una pequeña ventaja: se le puede pasar un parámetro para especificar la salida... No me preguntes por qué no tiene lo mismo el anterior... así era cuando llegué. Aunque siendo una librería de código abierto, en una de esas me inspiro y le agrego el parámetro :).
Todo va a funcionar bien siempre que tengas instalada la librería GD.
Y luego, si queremos levantar un poco la apuesta... ¿se podrá pedir a esta librería comparar dos caras? (Como para hacer un login vía webcam o algo así).
Me temo que no pero... ¡a no desperar! Existe otro recurso que vale la pena explorar: FaceRD.
Esta librería es mucho más elaborada (lástima que la documentación no acompañe :p) y utiliza el poder de cómputo de terceros (Microsoft Face por ejemplo).
No he llegado a probarla aún, dicen que va muy bien, sólo que tiene un límite al uso gratuito.
¿Conoces alguna otra librería interesante para detectar caras?