如何开发Java动态人脸识别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何开发Java动态人脸识别相关的知识,希望对你有一定的参考价值。

参考技术A 1.环境搭建
整个项目的结构图

2.编写DetectFaceDemo.java,代码如下:
[java] view plaincopy
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 plaincopy
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

Java 样本人脸识别

【中文标题】Java 样本人脸识别【英文标题】:Java Sample Face Recognition 【发布时间】:2013-12-22 20:41:11 【问题描述】:

我正在尝试开发一个系统,让某人可以为某人的脸拍照,并且在将图像发送到远程服务器后,客户端将能够读取有关此人的信息。

我之前曾尝试过 JavaCV,但是我发现它对于我的目的来说太不准确了。到目前为止,我已经尝试过这些 JavaCV 算法:

Fisher 人脸识别 特征人脸识别 LBPH 人脸识别

但是,我需要构建一个面部识别系统。这将是“独立的”,不会在 Android 上运行(例如)。我需要一些帮助来选择正确的 java sdk/库(以及是否可以避免使用商业解决方案,例如“Cybula”、“NeuroTechnology”和“Sensible Vision”)。

任何帮助将不胜感激!

谢谢,

马特

【问题讨论】:

Matlab 有什么问题? 好主意,但我希望使用原生 Java 或库。 Java 是 Java 运行在 android(基于 linux)或服务器(基于 linux 或 windows 或 solaris 或任何其他)上都没有关系 【参考方案1】:

人脸识别只是该过程的最后一步。要解决这个问题,首先要在图片中找到人脸(人脸检测),然后在检测到的人脸中,根据图片质量提取人脸特征,使用的灯光/闪光灯、面部/侧面、...(特征提取)。

流程链:

人脸检测 -> 特征提取 -> 人脸识别

每个主题可能有一百种出版物。由你来组装。

另外值得注意的是:这不是那种只有一个全球最佳解决方案的问题。选择的方法对于您要解决的一个特殊问题至多是最优的。

您可能要考虑的其他关键字:

人脸追踪 姿态估计 面部特征跟踪 情绪识别 整体模板 特征几何

另外值得注意的是:大多数声称他们在现实中进行人脸识别的 SDK 只进行人脸检测(有时(很少)进行特征提取)。要进行人脸识别,您需要一个包含已知人脸(人脸特征)的庞大数据库,而大多数“供应商”当然没有这些数据库(虽然不是在谈论所有这些机构...LOL)。

【讨论】:

【参考方案2】:

试用 Face++ API for Java,见这里。Face++ SDK for Java,可用于 Android 项目。

建议Face++免费API易于使用。享受它:)

【讨论】:

以上是关于如何开发Java动态人脸识别的主要内容,如果未能解决你的问题,请参考以下文章

刷脸背后:人脸检测人脸识别人脸检索_张重生资料整理

人脸识别人脸识别损失函数学习笔记

识别人脸face_recognition实现

Apple Vision Framework 识别人脸

android人脸识别活体识别人脸动作活体静默活体Demo源码实现讲解

如何使用地标点识别人脸?