Ejemplo de Identificacion de Caras en Java con OpenCV

Ejemplo de Identificacion de Caras en Java con OpenCV

Ejemplo de Identificacion de Caras en Java con OpenCV
4.5 (90%) 8 votos

Todos hemos visto como en peliculas de Ciencia Ficcion se identifica a una persona por medio de una Camara y se obtiene en cuestion de pocos segundos su nombre, edad, domicilio y hasta lo que desayuno ese dia 😀 .. si bien no hemos llegado a tanto en este ambito de reconocimiento facial si se ha avanzado un poco, aunque es algo tardado y poco eficiente, podemos ver a continuacion un ejemplo practico en el que podras crearte tu propio programa de Identificacion de caras en java con OpenCV ( fantastica libreria 😉 ) asi que si estas interesado y quieres sentirte parte de una pelicula tipo Minority Report 😀 sigue leyendo …

Requerimientos

Antes de …

Primero que nada decir que el Articulo se basa unicamente en el codigo java basico para lograr la Identificacion de Caras, Reconocimiento Facial, Face Recognition o como quieras llamarle 😉 si tu quieres ( y creo que lo vas a hacer 😀 ) puedes crearte tu Interfaz Grafica, añadir bases de datos, Sistema de Voz, un moño.. en fin, lo que quieras agregarle. Tambien mencionar que este codigo lo tenia hace tiempo ya pero no lo habia subido, algunos comentarios en el blog y a mi correo me pedian ayuda para realizar esto asi que espero y les ayude de algo. Decir tambien que el codigo no es mio, aunque no recuerdo de donde lo saque 🙁 ( era un sitio en Ingles.. para variar en esto de OpenCV ) tiene algunas modificaciones mias en algunas cosas que no Funcionaban o en cosas extras que le agrege.

Hace algun tiempo realize un tutorial de Deteccion de Rostros en Java con Opencv, aunque en realidad lo posicione con el titulo de Reconocimiento de Rostros 😕 no es eso lo que hace realmente ( no se que estaba pensando.. es por eso que este Articulo se llama Identificacion de Caras en Java con OpenCV 😀 ) aquel articulo hablaba sobre como realizar la deteccion simple y facil de caras, este otro en cambio reconoce a que persona corresponde la imagen con el rostro que le es enviada.

Aclarar tambien que necesitamos OpenCV y JavaCV ( link arriba 😀 ) asi como tambien quiza quieras echarle un ojo a el link del Api de la clase FaceRecognizer.

Ahora bien, una vez aclarado algunas cosas vamos a darnos una vuelta por el procedimiento para realizar la Identificacion de Caras..


Suscríbete a nuestra lista de correo y recíbe los últimos contenidos directamente en tu bandeja de correo electrónico, puedes elegir únicamente de que categoria del blog quieres recibir contenido.

Suscríbeme

El Proceso …

El Proceso basicamente se divide en 2 partes..

  • Entrenamiento
  • Identificacion/Reconocimiento

 

Para el Primero necesitaremos un conjunto de imagenes ( el codigo viene configurado para 10 pero puedes cambiarlo ) del rostro de una persona desde diversas condiciones de luz, despues dentro del codigo a estas imagenes se les pasaran unos filtros y obtendremos unas imagenes formateadas para el correcto aprendizaje de la misma. El Proceso de Reconocimiento de Rostros que hacemos aqui lo hacemos con la clase FaceRecognizer como ya lo sabes, esta clase se ayuda de Patrones de Histogramas, un Histograma viene siendo una representacion que relaciona los niveles de intensidad de una imagen y el numero de pixeles que tienen esa intensidad, ese es el secreto de esta tecnica.

Para la Identificacion o Reconocimiento de caras necesitaremos pasarle una imagen del rostro que quieres detectar ( obviamente que ya haya sido entrenado antes 😎 ) y el codigo obtendra su valor de histograma y comprobara si existe uno en su datamap que este por encima del minimo aceptable establecido, si es asi obtendra el valor de la cadena de texto relacionado a ese valor.

Espero que mas o menos quede claro 😉 ahora vamos con lo que quieres ver.

El Codigo …

Tenemos una estructura de carpetas en C: para realizar las pruebas ( puedes cambiarlo pero ojo! cambia tambien el codigo ) tenemos..

[note]
C:facerecognizerdataimagestraining
[/note]

Nosotros haremos la prueba entrenando el codigo para reconocer a 2 personas, Cristiano Ronaldo y John Terry ( mis jugadores favoritos de Futbol 😮 ) para lo cual necesitaremos 10 imagenes diferentes de el rostro de CR7 y otras 10 de John Terry, ademas otra extra de cada uno tambien diferente para utilizarla para reconocerlos, como se que no quieres perder tiempo buscandolas te las dejo aqui 😉 igual si quieres obtener otras fotos de otras personas puedes ir a Google Imagenes y realizar una busqueda personaliza en “Herramientas de Busqueda” -> “Tipo” -> “Rostros” asi te ahorras tiempo.

Otra cosa es que no necesitas fijarte en el tamaño o que tan cerca esta el rostro ( ojo! que solo aparezca una persona ) ya que el codigo viene con deteccion de rostros en las imagenes que utilizas para el entrenamiento, asi si envias una imagen de una persona cerca o un poco mas lejos el programa te detectara la cara y realizara un recorte, despues la preprocesara.

Ahora que tenemos la estructura de carpetas y las 22 imagenes( 10 y 10 para el entrenamiento / 1 y 1 para el reconomiento ) vamos a ver la estructura del proyecto ..

 

Ejemplo de Identificacion de Caras en Java con OpenCV 1
 

Create el proyecto tal y como luce aqui, mete las imagenes a la raiz de tu proyecto y comienza a escribir la clase Main..

La clase Main luce asi..

Como puedes ver esta bien diferenciada la parte del Entrenamiento de la de Reconocimiento, puedes comentarte la parte de Reconocimiento si solo quieres Entrenar un nuevo Rostro o bien puedes comentar la parte del entrenamiento si lo que quieres una vez entrenado es reconocer un rostro. Puedes ver que yo realizo un entrenamiento de 10 imagenes y que leo el nombre de estas en un ciclo, detecto y preproceso, al final mando aprender la cara. En reconocimiento solo leo una imagen, la imagen objetivo, detecto la cara, preproceso y mando identificar, facil no? 😀 ahora me diras que donde sale la clase ReconocimientoCaras! pues te la dejo: ReconocimientoCaras.java porque no quiero alargar el contenido del articulo 😉

Algunas Imagenes …

Ejemplo de Identificacion de Caras en Java con OpenCV 2
 

Ejemplo de Identificacion de Caras en Java con OpenCV 3

Conclusiones …

Esta es solo una Tecnica de varias que existen, aunque creo que es la mas facil, su eficacia obviamente es algo limitada. Si se utilizan mas samples y se optimizan algunos valores se puede mejorar el porcentaje de acierto aunque tambien decir que su velocidad de reconocimiento es algo tardado, recordar que este es un campo que aun esta en desarrollo 🙂 no querramos descubrir una perla aqui, pero igual es bueno para desarrollo y aplicaciones de exhibición o poco exigidas. No te olvides de regalarme un +1, like, tweet o comentario para saber que estas ahi 😉
Descargar Proyecto Completo

Ejemplo de Identificacion de Caras en Java con OpenCV

Ejemplo de Identificacion de Caras en Java con OpenCV
4.5 (90%) 8 votos

Deja tu comentario

117 Comentarios ¿Qué opinas tú del tema?

  1. JUAN ALAPE
  2. Cirilo Linares
  3. Cirilo Linares
  4. Jhon
  5. Eliezer Garcia
  6. leo
  7. Ivan
    • Maribel
  8. Luis
    • Ivan
  9. Ivan
  10. everth pintado
  11. everth pintado
    • Iván
    • Eliezer Daniel
  12. everth pintado
  13. jose
  14. Nelson Castiblanco
  15. jorge
  16. juan jose manriquez santos
  17. Jorge
    • Jorge
  18. jor
    • El gomelo :v
  19. joshua
  20. Mike Heven
  21. Daro Cristian
  22. Dav!d
  23. Leandro
  24. Denis Rodriguez
  25. jose luis
  26. Leandro
  27. Nelson
  28. Luis Orbegoso
  29. Juan Camilo Solano Estrada
  30. Ruben Bordón
  31. Eduardo Carreon
    • Elvin Morales
  32. Juan David
  33. Hairo
  34. Carlos Cp
  35. Arantxa
  36. Juan David
  37. Alejandro Sansor
  38. Carlos Martínez
  39. Carlos Martínez
    • drinsorz
  40. Carlos Zúñiga
  41. Carlos Suarez
    • Delcy Ulloa
  42. Agustin Yañez Alcantar
    • Arantxa
    • everth pintado
  43. Carlos
    • Arantxa
  44. Arantxa
    • Arantxa
    • Arantxa
    • Bladimir
  45. Carlos Suarez
  46. Arantxa
    • Cris
    • Arantxa
    • Carlos Suarez
    • Arantxa
    • Carlos Suarez
    • Arantxa
  47. Patricia Giraldo
    • Arantxa
    • Carlos Martínez
    • Arantxa
    • Luis Orbegoso
    • Leandro
  48. Arantxa
    • Arantxa
  49. Arantxa
    • Arantxa
    • Ton
  50. Patricia Giraldo
    • Cirilo LInares
  51. Kalt Wulx
    • Alberto
    • Arantxa
    • Cirilo Linares
  52. carlos reina
  53. Patricia Giraldo
    • Patricia Giraldo
    • Patricia Giraldo
    • Patricia Giraldo
  54. Patricia Giraldo
  55. Patricia Giraldo
  56. Patricia Giraldo
  57. Oscar Jimenez
    • ronny
    • ronny

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Loading Facebook Comments ...