实现Face/ Detect

谯和煦
2023-12-01

本主题所有内容以软认知服务为技术基础

关于微软人脸识别,请参阅

本节内容请先参阅微软认知服务人脸API接口列表

##实现Face/ Detect

Detect服务接受一个上传的图片,并且识别其中的人脸,如果找不到人脸则返回一个空的数组,否则返回人脸数据的数组,这些人脸数据包含了:FaceID、性别、年龄、微笑值、胡须情况等。
当我们上传了一张有效照片之后,牛津计划会返回给我们对照片中每一个识别成功的人脸的FaceID,这个ID很重要,当我们需要再次了解照片中人脸的信息,我们不必再次上传照片,直接提交这个FaceID即可。
还记得我们说过微信客户端上传的图片是不能直接POST到我们WebAPI服务端的,必须我们从微信服务器去下载照片,然后上传给牛津API,所以我们的代码需要如下实现

[HttpGet]
[Route("face/detect/{weixnmediaid}")]
public async Task<HttpResponseMessage> Detect(string weixnmediaid)
{
    var key = "detect";

    var file = await new WeixinController().Get(weixnmediaid);

    var content = FileHelper.ReadAsync (file);

    if (content != null)
    {
        var result = await client.PostAsync(key,
            content,
            new Dictionary<string, string> {
            {"returnFaceId","true"},
            {"returnFaceLandmarks","flase"},
            }
            );

        return client.CreateHttpResponseMessage(Request, result);
    }
    throw new HttpResponseException(HttpStatusCode.BadRequest);
}

在这里我用了RouteAttribute,微软的ASP.NET WEBAPI的RouteAttribute太好用了,我们可以将路由设计为非常友好的状态,而不用设计为带参数的url,现在我们的API看上去高大上多了。
不过呢,这个是微信的模式,如果我们想做一个标准的网站用input file的组件上传照片,那我们怎么实现呢?如下代码告诉你怎么做了

private static string uploadedImageFiled = System.Configuration.ConfigurationManager.AppSettings["UploadedImage"];

[HttpPost]
[Route("face/detect")]
public async Task<HttpResponseMessage> Detect()
{
    var key = "detect";

    var httpPostedFile = HttpContext.Current.Request.Files[uploadedImageFiled];
    if (httpPostedFile != null)
    {
        var content = await FileHelper.ReadAsync (httpPostedFile.InputStream);

        var result = await client.PostAsync(key,
            content,
            new Dictionary<string, string> {
            {"returnFaceId","true"},
            {"returnFaceLandmarks","flase"},
            }
            );
        FileHelper.SaveFile(content, httpPostedFile.FileName);

        return client.CreateHttpResponseMessage(Request, result);
    }
    throw new HttpResponseException(HttpStatusCode.BadRequest);
}

这段代码的采用的是POST,URL进过RouteAttribute优化后不需要带任何参数,API从HttpContext.Current.Request.Files获取上传的图片进行处理。

现在我们封装了Face/ Detect服务了,可以提供微信客户端和PC浏览器客户端的服务了。

 类似资料: