旷视人脸识别Dome

最近写的项目中使用了旷视的人脸识别接口来做身份验证,今天分享一下做的经过;

首先我们要把申请到的 api_key 给相应权限,因为我用到的是有源比对,所以这里我给的就只是有源比对的权限。权限配置完之后根据API传递相应参数进去就可以了。下面是我做的个小例子:

Dic­tio­nary ver­i­fy­Post­Pa­ra­me­ters = new Dic­tio­nary(); //定义一个键值对字典数组
verifyPostParameters.Add(“api_key”, ConfigurationManager.AppSettings[“AppKey”]); //添加相应值
verifyPostParameters.Add(“api_secret”, ConfigurationManager.AppSettings[“AppSecret”]);
verifyPostParameters.Add(“comparison_type”, “1”);
verifyPostParameters.Add(“face_image_type”, “raw_image”);
verifyPostParameters.Add(“idcard_name”, addName); //待比对姓名
verifyPostParameters.Add(“idcard_number”, addI­den­ti­ty­Card);
//待比对身份证号
Bitmap bmp = new Bitmap(@filePath); // 图片地址(物理路径)
byte[] fileIm­age;
using (Stream stream1 = new Mem­o­ryS­tream())
{
bmp.Save(stream1, ImageFormat.Jpeg);
byte[] arr = new byte[stream1.Length];
stream1.Position = 0;
stream1.Read(arr, 0, (int)stream1.Length);
stream1.Close();
fileIm­age = arr;
}
//添加图片参数
verifyPostParameters.Add(“image”, new HttpHelper4MultipartForm.FileParameter(fileImage, file­Name, “appli­ca­tion/octet-stream”));
Http­We­bRe­sponse ver­i­fyRe­sponse = HttpHelper4MultipartForm.MultipartFormDataPost(ConfigurationManager.AppSettings[“FaceVerify”], “”, ver­i­fy­Post­Pa­ra­me­ters);
Stream­Read­er myS­tream­Read­er = new StreamReader(verifyResponse.GetResponseStream(), Encoding.UTF8);
string date= myStreamReader.ReadToEnd(); //获取返回的数据
Ver­i­fyIput ver­i­fyIput = JsonConvert.DeserializeObject(date); //处理返回数据 Ver­i­fyIput 为接受数据类

下面是使用到的方法类:

public static  class HttpHelper4MultipartForm
     {
         public class FileParameter
         {
             public byte[] File
             {
                 get;
                 set;
             }        
public string FileName
        {
            get;
            set;
        }

        public string ContentType
        {
            get;
            set;
        }

        public FileParameter(byte[] file) : this(file, null)
        {
        }

        public FileParameter(byte[] file, string filename) : this(file, filename, null)
        {
        }

        public FileParameter(byte[] file, string filename, string contenttype)
        {
            this.File = file;
            this.FileName = filename;
            this.ContentType = contenttype;
        }
    }

    private static readonly Encoding encoding = Encoding.UTF8;
    /// <summary>
    /// MultipartForm请求
    /// </summary>
    /// <param name="postUrl">服务地址</param>
    /// <param name="userAgent"></param>
    /// <param name="postParameters">参数</param>
    /// <returns></returns>
    public static HttpWebResponse MultipartFormDataPost(string postUrl, string userAgent, Dictionary<string, object> postParameters)
    {
        string text = string.Format("----------{0:N}", Guid.NewGuid());
        string contentType = "multipart/form-data; boundary=" + text;//multipart类型
        byte[] multipartFormData = HttpHelper4MultipartForm.GetMultipartFormData(postParameters, text);
        return HttpHelper4MultipartForm.PostForm(postUrl, userAgent, contentType, multipartFormData);
    }

    private static HttpWebResponse PostForm(string postUrl, string userAgent, string contentType, byte[] formData)
    {
        HttpWebRequest httpWebRequest = WebRequest.Create(postUrl) as HttpWebRequest;
        if (httpWebRequest == null)
        {
            throw new NullReferenceException("request is not a http request");
        }

        httpWebRequest.Method = "POST";//post方式
        httpWebRequest.SendChunked = false;
        httpWebRequest.KeepAlive = true;
        httpWebRequest.Proxy = null;
        httpWebRequest.Timeout = Timeout.Infinite;
        httpWebRequest.ReadWriteTimeout = Timeout.Infinite;
        httpWebRequest.AllowWriteStreamBuffering = false;
        httpWebRequest.ProtocolVersion = HttpVersion.Version11;
        httpWebRequest.ContentType = contentType;
        httpWebRequest.CookieContainer = new CookieContainer();
        httpWebRequest.ContentLength = (long)formData.Length;

        try
        {
            using (Stream requestStream = httpWebRequest.GetRequestStream())
            {
                int bufferSize = 4096;
                int position = 0;
                while (position < formData.Length)
                {
                    bufferSize = Math.Min(bufferSize, formData.Length - position);
                    byte[] data = new byte[bufferSize];
                    Array.Copy(formData, position, data, 0, bufferSize);
                    requestStream.Write(data, 0, data.Length);
                    position += data.Length;
                }
                requestStream.Close();
            }
        }
        catch (Exception ex)
        {
            return null;
        }

        HttpWebResponse result;
        try
        {
            result = (httpWebRequest.GetResponse() as HttpWebResponse);
        }
        catch (WebException arg_9C_0)
        {
            result = (arg_9C_0.Response as HttpWebResponse);
        }
        return result;
    }

    public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
    {
        return true;
    }

    /// <summary>
    /// 从表单中获取数据
    /// </summary>
    /// <param name="postParameters"></param>
    /// <param name="boundary"></param>
    /// <returns></returns>
    private static byte[] GetMultipartFormData(Dictionary<string, object> postParameters, string boundary)
    {
        Stream stream = new MemoryStream();
        bool flag = false;
        foreach (KeyValuePair<string, object> current in postParameters)
        {
            if (flag)
            {
                stream.Write(HttpHelper4MultipartForm.encoding.GetBytes("\r\n"), 0, HttpHelper4MultipartForm.encoding.GetByteCount("\r\n"));
            }
            flag = true;
            if (current.Value is HttpHelper4MultipartForm.FileParameter)
            {
                HttpHelper4MultipartForm.FileParameter fileParameter = (HttpHelper4MultipartForm.FileParameter)current.Value;
                string s = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"; filename=\"{2}\"\r\nContent-Type: {3}\r\n\r\n", new object[]
                {
                    boundary,
                    current.Key,
                    fileParameter.FileName ?? current.Key,
                    fileParameter.ContentType ?? "application/octet-stream"
                });
                stream.Write(HttpHelper4MultipartForm.encoding.GetBytes(s), 0, HttpHelper4MultipartForm.encoding.GetByteCount(s));
                stream.Write(fileParameter.File, 0, fileParameter.File.Length);
            }
            else
            {
                string s2 = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n{2}", boundary, current.Key, current.Value);
                stream.Write(HttpHelper4MultipartForm.encoding.GetBytes(s2), 0, HttpHelper4MultipartForm.encoding.GetByteCount(s2));
            }
        }
        string s3 = "\r\n--" + boundary + "--\r\n";
        stream.Write(HttpHelper4MultipartForm.encoding.GetBytes(s3), 0, HttpHelper4MultipartForm.encoding.GetByteCount(s3));
        stream.Position = 0L;
        byte[] array = new byte[stream.Length];
        stream.Read(array, 0, array.Length);
        stream.Close();
        return array;
    }
}

为您推荐

发表评论

您的电子邮箱地址不会被公开。