CompreFace人脸识别项目部署及使用文档
前言
本项目的人脸识别功能基于开源项目CompreFace。CompreFace对外提供RESTful API。.net 服务端通过post请求调用ComreFace API接口,将人脸图片上传给CompreFace服务,进行人脸识别、人脸验证等操作。识别结束后CompreFace服务端将结果返回给.net 服务端,完成整个人脸识别过程。
人脸身份识别过程主要是:
首先,系统需要提前录入n个人的信息,每个人的信息包括:人名+人脸照片(1张或多张);
然后,系统接收一张陌生的人脸照片并与提前录入的人脸进行比对,找出最像谁,最终完成身份识别;
要求:
-
CompreFace 的运行基于Docker,需要安装 Docker Desktop (win)。
-
CompreFace 可以在大多数windows操作系统上运行。
第一部分:win安装 Docker Desktop
我的系统和软件版本是:win10 + Docker Desktop 4.21.1。
第1步:启用 Hyper-V
我们需要启用Hyper-V以在 Windows上创建虚拟机。
以管理员身份打开 PowerShell 控制台,运行以下命令:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
启用成功后, 可以再win桌面搜索到Hyper-V 管理器:
第2步:下载 Dokcer Desktop 安装包
官方下载地址:Download Docker Desktop | Docker
第3步:安装 Docker Desktop
安装过程
双击Docker Desktop 安装包,开始安装:
一路默认勾选安装:
安装成功后,关机重启,即可。
报错:Docker Desktop requires a newer WSL kernel version
解决方案:
cmd里输入以下命令进行wsl更新操作:
wsl --update
安装过程会比较久,因为要下载更新包。耐心等待即可,中间出错了就继续输入命令继续安装即可。
重启后,重新打开Docker Desktop 报错消失。
第4步:Docker Desktop配置阿里云镜像源
获取阿里云镜像源地址
进入管理控制台获取镜像加速器:
在Docker Desktop中配置阿里云镜像源
在系统右上角托盘图标内右键菜单选择 Settings,打开配置窗口后左侧导航菜单选择 Docker Desktop。编辑窗口内的JSON串,填写下方加速器地址:
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
第5步:查看Docker版本
WIndows PowerShell 下查看docker版本:
docker version
第6步:验证Docker Desktop 正常工作
打开命令行窗口运行以下命令:
docker run hello-world
看到以下输出则表示安装成功,且能正常工作:
查看Docker Desktop中是否成功拉取 hello-world :
第二部分:Windows下安装及使用CompreFace
第1步:下载CompreFace最新版本存档
https://github.com/exadel-inc/CompreFace/releases
第2步:解压存档
第3步:保持 Docker Desktop 是打开状态
只要打开Docker Desktop程序即可。
第4步:将 CompreFace 附加到 Docker 容器
打开cmd,输入以下命令
D:
cd D:\WorkSpace\jcjy\src\FaceRecgnition\CompreFace
docker-compose up -d
等待构建完成即可。完成之后Docker Desktop中会多一个CompreFace容器:
第5步:浏览器进入系统
浏览器,打开网址: http://localhost:8000/login,进入CompreFace UI界面。首次登录需要注册一下。
第三部分:使用CompreFace
第1步:新建一个Application
用户可以创建多个APP,用于区分不同的用途,但我们其实用不到,创建一个自己的APP就行了
第2步:新建一个Service
再APP下面,新建一个服务,有三种服务,分别是人脸识别(RECOGNITION)、人脸验证(VERIFICATION)、人脸检测(DETECTION)。
人脸识别其实就是人脸身份识别(每张照片只有一个人脸),人脸验证是验证两张照片是不是同一个人(每张照片只有一个人脸),人脸检测是检测一张图片里(1个或多个)人脸所在位置。
我们选择人脸识别(RECOGNITION):
第3步:维护一个人脸集合(Face Collection)
在 RECOGNITION Service里面,需要提前录入一个人脸集合(Face Collection),每个一个人脸集合下面有多个人(Subject),每个人的信息就是姓名+1张或多张这个人的照片。如下图所示,我去网上下载了很多明星的照片,并创建了很多明星Subjects,每个明星一个姓名 + 1-2张照片。
PS: 同一个人的照片越多,识别率越高。
第4步:测试人脸身份识别
进入[Test]:
上传一张新的照片,进行人脸身份识别:
第四部分:.Net使用CompreFace
CompreFace 针对 .Net 提供了 CompreFace .NET SDK。封装了.net 的一些调用接口的函数,简化了.net 调用CompreFace服务器的复杂度。
先决条件
- 您的计算机已安装CompreFace,并且CompreFace容器已经在Docker中运行起来。
- 您的计算机拥有.NET 6.0 SDK 及以上的运行环境。
确保以上两个条件都已满足之后即可在.Net中使用CompreFace。
第1步:NuGet 中安装CompreFace.NET.Sdk
在.net6.0 项目中,用NuGet安装CompreFace.NET.Sdk
第2步:编写.NET代码调用人脸识别服务
写一个接口进行人脸识别:
namespace xxx
{
public class AuthController : Controller
{
/// <summary>
/// CompreFace全局对象
/// </summary>
public CompreFaceClient CompreFaceClient { get; set; }
/// <summary>
/// CompreFace人脸识别服务
/// </summary>
public RecognitionService FaceRecService { get; set; }
public AuthController()
{
// 获取CompreFace全局对象
this.CompreFaceClient = new CompreFaceClient(
domain: "http://localhost",
port: "8000");
// 初始化人脸识别服务
this.FaceRecService = this.CompreFaceClient.GetCompreFaceService<RecognitionService>("0a187238-fe89-441f-af90-dd2f08c74e00");
}
#region 人脸识别 CompreFace 代码示例
/// <summary>
/// Face Recognition
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("/auth/faceRecognition")]
public async Task<IActionResult> CompreFaceRecognitionAsync()
{
var result = new ResultDto();
//获取主题对象,一个Subject就是一个人
var subject = this.FaceRecService.Subject;
// 获取主题列表
var subjectList = await subject.ListAsync();
// 人脸识别
var recognizeRequest = new RecognizeFaceFromImageRequestByFilePath()
{
FilePath = "D:\\WorkSpace\\精创\\工作文件\\AI智能招聘\\人脸验证图片库\\20210204070819496.jpg.420.554.jpg"
};
var response = await this.FaceRecService.RecognizeFaceFromImage.RecognizeAsync(recognizeRequest);
return Json(result);
}
#endregion
}
}