源码地址: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