识别图片中文字(百度AI)

   这个是百度官方的文档         https://ai.baidu.com/docs#/OCR-API/top

   通用的文字识别,如果是其他的含生僻字/含位置信息的版本,请参考官方的文档,只需要在请求时发送不同的参数即可

   根据文档简单的使用一般处理程序完成 百度 中文字识别的功能,下面是主方法:

    private static String clientId = "**************"; // 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务
    // 百度云中开通对应服务应用的 Secret Key
    private static String clientSecret = "***************";//注意不要加空格

    public void ProcessRequest(HttpContext context) {
        context.Response.ContentType = "text/plain";string token_ = getAccessToken();
        string return_font = general(token_, "123.jpg");
        //string json = JsonConvert.SerializeObject(return_font);
        context.Response.Write(return_font);
    }

    /// <summary>
    /// 获取token
    /// </summary>
    /// <returns></returns>
    public static String getAccessToken()
    {
        String authHost = "https://aip.baidubce.com/oauth/2.0/token";
        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;
        string token_ = result.Split(',')[0].Split(':')[1];
        token_ = token_.Substring(1, token_.Length-2);

        return token_;
    }
/// <summary>
    /// 获取图片中的文字
    /// </summary>
    /// <param name="token"></param>
    /// <param name="image_path">图片路径</param>
    /// <returns></returns>
    public static string general(string token,string image_path)
    {
        string strbaser64 = base64(image_path);//将图片转为base64

        string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/general?access_token=" + token;
        Encoding encoding = Encoding.Default;
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
        request.Method = "post";
        request.ContentType = "application/x-www-form-urlencoded";
        request.KeepAlive = true;
        String str = "image=" + HttpUtility.UrlEncode(strbaser64);
        byte[] buffer = encoding.GetBytes(str);
        request.ContentLength = buffer.Length;
        request.GetRequestStream().Write(buffer, 0, buffer.Length);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
        string result = reader.ReadToEnd();
        return result;
    }

    /// <summary>
    /// 将图片转为base64
    /// </summary>
    /// <param name="image_name"></param>
    /// <returns></returns>
    public static string base64(string image_name) {
        FileInfo file = new FileInfo(image_name);
        var stream = file.OpenRead();
        byte[] buffer = new byte[file.Length];
        //读取图片字节流
        stream.Read(buffer, 0, Convert.ToInt32(file.Length));
        return Convert.ToBase64String(buffer);

    }

     其中两个公共变量分别是如下图:

    以上就是全部代码了,返回值就是识别的图片中的文字。

posted @ 2018-04-04 09:28  人缘好  阅读(2457)  评论(0编辑  收藏  举报