miércoles, 5 de agosto de 2015

Publicado miércoles, 5 de agosto de 2015 por con 0 comentarios

Detectando Rostros con OpenCV 3.0 en Java

En esta ocasión les comparto un ejemplo de como usar OpenCV para detectar rostros en Java, para lo cual es necesario tener un instalación funcional de OpenCV. Si no sabes como hacerlo, recomiendo leer el tutorial oficial para trabajar con Eclipse y OpenCV disponible en: http://docs.opencv.org/doc/tutorials/introduction/java_eclipse/java_eclipse.html

Una vez echo esto pasamos a codificar el ejemplo en este caso el ejemplo se realizara con la siguiente imagen:


Realmente no se necesita tener conocimiento avanzado en Java para realizar el reconocimiento facial con OpenCV ya que la libreria realiza este proceso con pocas lineas de codigo.



import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;

public class Test {
public void run(){

CascadeClassifier faceDetector = new CascadeClassifier("C:\\Users\\Juan\\Workspace\\eclipseworkspace\\opencvtest\\src\\varios\\haarcascade_frontalface_default.xml");
Mat image = Imgcodecs.imread("C:\\Users\\Juan\\Workspace\\eclipseworkspace\\opencvtest\\src\\varios\\rostro-angelina-jolie-2371.jpg");
// Detecta rostros en la imagen.
// MatOfRect es un contenedor especial para la clase Rect.
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);
System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));

// Dibuja una rectangulo en el rostro detectado
for (Rect rect : faceDetections.toArray()) {

Imgproc.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0));

}
// Graba la imagen con el rostro detectado.

String filename = "faceDetection.png";

System.out.println(String.format("Writing %s", filename));

Imgcodecs.imwrite(filename, image);

}
public static void main(String[] args) {

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

Test t = new Test();
t.run();

}

}

En la parte donde se crea el CascadeClassifier es necesario cambiar la dirección del archivo xml a la dirección donde se encuentre este en su equipo, de igual manera al leer la imagen.

Después de ejecutar estas pocas lineas de código obtendremos la siguiente imagen:


      edit

0 Comments:

Publicar un comentario