public async Task <IAnalyzeResult> UploadAndAnalyzeImage(byte[] imageBytes, params System.Enum[] features)
        {
            HttpClient client = new HttpClient();

            //getToken
            string token = BaiduAccessToken.getAccessToken(Key, SecretKey).access_token;
            string uri   = API + "?" + $"access_token={token}";

            //getBase64
            string base64String = Convert.ToBase64String(imageBytes);
            string jsonContent  = this.threshold == null ? $"{{\"image\":\"{base64String}\"}}" : $"{{\"threshold\":\"{this.threshold}\",\"image\":\"{base64String}\"}}";



            byte[]         buffer  = Encoding.Default.GetBytes(jsonContent);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

            request.Method        = "post";
            request.KeepAlive     = true;
            request.ContentLength = buffer.Length;
            request.GetRequestStream().Write(buffer, 0, buffer.Length);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            StreamReader reader        = new StreamReader(response.GetResponseStream(), Encoding.Default);
            string       contentString = reader.ReadToEnd();


            //HttpResponseMessage response;
            //using (HttpContent content = new StringContent(jsonContent))
            //{
            //    // Make the REST API call.
            //    response = await client.PostAsync(uri, content);
            //}


            //string contentString = await response.Content.ReadAsStringAsync();

            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new Exception(contentString);
            }

            // Get the JSON response.

            // Display the JSON response.
            Console.WriteLine("\nResponse:\n");
            Console.WriteLine(VisCommonClass.JsonPrettyPrint(contentString));

            return(JsonConvert.DeserializeObject <BaiduAnalyzeResult>(contentString));
        }
Exemplo n.º 2
0
        public async Task <Response <Guest> > GetInfoFromCert(int hotelId, IFormCollection files)
        {
            if (files.Files.Count < 1)
            {
                return new Response <Guest>()
                       {
                           Status  = StatusEnum.ValidateModelError,
                           Massage = "没有上传图片",
                           Data    = null
                       }
            }
            ;

            IFormFile file      = files.Files[0];
            string    strBuffer = string.Empty;

            byte[] buffer;
            using (var stream = file.OpenReadStream())
            {
                buffer = new byte[(int)stream.Length];

                stream.Read(buffer, 0, (int)stream.Length);
                strBuffer = Convert.ToBase64String(buffer);
            }

            if (string.IsNullOrEmpty(strBuffer))
            {
                return(new Response <Guest>()
                {
                    Status = StatusEnum.ValidateModelError,
                    Massage = "图片错误",
                    Data = null
                });
            }

            if (StaticData.BaiduToken == null ||
                string.IsNullOrEmpty(StaticData.BaiduToken.access_token) ||
                DateTime.Now > StaticData.BaiduToken.get_token_time.AddMinutes(StaticData.BaiduToken.expires_in).AddHours(-1)
                )
            {
                string baiduTokenUri = $"{ Configuration.GetValue<string>("BaiduApi:tokenUri") }?grant_type={ Configuration.GetValue<string>("BaiduApi:grant_type") }&client_id={ Configuration.GetValue<string>("BaiduApi:client_id") }&client_secret={ Configuration.GetValue<string>("BaiduApi:client_secret") }";
                string tokenResult   = await Task.Run(() => { return(HttpHelper.HttpFormPostRequest(baiduTokenUri, "")); });

                if (!string.IsNullOrEmpty(tokenResult))
                {
                    BaiduAccessToken token = JsonConvert.DeserializeObject <BaiduAccessToken>(tokenResult);
                    if (token == null || string.IsNullOrEmpty(token.access_token))
                    {
                        return(new Response <Guest>()
                        {
                            Status = StatusEnum.Error,
                            Massage = "系统错误",
                            Data = null
                        });
                    }

                    token.get_token_time  = DateTime.Now;
                    StaticData.BaiduToken = token;
                }
                else
                {
                    return(new Response <Guest>()
                    {
                        Status = StatusEnum.Error,
                        Massage = "系统错误",
                        Data = null
                    });
                }
            }
            string manager   = HttpContext.User.Identity.Name;
            string idcardUri = $"{ Configuration.GetValue<string>("BaiduApi:idcardUri") }?access_token={ StaticData.BaiduToken.access_token }";
            int    maxNum    = Configuration.GetValue <int>("BaiduApi:maxNum");

            KeyValuePair <Guest, string> guest = await Task.Run(() => { return(OcrHander.GetGuestInfoFromCertByBaidu(idcardUri, strBuffer, hotelId, manager, maxNum)); });

            if (guest.Key == null)
            {
                return(new Response <Guest>()
                {
                    Status = StatusEnum.ValidateModelError,
                    Massage = guest.Value,
                    Data = null
                });
            }
            else
            {
                return(new Response <Guest>()
                {
                    Status = StatusEnum.Success,
                    Massage = "证件解析成功",
                    Data = guest.Key
                });
            }
        }
    }