C#百度OCR文字识别Demo

源码地址:https://download.csdn.net/download/horseroll/10508204

使用效果:


调用的是百度的API接口。API文档:http://ai.baidu.com/docs#/OCR-API/top

1.首先先根据API key和Secret key得到token

token = getAccessToken();

// 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存
// 返回token示例
public static String TOKEN = "24.adda70c11b9786206253ddb70affdc46.2592000.1493524354.282335-1234567";

// 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务
private static String clientId = "cohIahxAt7HveHLYSHYK6G5N";
// 百度云中开通对应服务应用的 Secret Key
private static String clientSecret = "e8SAsDIWSK9NPUKviYiPQNlfaVDXQSY5";

public static String getAccessToken()
{
    String authHost = "https://aip.baidubce.com/oauth/2.0/token";
    //string result = ToolData.HttpPost(authHost, "grant_type=client_credentials&client_id="+clientId+"&client_secret="+clientSecret);
    HttpClient client = new HttpClient();
    List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();
    paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
    paraList.Add(new KeyValuePair<string, string>("client_id", clientId));
    paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret));
    HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
    String result = response.Content.ReadAsStringAsync().Result;
    return result;
}
2.网络图片的识别
string httppicture = ToolData.HttpPost("https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic", "access_token=" + token + "&url=" + "图片的网络地址");

3.本地图片的识别

string base64 = UrlEncode(ImgToBase64String(Image.FromFile("本地图片路径地址")));
string localpicure = ToolData.HttpPost("https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic", "access_token=" + token + "&image=" + base64);
        public String ImgToBase64String(Image bmp)
        {
            String strbaser64 = String.Empty;
            var btarr = convertByte(bmp);
            strbaser64 = Convert.ToBase64String(btarr);

            return strbaser64;
        }
        /// <summary>
        /// Image转byte[]
        /// </summary>
        /// <param name="img">Img格式数据</param>
        /// <returns>byte[]格式数据</returns>
        public static byte[] convertByte(Image img)
        {
            MemoryStream ms = new MemoryStream();
            img.Save(ms, img.RawFormat);
            byte[] bytes = ms.ToArray();
            ms.Close();
            return bytes;
        }
        public static string UrlEncode(string str)
        {
            StringBuilder sb = new StringBuilder();
            byte[] byStr = System.Text.Encoding.UTF8.GetBytes(str); //默认是System.Text.Encoding.Default.GetBytes(str)
            for (int i = 0; i < byStr.Length; i++)
            {
                sb.Append(@"%" + Convert.ToString(byStr[i], 16));
            }
            return (sb.ToString());
        }

注意:网络图片我才用的接口地址是:https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic        通用文字识别

本地图片的接口地址:https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic    通用文字识别(高精度版)高精度版本只支持本地图片的识别,不支持网络图片识别

本地图片需要先把图片转成Base64然后再进行urlencode


猜你喜欢

转载自blog.csdn.net/HorseRoll/article/details/80857491