我们在开发中经常会有人脸识别的需求,今天就实现一个简单的人脸识别,调用的第三方SDK服务
0.先去注册服务
登录网址 虹软视觉开放平台—以免费人脸识别技术为核心的人脸识别算法开放平台
点击进行注册
进入之后新增我的服务
成功之后点击首页人脸识别添加服务
之后填写如下信息
下载SDK
之后的话去拉项目(项目现在如果有的话不需要加,没有的话如下)
在IDEA直接拉版本控制即可:GitHub - chengxy-nds/ArcSoftFaceDemo: ArcSoft基于虹软人脸识别2.0 Java服务端Demo代码,最完整的服务端Demo。
(1)把包放到lib文件夹
(2)加载包
在xml加入以下配置
- <dependency>
- <groupId>com.arcsoft.facegroupId>
- <artifactId>arcsoft-sdk-faceartifactId>
- <version>2.2.0.1version>
- <scope>systemscope>
- <systemPath>${basedir}/lib/arcsoft-sdk-face-2.2.0.1.jarsystemPath>
- dependency>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-maven-pluginartifactId>
- <configuration>
- <includeSystemScope>trueincludeSystemScope>
- <fork>truefork>
- configuration>
- plugin>
- plugins>
- build>
之后的话根据表生成sql脚本
官方提供了如图
我用的是
- 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就可以看到
如果出现Can't load library: d:/arcsoft_lib\libarcsoft_face.dll这个错误说明你缺少这个dll文件,添加即可
解压到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;
- }
- }
结果如下
这样就可以了