C# asp.net 调百度文字识别接口

调百度文字识别接口

public class BaiduHelper
    {
        private static readonly string clientId = ""; //"百度云应用的AK";
        private static readonly string clientSecret = ""; //"百度云应用的SK";

        /// <summary>
        ///     图片识别
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public static string Ocr(string filePath)
        {
            try
            {
                //string img = HttpUtility.UrlEncode(GetBase64FromImage(filePath));
                string img = HttpUtility.UrlEncode(ImageToBase64(filePath));
                //string token = GetAccessToken();
                //token = new Regex(
                //    "\"access_token\":\"(?<token>[^\"]*?)\"",
                //    RegexOptions.CultureInvariant
                //    | RegexOptions.Compiled
                //    ).Match(token).Groups["token"].Value.Trim();

                //var url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic";
                string url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token=";//?
                var list = new List<KeyValuePair<string, string>>
                               {
                                   //new KeyValuePair<string, string>("access_token", token),
                                   new KeyValuePair<string, string>("image", img),
                                   new KeyValuePair<string, string>("language_type", "CHN_ENG")
                               };
                var data = new List<string>();
                foreach (var pair in list)
                    data.Add(pair.Key + "=" + pair.Value);
                string json = HttpPost(url, string.Join("&", data.ToArray()));

                //var regex = new Regex(
                //    "\"words_result\": \"(?<words>[\\s\\S]*?)\"",
                //    RegexOptions.CultureInvariant
                //    | RegexOptions.Compiled
                //    );
                //var str = new StringBuilder();
                //foreach (Match match in regex.Matches(json))
                //{
                //    str.AppendLine(match.Groups["words"].Value.Trim());
                //}
                return json.ToString();
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

        public static string GetBase64FromImage(string imagefile)
        {
            string base64String;
            try
            {
                byte[] arr;
                using (var bmp = new Bitmap(imagefile))
                {
                    using (var ms = new MemoryStream())
                    {
                        bmp.Save(ms, ImageFormat.Jpeg);
                        arr = new byte[ms.Length];
                        ms.Position = 0;
                        ms.Read(arr, 0, (int)ms.Length);
                        ms.Close();
                    }
                }
                base64String = Convert.ToBase64String(arr);
            }
            catch (Exception ex)
            {
                throw new Exception("Something wrong during convert!");
            }
            return base64String;
        }


        /**
	 * 网络图片转换Base64的方法
	 *
	 * @param netImagePath     
	 */
        private static string ImageToBase64(string fileFullName)
        {
            try
            {
                Image img = UrlToImage(fileFullName);
                Bitmap bmp = new Bitmap(img);
                MemoryStream ms = new MemoryStream();
                var suffix = fileFullName.Substring(fileFullName.LastIndexOf('.') + 1,
                    fileFullName.Length - fileFullName.LastIndexOf('.') - 1).ToLower();
                var suffixName = suffix == "png"
                    ? ImageFormat.Png
                    : suffix == "jpg" || suffix == "jpeg"
                        ? ImageFormat.Jpeg
                        : suffix == "bmp"
                            ? ImageFormat.Bmp
                            : suffix == "gif"
                                ? ImageFormat.Gif
                                : ImageFormat.Jpeg;

                bmp.Save(ms, suffixName);
                byte[] arr = new byte[ms.Length]; ms.Position = 0;
                ms.Read(arr, 0, (int)ms.Length); ms.Close();
                string base64Str = Convert.ToBase64String(arr);
                return PrefectBase64(base64Str);
            }
            catch (Exception ex)
            {
                return null;
            }

        }
        public static Image UrlToImage(string url)
        {
            WebClient mywebclient = new WebClient();
            byte[] Bytes = mywebclient.DownloadData(url);
            using (MemoryStream ms = new MemoryStream(Bytes))
            {
                Image outputImg = Image.FromStream(ms);
                return outputImg;
            }
        }
        private static string PrefectBase64(string Base64Str)
        {
            string dummyData = Base64Str.Replace("%", "").Replace(",", "").Replace(" ", "+");
            if (dummyData.Length % 4 > 0)
            {
                dummyData = dummyData.PadRight(dummyData.Length + 4 - dummyData.Length % 4, '=');
            }

            return dummyData;
        }

        public static string GetAccessToken()
        {
            string url = "https://aip.baidubce.com/oauth/2.0/token";
            var list = new List<KeyValuePair<string, string>>
                           {
                               new KeyValuePair<string, string>("grant_type", "client_credentials"),
                               new KeyValuePair<string, string>("client_id", clientId),
                               new KeyValuePair<string, string>("client_secret", clientSecret)
                           };
            var data = new List<string>();
            foreach (var pair in list)
                data.Add(pair.Key + "=" + pair.Value);
            return HttpGet(url, string.Join("&", data.ToArray()));
        }

        public static string HttpGet(string url, string data)
        {
            var request = (HttpWebRequest)WebRequest.Create(url + (data == "" ? "" : "?") + data);
            request.Method = "GET";
            request.ContentType = "text/html;charset=UTF-8";
            using (var response = (HttpWebResponse)request.GetResponse())
            {
                Stream stream = response.GetResponseStream();
                string s = null;
                if (stream != null)
                {
                    using (var reader = new StreamReader(stream, Encoding.GetEncoding("utf-8")))
                    {
                        s = reader.ReadToEnd();
                        reader.Close();
                    }
                    stream.Close();
                }
                return s;
            }
        }

        public static string HttpPost(string url, string data)
        {
            var request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = Encoding.UTF8.GetByteCount(data);
            Stream stream = request.GetRequestStream();
            var writer = new StreamWriter(stream, Encoding.GetEncoding("gb2312"));
            writer.Write(data);
            writer.Close();

            using (var response = (HttpWebResponse)request.GetResponse())
            {
                Stream res = response.GetResponseStream();
                if (res != null)
                {
                    var reader = new StreamReader(res, Encoding.GetEncoding("utf-8"));
                    string retString = reader.ReadToEnd();
                    reader.Close();
                    res.Close();
                    return retString;
                }
            }
            return "";
        }
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值