package com.vvyun.camera;
import com.github.sarxos.webcam.Webcam;
import com.github.sarxos.webcam.WebcamPanel;
import com.github.sarxos.webcam.WebcamResolution;
import com.vvyun.config.SettingConfig;
import com.vvyun.thread.FaceDetectionRunable;
import com.vvyun.thread.FaceIdenticalRunable;
import com.vvyun.ui.DrawPanel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JLabel;
/**
* 人脸匹配模块
*
* @author wangyunfei
*/
public class FaceIdentical {
public static void main(String[] args) {
// 模板图片集
List<String> templates = new ArrayList<>();
// 初始化摄像机
Webcam webcam = Webcam.getDefault();
webcam.setViewSize(WebcamResolution.VGA.getSize());
WebcamPanel panel = new WebcamPanel(webcam);
panel.setFPSDisplayed(true);
panel.setDisplayDebugInfo(true);
panel.setImageSizeDisplayed(true);
panel.setMirrored(true);
JFrame window = new JFrame("人脸匹配测试");
JLabel lab_value = new JLabel("相似度为:");
window.add(panel, BorderLayout.CENTER);
window.add(lab_value, BorderLayout.SOUTH);
// ---------------------------------------------------------
DrawPanel drawPanel = new DrawPanel();
drawPanel.setBackground(Color.white);
drawPanel.setOpaque(false);
drawPanel.setPreferredSize(WebcamResolution.VGA.getSize());
panel.add(drawPanel);
// ---------------------------------------------------------
window.setResizable(true);
window.pack();
window.setVisible(true);
// 加载模板文件
File file = new File(SettingConfig.TEMPBASEPATH);
if (file.isFile() || !file.exists()) {
lab_value.setText("请先保存模板文件");
return;
}
File[] files = file.listFiles();
assert files != null;
for (File fielname : files) {
templates.add(fielname.getName());
}
// 加载模板文件 end
System.out.println("模板文件有:" + templates);
// 人脸检测进程
Thread threadFaceDetection = new Thread(new FaceDetectionRunable(drawPanel, webcam, panel, window));
// 人脸匹配进程
Thread threadFaceRecface = new Thread(new FaceIdenticalRunable(webcam, window, templates, lab_value));
window.addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent e) {
// 设置人脸检测|识别为后台进程
threadFaceDetection.setDaemon(true);
threadFaceRecface.setDaemon(true);
// 开启人脸检测|识别进程
threadFaceDetection.start();
threadFaceRecface.start();
}
@Override
public void windowClosed(WindowEvent e) {
// 关闭窗口所有进程
// window.dispose();
}
@Override
public void windowClosing(WindowEvent e) {
// 关闭匹配|检测进程
threadFaceRecface.interrupt();
threadFaceDetection.interrupt();
// 关闭摄像头进程
panel.webcamClosed(null);
webcam.close();
// 关闭窗口所有进程
window.dispose();
}
});
// 添加鼠标焦点事件
// window.addWindowFocusListener(new WindowAdapter() {
//
// @Override
// public void windowLostFocus(WindowEvent e) {
// panel.pause();
// }
//
// @Override
// public void windowGainedFocus(WindowEvent e) {
// panel.resume();
// }
// });
}
}