Deteccion de Rostros en Java con OpenCV – Primer Programa

Deteccion de Rostros en Java con OpenCV – Primer Programa

Deteccion de Rostros en Java con OpenCV – Primer Programa
5 (100%) 1 voto

En este Articulo veremos como crear una Deteccion de Rostros en Java con OpenCV, crearemos nuestro primer programa con estos dos lo que nos servira de base para futuros proyectos de vision por computadora en java. Cabe decir que OpenCV tiene interfaces tambien para C++, C y python pero por ahora nos centraremos en Java, pero mas adelante veremos su implementacion en otros lenguajes de programacion como C++ y Python. Comenzemos…

Requerimientos:

Desarrollo

Para comenzar lo primero sera abrir eclipse y crear un nuevo proyecto para esto vamos a File -> New -> Java Project

Deteccion de rostros en java con opencv 1

escribimos un nombre de proyecto, en mi caso lo llamare HolaMundoOpenCV-Java y finalizamos
Crearemos un nuevo paquete, lo llamaremos como queramos yo lo llame visionporcompuadora
Crearemos una nueva clase dentro de este paquete, yo la llame Main, y nos quedara asi:

Deteccion de rostros en java con opencv 2

Ahora Vamos a agregar la libreria de OpenCV a nuestro proyecto para lo que hacemos click derecho sobre nuestro proyecto en el workspace y seleccionamos
Properties, nos cambiamos a Java Build Path

Deteccion de rostros en java con opencv 3

Damos Click en Add Library, seleccionamos user Library y seleccionamos next


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

Deteccion de rostros en java con opencv 4

Damos click a User Libraries y seleecionamos New

Deteccion de rostros en java con opencv 5

Escribimos un nombre y aceptamos

Deteccion de rostros en java con opencv 6

Ahora agregaremos el jar de la libreria de OpenCV, damos click en Add External Jar -> y vamos a buildjava y seleccionamos opencv-246.jar en mi caso es “C:opencvbuildjavaopencv-256.jar”

Deteccion de rostros en java con opencv 7

Nos queda esta pantalla
Ahora damos dos click sobre “native Library Location” y seleccionamos la siguiente ruta buildjavax86 esto en caso de que tu sistema sea de 32 bits en caso
contrario selecciona x64, en mi caso seleccione la ruta “C:opencvbuildjavax86”
Te deberia quedar asi

Deteccion de rostros en java con opencv 8

Ahora solo aceptamos todas las ventanas hasta volver a la interfaz de eclipse que ahora luce asi:

Deteccion de rostros en java con opencv 9
Vamos a abrir la carpeta de nuestro proyecto y agregaremos una carpeta llamada resources (puedes llamarla como quieras) y dentro guardare los siguiente:

  • Imagen a utilizarDeteccion de rostros en java con opencv grace
  • Archivo llamado “lbpcascade_frontalface.xml” localizado en tu carpeta de opencv en datalbpcascades

Una vez que cuentas con estos archivos escribe el siguiente codigo fuente en tu clase en eclipse

Recuerda que debes cambiar algunas cosas como:

  • el nombre de tu paquete en “package visionporcomputadora;” si es que no pusiste ese nombre
  • la rutas a lbpcascade_frontalface.xml
  • la rutas a grace.jpg

Ejecutando este programa deberias ahora tener una imagen nueva en tu carpeta de proyecto:

Deteccion de rostros en java con opencv 11

que tiene la deteccion de rostros correctamente

Deteccion de rostros en java con opencv grace2
Visto – Deteccion de Rostros en Java con OpenCV – Primer Programa

Deteccion de Rostros en Java con OpenCV – Primer Programa
5 (100%) 1 voto

16
Dejar un comentario

avatar
7 Comment threads
9 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
9 Comment authors
julianWanderSparkleVictorGaby Recent comment authors
  Subscribe  
Notify of
julian
Guest
julian

hola jhonatan muy bueno tu blog, quiero saber q puedo hacer con el siguiente error
the import org.opencv.highgui cannot be solved. gracias

Wander
Guest
Wander

Hola profesor tengo un inconveniente al importar
Que me recomiendas que haga

Victor
Guest
Victor

Hola Jonathan, antes que nada quiero darte las gracias por compartir estos tutoriales, están muy bien explicados y vaya que son de gran ayuda.

He estado investigando y no encuentro la manera de como recortar el rostro detectado en una imagen nueva para así solo manejar la cara de la persona y no toda la imagen. Qué métodos de OpenCv debo de utilizar??? O como me recomiendas que lo haga. De antemano muchas gracias, saludos!!!

Sparkle
Guest
Sparkle

Hola! estoy buscando la misma respuesta y no encuentro de que forma hacerlo, si lo lograste, me podrias decir el script que usaste?

Gaby
Guest
Gaby

Hola Jonathan¡ excelentes tus tutos¡¡
me han salvado de unos apuros gracias y felicidades¡
Quisiera saber si me puedes orientar?

Lo que pasa es que necesito detectar las caras en una serie de imagenes y no se como puedo modificar tu código para que en vez de que lea solo una imagen lea toda una carpeta y las guarde con el numero de rostros que detecto.
Si me pudieras ayudar seria de gran ayuda.
Nuevamente gracias y felicidades por tu trabajo. n.n

ismael
Guest
ismael

Hola Jonathan la verdad son muy buenos tus tutoriales gracias por compartirlos, mira tengo un pequeño problemita con OpenCv cuando trato de ejecutar tu aplicaciones me sale esto:
Exception in thread “main” java.lang.UnsatisfiedLinkError: unsupported JNI version 0xFFFFFFFF required by C:UsersnokiaDesktopopencvopencv_java248.dll
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1676)
at java.lang.Runtime.loadLibrary0(Runtime.java:822)
at java.lang.System.loadLibrary(System.java:992)

He intentado de todo… espero me puedas ayudar

jhon
Guest
jhon

Hola que tal

Al ejecutar el programa me aparece el sigte error:

Exception in thread “main” java.lang.UnsatisfiedLinkError: org.opencv.objdetect.CascadeClassifier.CascadeClassifier_1(Ljava/lang/String;)J

lo que he averiguado es que debo inicializar la librería, espero me puedas ayudar

Jonathan Melgoza
Guest
Jonathan Melgoza

Hola jhon,

System.loadlibrary(“opencv_java246″);

si tu version de opencv es 2.46

mira en: http://jonathanmelgoza.com/blog/cargar-y-mostrar-una-imagen-con-opencv-en-java-y-netbeans/

Saludos!

Mario A. Jimenez
Guest
Mario A. Jimenez

Saludos muy buen aporte mi colega solo que tengo la duda de :
Archivo llamado “lbpcascade_frontalface.xml” localizado en tu carpeta de opencv en datalbpcascades
Donde lo encuentro ya que no lo encuentro el archivo por acá

Jonathan Melgoza
Guest
Jonathan Melgoza

Hola Mario,

Gracias por comentar! con respecto a la duda que tienes, si descargaste opencv del link

http://sourceforge.net/projects/opencvlibrary/files/latest/download

Simplemente ejecuta y se descomprimira en una carpeta de tu eleccion, luego el archivo se encontrara en

opencvsourcesdata

Saludos!!

Mario A. Jimenez
Guest
Mario A. Jimenez

Saludos mi colega y de esta manera ya me funcionará como el ejemplo? Ya lo descargo.

2014/1/4, Disqus :

Jonathan Melgoza
Guest
Jonathan Melgoza

Hola Mario!

Teniendo OpenCV bien Instalado y siguiendo el Tutorial deberia, aunque algunas veces algo va mal hehe, de cualquier forma aqui estaremos..

Saludos!

Mario A. Jimenez
Guest
Mario A. Jimenez

Saludos Jonathan como estas necesito de tu ayuda necesito que hacer un sistema el cuál me pueda detectar objetos en la pantalla?

2014/1/4, Disqus :

Jonathan Melgoza
Guest
Jonathan Melgoza

Hola Mario,

Para la deteccion de objetos cualquiera que no vienen sus clasificadores en la instalacion necesitaras realizar tus propios entrenamientos sobre dicho objeto, aunque tengo en mente realizar un Tutorial sobre el tema talvez no alcance a terminarlo antes de que lo requieras asi que te dejo un link en el cual realizan el entrenamiento para reconocer una banana 😉

http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html

Saludos!

Mario A. Jimenez
Guest
Mario A. Jimenez

Gracias Jonathan lo revisaré y si logro terminar te lo paso =)

El 13/1/14, Disqus escribió:

Jonathan Melgoza
Guest
Jonathan Melgoza

Gracias Mario, si quieres lo posteo a tu nombre, suerte!