本例程是识别图片中的人脸,并画出识别出的人脸的位置。在网上找了很久,用java实现人脸识别技术很难找到。多是依靠JNI 调用OpenCV本地方法实现的。那么这里先来说说这种方法:
先认识一下JNI 和OpenCV
JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java 1.1开始,Java Native Interface (JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。
OpenCV是Intel公司支持的开源计算机视觉库。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。
将源代码中的dll文件(cv097.dll,cxcore097.dll,highgui097.dll,JNI2OpenCV.dll)放入C:\WINDOWS\system32目录下。
现在开始上源码:
public class JNIOpenCV{
public JNIOpenCV() {}
static{
System.out.println("开始加载JNI2OpenCV.dll");
System.loadLibrary("JNI2OpenCV");
System.out.println("加载完成");
}
// 加载动态链接库
public native int[] detectFace(int minFaceWidth, int minFaceHeight, String cascade, String filename);
// 声明本地方法
}
public class FaceDetection {
private JNIOpenCV myJNIOpenCV;
public FaceDetection(String intputFileName,String outputFileName) {
myJNIOpenCV = new JNIOpenCV();
String filename = intputFileName;
String outputFilename = outputFileName;
String cascade = "F:\\detectface\\xml\\haarcascade_frontalface_alt2.xml";
int[] detectedFaces = myJNIOpenCV.detectFace(40, 40, cascade, filename);
int numFaces = detectedFaces.length / 4;
if(numFaces > 0){
System.out.println("有脸!有 "+ numFaces + " 张脸");
}else{
System.out.println("没有脸!");
}
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(filename,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("F:\\detectface\\image\\tt.jpg","F:\\detectface\\image\\tt2.jpg");
}
}
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;
}
}
注意:以上代码不能放在包下面,否则会运行不成功的。(原因是dll编译的时候没有带上包,如需包还需重新编译dll)。
分享到:
相关推荐
在实际应用中,Java人脸识别系统可能涉及到以下步骤: 1. 图像预处理:去除噪声,调整大小,灰度化等。 2. 人脸检测:使用Haar特征或者HOG等方法检测图像中的人脸区域。 3. 特征提取:使用上述提到的LBPH、EigenFace...
Java人脸识别源码是一种基于计算机视觉技术的应用,它利用了特征脸识别原理,使得程序能够检测、识别人脸,无论是在实时的摄像头流中还是在静态的图像或视频文件中。这个项目采用JavaCV库,一个Java接口,为OpenCV等...
首先,需要在开发环境中配置虹软人脸识别的SDK,这可以通过下载并安装虹软人脸识别的SDK完成。...总之,Java调用虹软人脸识别是一个简单而又强大的过程,可以为我们的应用程序提供更加智能、便捷的人脸识别功能。
Java人脸识别源代码是一种基于计算机视觉技术的实现,用于在图像或视频流中检测、识别和追踪人脸。在Java中,这种技术通常利用OpenCV、DeepLearning4J等库来完成。OpenCV是一个开源的计算机视觉库,包含了各种图像...
可以参考提供的链接(http://blog.csdn.net/weixin_39549656/article/details/79262895)中的教程,学习如何在实际项目中整合这些概念,构建一个完整的Java人脸识别系统。 总的来说,Java百度人脸识别是一个结合了...
总的来说,通过学习和实践这个"java调用人脸识别接口demo",你可以掌握如何在Java项目中集成和使用人脸识别技术,为你的应用增加强大的视觉功能。无论是安全认证、用户界面优化还是数据分析,这些知识都将对你的编程...
在Java中实现人脸识别是一项涉及深度学习和计算机视觉技术的任务。OpenCV是一个强大的开源库,它提供了丰富的功能,包括图像处理、特征检测以及人脸识别。在这个小demo中,我们主要会探讨如何利用OpenCV库来实现这一...
这个名为"src.rar_SRC 人脸识别_java 人脸识别_java人脸识别_人脸识别_人脸识别Java"的压缩包文件,显然包含了一个使用Java编程语言实现的人脸识别系统。Java作为一种跨平台、面向对象的语言,因其稳定性和丰富的库...
在本文中,我们将深入探讨“百度人脸识别Windows Java离线SDK”的相关知识点,这是一款专为Windows平台设计的、基于Java的计算机视觉库,主要用于实现高效、精准的人脸识别功能。在人工智能领域,尤其是在计算机视觉...
在IT行业中,腾讯AI提供了强大的身份验证服务,其中包括身份证识别和人脸识别技术。这些技术广泛应用于各种场景,如在线注册、实名认证、金融交易安全等。以下是对标题和描述中涉及知识点的详细解释: 1. **腾讯AI...
在Java中实现人脸识别是一项复杂而有趣的任务,涉及到计算机视觉(Computer Vision)领域的知识,特别是OpenCV库的应用。OpenCV是一个开源的计算机视觉库,它包含了众多图像处理和计算机视觉的算法,广泛应用于图像...
总结,这个"java人脸识别"项目利用OpenCV在Android平台上实现了人脸识别功能,尽管已验证成功,但还需持续优化以提高准确率。通过理解OpenCV的工作原理、人脸检测和识别的步骤、以及在移动平台上的性能优化,我们...
总结来说,"java人脸识别例程"涵盖了计算机视觉、机器学习和Java编程等多个领域的知识,通过这个例程,开发者可以学习到如何在Java环境中集成和应用人脸识别技术,以及如何处理与之相关的数据和性能问题。
在本项目"基于百度API实现的人脸识别demo-Java前后端分离实现"中,开发者采用百度的人脸识别技术,结合Java编程语言,构建了一个完整的、前后端分离的应用系统。这个系统涵盖了人脸注册、人脸登录、人脸检测、以及...
通过以上步骤,我们可以构建一个基于Java和虹软人脸识别的系统,实现在后端高效、准确地检测上传照片中的人脸。这种技术在现代数字服务中有着广泛的应用,如在线身份验证、社交平台、门禁系统等。不过,随着技术的...
在Android平台上实现人脸识别和人脸匹配是一项复杂而有趣的任务,它涉及到计算机视觉和机器学习领域的技术。在这个项目中,开发者使用了OpenCV和JavaCV库来完成这一目标。OpenCV(Open Source Computer Vision ...
通过这个项目,我们可以深入学习如何在Java环境中搭建和应用人脸识别系统。 首先,人脸识别基于深度学习模型,如卷积神经网络(CNN),这些模型能够从图像中提取特征,然后进行人脸比对。Java中虽然不像Python那样...