EigenFace 实现:在 Java 中使用 OpenCV3
Posted
技术标签:
【中文标题】EigenFace 实现:在 Java 中使用 OpenCV3【英文标题】:EigenFace implementation: in Java using OpenCV3 【发布时间】:2016-02-02 09:51:46 【问题描述】:我想通过网络摄像头实时识别人脸。我一直在努力通过网络摄像头检测人脸,但是在 Java (Netbeans) 中实现特征人脸算法时遇到了麻烦。
我已经使用以下代码实现了人脸检测:-
private DaemonThread myThread = null;
int count = 0;
VideoCapture webSource = null;
Mat frame = new Mat();
MatOfByte mem = new MatOfByte();
CascadeClassifier faceDetector = new CascadeClassifier(ScannerGUI.class.getResource("haarcascade_frontalface_alt.xml").getPath().substring(1));
MatOfRect faceDetections = new MatOfRect();
class DaemonThread implements Runnable
protected volatile boolean runnable = false;
@Override
public void run()
synchronized(this)
while(runnable)
if(webSource.grab())
try
webSource.retrieve(frame);
//Highgui.imencode(".bmp", frame, mem);
Graphics g=jPanel1.getGraphics();
faceDetector.detectMultiScale(frame, faceDetections);
for (Rect rect : faceDetections.toArray())
Imgproc.rectangle(frame, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 255, 0),2);
Imgcodecs.imencode(".bmp", frame, mem);
Image im = ImageIO.read(new ByteArrayInputStream(mem.toArray()));
BufferedImage buff = (BufferedImage) im;
if (g.drawImage(buff, 0, 0, getWidth(), getHeight() -150 , 0, 0, buff.getWidth(), buff.getHeight(), null))
if(runnable == false)
System.out.println("Going to wait()");
this.wait();
catch(Exception ex)
System.out.println("Error");
现在我想先将检测到的人脸保存在特征人脸中,然后再识别这张人脸。
有人可以帮我解决这个问题吗?我在网上彻底搜索了 Java 中的 Eigen face 实现,但找不到任何有用的东西。
请帮助我解决这个问题,因为我是 OpenCV 的新手,也是我的大学项目。
【问题讨论】:
OpenCV 已经提供了eigenface implementation。我不知道java包装器是否支持它,但你总是可以调用本机C++代码。 一切尽在docs 【参考方案1】:要使用 contrib 模块(包含 Java 的 org.opencv.face 包)从源代码构建 OpenCV,请参阅 this question and answer。
使用 contrib 模块构建 JAR 后,您可以像这样实例化 EigenFaceRecognizer:
FaceRecognizer 模型 = org.opencv.face.Face.createEigenFaceRecognizer();
【讨论】:
以上是关于EigenFace 实现:在 Java 中使用 OpenCV3的主要内容,如果未能解决你的问题,请参考以下文章
如何修改scikit-learn的eigenface人脸识别示例