demo: https://github.com/dunitian/DNTLive/tree/master/Software/WaterMarkAPP/LoTWaterAPP 说起这个人脸识别,还真有点缘分。记得逆天以前在学生时代参加创新大赛的时候,题目就是人脸识别打卡 解决别人替人打卡的问题,想想看,要是用微软的faceapi那还不是很容易实现的?

额,这次先看下效果,然后普及一些开发过程中的知识点,然后介绍一下微软的FaceAPI
==》原来的功能依旧在,非人脸识别,请在消息框中选择否
上面演示部分结束了,我们进入技术探讨环节(技术有什么不到位的或者还有什么更好方案的。还望同志们提点一下,小子勇于接受批评)
先说下,设置超时时间,异常处理
有人可能会说:Task.Factory.StartNew 和 Task.Run 一样不?Run就是第一种方式,只不过自动添加了一些默认参数
再说下Magick,之前说了水印的用法:
http://www.cnblogs.com/dunitian/p/5895133.html这次基本上用法全了,缩略图,裁剪,水印
裁剪官方文档没有说,我是根据命令逆推的==》写了个demo:
https://github.com/dunitian/TempCode/tree/master/2016-12-26/MagickTest-------------------------------------------------------------------------------------------------
一下不管这个了,说说人脸识别,之前不知道官方有sdk,自己封装了。一起看看吧,有利于理解官方sdk:
下面进行场景还原,为什么这样封装,很多人不写方法,直接贴代码,看的容易晕
然后是Model,我这边没高兴封装脸部关键点,需求决定一切(我只要面部矩阵),如果是Face++就得自己算了
微软返回结果是这个:
下面就是核心代码:(我这边分了网页URL和本地图片路径,SDK好像统一用流的方式)
为什么我分两种情况,看这两张图就能理解:
调用就不用说了吧:await FaceHelper.GetFaceModelList(path) or FaceHelper.GetFaceModelList(path).Result
微软的api很简单,eg:
private static async Task<IEnumerable<Face>> UploadAndDetectFaces(string imageFilePath)
{
try
{
using (Stream imageFileStream = File.OpenRead(imageFilePath))
{
var faceClient = new FaceServiceClient(FaceHelper.GetAPIKey());
return await faceClient.DetectAsync(imageFileStream);
}
}
catch (FaceAPIException ex)
{
throw ex;
}
}
先这样吧,WPF不是很擅长,凑合着用吧~~
作者:
毒逆天出处:
https://www.cnblogs.com/dotnetcrazy打赏:
18i4JpL6g54yAPAefdtgqwRrZ43YJwAV5z本文版权归作者和博客园共有。欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接!