利用百度OCR的接口实现文字识别的功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/laizhixue/article/details/84764945

本篇文章介绍利用百度OCR的C#接口实现文字识别。点击进入百度OCR
进入官网后,点击SDK下载,选择下载C# SDK(http://ai.baidu.com/sdk)。

安装文字识别 C# SDK

C# SDK 现已开源! https://github.com/Baidu-AIP/dotnet-sdk

** 支持平台:.Net Framework 3.5 4.0 4.5, .Net Core 2.0 **

方法一:使用Nuget管理依赖 (推荐)

在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_KEYSECRET_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<string, object>{
                {"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<string, object>{
            //    {"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<string, object>{
            // {"language_type", "CHN_ENG"},
            //   {"detect_direction", "true"},
            //  {"detect_language", "true"},
            // {"probability", "true"}
            //};
            //// 带参数调用通用文字识别, 图片参数为远程url图片
            //result = client.GeneralBasicUrl(url, options);
            //Console.WriteLine(result);
        }

前台代码(用到了layui前台框架):

@{
    Layout = null;
}
<html>
<head>
    <title>百度云OCR技术</title>
</head>
<body>
    <h1>百度云OCR技术</h1>
    <h2>提取图片中的 文字|数字|.|-</h2>
    <div id="main" style="height:500px;width:500px;">
        <form id="ocr_form" action="#" method="post" enctype="multipart/form-data">
            <input type="file" id="ocr_form_imgSelBtn" />
            <button type="submit" id="ocr_form_submit" hidden >提交</button>
        </form>
    </div>
</body>
</html>
<script src="~/PageUI/MyInfoIndexUi/js/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script src="~/layui/layui.js" type="text/javascript" charset="utf-8"></script>
<script>
    $(function () {
        layui.use('upload', function () {
            var $ = layui.jquery
            , upload = layui.upload;
            var ocr = upload.render({
                elem: '#ocr_form_imgSelBtn'
              , url: "/Home/GetImgText"
              , method: 'post'
              , accept: "images"
              , before: function (obj) {
                  this.data = { "UserName": "test"};//额外参数关键代码
              }
              , done: function (data) {
                  var regx = /^[\u4e00-\u9fa5 -.a-zA-Z0-9]+$/
                  var jsons = "";
                  for (var i = 0; i < data.words_result_num; i++) {
                      if (regx.test(data.words_result[i].words)) {
                          jsons += data.words_result[i].words + "<br\>";
                      }
                  }
                  layer.alert(jsons);
              }
              , error: function () {
                  //失败状态,并实现重传
                  var demoText = $('#demoText');
                  demoText.html('<span style="color: #FF5722;">上传失败</span> <br/><a class="layui-btn layui-btn-mini demo-reload layui-btn-normal">重试</a>');
                  demoText.find('.demo-reload').on('click', function () {
                      uploadInst.upload();
                  });
              }
            });

        });
    });

</script>

通用文字识别 请求参数详情

参数名称 是否必选 类型 可选值范围 默认值 说明
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": "青島睥酒"}
    ]
}

猜你喜欢

转载自blog.csdn.net/laizhixue/article/details/84764945