java版 利用人脸识别猜年龄 基于ArcFace2.0的 demo

首先感谢虹软,是你们提供这么好的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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值