如何开发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动态人脸识别的主要内容,如果未能解决你的问题,请参考以下文章