liu8359 发表于 2020-9-9 14:34

C#Winfrom基于百度Ai开放平台进行个人文字识别

本帖最后由 liu8359 于 2020-9-9 14:44 编辑


一.下载dll
1.在官方网站下载C# SDK压缩工具包。下载地址:https://ai.baidu.com/file/7D961BC013AB4AA7905001FAF89EE327
2.解压后,将 AipSdk.dll 和 Newtonsoft.Json.dll 中添加为引用。
二.获取API Key/Secret Key
1.打开百度智能云官网进行注册后登陆。网址:https://cloud.baidu.com/?from=console

2.进入文字识别工作台,这有很多接口可以都试试。

3.创建应用


4.管理应用


三.代码部分
上传照片访问Api,输出字符串
       string savePath = null;            //保存路径文件夹
      string newPath = null;            //保存路径
      string photoName = null;            //图片名称
      string saveName = null;         //保存名称
      
      /// <summary>
      /// 上传照片访问Api,输出字符串
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void button1_Click(object sender, EventArgs e)
      {
            //上传照片
            OpenFileDialog op = new OpenFileDialog();
            if (op.ShowDialog() == DialogResult.OK)
            {
                UploadPhoto(op);
            }

            //访问API
            var result = GetBaiDuApi();

            //获取字符串"["位置
            int IndexofA = result.ToString().IndexOf("[");
            int IndexofB = result.ToString().IndexOf("]");
            //截取位数字符串
            string baiDuApiJson = result.ToString().Substring(IndexofA, IndexofB - IndexofA + 1);
            //JSON转List
            JavaScriptSerializer baiDuApiSerializer = new JavaScriptSerializer();
            List<model> wordsModelList = baiDuApiSerializer.Deserialize<List<model>>(baiDuApiJson);
            
            //list转string
            List<string> StrList = new List<string>();
            wordsModelList.ForEach(t =>
            {
                string str = null;
                if (!string.IsNullOrEmpty(t.words))
                  str = t.words;
                StrList.Add(str);
            });
            string resultStr = string.Join("", StrList.ToArray());
            //文本框输出字符串
            this.textBox1.Text = resultStr;
      }
上传图片
/// <summary>
      /// 上传照片
      /// </summary>
      /// <returns></returns>
      private void UploadPhoto(OpenFileDialog op)
      {

            FileInfo fi = new FileInfo(op.FileName);
            if (fi.Exists)
            {
                //获取所在项目目录+"\temp"
                savePath = System.Windows.Forms.Application.StartupPath + @"\temp";
                photoName = fi.Name;
                //确保文件名称唯一性
                saveName = photoName.Substring(0, photoName.LastIndexOf(".")) + "_"
                + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "." + photoName.Substring(photoName.LastIndexOf(".") + 1);

                //savePath=@"D:\temp";
                //saveName="result.txt";
                //newPath = "D:\temp\result.txt";
                newPath = Path.Combine(savePath, saveName);

                //是否存在这个文件夹==存在?跳过:创建;
                if (!Directory.Exists(savePath))
                {
                  Directory.CreateDirectory(savePath);
                }
                //保存照片
                fi.CopyTo(newPath);
            }
      }

访问百度API
/// <summary>
      /// 访问百度API
      /// </summary>
      /// <returns></returns>
      public JObject GetBaiDuApi()
      {
            var API_KEY = "你的 Api Key";
            var SECRET_KEY = "你的 Secret Key";
            //访问接口
            var client = new Baidu.Aip.Ocr.Ocr(API_KEY, SECRET_KEY);
            client.Timeout = 60000;// 修改超时时间


            var image = File.ReadAllBytes(newPath);
            //var url = "图片网址";

            // 调用通用文字识别, 图片参数为本地图片,可能会抛出网络等异常,请使用try/catch捕获
            //用户向服务请求识别某张图中的所有文字
            var result = client.GeneralBasic(image);      //本地图图片
            //var result = client.GeneralBasicUrl(url);   //网络图片
            //var result = client.Accurate(image);          //本地图片:相对于通用文字识别该产品精度更高,但是识别耗时会稍长。

            //var result = client.General(image);         //本地图片:通用文字识别(含位置信息版)
            //var result = client.GeneralUrl(url);          //网络图片:通用文字识别(含位置信息版)

            //var result = client.GeneralEnhanced(image);   //本地图片:调用通用文字识别(含生僻字版)
            //var result = client.GeneralEnhancedUrl(url);//网络图片:调用通用文字识别(含生僻字版)

            //var result = client.WebImage(image);          //本地图片:用户向服务请求识别一些背景复杂,特殊字体的文字。
            //var result = client.WebImageUrl(url);         //网络图片:用户向服务请求识别一些背景复杂,特殊字体的文字。

            return result;
      }


model
/// <summary>
    /// model
    /// </summary>
    public class model
    {
      public string words{get;set;}
    }


蓝奏云下载:https://www.lanzoui.com/iq480gh576b
土豪下载

liu8359 发表于 2020-9-9 14:54

rosemaryzed 发表于 2020-9-9 14:50
这个接口免费么 速度怎么样 可否研究下图片转文字

速度蛮快的。
通用文字识别(标准版),免费使用,50000次/天免费QPS限制 2

美的随想 发表于 2020-9-9 16:27

liu8359 发表于 2020-9-9 15:33
原谅我没文化,第一次听说INI

也就是把key等参数放在配置文件里,C#的config文件

辉夜年华 发表于 2020-9-9 14:44

差点以为是人脸识别

liu8359 发表于 2020-9-9 14:46

辉夜年华 发表于 2020-9-9 14:44
差点以为是人脸识别

有人脸识别的API没研究呢{:17_1054:}

rosemaryzed 发表于 2020-9-9 14:50

这个接口免费么 速度怎么样 可否研究下图片转文字

辉夜年华 发表于 2020-9-9 15:06

liu8359 发表于 2020-9-9 14:46
有人脸识别的API没研究呢

研究研究,我估计很难,毕竟没素材

weikun444 发表于 2020-9-9 15:12

感谢交流,做成INI文件保存参数也是好的选择!

llq@xsh 发表于 2020-9-9 15:18

谢谢楼主的教程

liu8359 发表于 2020-9-9 15:33

weikun444 发表于 2020-9-9 15:12
感谢交流,做成INI文件保存参数也是好的选择!

{:1_893:}原谅我没文化,第一次听说INI

ChengXuHa 发表于 2020-9-9 15:35

主楼 代码有点问题想要请教,21156456方便联系一下吧。
页: [1] 2
查看完整版本: C#Winfrom基于百度Ai开放平台进行个人文字识别