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


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

    0.先去注册服务

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

    93d98274195049d3acbde2c300269103.png

    点击进行注册 

    进入之后新增我的服务

    0bc788a0096c4f25b83ceaa6d9adfd39.png

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

    之后填写如下信息

    967f960e7ade4db9bfdf38d9243b87f1.png

     下载SDK

    b70b3c7ce4f845c4ba9e114f743c7029.png

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

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

    (1)把包放到lib文件夹

    aa0d43d450ef4cf7b9940732e3f3a8d0.png

    (2)加载包

    在xml加入以下配置

    1. <dependency>
    2. <groupId>com.arcsoft.facegroupId>
    3. <artifactId>arcsoft-sdk-faceartifactId>
    4. <version>2.2.0.1version>
    5. <scope>systemscope>
    6. <systemPath>${basedir}/lib/arcsoft-sdk-face-2.2.0.1.jarsystemPath>
    7. dependency>
    8. <build>
    9. <plugins>
    10. <plugin>
    11. <groupId>org.springframework.bootgroupId>
    12. <artifactId>spring-boot-maven-pluginartifactId>
    13. <configuration>
    14. <includeSystemScope>trueincludeSystemScope>
    15. <fork>truefork>
    16. configuration>
    17. plugin>
    18. plugins>
    19. build>

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

    官方提供了如图

    9cfd2d1f07be4e3da49eee36bb24ea76.png

    我用的是 

    1. SET NAMES utf8mb4;
    2. SET FOREIGN_KEY_CHECKS = 0;
    3. -- ----------------------------
    4. -- Table structure for user_face_info
    5. -- ----------------------------
    6. DROP TABLE IF EXISTS `user_face_info`;
    7. CREATE TABLE `user_face_info` (
    8. `id` int(10) NOT NULL,
    9. `group_id` int(10) NULL DEFAULT NULL,
    10. `gace_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
    11. `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
    12. `age` int(10) NULL DEFAULT NULL,
    13. `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
    14. `gender` smallint(10) NULL DEFAULT NULL,
    15. `phone_number` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
    16. `face_feature` blob NULL,
    17. `create_time` timestamp NULL DEFAULT NULL,
    18. `update_time` timestamp NULL DEFAULT NULL,
    19. `fpath` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
    20. PRIMARY KEY (`id`) USING BTREE
    21. ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact;
    22. -- ----------------------------
    23. -- Records of user_face_info
    24. -- ----------------------------
    25. SET FOREIGN_KEY_CHECKS = 1;

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

    点击启动类运行

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

    fea02c1b7db04d7e9afcdeae3d2932c3.png

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

    0334ae8a7a504ed793b9e5449a77389d.png

    解压到D盘 

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

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

    1. public class CustomFingerprintComparison {
    2. // 模拟指纹模板
    3. private static final byte[] fingerprintTemplate1 = new byte[] { 1, 2, 3, 4, 5 ,1};
    4. private static final byte[] fingerprintTemplate2 = new byte[] { 5, 24, 34, 6, 5 ,3 }; // 改变一个像素值
    5. // 设置比对阈值
    6. private static final int threshold = 3;
    7. public static void main(String[] args) {
    8. // 模拟指纹比对
    9. boolean isMatch = matchFingerprints(fingerprintTemplate1, fingerprintTemplate2);
    10. double similarity = calculateSimilarity(fingerprintTemplate1, fingerprintTemplate2);
    11. if (isMatch) {
    12. System.out.print("指纹匹配,认证通过 ");
    13. } else {
    14. System.out.print("指纹不匹配,认证失败 ");
    15. }
    16. System.out.println("指纹相似度: " + similarity + "%");
    17. }
    18. // 模拟指纹比对函数
    19. private static boolean matchFingerprints(byte[] template1, byte[] template2) {
    20. // 比对两个指纹模板,计算差异值
    21. int difference = calculateDifference(template1, template2);
    22. // 如果差异值低于阈值,认为指纹匹配
    23. return difference <= threshold;
    24. }
    25. // 计算指纹相似度函数
    26. private static double calculateSimilarity(byte[] template1, byte[] template2) {
    27. // 计算相似度百分比
    28. int difference = calculateDifference(template1, template2);
    29. int maxPossibleDifference = template1.length * 255; // 假设最大可能的差异值
    30. int similarityPercentage = ((maxPossibleDifference - difference) * 100) / maxPossibleDifference;
    31. return similarityPercentage;
    32. }
    33. // 模拟计算差异值函数
    34. private static int calculateDifference(byte[] template1, byte[] template2) {
    35. // 模拟计算两个指纹模板的差异值,实际情况下需要使用专业库或API
    36. int difference = 0;
    37. for (int i = 0; i < template1.length; i++) {
    38. difference += Math.abs(template1[i] - template2[i]);
    39. }
    40. return difference;
    41. }
    42. }

    结果如下

    9ef4c41af7c54b0481711188d91d71d7.png

    这样就可以了

  • 相关阅读:
    python系列:FastAPI学习-29 uvicorn 使用 log_config 参数设置 logger 日志格式
    Vue项目中使用require的方式导入图片资源,本地运行无法打开的问题
    初识Java--Java数据类型
    Spring动态修改bean属性的value
    如何使用C++ 在Word文档中创建列表
    立体多层玫瑰绘图源码__玫瑰花python 绘图源码集锦
    70. 爬楼梯进阶版
    FTP服务器移植到Linux开发板
    【计算机网络】IO多路转接之poll
    spinal HDL - 10 - 状态机
  • 原文地址:https://blog.csdn.net/m0_69156017/article/details/134071465