Cómo desarrollar el reconocimiento facial dinámico de Java
La estructura de todo el proyecto
2 Escriba DetectFaceDemo.java, el código es el siguiente:
[java] ver copia simple<. /p>
paquete com.njupt.zhb.test;
importar org.opencv.core.Core
importar org.opencv.core.Mat; >
importar org.opencv.core.MatOfRect;
importar org.opencv.core.Point
importar org.opencv.core.Rect
importar org.opencv.core.Scalar
importar org.opencv.highgui.org.opencv.objdetect.CascadeClassifier
//
/ / Detecta la cara, dibuja un cuadro alrededor y escribe el resultado en "faceDetection.png".
/
clase pública DetectFaceDemo {
public void run() {
System.out.println("/nRunning DetectFaceDemo"
System.out.println("/nRunning DetectFaceDemo");
System.out.println("/nRunning DetectFaceDemo").println(getClass().getResource(); "lbpcascade_frontalface.xml").getPath());
// Crea un detector de rostros a partir de un archivo en cascada en el directorio de recursos
//.
//CascadeClassifier faceDetector = new CascadeClassifier(getClass().getResource("lbpcascade_frontalface.xml"));
// Crea un detector de rostros a partir de un archivo en cascada.
//Mat image = Highgui.Imread(getClass().getResource("lbpcascade_frontalface.xml"));
// Crea un detector de rostros a partir de un archivo en cascada.
imread(getClass().getResource("lena.png").getPath());
//Nota: La ruta del programa fuente imprime un '/' adicional, por lo que siempre aparece el siguiente error ocurre
/*
* Se detectaron 0 caras escribiendo faceDetection.png Advertencia de libpng: Imagen
* El ancho es cero en IHDR Advertencia de libpng: Advertencia de libpng: Altura de la imagen es cero en IHDR
* error de libpng: datos IHDR no válidos
*/
p>
Cadena xmlfilePath=getClass().getResource("lbpcascade_frontalface.xml").getPath(). p>
CascadeClassifier faceDetector = nuevo CascadeClassifier faceDetector = nuevo CascadeClassifier(xmlfilePath
Mat image = Highgui.imread(getClass().getResource("we.jpg").getPath().substring (1); ));
// Detecta rostros en imágenes.
// Detecta rostros en imágenes. Detectar rostros en imágenes.
// MatOfRect es una clase contenedora especial de Rect.
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(imagen, faceDetections
System.out.println(String.format("Detectado); s faces", faceDetections. toArray().length));
// Dibuja un cuadro delimitador alrededor de cada cara.
for (Rect rect: faceDetections.toArray()) {
Core.rectangle( imagen, nuevo Punto(rect.x, rect.y), nuevo Punto(rect.x rect.width, rect.y rect.height), new Scalar(0, 255, 0));
}
// Guarda la imagen.
// Guardar inspección visual.
String filename = "faceDetection.png"
System.out.println(String.format("Escribiendo s", nombre de archivo)); .out.println(String.format("Escribiendo s", nombre de archivo));
Highgui.imwrite(nombre de archivo, imagen
} // Guardar detección visual.
}
3. Escribir clase de prueba:
[java] ver copia simple
paquete com.njupt.zhb.test <; /p>
clase pública TestMain {
public static void main(String[] args) {
System.out.println("Hola, OpenCV"); p>
p>
// Carga la biblioteca nativa.
System.loadLibrary("opencv_java246");
new DetectFaceDemo().run(); /p>
} //Carga la biblioteca local.
}
/// Hola, OpenCV. frontalface.xml
///Detectadas 8 caras
///Escribiendo faceDetection.png