|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
using Application.Domain.Entities;
|
|
|
|
|
using FaceRecognitionDotNet;
|
|
|
|
|
using Infrastructure.Data;
|
|
|
|
|
using Infrastructure.Extensions;
|
|
|
|
|
using Microsoft.AspNetCore.Hosting;
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
using System;
|
|
|
|
@ -31,20 +32,38 @@ namespace UserCenter.Services
|
|
|
|
|
{
|
|
|
|
|
if (!string.IsNullOrEmpty(user.FaceImage))
|
|
|
|
|
{
|
|
|
|
|
var faceImagePath = Path.Combine(this._env.WebRootPath, user.FaceImage.TrimStart('/'));
|
|
|
|
|
using (var img = FaceRecognition.LoadImageFile(faceImagePath))
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var faceEncoding = this._faceRecognition.FaceEncodings(img).ToArray().FirstOrDefault();
|
|
|
|
|
if (faceEncoding != null)
|
|
|
|
|
{
|
|
|
|
|
_faces.TryAdd(user.UserName, faceEncoding);
|
|
|
|
|
}
|
|
|
|
|
var faceEndoding = this.GetFaceImageEncoding(user.FaceImage);
|
|
|
|
|
this._faces.TryAdd(user.UserName, faceEndoding);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
ex.PrintStack(ex.Message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private FaceEncoding GetFaceImageEncoding(string faceImage)
|
|
|
|
|
{
|
|
|
|
|
var faceImagePath = Path.Combine(this._env.WebRootPath, faceImage.TrimStart('/'));
|
|
|
|
|
using (var img = FaceRecognition.LoadImageFile(faceImagePath))
|
|
|
|
|
{
|
|
|
|
|
var faceEncodings = this._faceRecognition.FaceEncodings(img).ToArray();
|
|
|
|
|
if (faceEncodings.Length == 0)
|
|
|
|
|
{
|
|
|
|
|
throw new Exception($"cann't find face");
|
|
|
|
|
}
|
|
|
|
|
else if (faceEncodings.Length > 1)
|
|
|
|
|
{
|
|
|
|
|
throw new Exception($"find too many faces");
|
|
|
|
|
}
|
|
|
|
|
return faceEncodings.FirstOrDefault();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string FindFace(System.Drawing.Bitmap bitmap)
|
|
|
|
|
{
|
|
|
|
|
var userName = "";
|
|
|
|
@ -72,6 +91,23 @@ namespace UserCenter.Services
|
|
|
|
|
return userName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void AddFace(string userName, string faceImage)
|
|
|
|
|
{
|
|
|
|
|
this._faces.TryAdd(userName, this.GetFaceImageEncoding(faceImage));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void UpdateFace(string userName, string faceImage)
|
|
|
|
|
{
|
|
|
|
|
this.RemoveFace(userName);
|
|
|
|
|
this.AddFace(userName, faceImage);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void RemoveFace(string userName)
|
|
|
|
|
{
|
|
|
|
|
this._faces.TryRemove(userName, out FaceEncoding face);
|
|
|
|
|
face.Dispose();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private byte[] ToManaged(System.Drawing.Bitmap bitmap)
|
|
|
|
|
{
|
|
|
|
|
var format = bitmap.PixelFormat;
|
|
|
|
|