Reconocimiento de Rostros desde Webcam con OpenCV y Java

Reconocimiento de Rostros desde Webcam con OpenCV y Java

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


¿Sabías que?

¿Necesitas aprender algo nuevo ? Ve a Udemy, busca el tema del que quieres aprender, selecciona el curso para ti y continua con tu aprendizaje.

Udemy


package computervision;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.highgui.Highgui;
import org.opencv.highgui.VideoCapture;
import org.opencv.objdetect.CascadeClassifier;

class DetectFaceDemo {
    CascadeClassifier faceDetector = new CascadeClassifier("ruta_a_archivo_lbpcascade_frontalface.xml");
    MatOfRect faceDetections = new MatOfRect();
    VideoCapture cap = new VideoCapture(0);
    Mat imagen=new Mat();

    public void run() {
        System.out.println("nDeteccion de rostros con OpenCV y Webcam en java");
        Ventana ventana = new Ventana();

        if(cap.isOpened()){
            while(true){
                try {
                    //Thread.sleep(100);
                    cap.read(imagen);
                    if(!imagen.empty()){
                        faceDetector.detectMultiScale(imagen, faceDetections);
                        for (Rect rect : faceDetections.toArray()) {
                            Core.rectangle(imagen, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0));
                        }
                        ventana.setImage(convertir(imagen));
                    }
                } catch (Exception ex) {
                    Logger.getLogger(DetectFaceDemo.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }        
    }

    private Image convertir(Mat imagen) {
        MatOfByte matOfByte = new MatOfByte();
        Highgui.imencode(".jpg", imagen, matOfByte); 

        byte[] byteArray = matOfByte.toArray();
        BufferedImage bufImage = null;

        try {

            InputStream in = new ByteArrayInputStream(byteArray);
            bufImage = ImageIO.read(in);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return (Image)bufImage;
    }
}

public class Main {
    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        new DetectFaceDemo().run();
    }   
}

 

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

Ventana Principal


package computervision;

import java.awt.BorderLayout;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 *
 * @author root
 */
public class Ventana extends JFrame{
    JPanel panel;
    JLabel etiqueta;

    public Ventana(){
        setTitle("Reconocimiento de Rostros mediante Webcam con OpenCV y Java");
        setLocation(400, 200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(600,400);
        setResizable(true);
        setVisible(true);
        panel = new JPanel();
        panel.setLayout(new BorderLayout());
        etiqueta = new JLabel();
        panel.add(etiqueta);

        getContentPane().add(panel);
    }

    public void setImage(Image imagen){
        panel.removeAll();

        ImageIcon icon = new ImageIcon(imagen.getScaledInstance(etiqueta.getWidth(), etiqueta.getHeight(), Image.SCALE_SMOOTH));
        etiqueta.setIcon(icon);

        panel.add(etiqueta);
        panel.updateUI();
    }
}

 

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

Clic para valorar esta información
[Total: 0 Promedio: 0]