NugGet包引用:View.Drawing.Extensions、ViewFaceCore、Newtonsoft.Json
注意.net 应用版本
.NET Core >= 2.0
.NET Framework >= 4.6.1^2
模型按需安装引用
一、创建ViewFace
public ViewFace viewFace { get; set; }
public FaceRecognitionHelpers()
{
viewFace = new ViewFace((str) =>
{
Debug.WriteLine(str);
});
viewFace.ModelPath = System.AppDomain.CurrentDomain.BaseDirectory.ToString() + @"\bin\viewfacecore\models\";
viewFace.FaceType = FaceType.Normal;
viewFace.MarkType = MarkType.Light;
}
注意ModelPath ,这个路径要写项目启动目录“viewfacecore\models\”,并且要把viewfacecore文件夹放在启动路径下。
IIS部署需要把文件viewfacecore放在该目录下:
32位时引用System32\inetsrv\viewfacecore\win\x64
64位时引用SysWOW64\inetsrv\viewfacecore\win\x86
二、获取脸部信息(人脸录入/人脸识别时用到)
/// <summary>
/// 获取人脸信息
/// </summary>
/// <param name="oldImg"></param>
/// <returns></returns>
public float[] FaceMark(Bitmap oldImg)
{
oldImg = (Bitmap)oldImg.ChangeSize(new Size(1024, 768));
var faceInfos = viewFace.FaceDetector(oldImg);
if (faceInfos.Length > 0)
{
var faceInfo = faceInfos[0];
var oldPoints = viewFace.FaceMark(oldImg, faceInfo);
var oldEigenValues = viewFace.Extract(oldImg, oldPoints);
return oldEigenValues;
}
return null;
}
这里最主要的就是oldEigenValues 这个参数的值是用与对比的重要参数
三、新增人脸库
从第二步中得到的oldEigenValues 转成JsonConvert.SerializeObject(facemodel.oldEigenValues)
保存到数据库中并绑定用户信息(用于人脸识别对比)
四、人脸识别对比
上传人脸图片调用第二步的方法得到oldEigenValues再与数据库中的oldEigenValues进行对比代码如下
/// <summary>
/// 人脸库找人脸
/// </summary>
/// <param name="model_eigenValues">人脸库数组</param>
/// <param name="oldEigenValues">新上传的人脸</param>
/// <returns></returns>
public FaceIsSelfModel IsSelf(List<FaceIsSelfImgPathModel> model_eigenValues, float[] oldEigenValues)
{
var result = new FaceIsSelfModel();
foreach (var item in model_eigenValues)
{
var similarity = viewFace.Similarity(oldEigenValues, JsonConvert.DeserializeObject<float[]>(item.eigenValues));
// 对比两张照片上的数据,确认是否是同一个人。
result.is_self = viewFace.IsSelf(similarity);
//如果是同一个人则给userid赋值跳出循环
if (result.is_self)
{
result.user_id = item.user_id;
return result;
}
}
return result;
}
public class FeaturesModel
{
public string user_id { get; set; }
public string eigenValues { get; set; }
}
public class FaceIsSelfModel
{
public bool is_self { get; set; }
public string user_id { get; set; } = string.Empty;
}