怎样使用OpenCV进行人脸识别

 我来答
可以叫我表哥
2015-01-10 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
采纳数:25897 获赞数:1464990
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。

向TA提问 私信TA
展开全部

1.环境搭建:见上一篇博客


整个项目的结构图:


2.编写DetectFaceDemo.java,代码如下:



[java] view 
plaincopyprint?



package com.njupt.zhb.test;  


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.highgui.Highgui;  


import org.opencv.objdetect.CascadeClassifier;  


  


// 
  


// Detects faces in an image, draws boxes around them, and writes the results 
  


// to "faceDetection.png". 
  


//   


public class DetectFaceDemo {  


  public void run() {  


    System.out.println("\nRunning DetectFaceDemo");  


    System.out.println(getClass().getResource("lbpcascade_frontalface.xml").getPath());  


    // Create a face detector from the cascade file in the resources 
  


    // directory. 
  


    //CascadeClassifier faceDetector = new CascadeClassifier(getClass().getResource("lbpcascade_frontalface.xml").getPath()); 
  


    //Mat image = Highgui.imread(getClass().getResource("lena.png").getPath()); 
  


    //注意:源程序的路径会多打印一个‘/’,因此总是出现如下错误   


        /* 


         * Detected 0 faces Writing faceDetection.png libpng warning: Image 


         * width is zero in IHDR libpng warning: Image height is zero in IHDR 


         * libpng error: Invalid IHDR data 


         */  


    //因此,我们将第一个字符去掉 
  


    String xmlfilePath=getClass().getResource("lbpcascade_frontalface.xml").getPath().substring(1);  


    CascadeClassifier faceDetector = new CascadeClassifier(xmlfilePath);  


    Mat image = Highgui.imread(getClass().getResource("we.jpg").getPath().substring(1));  


    // Detect faces in the image. 
  


    // MatOfRect is a special container class for Rect. 
  


    MatOfRect faceDetections = new MatOfRect();  


    faceDetector.detectMultiScale(image, faceDetections);  


  


    System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));  


  


    // Draw a bounding box around each face. 
  


    for (Rect rect : faceDetections.toArray()) {  


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


    }  


  


    // Save the visualized detection. 
  


    String filename = "faceDetection.png";  


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


    Highgui.imwrite(filename, image);  


  }  


}  

package com.njupt.zhb.test;
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.highgui.Highgui;
import org.opencv.objdetect.CascadeClassifier;

//
// Detects faces in an image, draws boxes around them, and writes the results
// to "faceDetection.png".
//
public class DetectFaceDemo {
 public void run() {
   System.out.println("\nRunning DetectFaceDemo");
   System.out.println(getClass().getResource("lbpcascade_frontalface.xml").getPath());
   // Create a face detector from the cascade file in the resources
   // directory.
   //CascadeClassifier faceDetector = new CascadeClassifier(getClass().getResource("lbpcascade_frontalface.xml").getPath());
   //Mat image = Highgui.imread(getClass().getResource("lena.png").getPath());
   //注意:源程序的路径会多打印一个‘/’,因此总是出现如下错误
/*
* Detected 0 faces Writing faceDetection.png libpng warning: Image
* width is zero in IHDR libpng warning: Image height is zero in IHDR
* libpng error: Invalid IHDR data
*/
   //因此,我们将第一个字符去掉
   String xmlfilePath=getClass().getResource("lbpcascade_frontalface.xml").getPath().substring(1);
   CascadeClassifier faceDetector = new CascadeClassifier(xmlfilePath);
   Mat image = Highgui.imread(getClass().getResource("we.jpg").getPath().substring(1));
   // Detect faces in the image.
   // MatOfRect is a special container class for Rect.
   MatOfRect faceDetections = new MatOfRect();
   faceDetector.detectMultiScale(image, faceDetections);

   System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));

   // Draw a bounding box around each face.
   for (Rect rect : faceDetections.toArray()) {
       Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0));
   }

   // Save the visualized detection.
   String filename = "faceDetection.png";
   System.out.println(String.format("Writing %s", filename));
   Highgui.imwrite(filename, image);
 }
}



3.编写测试类:



[java] view 
plaincopyprint?



package com.njupt.zhb.test;  


public class TestMain {  


  public static void main(String[] args) {  


    System.out.println("Hello, OpenCV");  


    // Load the native library. 
  


    System.loadLibrary("opencv_java246");  


    new DetectFaceDemo().run();  


  }  


}  


//运行结果:   


//Hello, OpenCV 
  


//   


//Running DetectFaceDemo 
  


///E:/eclipse_Jee/workspace/JavaOpenCV246/bin/com/njupt/zhb/test/lbpcascade_frontalface.xml 
  


//Detected 8 faces 
  


//Writing faceDetection.png  

package com.njupt.zhb.test;
public class TestMain {
 public static void main(String[] args) {
   System.out.println("Hello, OpenCV");
   // Load the native library.
   System.loadLibrary("opencv_java246");
   new DetectFaceDemo().run();
 }
}
//运行结果:
//Hello, OpenCV
//
//Running DetectFaceDemo
///E:/eclipse_Jee/workspace/JavaOpenCV246/bin/com/njupt/zhb/test/lbpcascade_frontalface.xml
//Detected 8 faces
//Writing faceDetection.png

苏州千视通视觉科技股份有限公司_
2024-11-04 广告
千视通是国内第一梯队推出多模态AI大模型网关和边缘大模型一体机产品方案的领先AI企业。 拥有行业领先的多模态视觉语言大模型技术,践行“Make high-quality AI quickly”理念,平台基于多模态预训练,支持用户自定义算法可... 点击进入详情页
本回答由苏州千视通视觉科技股份有限公司_提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式