前言
最近在网上买了些东西,感觉不好,想退, 在办理退件过程中发现个好玩意,类似这样的输入框,
上传商户发的退货地址,自动识别退货信息。 也可粘贴文本自动识别。
感觉有点意思。考虑过各种实现原理,什么字典库,大数据之类。。。。,但是这些对个体小户来说不现实。最后还是靠baidu。
我的实现思路:
1、上传图像 ...(废话), 转base64 .
2、识别图像中文字,即OCR , 目前有很多实现此功能的插件和接口,我使用的baiduapi,在百度开发者账户中可以申请的。 链接在此。 https://cloud.baidu.com/product/ocr 。
3、分词。 将图像转成的文字进行分词,识别人名,公司名,电话,省市区,详细地址。分词也有很多组件,我还是使用的baiduapi, 自然语言词法分析 http://ai.baidu.com/tech/nlp/lexical 。
4、转换。将分析的词进一步解析,比如将省市区转换为自己数据库中对应的省市区ID。
5、回传显示
实现步骤
1、准备好百度api相关配置信息
//百度申请得到的AK http://lbsyun.baidu.com/apiconsole/key
public string Baidu_AK = "AAAAAAAAAAAAAAAAAAAAAA";
// 文字识别 https://cloud.baidu.com/product/ocr
public string Baidu_OCRApiKey = "BBBBBBBBBBBBBBBBBBB";
public string Baidu_OCRSecret = "CCCCCCCCCCCCCCCCCCCC";
//词法分析 http://ai.baidu.com/tech/nlp/lexical
public string Baidu_NLPApiKey = "DDDDDDDDDDDDDDDDDDDDDDDD";
public string Baidu_NLPSecret = "EEEEEEEEEEEEEEEEEEEEEEEEE";
2、上传图像,转base64 .
上传略去,,, 转base64 给代码
/// <summary>
/// 图像路径
/// </summary>
/// <param name="filepath"></param>
/// <returns></returns>
public static string ImgToBase64Str(string filepath)
{
try
{
Bitmap bmp = new Bitmap(filepath);
MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(arr, 0, (int)ms.Length);
ms.Close();
return Convert.ToBase64String(arr);
}
catch (Exception ex)
{
return null;
}
}
2、图像识别
使用图像识别前要先获取AccessToken ,和微信开发一样的。
/// <summary>
/// 获取AccessToken
/// </summary>
/// <returns></returns>
private String getAccessToken(string Baidu_ApiKey, string Baidu_SecretKey)
{
string xpath = "//BaiduApi[@ApiKey='" + Baidu_ApiKey + "'