Reconocimiento de Rostros desde Webcam con OpenCV y Java

Reconocimiento de Rostros desde Webcam con OpenCV y Java

Reconocimiento de Rostros desde Webcam con OpenCV y Java
5 (100%) 3 votos

En este Articulo te mostraremos como realizar un reconocimiento de rostros desde webcam con opecv y Java, anteriormente vimos un articulo de reconocimiento de rostros desde una imagen y posteriormente guardamos en disco la nueva imagen con los rostros detectados, cabe destacar que aqui hablamos de reconocer cuando es detectado un rostro no de reconocimiento de quien es la persona( buscas identificacion de caras? ), ahora realizaremos el reconocimiento desde la webcam.

Requerimientos

Para el reconocimiento de rostros desde webcam utilizaremos la clase VideoCapture, el procedimiento sera el siguiente:

  • Obtener la imagen desde la webcam
  • Detectar rostros en la imagen
  • Dibujar rectangulos sobre la imagen
  • Convertir la imagen Mat a Image
  • Mostrar la imagen en una ventana JFrame

Veamos la estructura de el proyecto

reconocimiento de rostros desde webcam con opencv y java 1
Veamos el codigo fuente

Archivo Principal

 


Suscríbete!

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

¿Quieres tener tu Pagina Web? FatCow con Dominio Gratis!!
—————–

Ventana Principal

 

Podemos mejorar la velocidad de visualizacion optimizando el proceso, la conversion de imagen, redimensionando la imagen al momento de hacer la deteccion de rostros, etc…
Descarga el Proyecto Completo

Reconocimiento de Rostros desde Webcam con OpenCV y Java
5 (100%) 3 votos

Dejar un comentario

115 Comments on "Reconocimiento de Rostros desde Webcam con OpenCV y Java"

avatar
  Subscribe  
Notify of
Baltasar
Guest

tengo este error, podrian ayudar

Exception in thread “main” java.lang.UnsatisfiedLinkError: no opencv_java249 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at computervision.Main.main(Main.java:86)
C:\Users\Alex\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

Laura
Guest

Felicidades por la entrada. Muy completa y definida. Nunca se me hubiera ocurrido mejorar la visualización de las cámaras webs. Da gusto ver de qué manera avanza la tecnología, así como también lo hacen las cámaras de visión artificial. Me alegra ver cuánto de autodidactas somos. ¡Gracias!

edith hancco
Guest

Hola, estoy agradecida con la ayuda brindada, e probado esta forma de detectar, pero quisiera hacerte una consulta, que algoritmo usas para hacer este reconocimiento de rostro a personas agradeceria que me ayudes con eso.

Victor
Guest
Hola Jonathan, primero que nada quiero felicitarte por este blog que haz creado. Te cuento… tengo dos clases la primera la denomine GUI porque ahí es donde se crea la interfaz del programa y tengo un JDesktopFrame el cual recibe un JInternalFrame para asignarlo en el. En la otra clase “Camara” lo que hago es prender la cámara para empezar a capturar los frames y estos se asignan a un JLabel dentro del JInternalFrame para posteriormente retornarlo al método que lo invoco. El problema radica en que el código se cicla y no consigo que me refresque la imagen en… Read more »
Paramo
Guest

Para los que tienen problema con las librerias:
<>
<>

Este “error” se debe a que la versión 3.1 (e inferiores pero no se hasta cual) ya no maneja dicha libreria highgui. Sin embargo, utiliza las librerias <> e <> respectivamente. Por lo tanto, para corregir las lineas afectadas por tal libreria obsoleta, se debe de corregir el llamado a la misma. La solución se especifica a continuación.

Linea 40: Imgproc.rectangle(imagen, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0));

Linea 53: Imgcodecs.imencode(“.jpg”, imagen, matOfByte);

Paramo
Guest

Para los que tienen problema con las librerias:
“org.opencv.highgui.Highgui;”
“org.opencv.highgui.VideoCapture;”

Este “error” se debe a que la versión 3.1 (e inferiores pero no se hasta cual) ya no maneja dicha libreria highgui. Sin embargo, utiliza las librerias “import org.opencv.imgproc.Imgproc;” e “import org.opencv.videoio.VideoCapture;” respectivamente. Por lo tanto, para corregir las lineas afectadas por tal libreria obsoleta, se debe de corregir el llamado a la misma. La solución se especifica a continuación.

Linea 40: Imgproc.rectangle(imagen, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0));

Linea 53: Imgcodecs.imencode(“.jpg”, imagen, matOfByte);

Deu
Guest

Que tal Jonathan tu codigo esta muuy bien.
Solo una pregunta, las imagenes de los rostros se guardan o como se generan para poder comparar?.

Agradeceria que respondas

Norma MS
Guest

Hola Jonathan!
He intentado utilizar tu código para reconocimiento de rostros, pero me da el siguiente error:
Exception in thread “main” java.lang.UnsatisfiedLinkError: org.opencv.objdetect.CascadeClassifier.CascadeClassifier_1(Ljava/lang/String;)J
at org.opencv.objdetect.CascadeClassifier.CascadeClassifier_1(Native Method)
at org.opencv.objdetect.CascadeClassifier.(CascadeClassifier.java:58)
at computervision.DetectFaceDemo.(Main.java:24)
at computervision.Main.main(Main.java:88)
Ya revisé que la librería este cargada y que el path sea correcto, pero me sigue dando el mismo error! ¿Tienes idea de qué podría ser?

Álvaro Maldonado
Guest

Hola Jonathan, es posible que en vez de usar la webcam (VideoCapture cap = new VideoCapture(0);) se utilice como input un vídeo grabado previamente?

Saludos!

Leonardo Cruz
Guest

hola amigo jonathan tenia unas dudas sobre el reconocimiento facial atravez de las librerías de open cv no si por favor me podrías suministrar un correo electrónico donde te pueda comentar mi caso.. gracias..

javier
Guest

amigo el paquete
import org.opencv.highgui.Highgui;
me da error y no tengo idea de porque he usado la misma libreria y me da error por que seria?

Manu
Guest

Prueba con OpenCV 2.4.11, a mi me pasaba lo mismo y se solucionó. Lo que me ocurre ahora es que se abre la ventana, se enciendo la webcam pero no ocurre nada más. ¿Alguna idea de lo que puede ser?. Gracias

Marley
Guest

Que tal Manu, me sucedió lo mismo que a ti, sin embargo cada que abro el programa me marca un error en el path, podrías ayudarme a resolverlo?…. por cierto Jonathan luego de que abrió la web cam no hizo nada mas, donde se supone que te genera el otro archivo?

Luz
Guest
Hola Marley!! Oye yo tambien tuve ese problema, pero al fin encontre la causa… En tu carpeta del proyecto, aparece un archivo llamado: “opencv_java300.dll”?? Checa que ese archivo tenga el mismo nombre que tu opencv instalado: “C:\opencv\build\java” ya que hay dos carpetas dentro de esta ruta, X64 y X86…tienes que abrir la que corresponde a tu tipo de procesador, si es de 32 bit abre la ruta x86 y ese archivo que aparece ahi pegalo en la carpeta de tu proyecto, si es de 64 bits, has lo mismo con el archivo ahi dentro y pegalo en la carpeta de… Read more »
Jose
Guest

hola Jonathan !!!, disculpa habria alguna forma de realizar “Eye-Tracking” con opencv igual en java ????

Jose
Guest

Hola Jonathan!!!
Gracias por contestar mi comentario y espero que pronto puedas realizar dicha petición.

Mario Alberto Lastra Mariaca
Guest
Mario Alberto Lastra Mariaca

oye amigo una pregunta si en vez usar el main usara un boton para llamar la clase ne podrias dar algun consejo de como poder hacerlo de antemano gracias

Fernando Blanco
Guest

hola amigo Jonathan.. porfavor me podrias explicar como agregas esa libreria OpenCV – opencv-300.jar ya que en el mio no aparece.

Jonathan Melgoza
Guest

Hola Fernando,

La libreria la encuentras en tu instalacion de opencv opencv/build/bin/opencv-300.jar y para agregarla varia el procedimiento si lo haces a mano, en eclipse o en netbeans, para este ultimo IDE simplemente click derecho sobre el proyecto en propiedades, Libreries, Add Jar/Folder y aceptas los cambios.

Saludos!

Jonathan Melgoza
Guest

Sino la encuentras descarga el ejecutable de windows opencv 3 beta y revisa la ruta donde lo descomprimes.

https://sourceforge.net/projects/opencvlibrary/files/opencv-win/3.0.0-beta/

marlhon
Guest

amigo buen tutorial mi inquietud es tomarle una foto a la facha de una inglesia por ejemplo por camara celular que la aplicacion la detecte y la compare en una base con las imagenes que tengo se puede hacer

Jonathan Melgoza
Guest

Hola Marlhon,

Claro que se puede espero proximamente hacer algo similar y subirlo, con opencv puedes entrenar el reconocimiento de cualquier cosa!

Saludos!

Nelson
Guest

Saludos y Buena Pagina!
Se puede unir, el proyecto de detector de cara con este de reconocimiento ?
Gracias

Jonathan Melgoza
Guest

Hola Nelson,

Claro que se puede! no lo he hecho pero por supuesto que si, supongo que lo tendre que agregar a mi lista de pendientes, gracias por visitarnos.

Saludos!

hugo
Guest

jonathan melgozapor que me sale este error en las lineas 19 y 20¿¿¿ ayudaa!!!

java.lang.ExceptionInInitializerError

Caused by: java.lang.RuntimeException: Uncompilable source code – package org.opencv.highgui300 does not exist

at computervision.Main.(Main.java:19)

Exception in thread “main” Java Result: 1

hugo
Guest

jonathan, por que me marca error en la linea 18 y 19 del main,

java.lang.ExceptionInInitializerError

Caused by: java.lang.RuntimeException: Uncompilable source code – package org.opencv.highgui300 does not exist

at computervision.Main.(Main.java:19)

Exception in thread “main” Java Result: 1

Jonathan Melgoza
Guest

Hola Hugo,

Puedes postear aqui estas lineas que mencionas? Ademas, que version de opencv tienes instalada y a cual estas haciendo referencia?

Saludos!

hugo
Guest

la version es: opencv-3.0.0-alpha
y las lineas, son las mismas estan en la imagen de arriba
import org.opencv.highgui.Highgui;

import org.opencv.highgui.VideoCapture;

uriel
Guest

Como puedo hacer para que me recosca a la persona o personas que se les esta detectando el rostro

uriel
Guest

No puedo implementarlo 🙁 u.u

uriel
Guest

No me reconoce la camara, estare carggando mal el archivo lbpcascade_frontalface.xml? donde lo debo poner dentro del proyecto o de donde esta la instalacion, pero en la instalacion me aparecen casi 6 archivos iguales los de lbpcascade_frontalface.xml

Jonathan Melgoza
Guest

Que error te aparece? o simplemente no pasa nada? el archivo lbpcascade_frontalface.xml no importa donde este ya que tu lo llamas en el codigo con su ruta.

uriel
Guest

Bueno ahorita ya corregí los errores, pero al ejecutar el programa, mi camara enciende, pero ya cuando aparece el JFrame no da ningua señal de video, no hace nada, pero cuando esta corriendo el programa la camara esta encendia cierro el programa y la camara se apaga entre comilla se podria decir que si la detecta el programa pero no da señales de video, pero probando la cama en otras cosas si jala la camara sirve perfecto, te agradeceria tu ayuda gracias saludos u.u

Manu
Guest

Me pasa exactamente lo mismo, lo has podido solucionar?. Gracias

Fabian
Guest

Que tal tengo el mismo problema le mando a correr desde un menu pero se me visualiza la ventana en blanco. No se me muestra el video via webcam!!! Por favor guiame con este caso.

Jonathan Melgoza
Guest

Hola Fabian,

Sin ver el codigo no creo poder ayudarte.

Fabian
Guest
Hola Jonathan gracias por responder. Mira tengo un menú desde donde llamo a esta parte, ejecuto el run para que se abra la ventana de la detección con el siguiente código: System.loadLibrary(Core.NATIVE_LIBRARY_NAME); System.out.println(Core.VERSION+””+Core.VERSION_MAJOR+””+Core.VERSION_MINOR+””+Core.VERSION_REVISION); DetectFaceDemo dto =new DetectFaceDemo(); dto.run(); Lo que corresponde a la clase ventana es la siguiente: public class Ventana extends JFrame{ JPanel panel; JLabel etiqueta; public Ventana(){ setTitle(“Iniciando…”); setLocation(400, 200); setSize(600,400); setResizable(true); setVisible(true); panel = new JPanel(); etiqueta = new JLabel(); panel.add(etiqueta); getContentPane().add(panel, BorderLayout.CENTER); } public void setImage(Image imagen){ panel.removeAll(); panel.setOpaque(false); ImageIcon Img = new ImageIcon(imagen.getScaledInstance(etiqueta.getWidth(), etiqueta.getHeight(), Image.SCALE_SMOOTH)); etiqueta.setIcon(Img); panel.add(etiqueta); panel.updateUI(); } } Ese es el código no… Read more »
uriel
Guest

Excelente tuto, pero una duda, el porque la direccion que pones en el metodo cascadeclassifier, que ruta se deve de poner no entiendo esa parte y ptra al ejecutar tengo este error 🙁 : Exception in thread “main” java.lang.UnsatisfiedLinkError: no opencv_java249 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at detector_rostros.Detector_Rostros.main(Detector_Rostros.java:71)

Jonathan Melgoza
Guest

Hola Uriel,

Respondiendo a tu primer pregunta, va la ruta a tu archivo clasificador lbpcascade_frontalface.xml en tu pc.

Respondiendo a tu segunda pregunta, intenta poner en la carpeta raiz/principal de tu proyecto la dll de tu version de opencv, en este caso seria el archivo opencv_java249.dll, en tu carpeta de instalacion de opencv vienen las dos versiones, tanto de 32 bits como de 64 bits dependiendo de tu S.O. asegurate tambien de agregar como libreria el .jar que tambien viene en tu instalacion de opencv que debe ser la misma version por ejemplo seria opencv-249.jar.

Saludos!

uriel
Guest

gracias por responde jonathan, si ya no tengo errores, pero al ejecutar el programa o la aplicacion, mi corre sin ningun problema bueno si uno, aparentemente al correr el programa la camara se activa pero no da ningun tipo de señal de video! que estare asiendo mal? gracias por responder

Jonathan Melgoza
Guest

Hola Uriel,

Sin ver el codigo es muy dificil ayudarte.

uriel
Guest

Gracias Jonathan ya quedo, ya funciona perfecto, solo una duda necesito bueno ya hehcho varios intentos de que los rostros que detecte, los recorte y guarde las imagenes y implentar en este mismo codigo que me identifique quien o quienes son las personas a quienes se les detecta el rsotro, en verdad agradeceria tu ayda 🙁 xD u.u ya llevo investigando haciendo codigos pero no me funciona

Daniel
Guest

Que tal Uriel, como solucionaste el problema en el que no se daba señal de video?