阿里的人脸识别 API,有多种语言的示例代码,但没有 c# 的。
https://help.aliyun.com/document_detail/67818.html?spm=a2c4g.11186623.6.556.rD16LC
于是今天有了:
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Reflection;
- using System.Security.Cryptography;
- using System.Text;
- namespace AliFace
- {
- class Program
- {
- /// <summary>
- /// 计算MD5+BASE64
- /// </summary>
- /// <param name="s"></param>
- /// <returns></returns>
- public static String MD5Base64(String s)
- {
- if (s == null)
- return null;
- MD5 md5 = new MD5CryptoServiceProvider();
- byte[] result = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(s));
- return Convert.ToBase64String(result);
- }
- /// <summary>
- /// 计算 HMAC-SHA1
- /// </summary>
- /// <param name="data"></param>
- /// <param name="key"></param>
- /// <returns></returns>
- public static String HMACSha1(String data, String key)
- {
- String result;
- try
- {
- HMACSHA1 hmac = new HMACSHA1()
- {
- Key = Encoding.Default.GetBytes(key)
- };
- byte[] rawHmac = hmac.ComputeHash(Encoding.Default.GetBytes(data));
- result = Convert.ToBase64String(rawHmac);
- }
- catch (Exception e)
- {
- throw new Exception("Failed to generate HMAC : " + e.Message);
- }
- return result;
- }
- /// <summary>
- /// GMT 时间格式
- /// </summary>
- /// <param name="date"></param>
- /// <returns></returns>
- public static String toGMTString(DateTime date)
- {
- return date.ToString("r");
- }
- /// <summary>
- /// 阿里人像比对接口地址
- /// </summary>
- public static string VerifyURL = "https://dtplus-cn-shanghai.data.aliyuncs.com/face/verify";
- /// <summary>
- /// 发送 Post 请求
- /// </summary>
- /// <param name="body"></param>
- /// <param name="ak_id"></param>
- /// <param name="ak_secret"></param>
- /// <returns></returns>
- public static String SendVerifyPost(String body, String ak_id, String ak_secret)
- {
- // https 访问需要设置 ************************************************ 需要的
- ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
- String method = "POST";
- String accept = "application/json";
- String content_type = "application/json";
- String path = "/face/verify";
- String date = toGMTString(DateTime.Now);
- // 1.对body做MD5+BASE64加密
- String bodyMd5 = MD5Base64(body);
- String stringToSign = method + "\n" + accept + "\n" + bodyMd5 + "\n" + content_type + "\n" + date + "\n"
- + path;
- // 2.计算 HMAC-SHA1
- String signature = HMACSha1(stringToSign, ak_secret);
- String authHeader = "Dataplus " + ak_id + ":" + signature;
- byte[] postData = Encoding.Default.GetBytes(body);
- string result = "";
- HttpWebRequest req = WebRequest.Create(VerifyURL) as HttpWebRequest;
- HttpWebResponse res = null;
- if (req != null)
- {
- req.Method = method;
- req.Accept = accept;
- req.ContentType = content_type;
- // Date 参数不可直接设置,使用Header.Add 会报错 ************************************************ 需要的
- MethodInfo priMethod = req.Headers.GetType().GetMethod("AddWithoutValidate", BindingFlags.Instance | BindingFlags.NonPublic);
- priMethod.Invoke(req.Headers, new[] { "Date", date });
- req.Headers.Add("Authorization", authHeader);
- if (postData.Length > 0)
- {
- req.ContentLength = postData.Length;
- req.Timeout = 15000;
- Stream outputStream = req.GetRequestStream();
- outputStream.Write(postData, 0, postData.Length);
- outputStream.Flush();
- outputStream.Close();
- try
- {
- res = (HttpWebResponse)req.GetResponse();
- System.IO.Stream InputStream = res.GetResponseStream();
- Encoding encoding = Encoding.GetEncoding("UTF-8");
- StreamReader sr = new StreamReader(InputStream, encoding);
- result = sr.ReadToEnd();
- }
- catch (Exception ex)
- {
- }
- }
- else
- {
- res = (HttpWebResponse)req.GetResponse();
- System.IO.Stream InputStream = res.GetResponseStream();
- Encoding encoding = Encoding.GetEncoding("UTF-8");
- StreamReader sr = new StreamReader(InputStream, encoding);
- result = sr.ReadToEnd();
- sr.Close();
- }
- }
- return result;
- }
- static void Main(string[] args)
- {
- String imgUrl1 = "http://pic.hnjsrcw.com/cam_entry/20180511/20391905371813208.jpg";
- String imgUrl2 = "http://pic.hnjsrcw.com/cam_entry/20180511/20391905371813208.jpg";
- string body = "{\"type\":0,\"image_url_1\":\"" + imgUrl1 + "\",\"image_url_2\":\"" + imgUrl2 + "\"}";
- try
- {
- string result = SendVerifyPost(body, "your Access Key ID", "your Access Key Secret");
- Console.WriteLine(result);
- }
- catch (Exception e)
- {
- Console.WriteLine(e.Message);
- }
- }
- }
- }
输出结果:
- {"confidence":99.99996948242188,"thresholds":[61.0,69.0,75.0],"rectA":[97,45,102,180],"rectB":[97,45,102,180],"errno":0,"request_id":"430dff94-3877-4c7d-92ae-70a0a98ba0a9"}