虹软人脸识别-SpringBoot集成

本文介绍如何将虹软人脸识别SDK与SpringBoot框架整合,提供从项目结构、依赖配置到核心代码的详细说明,包括人脸检测、特征提取、比对等功能,适合Java初学者和希望在Web中应用人脸识别的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

人工智能时代的到来,相信大家已耳濡目染,虹软免费离线开放的人脸识别 SDK,正推动着全行业进入刷脸时代。为了方便开发者接入,虹软提供了多种语言,多种平台的人脸识别SDK的支持,使用场景广泛。产品主要功能有:人脸检测、追踪、特征提取、特征比对、属性检测,活体检测,图像质量检测等。此外,虹软提供的是基于本地算法特征的离线识别SDK,提供全平台的离线支持。
作为一名刚接触人脸识别的初学者,对于虹软极为简洁,方便的SDK接入充满了好奇,想试图应用到web领域,而如今Java最火的web框架非SpringBoot莫属。但对于Java语言,虹软官网暂时还没有提供基于SpringBoot的集成Demo,因此便尝试写个将Java的人脸识别SDK和SpringBoot进行集成的样例,并写此文章进行记录,向广大初学开发者作分享。
此Demo采用Maven作为项目管理工具,并基于Windows x64,Java 8 以及 SpringBoot 2.1.6,SDK是基于虹软人脸识别 SDK3.0。

二、项目结构

SDK依赖Jar包 可从虹软官网获取 点击”免费获取” , ”登录“后 选择 具体“平台/版本/语言“ 获取。
在这里插入图片描述

三、项目依赖

​ pom.xml 依赖包括

  • SpringBoot-Web依赖
  • SpringBoot-Devtools热部署依赖
  • SpringBoot-Freemarker依赖,
  • Hutool,Fastjson, Lombok,Commons-pool2,Guava
  • 虹软人脸识别SDK依赖Jar包
  • SpringBoot-Maven插件
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.6.1</version>
</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.59</version>
</dependency>

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.0</version>
</dependency>

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>26.0-jre</version>
</dependency>

<dependency>
<groupId>com.arcsoft.face</groupId>
<artifactId>arcsoft-sdk-face</artifactId>
<version>3.0.0.0</version>
<scope>system</scope>
<systemPath>${
   basedir}/lib/arcsoft-sdk-face-3.0.0.0.jar</systemPath>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
四、项目流程

在这里插入图片描述

五、效果展示

Application启动类 右击 选择 Run Application 即可运行程序,待程序启动完成后,访问 http://127.0.0.1:8089/
在这里插入图片描述

六、核心代码说明
1. application.properties 配置说明
#上传文件 最大值限制
spring.servlet.multipart.max-file-size=100MB
#请求 最大值限制
spring.servlet.multipart.max-request-size=100MB
#请求头 最大值限制
server.max-http-header-size=2MB
#请求体 最大值限制
server.tomcat.max-http-post-size=50MB
#项目访问端口
server.port=8089
#人脸识别引擎库路径
config.arcface-sdk.sdk-lib-path=d:/arcsoft_lib
#sdk appId
config.arcface-sdk.app-id=9iSfMeAhj********************Kes2TpSrd
#sdk sdkKey
config.arcface-sdk.sdk-key=BuRTH3hGs9*******************yP9xu6fiFG7G
#人脸识别 引擎池大小
config.arcface-sdk.detect-pool-size=5
#人脸比对 引擎池大小
config.arcface-sdk.compare-pool-size=5
#关闭freemarker模板引擎缓存
spring.freemarker.cache=false
#模板引擎更新延迟设置为0
spring.freemarker.settings.template_update_delay=0

​ 其中 人脸识别引擎库,APP_ID,SDK_KEY 可通过虹软官网”开发者中心“,进行 “登录”后 在“我的应用“中进行获取。

2. 项目实体类说明

1)UserRamCache 人脸信息存储类

public class UserRamCache {
   
private static  ConcurrentHashMap<String, UserInfo> userInfoMap = new ConcurrentHashMap<>();
public static void addUser(UserInfo userInfo) {
   
        userInfoMap.put(userInfo.getFaceId(), userInfo);
}
public static void removeUser(String faceId) {
   
        userInfoMap.remove(faceId);
}
public static List<UserInfo> getUserList() {
   
        List<UserInfo> userInfoList = Lists.newLinkedList();
for (UserInfo value : userInfoMap.values()) {
   
            userInfoList.add(value);
}
return userInfoList;
}
@Data
public static class UserInfo {
   
//人脸Id
private String faceId;
//人脸名称
private String name;
//人脸特征值
private byte[] faceFeature;
}
}

此类拥有一个 UserInfo的内部类,用于封装人脸信息,userInfoMap以人脸名称为key,UserInfo对象为Value 存储 并提供相应增/删/查功能的方法。
2)ProcessInfo 人脸检测实体类

public class ProcessInfo {
   
//年龄
private int age;
//性别
private int gender;
//是否活体
private int liveness;<
### 人脸比对功能在Spring Boot中的集成 为了实现的人脸比对功能,在Spring Boot项目中需要完成几个主要部分的工作。这包括初始化环境、加载必要的库文件以及编写用于处理图像并执行面部识别的核心逻辑。 #### 初始化开发环境 首先,需前往官方网站注册账户,并获取适用于Windows平台(取决于服务器操作系统)的离线SDK包[^2]。安装过程中,请注意保存好授权密钥,因为后续会用到它来激活API接口。 对于依赖管理方面,假设使用Maven构建工具,则应在`pom.xml`里加入如下配置项以便引入所需JAR包: ```xml <dependency> <groupId>com.arcsoft</groupId> <artifactId>arcface-lite-java</artifactId> <version>${latest.version}</version> <!-- 替换成实际版本号 --> </dependency> ``` 请注意`${latest.version}`应替换为最新稳定版的具体数值;如果官方并未提供通过Maven仓库分发的形式,则可能要手动将本地下载好的jar添加至工程目录下并通过IDE设置纳入编译路径。 #### 加载动态链接库 由于ArcFace Lite SDK是以C++为核心实现的跨语言支持组件集合,因此除了上述提到的Java封装层外还需要额外准备一些原生二进制文件。这些DLL/SO通常位于解压后的根目录下的特定子文件夹内(如`lib/windows/x64`)。确保它们能够被正确找到的一种方法是在启动应用程序之前将其所在位置追加到系统的PATH变量中,或者直接指定绝对路径作为参数传递给JNI函数调用时使用。 另外一种更为推荐的做法是利用操作系统的特性自动定位所需的共享对象——即把所有必需的.so/.dll拷贝到项目的resources/static或其他合适的地方,再借助于静态代码块提前加载进来: ```java static { System.loadLibrary("arcsoft_face"); } ``` 这段声明应当放置在一个公共类定义内部最前面的位置上,从而保证每次运行程序之初就能顺利完成资源映射工作而不至于影响正常业务流程。 #### 编写核心业务逻辑 下面给出一段简单的示例代码片段展示怎样接收来自前端传输过来的数据流并对其中携带的画面进行分析处理: ```java @RestController @RequestMapping("/api/v1/facerecog") public class FaceRecognitionController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @PostMapping(value = "/compare", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<Map<String,Object>> compareFaces(@RequestBody Map<String,String> payload){ String imgBase64StrA=payload.getOrDefault("imageDataA",""); String imgBase64StrB=payload.getOrDefault("imageDataB",""); try{ byte[] decodedBytesImgA= Base64.getMimeDecoder().decode(imgBase64StrA); BufferedImage bufferedImageA = ImageIO.read(new ByteArrayInputStream(decodedBytesImgA)); byte[] decodedBytesImgB= Base64.getMimeDecoder().decode(imgBase64StrB); BufferedImage bufferedImageB = ImageIO.read(new ByteArrayInputStream(decodedBytesImgB)); // 进一步转换BufferedImage为适合输入给人脸检测模型使用的格式... // 此处省略具体细节... float similarityScore = ArcFace.compare(bufferedImageA ,bufferedImageB); HashMap<String, Object> resultMap=new HashMap<>(); resultMap.put("similarity_score",similarityScore); return new ResponseEntity<>(resultMap,HttpStatus.OK); }catch(Exception e){ logger.error(e.getMessage(),e); throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,"Error occurred while processing images."); } } } ``` 此段落描述了一个RESTful API端点的设计思路,允许客户端上传两张待比较的照片(以Base64字符串形式),之后交由后台服务解析成标准图片格式供下一步骤运算之用。最后计算得到相似度得分并反馈回去告知匹配程度如何。 需要注意的是这里仅展示了简化版伪代码结构框架,真实场景下还需考虑更多边界情况比如异常捕获机制优化、性能瓶颈排查等等因素的影响。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值