.net 通过ImgUrl调用fcae++验证图片是否有人脸

来源:互联网 发布:淘宝300解id锁可以退款 编辑:程序博客网 时间:2024/05/22 15:32

.net 通过ImgUrl调用fcae++验证图片是否有人脸

face++官网:https://console.faceplusplus.com.cn/documents/4888373

官方api说明:

这里写图片描述

第一种方法:前台ajax直接请求(确定容易暴露apikey,按访问量收费啊,当然有加密的方式这里不做介绍了),废话不多说直接上代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script><script>    $(document).ready(        test()    );    function test() {        $.ajax({            //提交数据的类型 POST GET            type: "POST",            //提交的网址            url: "https://api-cn.faceplusplus.com/facepp/v3/detect",            //提交的数据            data: {                api_key: "自己买的就不告诉你们了(*^__^*) 嘻嘻……",                api_secret: "自己买的就不告诉你们了(*^__^*) 嘻嘻……",                image_url: "https://bj-mc-prod-asset.oss-cn-beijing.aliyuncs.com/mc-official/images/demo/demo-pic1.jpg",                return_landmark: "1",                return_attributes: "gender,age,smiling,headpose,facequality,blur,eyestatus,ethnicity,emotion"            },            //返回数据的格式            datatype: "json", //"xml", "html", "script", "json", "jsonp", "text".            //在请求之前调用的函数            beforeSend: function () { $("#msg").html("logining"); },            //成功返回之后调用的函数                         success: function (data) {                $("#msg").html(data);            },            //调用执行后调用的函数            complete: function (XMLHttpRequest, textStatus) {                alert(XMLHttpRequest.responseText);                alert(textStatus);                //HideLoading();            },            //调用出错执行的函数            error: function () {                //请求出错处理            }        });    }</script><head runat="server">    <title></title></head><body>    <form id="form1" runat="server">    <div id="msg">    </div>    </form></body></html>

返回说明:
这里写图片描述

第二种方法:后台调用(WebRequest,可以做成webservice或者api 随你怎么折腾,我这里用webservice),上代码

namespace TestService.FaceWebService{    /// <summary>    /// FaceCheckService 的摘要说明    /// </summary>    [WebService(Namespace = "http://tempuri.org/")]    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]    [System.ComponentModel.ToolboxItem(false)]    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。    // [System.Web.Script.Services.ScriptService]    public class FaceCheckService : System.Web.Services.WebService    {        [WebMethod]        public string HelloWorld()        {            return "Hello World";        }        /// <summary>        /// 根据前台传进来的URL验证图片是否有人脸        /// 0:无        /// 1:有        /// </summary>        /// <param name="imageUrl"></param>        /// <returns></returns>        [WebMethod]        public int  FaceCheck(string imageUrl)        {            int reset = 0;            try            {                var api_key = System.Configuration.ConfigurationManager.AppSettings["api_key"].ToString();                var api_secret = System.Configuration.ConfigurationManager.AppSettings["api_secret"].ToString();                var return_landmark = System.Configuration.ConfigurationManager.AppSettings["return_landmark"].ToString();                var posturl = System.Configuration.ConfigurationManager.AppSettings["postfaceurl"].ToString();                Encoding encoding = Encoding.GetEncoding("UTF-8");                IDictionary<string, string> parameters = new Dictionary<string, string>();                parameters.Add("api_key", api_key); //调用此API的API Key                parameters.Add("api_secret", api_secret); //调用此API的API Secret                parameters.Add("image_url", imageUrl);                parameters.Add("return_landmark", return_landmark);                HttpWebResponse response = CreatePostHttpResponse(posturl, parameters, encoding);                //打印返回值                  Stream stream = response.GetResponseStream();   //获取响应的字符串流                  StreamReader sr = new StreamReader(stream); //创建一个stream读取流                  string html = sr.ReadToEnd();   //从头读到尾,放到字符串html                //序列化face++人脸验证的匿名对象                var svcResult = Brick.Common.Serialization.JavaScriptHelper.Deserialize<FaceEntity>(html);//这里序列化用你们自己的                if (svcResult.IsNotNull())                {                    reset = svcResult.faces.Length;                }            }            catch (Exception ex)            {                reset = 0;                Log.Error(string.Format("error-{0},StackTrace--{1}", ex.Message, ex.StackTrace));            }            return reset;        }        private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)        {            return true; //总是接受             }        public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, Encoding charset)        {            HttpWebRequest request = null;            //HTTPSQ请求              ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);            request = WebRequest.Create(url) as HttpWebRequest;            request.ProtocolVersion = HttpVersion.Version10;            request.Method = "POST";            request.Accept = "*/*";            request.ContentType = "application/x-www-form-urlencoded";            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0";            //如果需要POST数据                 if (!(parameters == null || parameters.Count == 0))            {                StringBuilder buffer = new StringBuilder();                int i = 0;                foreach (string key in parameters.Keys)                {                    if (i > 0)                    {                        buffer.AppendFormat("&{0}={1}", key, parameters[key]);                    }                    else                    {                        buffer.AppendFormat("{0}={1}", key, parameters[key]);                    }                    i++;                }                byte[] data = charset.GetBytes(buffer.ToString());                using (Stream stream = request.GetRequestStream())                {                    stream.Write(data, 0, data.Length);                }            }            return request.GetResponse() as HttpWebResponse;        }        }}反序列化对象namespace TestService.FaceWebService{    /// <summary>    /// 返回值说明    /// </summary>    public class FaceEntity    {        public string request_id { get; set; }        public Object[]faces { get; set; }        public string image_id { get; set; }        public string time_used { get; set; }        public string error_message { get; set; }    }}

序列化(怎么用我想应该知道吧):

Newtonsoft.Json.JsonConvert.DeserializeObject<T>(jsonString)