IIWAB Spring Boot 项目集成 CompreFace 实现人脸标识 - IIWAB

Spring Boot 项目集成 CompreFace 实现人脸标识

IIWAB 2月前 ⋅ 140 阅读

Spring Boot 项目集成 CompreFace 实现人脸标识

在当今数字化时代,人脸识别技术应用越来越广泛。CompreFace 是一款强大的开源人脸识别服务,它提供了丰富的功能,如人脸检测、识别、验证等,并且能够轻松集成到各种系统中。本文将详细介绍如何在 Spring Boot 项目中集成 CompreFace,实现上传图片并标识其中人脸的功能,同时也会讲解 CompreFace 的部署过程。

一、CompreFace 简介

CompreFace 是一项免费开源的人脸识别服务,无需事先掌握机器学习技能,即可轻松集成到任何系统中。它基于先进的机器学习方法和库,如 FaceNet 和 InsightFace,为开发者提供了便捷的人脸识别解决方案。该系统支持在 CPU 和 GPU 上运行,并且提供了 REST API,方便与各种后端框架集成。其功能包括但不限于:

人脸检测:在图像中快速准确地检测出人脸的位置。

人脸识别:识别出图像中的人脸身份。

人脸验证:验证两张人脸图像是否属于同一人。

地标检测:检测人脸的关键地标点。

口罩检测:判断人脸是否佩戴口罩。

头部姿势检测:检测人脸的头部姿势。

年龄和性别识别:推测人脸的年龄和性别。

二、CompreFace 部署

CompreFace 可以在大多数支持 x86 处理器的计算机上运行,部署环境需要装有 Docker 和 Docker Compose(或 Docker Desktop)。以下是在不同操作系统上的部署步骤:

(一)Linux、macOS 环境部署

安装 Docker 和 Docker Compose:按照官方文档的指引,在 Linux 或 macOS 系统上安装 Docker 和 Docker Compose。这是部署 CompreFace 的基础环境。

下载 CompreFace:使用 wget 命令下载 CompreFace 的压缩包。例如:

wget -q -O tmp.zip 'https://github.com/exadel-inc/compreface/releases/download/v1.2.0/compreface\_1.2.0.zip'

下载完成后,解压该压缩包,并删除临时的压缩文件:

unzip tmp.zip && rm tmp.zip

启动服务:进入解压后的目录,运行以下命令启动 CompreFace 服务:

docker-compose up -d

这会在后台启动 CompreFace 相关的容器。

4. 访问服务:在浏览器中打开http://localhost:8000/login,即可访问 CompreFace 的登录界面。默认用户名和密码通常可以在文档或相关配置中找到。

(二)Windows 环境部署

安装 Docker Desktop:从 Docker 官方网站下载并安装 Docker Desktop for Windows,安装过程中按照提示进行操作。

下载 CompreFace:从 CompreFace 的GitHub Releases 页面下载最新版本的压缩包。

解压缩并启动服务:打开命令提示符(在 Windows 搜索栏中输入 “cmd”),进入解压缩 CompreFace 压缩包的文件夹。然后运行以下命令启动服务:

docker-compose up -d

访问服务:同样在浏览器中打开http://localhost:8000/login,登录 CompreFace 服务。

三、Spring Boot 项目集成 CompreFace

完成 CompreFace 的部署后,接下来将其集成到 Spring Boot 项目中。这里我们主要实现一个上传图片并标识人脸的接口。

(一)创建 Spring Boot 项目

使用 Spring Initializr:打开Spring Initializr,选择 Maven 或 Gradle 构建工具,语言选择 Java。在依赖项中添加 “Spring Web” 依赖,这将帮助我们创建 RESTful 接口。然后点击 “Generate” 生成项目压缩包,解压到本地目录。

项目结构:解压后的项目结构通常包含src/main/java(存放 Java 代码)、src/main/resources(存放配置文件)、src/test/java(存放测试代码)等目录。

(二)添加依赖

pom.xml文件中添加以下依赖,用于与 CompreFace 的 REST API 进行交互:

<dependencies>

    <!-- Spring Web依赖 -->

    <dependency>

        <groupId>org.springframework.boot\</groupId>

        <artifactId>spring-boot-starter-web\</artifactId>

    </dependency>

    <!-- 用于HTTP请求的依赖,这里以OkHttp为例 -->

    <dependency>

        <groupId>com.squareup.okhttp3\</groupId>

        <artifactId>okhttp\</artifactId>

        <version>4.10.0\</version>

    </dependency>

</dependencies>

(三)编写接口代码

创建 Controller 类:在src/main/java目录下创建一个 Controller 类,例如FaceController.java。在这个类中,我们将定义一个接收上传图片的接口,并调用 CompreFace 的 API 来标识人脸。

import okhttp3.\*;

import org.springframework.http.HttpStatus;

import org.springframework.http.ResponseEntity;

import org.springframework.web.bind.annotation.\*;

import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@RestController

@RequestMapping("/face")

public class FaceController {

    private static final String COMPREFACE\_API\_URL = "http://localhost:8000/api/v1/face"; // 根据实际情况修改

    @PostMapping("/identify")

    public ResponseEntity\<String> identifyFace(@RequestParam("image") MultipartFile file) {

        OkHttpClient client = new OkHttpClient();

        RequestBody requestBody = new MultipartBody.Builder()

              .setType(MultipartBody.FORM)

              .addFormDataPart("image", file.getOriginalFilename(),

                        RequestBody.create(MediaType.parse(file.getContentType()), file.getBytes()))

              .build();

        Request request = new Request.Builder()

              .url(COMPREFACE\_API\_URL + "/detect")

              .post(requestBody)

              .build();

        try (Response response = client.newCall(request).execute()) {

            if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

            return new ResponseEntity<>(response.body().string(), HttpStatus.OK);

        } catch (IOException e) {

            e.printStackTrace();

            return new ResponseEntity<>(HttpStatus.INTERNAL\_SERVER\_ERROR);

        }

    }

}

上述代码中,@PostMapping("/identify")注解定义了一个接收 POST 请求的接口,路径为/face/identify。接口接收一个名为image的上传文件,通过 OkHttp 构建 HTTP 请求,将文件发送到 CompreFace 的人脸检测 API(/api/v1/face/detect),并返回检测结果。

(四)配置与测试

配置文件:如果 CompreFace 的 API 地址或其他配置需要修改,可以在src/main/resources/application.properties文件中添加相应的配置项,例如:

compreface.api.url=http://localhost:8000/api/v1/face

在代码中可以通过@Value注解读取这些配置值。

2. 测试接口:启动 Spring Boot 项目,使用 Postman 等工具发送 POST 请求到http://localhost:8080/face/identify,并在请求中上传一张图片。如果一切正常,将收到 CompreFace 返回的人脸检测结果,其中包含人脸的位置、关键点等信息。

四、总结

通过以上步骤,我们成功地在 Spring Boot 项目中集成了 CompreFace,并实现了上传图片标识人脸的功能。CompreFace 的强大功能和 Spring Boot 的便捷开发框架相结合,为开发者提供了高效的人脸识别解决方案。在实际应用中,可以根据需求进一步扩展和优化该功能,例如将识别结果存储到数据库、实现更复杂的业务逻辑等。同时,也可以探索 CompreFace 的其他功能,如人脸识别、验证等,以满足不同场景的需求。


全部评论: 0

    我有话说: