Reconocimiento facial desde la linea de comandos con Python

por | 23 abril, 2017

Hoy mientras curioseaba por GitHub, me he encontrado una biblioteca de Python llamada face_recognition, que como su nombre indica nos permite hacer reconocimiento facial, en todo tipo de imágenes.

Face_recognition hace uso del framework dlib y nos ofrece un grado de fiabilidad casi perfecta (99.38 %), según los test de LFW (Labeled Faces in the Wild).

Al tratarse de un software multiplataforma, lo podemos ejecutar desde cualquier sistema Linux, OS X o Windows.

Instalación

Así que antes de ver como funciona, vamos a instalarlo con pip el gestor de paquetes de Python (disponible en los repositorios de todas las distribuciones GNU/Linux).

sudo pip3 install face_recognition

Es posible que salida del comando os de un error relativo a la compilación de dlib.

Si es así, lo solucionamos instalando el conjunto de bibliotecas Boost de C++, desde el gestor de paquetes de nuestro distro.

  • En mi caso (Arch Linux y derivadas):
sudo pacman -S boost
  • Para Ubuntu debería funcionar:
sudo apt install libboost-all-dev

Y repetimos otra vez el primer comando, para completar la instalación de face_recognition:

sudo pip3 install face_recognition

Usando el programa

Ahora llega la parte más sencilla: la de su uso. Tan solo precisamos un par de carpetas y un puñado de imágenes.

En la primera (etiquetados) vamos a depositar las imágenes etiquetadas –con el nombre del archivo– de personas que ya conocemos (Melania y Donald). Conviene por tanto que sean fotografías en las que aparezcan solos (si son de grupo, el programa elige a la persona que esté más en primer plano).

Mientras que en la segunda (desconocidos) colocaremos las imágenes a «stalkear», a ver si hay alguna posible coincidencia.

A continuación ejecutamos este sencillo comando (la ruta a vuestras carpetas, lógicamente puede variar):

[jose@replicante ~]$ face_recognition etiquetados desconocidos

desconocidos/33593821791_ef57896b09_k.jpg,unknown_person 
desconocidos/33593821791_ef57896b09_k.jpg,Melania 
desconocidos/33593821791_ef57896b09_k.jpg,unknown_person 
desconocidos/33682207006_8d7ab91dce_k.jpg,unknown_person 
desconocidos/33682207006_8d7ab91dce_k.jpg,Melania 
desconocidos/33682207006_8d7ab91dce_k.jpg,unknown_person 
desconocidos/33320971404_a0cf1a7737_o.jpg,unknown_person 
desconocidos/33320971404_a0cf1a7737_o.jpg,unknown_person 
desconocidos/33320971404_a0cf1a7737_o.jpg,Donald 
desconocidos/33320971404_a0cf1a7737_o.jpg,unknown_person 
desconocidos/33320971404_a0cf1a7737_o.jpg,unknown_person 
desconocidos/33320971404_a0cf1a7737_o.jpg,unknown_person 
desconocidos/34005922972_e18a403c05_o.jpg,unknown_person 
desconocidos/34005922972_e18a403c05_o.jpg,Donald

En unos segundos nos dice si hay alguien conocido en las fotos examinadas.

Además este software ofrece otras posibilidades a partir de la obtención de la posición y contornos de ojos, nariz, boca y barbilla. Entre ellas la edición gráfica o el reconocimiento en tiempo real, combinando face_recognition con otras bibliotecas de Python.

De todas esas características nos hablan en su página del GitHub. El mejor lugar para seguir de cerca el desarrollo de este interesante software de reconocimiento facial.

15 pensamientos en “Reconocimiento facial desde la linea de comandos con Python

  1. carlosky77

    Guau!!!!. De aniversario y nuestro amigo Replicante no para de trabajar. Por lo general nunca posteas en los fines de semana (llamese sábado y domingo).
    Interesante lo de este software. Me hubiera gustado que pudiera identificar a más de una persona (pero con el tiempo seguramente lo hará) y que tenga su propia base de datos y no que uno tenga que etiquetarla. Se ve prometedor….

    Responder
    1. tannhausser

      Acabo de probar con una foto de Melania & Trump juntos y me los ha identificado sin problemas. Como dices tu es un software prometedor y lleno de posibilidades.

      Y lo de postear es cierto, este fin de semana ha sido algo atípico, ya que los sábados suelo descansar. No por el sabbath (prohibido hablar sobre Linux y usar móviles más modernos que un Nokia 3310), como dicen las malas lenguas, sino por costumbre y que es un día que no suele haber lanzamientos.

      Los domingos me gusta hacer un tutorial a última hora, algo sencillo en la terminal que me desintoxique de todas las noticias de la semana. Pero como nos pasa a todos, hay días que nos sabes de que escribir y otros que se juntan 3 o 4 temas que te interesan.

      Responder
  2. Jc

    No hacéis artículo del lanzamiento de la Deepin 15.4, un saludo y felicidades por el aniversario.

    Responder
    1. tannhausser Autor

      Lo que decía, seguro que el día que salió apareció otra noticia que me parecía mas interesante. Eso y que cuando fui a mirar las novedades estaban en chino (si, ya se que también existe versión en ingles).

      Creo que el amigo yoyo va a hacer un podcast o un video tutorial sobre la distro (eso me pareció leer en su twitter).

      Un saludo y gracias a ti por comentar.

      Responder
  3. Lionel Bino

    Genial, tremendo software! Ahora a esperar que lo implementen programas con shotwell, darktable y otros para el etiquetado automático

    Responder
    1. tannhausser Autor

      Creo que Digikam tiene algo de reconocimiento facial en sus últimas versiones.

      Responder
  4. dgeaperez

    Más que interesante… Una pregunta ¿relacionada?…

    En mi trabajo tengo más de 10000 fotos (y aumentando) de los productos que aquí se fabrican… Hace tiempo que de cuando en cuando vengo buscando algún plugin, extensión, o conjuro para xnview o el visor/catalogador de imágenes que fuere, capaz de indexar las imágenes por su paleta de colores y hacer búsquedas por color dominante (a la google)…

    ¿conocen algo por el estilo? He dado con bibliotecas de php, python, y otros lenguajes, que apuntan a esa función; pero no tengo el tiempo (ni la voluntad de momento) para desarrollarlo…

    Gracias! desde ya y felicitaciones por el aniversario 🙂

    Responder
    1. blakeyed

      Puede ser un poco laborioso. Lo que se me ocurre es que podrías reducir las fotos a 1×1 pixels y ya sí que podrías buscar por colores… más o menos. Por ejemplo convert tiene una opción que dice:

      $ convert [archivo_imagen.xxx} -scale 1×1\! -format ‘%[pixel:u]’ info:

      Eso te saca una cadena parecida a esta:
      rgb(x,x,x)

      No sé, se podría extraer el color de cada foto, guardarlo en una base de datos y ya podrías comparar. Si quieres más colores habrá que tirar de histograma, puedes probar algo como:
      $ convert [imagen.xxx] -define histogram:unique-colors=true -format %c histogram:info:- | sort -rn | head

      Con lo que tendrías varios colores en una imagen y te puede ayudar a la hora de clasificarlas. Te he puesto el ejemplo de convert porque ImageMagick tiene bindings en un montón de lenguajes. Sé que esto es muy artesano, que tal vez esté hecho y sea muy sencillo, pero soy así de friki 😛

      Un saludo !

      Responder
      1. dgeaperez

        @blakeyed Gracias por la sugerencia… No la descarto, sin embargo estoy empezando a transitar esa etapa de la vida en la que confirmas que la rueda la han inventado, sólo falta conocer el lugar donde se puede hallar 😛

        Sigo buscando en los ratos libres, no puedo creer que sólo existan soluciones online para imágenes online… Si eso está disponible para la nube, en algún lugar físico debe ejecutarse y allí debe estar el código para echarlo a andar de modo local…

        Si debo montarlo como una aplicación web local, no me molestaría… Pero de ahí a ponerme a «cocinar»… Ufff!… Jajajajaja!… Gracias por el aporte… 🙂

        Responder
      1. dmacias

        Si la queremos usar para el bien hay que modificar el algoritmo para que reconozca tet@s en vez de caras xD, entonces hace @yoyo un screencast de los buenos :p

        Responder
  5. blakeyed

    ¡¡¡ Me encanta !!! Tengo que curiosearlo yo esto un poco y hacer cosas malvadas 😛 Digo… aprovechar esto para el bien del conocimiento y la humanidad 😛

    Responder
  6. Juan R Villanueva

    A mi me da un error Dlib cuando ejecuto face_recognition, no he encontrado ninguna manera de solucionarlo:

    File «/usr/bin/face_recognition», line 7, in
    from face_recognition.face_recognition_cli import main
    File «/usr/lib/python3.6/site-packages/face_recognition/__init__.py», line 7, in
    from .api import load_image_file, face_locations, batch_face_locations, face_landmarks, face_encodings, compare_faces, face_distance
    File «/usr/lib/python3.6/site-packages/face_recognition/api.py», line 4, in
    import dlib
    ImportError: /usr/lib/python3.6/site-packages/dlib-19.14.99-py3.6-linux-x86_64.egg/dlib.cpython-36m-x86_64-linux-gnu.so: undefined symbol: cblas_dtrsm

    Responder

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.