graysola

本文主要是调用百度云的接口来实现文字识别这一方法,调用百度云的其他方法也差不多

官方文档地址: https://cloud.baidu.com/doc/OCR/s/zk3h7xz52

先点击立即使用

创建好之后记住几个参数,后面获取Token用

获取AccessToken

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

           /// <summary>
           /// 获取AccessToken值
           /// </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;
                   return result;
           }
    }

新建一个类来接受返回值

public class ResultAccessToken
{
    public string refresh_token { get; set; }
    public int expires_in { get; set; }
    public string scope { get; set; }
    public string session_key { get; set; }
    public string access_token { get; set; }
    public string session_secret { get; set; }
}

请求的方法:

    // 通用文字识别
    public static string generalBasic(string token, string iamge)
    {
        string host =  "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=" + token;
        Encoding encoding = Encoding.UTF8;
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
        request.Method = "post";
        request.KeepAlive = true;
        // 图片的base64编码
        string base64 = getFileBase64(iamge);
        String str = "image=" + HttpUtility.UrlEncode(base64);
        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;
    }


    public static String getFileBase64(String fileName)
    {
        FileStream filestream = new FileStream(fileName, FileMode.Open);
        byte[] arr = new byte[filestream.Length];
        filestream.Read(arr, 0, (int)filestream.Length);
        string baser64 = Convert.ToBase64String(arr);
        filestream.Close();
        return baser64;
    }

返回值参考:

public class OCRResult
{
    /// <summary>
    /// 唯一的log id,用于问题定位
    /// </summary>
    public long log_id { get; set; }
    /// <summary>
    /// 识别结果数,表示words_result的元素个数
    /// </summary>
    public int words_result_num { get; set; }
    /// <summary>
    /// 识别结果数组
    /// </summary>
    public List<Words_resultItem> words_result { get; set; }
}
public class Words_resultItem
{
    public string words { get; set; }
}

前台写个触发事件:

    //按钮点击触发事件
    $("#btnOCR").click(function () {
        $.ajax({
            url: "/home/OCR",
            type: "post",
            dataType: "json"
        }).done(function (data) {
            console.log(data)
        })
    });

跑起来跑起来,在浏览器的控制台中打印结果

完成

文字识别这个应用也可以用到其他的OCR识别的地方,按照自己需求改改就行

分类:

技术点:

相关文章: