Java实现人脸识别和指纹认证

我们在开发中经常会有人脸识别的需求,今天就实现一个简单的人脸识别,调用的第三方SDK服务

0.先去注册服务

登录网址 虹软视觉开放平台—以免费人脸识别技术为核心的人脸识别算法开放平台

Java实现人脸识别和指纹认证_第1张图片

点击进行注册 

进入之后新增我的服务

Java实现人脸识别和指纹认证_第2张图片

成功之后点击首页人脸识别添加服务 

之后填写如下信息

Java实现人脸识别和指纹认证_第3张图片

 下载SDK

Java实现人脸识别和指纹认证_第4张图片

 之后的话去拉项目(项目现在如果有的话不需要加,没有的话如下)

在IDEA直接拉版本控制即可:GitHub - chengxy-nds/ArcSoftFaceDemo: ArcSoft基于虹软人脸识别2.0 Java服务端Demo代码,最完整的服务端Demo。

(1)把包放到lib文件夹

Java实现人脸识别和指纹认证_第5张图片

(2)加载包

在xml加入以下配置

       
            com.arcsoft.face
            arcsoft-sdk-face
            2.2.0.1
            system
            ${basedir}/lib/arcsoft-sdk-face-2.2.0.1.jar
        

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    true
                    true
                
            
        
    

 之后的话根据表生成sql脚本

官方提供了如图

Java实现人脸识别和指纹认证_第6张图片

我用的是 

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user_face_info
-- ----------------------------
DROP TABLE IF EXISTS `user_face_info`;
CREATE TABLE `user_face_info`  (
  `id` int(10) NOT NULL,
  `group_id` int(10) NULL DEFAULT NULL,
  `gace_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `age` int(10) NULL DEFAULT NULL,
  `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `gender` smallint(10) NULL DEFAULT NULL,
  `phone_number` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `face_feature` blob NULL,
  `create_time` timestamp NULL DEFAULT NULL,
  `update_time` timestamp NULL DEFAULT NULL,
  `fpath` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of user_face_info
-- ----------------------------

SET FOREIGN_KEY_CHECKS = 1;

执行生成表之后再项目application.properties修改数据库,用户名和密码

点击启动类运行

之后访问端口http://127.0.0.1:8089/demo就可以看到

Java实现人脸识别和指纹认证_第7张图片

如果出现Can't load library: d:/arcsoft_lib\libarcsoft_face.dll这个错误说明你缺少这个dll文件,添加即可

Java实现人脸识别和指纹认证_第8张图片

解压到D盘 

有两种一种是摄像头识别,另一种事照片识别,这样就可以实现人脸识别(开发环境使用第三方SDK比较方便)

接下来是指纹认证,这边只写了一个简单的模版实现指纹认证,如下

public class CustomFingerprintComparison {

    // 模拟指纹模板
    private static final byte[] fingerprintTemplate1 = new byte[] { 1, 2, 3, 4, 5 ,1};
    private static final byte[] fingerprintTemplate2 = new byte[] { 5, 24, 34, 6, 5 ,3 }; // 改变一个像素值

    // 设置比对阈值
    private static final int threshold = 3;

    public static void main(String[] args) {
        // 模拟指纹比对
        boolean isMatch = matchFingerprints(fingerprintTemplate1, fingerprintTemplate2);
        double similarity = calculateSimilarity(fingerprintTemplate1, fingerprintTemplate2);

        if (isMatch) {
            System.out.print("指纹匹配,认证通过 ");
        } else {
            System.out.print("指纹不匹配,认证失败 ");
        }

        System.out.println("指纹相似度: " + similarity + "%");
    }

    // 模拟指纹比对函数
    private static boolean matchFingerprints(byte[] template1, byte[] template2) {
        // 比对两个指纹模板,计算差异值
        int difference = calculateDifference(template1, template2);

        // 如果差异值低于阈值,认为指纹匹配
        return difference <= threshold;
    }

    // 计算指纹相似度函数
    private static double calculateSimilarity(byte[] template1, byte[] template2) {
        // 计算相似度百分比
        int difference = calculateDifference(template1, template2);
        int maxPossibleDifference = template1.length * 255; // 假设最大可能的差异值
        int similarityPercentage = ((maxPossibleDifference - difference) * 100) / maxPossibleDifference;
        return similarityPercentage;
    }

    // 模拟计算差异值函数
    private static int calculateDifference(byte[] template1, byte[] template2) {
        // 模拟计算两个指纹模板的差异值,实际情况下需要使用专业库或API
        int difference = 0;
        for (int i = 0; i < template1.length; i++) {
            difference += Math.abs(template1[i] - template2[i]);
        }
        return difference;
    }
}

结果如下

9ef4c41af7c54b0481711188d91d71d7.png

这样就可以了

你可能感兴趣的:(人工智能,java,前端,spring,boot,maven,servlet,lua)