/// <summary> /// 百度文字识别-解析返回的json数据 /// </summary> /// <param name="json"></param> /// <returns></returns> private static string GeneralParseJSON(string json) { // 解析json数据 JavaScriptSerializer js = new JavaScriptSerializer(); BaiduOcrJson list = js.Deserialize <BaiduOcrJson>(json); if (list.error_code != null) // 如果调用Api出现错误 { throw new Exception("OCR识别错误!" + "\n原因:" + list.error_msg); } if (list.words_result.Count == 0) { return("未检测到文字"); } // 接收序列化后的数据 StringBuilder builder = new StringBuilder(); foreach (var item in list.words_result) { builder.Append(item.words + "\r\n"); } // 查找最后一个换行符的位置 return(builder.ToString().TrimEnd(new char[] { '\r', '\n' })); }
// 调用百度API文字识别 private static string GeneralBasic(string from, Image img) { if (from == "ru") { from = "RUS"; } else { from = "CHN_ENG"; } // 获取文字识别AccessToken string token = GetAccessToken(); Encoding encoding = Encoding.Default; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(accurate_basic_host + token); request.Method = "post"; request.KeepAlive = true; string base64 = ImageToBase64(img); string str = "image=" + HttpUtility.UrlEncode(base64) + "&language_type=" + from; byte[] buffer = encoding.GetBytes(str); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); string result; using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { result = reader.ReadToEnd(); } JavaScriptSerializer js = new JavaScriptSerializer(); // 实例化一个能够序列化数据的类 BaiduOcrJson list = js.Deserialize <BaiduOcrJson>(result); // 将json数据转化为对象类型并赋值给list if (list.error_code != null) // 如果调用Api出现错误 { throw new Exception("OCR识别错误!" + "\n原因:" + list.error_msg); } // 接收序列化后的数据 StringBuilder builder = new StringBuilder(); foreach (var item in list.words_result) { builder.Append(item.words + "\r\n"); } // 查找最后一个换行符的位置 int len = builder.ToString().LastIndexOf('\r'); return(len < 0 ? "" : builder.ToString().Remove(len)); }
/// <summary> /// 二维码识别 /// </summary> /// <param name="path"></param> /// <param name="img"></param> /// <returns></returns> public static string QRCode(Image img) { string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/qrcode?access_token="; string base64 = WebExt.ImageToBase64(img); string str = "image=" + HttpUtility.UrlEncode(base64); string result = WebExt.Request(host, GetAccessToken(), str); // 解析json数据 JavaScriptSerializer js = new JavaScriptSerializer(); BaiduOcrJson list = js.Deserialize <BaiduOcrJson>(result); if (list.error_code != null) // 如果调用Api出现错误 { throw new Exception("OCR识别错误!" + "\n原因:" + list.error_msg); } if (list.codes_result.Count == 0) { return("未检测到二维码"); } // 接收序列化后的数据 StringBuilder builder = new StringBuilder(); foreach (var item in list.codes_result) { builder.Append("二维码类型:" + item.type + "\r\n"); builder.Append("二维码内容:"); foreach (var text in (IEnumerable <object>)item.text) { builder.Append(text + "\r\n"); } } // 查找最后一个换行符的位置 int len = builder.ToString().LastIndexOf('\r'); return(len < 0 ? "" : builder.ToString().Remove(len)); }