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
5 (100%) 6 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..

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
5 (100%) 6 votos

107 Comentarios ¿Qué opinas tú del tema?

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

Dejar un comentario

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