`
piziwang
  • 浏览: 240064 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

利用OpenCV实现人脸识别

    博客分类:
  • J2EE
阅读更多

1.什么是OpenCV (来自Baidu百科)
    
    OpenCV是Intel资助的开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。
    
    OpenCV 拥有包括 300 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也可以使用某些外部库。OpenCV 对非商业应用和商业应用都是免费(FREE)的。OpenCV 为Intel® Integrated Performance Primitives (IPP) 提供了透明接口。 这意味着如果有为特定处理器优化的的 IPP 库, OpenCV 将在运行时自动加载这些库。

2. JAVA中如何调用 (参考JNI2OpenCV)

    JNI2OpenCV将OpenCV的C/C++程序代码编译成动态链接库文件,Java便可以利用本地方法调用OpenCV的计算机视觉库中的一系列的函数和算法。

    JNI2OpenCV中提供了FaceDetection.java的测试程序,程序代码如下:
//--以下是程序代码--

class JNIOpenCV
{
    static
     {
        System.loadLibrary("JNI2OpenCV");
    }
      //加载动态链接库
    public native int[] detectFace(int minFaceWidth, int minFaceHeight, String cascade, String filename);
    //声明本地方法
}

public class FaceDetection
{
private JNIOpenCV myJNIOpenCV;
private FaceDetection myFaceDetection;

public FaceDetection()
{
   myJNIOpenCV = new JNIOpenCV();
   String filename = "lena.jpg";//OpenCV的官方测试图片(人脸识别)
   String cascade = "haarcascade_frontalface_alt.xml";
  
   int[] detectedFaces = myJNIOpenCV.detectFace(40, 40, cascade, filename);
   int numFaces = detectedFaces.length / 4;
    
   System.out.println("numFaces = " + numFaces);
   for (int i = 0; i < numFaces; i++)
    {
       System.out.println("Face " + i + ": " + detectedFaces[4 * i + 0] + " " + detectedFaces[4 * i + 1] + " " + detectedFaces[4 * i + 2] + " " + detectedFaces[4 * i + 3]);
    }
}
   
    public static void main(String args[])
    {
        FaceDetection myFaceDetection = new FaceDetection();  
    }
}

    程序运行之后,会在命令行中打印出含有多少个Faces,以及各个Faces的位置等信息。

3.将人脸位置标志出来

    为了更直观的呈现人脸识别的结果,笔者在图片上直接用矩形框标志出具体的位置。程序分成两部分,人脸识别部分(FaceDetection)和图片绘图(DrawInImg)部分。具体程序如下:

FaceDetection.java
//-------------------------------------
class JNIOpenCV {
    static {
        System.loadLibrary("JNI2OpenCV");
    }
    public native int[] detectFace(int minFaceWidth, int minFaceHeight, String cascade, String filename);
}

public class FaceDetection {
private JNIOpenCV myJNIOpenCV;
private FaceDetection myFaceDetection;

public FaceDetection() {
   myJNIOpenCV = new JNIOpenCV();
   String inputFilename = "4.jpg";
   String outputFilename = "out.jpg";
   String cascade = "haarcascade_frontalface_alt.xml";
  
    int[] detectedFaces = myJNIOpenCV.detectFace(10 , 10, cascade, inputFilename);
    int numFaces = detectedFaces.length / 4;
   
    System.out.println("numFaces = " + numFaces);
   
    for (int i = 0; i < numFaces; i++) {
       System.out.println("Face " + i + ": " + detectedFaces[4 * i + 0] + " " + detectedFaces[4 * i + 1] + " " + detectedFaces[4 * i + 2] + " " + detectedFaces[4 * i + 3]);
    }
   
    int[][] RectInt=new int[numFaces][4];
    for (int i = 0; i < numFaces; i++)
    {      
       RectInt[i][0]=detectedFaces[4 * i + 0];
       RectInt[i][1]=detectedFaces[4 * i + 1];
       RectInt[i][2]=detectedFaces[4 * i + 2];
       RectInt[i][3]=detectedFaces[4 * i + 3];
    }
   
    if(new DrawInImg(inputFilename,outputFilename,RectInt).DrawRect())
       System.out.println("File create success ! ");
    else
         System.out.println("File create error ! ");
}
   
    public static void main(String args[]) {
        FaceDetection myFaceDetection = new FaceDetection();  
    }
}

DrawInImg.java
//----------------------------
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;

public class DrawInImg
{

private boolean isDone=false;
private String inputFileName="";
private String outputFileName="";
private int[][] RectInt;

public DrawInImg(String inputFileName,String outputFileName,int[][] RectInt)
{  
   this.inputFileName=inputFileName;  
     this.outputFileName=outputFileName;
     this.RectInt=RectInt;
}

public boolean DrawRect()
{
   try
   {
    FileInputStream fis = new FileInputStream(inputFileName);
        FileOutputStream fos = new FileOutputStream(outputFileName);
        BufferedImage img = ImageIO.read(fis);
        Graphics g = img.getGraphics();
        g.setColor(Color.GREEN);
         for(int i=0;i<RectInt.length;i++)
         {
            for(int j=0;j<RectInt[i].length;j++)
         {
             g.drawRect(RectInt[i][0],RectInt[i][1],RectInt[i][2],RectInt[i][3]);
            // System.out.print(RectInt[i][j]+" ");            
         }
            System.out.print("\r\n");
         }
        
       img.flush();
       g.dispose();
       ImageIO.write(img, "JPG", fos);
        
      while(true)
     {
     if(new File(outputFileName).exists())
      {
           this.isDone=true;
          break;
       }
    }
        
   }
   catch (IOException ioe)
   {
    ioe=null;
   }
       
        return this.isDone;
}

}

运行的效果如下: (注意看里面的白框)

分享到:
评论
2 楼 shun1 2012-09-22  
在eclipse ee下如何实现啊?求帮助。
1 楼 a78027a78027 2010-07-07  
這個人臉程式
如果
  public static void main(String args[]) {
    while(true){
        FaceDetection myFaceDetection = new FaceDetection(); 
     }
    }

记忆体会无法释放
大约做个900多次后
会跳出
OpenCV GUI Error Handler的框
内容为
Insufficient memory(Out of memory)
in function cvAlloc, D:\User\VP\opencv\cxcore\sre\cxalloc.cpp(111)
请教有什么解决方法吗?

相关推荐

    ARM上利用opencv实现人脸识别

    总之,通过OpenCV库在ARM平台上实现人脸识别,我们需要进行人脸检测、特征提取、人脸识别等一系列步骤。这个过程涉及到计算机视觉的基本原理、OpenCV的API使用以及针对ARM平台的优化技术。结合视频处理能力,我们...

    springboot +opencv 人脸识别

    这个系统利用OpenCV强大的图像处理和机器学习能力,通过SpringBoot的后端服务进行集成,为用户提供了一种便捷的远程人脸识别解决方案。 **OpenCV简介** OpenCV(开源计算机视觉库)是一个跨平台的计算机视觉库,...

    Android+OpenCV+人脸识别源码(完整)

    总的来说,这个“Android+OpenCV+人脸识别源码(完整)”项目展示了如何在Android平台上利用OpenCV进行实时的人脸检测和识别。开发者可以通过研究这个项目,学习如何将OpenCV与Android系统结合,以及如何实现复杂的...

    openCV实现的人脸识别 有源码

    在本项目中,我们重点讨论如何利用OpenCV实现高效的人脸识别功能。 人脸识别是计算机视觉领域的一个重要分支,主要涉及图像处理、模式识别和机器学习等技术。OpenCV提供了多种人脸识别的方法,如Haar级联分类器、...

    python利用Opencv实现人脸识别功能.pdf

    在本文中,我们将深入探讨如何使用OpenCV在Python中实现人脸识别功能。 首先,确保你已经在本地环境中安装了OpenCV。安装过程可以通过搜索搜索引擎如百度或Google来获取帮助。对于开发工作,除了OpenCV之外,还可以...

    一个基于 OpenCV 的人脸识别系统

    人脸识别是一项利用人的面部特征信息进行身份识别的技术,它主要分为几个关键步骤:人脸检测、特征提取和人脸识别。 1. **人脸检测**: 在OpenCV中,Haar级联分类器是常用的人脸检测方法。这个级联分类器是由许多...

    采用Python语言开发,利用OpenCv实现人脸识别,有运行视频

    采用Python语言开发,利用OpenCv抓取摄像头照片,然后传递给face-recognition-models模型识别人脸编码信息,把人脸的编码特征及其姓名和学号存到文件中保存,然后识别人脸的时候可以选择从图片识别或者从摄像头识别...

    基于qt+opencv的人脸识别

    【基于Qt+OpenCV的人脸识别】是一种将计算机视觉库OpenCV与图形用户界面库Qt结合,用于实现人脸检测、识别的技术。OpenCV是开源的计算机视觉库,它包含了大量的图像处理和计算机视觉的算法,而Qt则是一个跨平台的C++...

    OpenCV实现人脸识别算法

    PCA方法由于其在降维和特征提取方面的有效性,在人脸识别领域得到了广泛的应用。 PCA方法的基本原理是:利用K-L变换抽取人脸的主要成分,构成特征脸空间,识别时将测试图像投影到此空间,得到一组投影系数,通过与...

    基于OpenCv的人脸识别系统.pdf

    基于OpenCv的人脸识别系统是指利用OpenCv库实现的人脸检测和识别技术。人脸识别技术是指利用计算机软件分析识别人脸,是针对人本身的生物特征来区分生物体个体。近些年来,人脸识别技术已经取得了长足的发展,特别是...

    c#和opencv结合,能够实现人脸识别.zip

    在C#中使用OpenCV实现人脸识别,首先需要引入OpenCV的C#绑定,如Emgu CV或AForge.NET。这些库提供了对OpenCV API的访问,使得C#开发者能够利用OpenCV的功能。 1. 图像预处理:在进行人脸识别前,通常需要对原始图像...

    基于 vs2010 opencv的人脸识别系统

    本项目——“基于VS2010 OpenCV的人脸识别系统”,旨在通过实践,帮助学习者深入理解并掌握人脸识别的基本原理与实现方法。 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,包含了众多...

    Python+OpenCV实现的人脸识别签到考勤系统.zip

    在本项目中,我们利用Python和OpenCV库创建了一个高效且实用的人脸识别签到考勤系统。这个系统的核心在于其能够自动识别人员脸部,并以此完成签到与签退的操作,同时还能处理考勤时间的计算及数据存储。以下是关于这...

    人脸识别.rar_C#_OPENCV 人脸识别_c#人脸识别_perfectlyn4n_人脸识别

    总的来说,C#结合OpenCV为人脸识别提供了一种高效且灵活的实现方式。通过理解并实践上述步骤,你可以构建自己的人脸识别系统,无论是用于安全监控、身份验证还是其他应用场景。不过,值得注意的是,人脸识别技术涉及...

    OpenCV人脸识别官方数据集

    OpenCV(开源计算机视觉库)是计算机...总结来说,"OpenCV人脸识别官方数据集"是专门为OpenCV的人脸识别功能准备的训练资源,通过这个数据集,开发者可以训练和优化自己的人脸识别模型,实现高效且准确的人脸识别系统。

    python利用Opencv实现人脸识别功能

    本文实例为大家分享了python利用Opencv实现人脸识别功能的具体代码,供大家参考,具体内容如下 首先:需要在在自己本地安装opencv具体步骤可以问度娘 如果从事于开发中的话建议用第三方的人脸识别(推荐阿里) 1、...

    OpenCV人脸识别案例课程PDF.zip_OPENCV 人脸识别_opencv_opencv 识别_opencv案例_人脸识别

    OpenCV的dnn模块允许用户加载预训练的深度学习模型,如VGGFace或FaceNet,实现高精度的人脸识别。 8. **OpenCV实战案例**:本课程提供的PDF可能包含从基本的人脸检测开始,逐渐过渡到高级的识别技术,比如多人脸...

    安卓opencv实现多人检测,人脸检测,人脸识别,人脸对比

    综上所述,这个项目涵盖了OpenCV在Android上的核心应用,包括人脸检测、人脸识别和人脸对比,这些都是实现安全、高效的人脸识别系统的关键技术。开发者需要理解计算机视觉的基本原理,掌握OpenCV的API,并具备一定的...

    opencv人脸识别优化改进

    OpenCV(Open Source Computer Vision Library) 是一个开源的计算机视觉库,它包含了众多图像处理和计算机视觉的功能,广泛应用于图像分析、人脸识别、眼睛和嘴巴识别等任务。在本项目"opencv人脸识别优化改进"中,...

    基于opencv的人脸识别系统

    1. 源代码文件:包含了实现人脸识别功能的C++源代码,可能包括主程序和其他辅助函数。 2. 配置文件:可能包含OpenCV的配置信息,如级联分类器XML文件,用于人脸检测。 3. 示例图像:用于测试和演示人脸识别系统的...

Global site tag (gtag.js) - Google Analytics