首先感谢虹软,是你们提供这么好的SDK支撑了我们的想象力!
这是一个用javav编写的可视化应用,用户通过自己的脸和计算机进行交互,计算机则通过萌萌女孩的语音和用户对话。
核心程序就是利用ArcFace2.0识别性别、年龄,但是为了获得正面脸,会根据ArcFace2.0的人脸3D角度、用语音提醒用户,这是一个的互动环节。最后,程序会幽默的、萌萌的告诉用户他的性别、年龄。
获取SDK 请戳这里
完整的项目源码、可执行程序,放在百度网盘:链接: https://pan.baidu.com/s/1eHF66l111S3Rs0VaS7v_LA
提取码: ffag
其中主要的3个java文件,代码如下:
=====================================
HowOldAreU.java
=====================================
package app;
import java.awt.EventQueue;
import javax.swing.JFrame;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.awt.BorderLayout;
import com.alibaba.fastjson.JSONArray;
import com.arcsoft.face.FaceEngine;
import com.github.sarxos.webcam.Webcam;
import com.github.sarxos.webcam.WebcamPanel;
import tools.MyFunc;
import javax.swing.JOptionPane;
/*这是一个用javav编写的可视化应用,用户通过自己的脸和计算机进行交互,计算机则通过萌萌女孩的语音和用户对话。
核心程序就是利用ArcFace2.0识别性别、年龄,但是为了获得正面脸,会根据ArcFace2.0的人脸3D角度、用语音提醒用户,这是一个的互动环节。
最后,程序会幽默的、萌萌的告诉用户他的性别、年龄。
作者:huanghua8080@126.com
*/
public class HowOldAreU {
//应用根目录
public static String fs = File.separator;
public final static String localPath = System.getProperty("user.dir")+fs;
public final static String soundDir = localPath+"sound"+fs;
//
public static Webcam camera = null;
private JFrame frame;
//
public static FaceEngine faceEngine = null;
@SuppressWarnings("rawtypes")
public static List FaceFeature = new ArrayList<Map<String, String>>();
public static JSONArray aryFFTime = new JSONArray();
public static JSONArray aryFFCnt = new JSONArray();
public static String lastTime = "2019-01-09 13:30:00";
public static int faceCnt = 0;
/**
* Launch the application.
*/
public static void main(String[] args) {
//判断程序是否已经运行
String s = localPath+"lockApp.txt";
//
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile(new File(s), "rws");
} catch (FileNotFoundException e1) {
JOptionPane.showMessageDialog(null, "独占文件时发生异常。"+e1, "错误",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
FileChannel fcin = raf.getChannel();
FileLock flin = null;
try {
flin = fcin.tryLock();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "锁文件时发生异常:"+e, "错误",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
if (flin == null) {
JOptionPane.showMessageDialog(null, "程序已在运行,不可重复。", "错误",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
s = "D:\\Dev\\ec_workspace\\cs1914age";
if(!s.equals(System.getProperty("user.dir"))) {
if(args.length == 0) {
JOptionPane.showMessageDialog(null, "没有入参,程序将终止。", "错误",JOptionPane.ERROR_MESSAGE);
System.exit(0);
return;
}
if(!"age".equals(MyFunc.strTrim(args[0]).toLowerCase())) {
JOptionPane.showMessageDialog(null, "入参错误,程序将终止。", "错误",JOptionPane.ERROR_MESSAGE);
System.exit(0);
return;
}
}
//获取摄像头
camera = Webcam.getDefault();
if (camera == null) {
JOptionPane.showMessageDialog(null, "摄像头获取失败。", "错误",JOptionPane.ERROR_MESSAGE);
return;
}
//初始化人脸引擎
s = HowOldAreUAs.initEngine();
if(!"".equals(s)) {
JOptionPane.showMessageDialog(null, s, "错误",JOptionPane.ERROR_MESSAGE);
System.exit(0);
return;
}
//启动窗体
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
HowOldAreU window = new HowOldAreU();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public HowOldAreU() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
//
frame = new JFrame();
frame.setTitle("猜年龄");
frame.setBounds(100, 100, 610, 370);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BorderLayout(0, 0));
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setUndecorated(true);//去边框
//摄像头加载到面板
WebcamPanel panel = new WebcamPanel(camera);
frame.getContentPane().add(panel, BorderLayout.CENTER);
//启动声音
HowOldAreUAs.playSound(100);
//线程(识别频率:毫秒)
Timer timerMain = new Timer();
timerMain.scheduleAtFixedRate(new TimerTask() {
public void run() {
if (camera != null) {
HowOldAreUAs.photo();
}
}
}, 0, 500);
}
}
====================================
HowOldAreUAs
====================================
package app;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.arcsoft.face.AgeInfo;
import com.arcsoft.face.Face3DAngle;
import com.ar