本篇文章介绍利用百度OCR的C#接口实现文字识别。点击进入百度OCR
进入官网后,点击SDK下载,选择下载C# SDK(http://ai.baidu.com/sdk)。
C# SDK 现已开源! https://github.com/Baidu-AIP/dotnet-sdk
** 支持平台:.Net Framework 3.5 4.0 4.5, .Net Core 2.0 **
在NuGet中搜索 Baidu.AI
,安装最新版即可。
packet地址 https://www.nuget.org/packages/Baidu.AI/
文字识别 C# SDK目录结构
Baidu.Aip
├── net35
│ ├── AipSdk.dll // 百度AI服务 windows 动态库
│ ├── AipSdk.xml // 注释文件
│ └── Newtonsoft.Json.dll // 第三方依赖
├── net40
├── net45
└── netstandard2.0
├── AipSdk.deps.json
└── AipSdk.dll
如果需要在 Unity 平台使用,可引用工程源码自行编译。
安装
1.在官方网站下载C# SDK压缩工具包。
2.解压后,将 AipSdk.dll
和 Newtonsoft.Json.dll
中添加为引用。
下载完成后解压,选择相应的.net版本引用dll文件:
Baidu.Aip.Ocr.Ocr是文字识别的交互类,为使用文字识别的开发人员提供了一系列的交互方法。
用户可以参考如下代码新建一个交互类:
// 设置APPID/AK/SK
var APP_ID = "你的 App ID";
var API_KEY = "你的 Api Key";
var SECRET_KEY = "你的 Secret Key";
var client = new Baidu.Aip.Ocr.Ocr(API_KEY, SECRET_KEY);
client.Timeout = 60000; // 修改超时时间
在上面代码中,常量APP_ID
在百度云控制台中创建,常量API_KEY
与SECRET_KEY
是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的应用列表中查看。
注意:如您以前是百度云的老用户,其中API_KEY
对应百度云的“Access Key ID”,SECRET_KEY
对应百度云的“Access Key Secret”。
用户向服务请求识别某张图中的所有文字
// 设置APPID/AK/SK
public static string APP_ID = "你的APP_ID";
public static string API_KEY = "你的API_KEY";
public static string SECRET_KEY = "你的SECRET_KEY";
public Baidu.Aip.Ocr.Ocr client = new Baidu.Aip.Ocr.Ocr(API_KEY, SECRET_KEY);
//通过图片提取文字
public JsonResult GetImgText(string UserName)
{
if (Request.Files.Count > 0)
{
Request.Files[0].SaveAs(Server.MapPath("~/Img/") + UserName + "_" + Path.GetFileName(Request.Files[0].FileName));
var image = System.IO.File.ReadAllBytes(Server.MapPath("~/Img/") + UserName + "_" + Path.GetFileName(Request.Files[0].FileName));
// 调用通用文字识别, 图片参数为本地图片,可能会抛出网络等异常,请使用try/catch捕获
var result = client.GeneralBasic(image);
// 如果有可选参数
var options = new Dictionary{
{"language_type", "CHN_ENG"},
{"detect_direction", "true"},
{"detect_language", "true"},
{"probability", "true"}
};
// 带参数调用通用文字识别, 图片参数为本地图片
result = client.GeneralBasic(image, options);
System.Diagnostics.Debug.WriteLine(result);
System.IO.File.Delete(Server.MapPath("~/Img/") + UserName + "_" + Path.GetFileName(Request.Files[0].FileName));
return Json(result.ToString());
}
else {
return Json(null);
}
}
public JsonResult GeneralBasicDemo()
{
var filePath = Server.MapPath(string.Format("~/Img", "File"));//项目下的目录
var image = System.IO.File.ReadAllBytes(Path.Combine(filePath, "sfzb.jpg"));//注意File有可能无法识别,所以需要完整的引用-System.IO.File
// 调用通用文字识别, 图片参数为本地图片,可能会抛出网络等异常,请使用try/catch捕获
var result = client.GeneralBasic(image);
Console.WriteLine(result);
return Json(result);
// 如果有可选参数
//var options = new Dictionary{
// {"language_type", "CHN_ENG"},
// {"detect_direction", "true"},
// {"detect_language", "true"},
// {"probability", "true"}
//};
带参数调用通用文字识别, 图片参数为本地图片
//result = client.GeneralBasic(image, options);
//Console.WriteLine(result);
}
public void GeneralBasicUrlDemo()
{
var url = "http//www.x.com/sample.jpg";
// 调用通用文字识别, 图片参数为远程url图片,可能会抛出网络等异常,请使用try/catch捕获
var result = client.GeneralBasicUrl(url);
Console.WriteLine(result);
// 如果有可选参数
//var options = new Dictionary{
// {"language_type", "CHN_ENG"},
// {"detect_direction", "true"},
// {"detect_language", "true"},
// {"probability", "true"}
//};
带参数调用通用文字识别, 图片参数为远程url图片
//result = client.GeneralBasicUrl(url, options);
//Console.WriteLine(result);
}
前台代码(用到了layui前台框架):
@{
Layout = null;
}
百度云OCR技术
百度云OCR技术
提取图片中的 文字|数字|.|-
通用文字识别 请求参数详情
参数名称 | 是否必选 | 类型 | 可选值范围 | 默认值 | 说明 |
---|---|---|---|---|---|
image | 是 | byte[] | 二进制图像数据 | ||
url | 是 | string | 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,当image字段存在时url字段失效 | ||
language_type | 否 | string | CHN_ENG ENG POR FRE GER ITA SPA RUS JAP KOR |
CHN_ENG | 识别语言类型,默认为CHN_ENG。可选值包括: - CHN_ENG:中英文混合; - ENG:英文; - POR:葡萄牙语; - FRE:法语; - GER:德语; - ITA:意大利语; - SPA:西班牙语; - RUS:俄语; - JAP:日语; - KOR:韩语; |
detect_direction | 否 | string | true false |
false | 是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括: - true:检测朝向; - false:不检测朝向。 |
detect_language | 否 | string | true false |
false | 是否检测语言,默认不检测。当前支持(中文、英语、日语、韩语) |
probability | 否 | string | true false |
是否返回识别结果中每一行的置信度 |
通用文字识别 返回数据参数详情
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
direction | 否 | number | 图像方向,当detect_direction=true时存在。 - -1:未定义, - 0:正向, - 1: 逆时针90度, - 2:逆时针180度, - 3:逆时针270度 |
log_id | 是 | number | 唯一的log id,用于问题定位 |
words_result_num | 是 | number | 识别结果数,表示words_result的元素个数 |
words_result | 是 | array | 定位和识别结果数组 |
+words | 否 | string | 识别结果字符串 |
probability | 否 | object | 行置信度信息;如果输入参数 probability = true 则输出 |
+average | 否 | number | 行置信度平均值 |
+variance | 否 | number | 行置信度方差 |
+min | 否 | number | 行置信度最小值 |
调用方法的ajax:
$.ajax({
type: "post",
url: "/Home/GeneralBasicDemo",
data: {},
dataType: "json",
success: function(data){
});
通用文字识别 返回示例
{
"log_id": 2471272194,
"words_result_num": 2,
"words_result":
[
{"words": " TSINGTAO"},
{"words": "青島睥酒"}
]
}