WinForm使用百度AI识别文字(OCR)

先进行一下效果展示:

WinForm使用百度AI识别文字(OCR)_第1张图片

!!!记得先到Nuget中添加Baidu.AI的拓展包并且添加三个引用:

using Newtonsoft.Json.Linq;
using Baidu.Aip.Ocr;
using System.IO;

接下来是代码解析:

        1.UI设计

            按下上传按钮加载一张图片到预览框内:

             预览框由一个图片控件组成,在按下上传按钮时将指定路径的图片加载为图片模式且将控件的数据源切换为此图片,同时用全局变量ImgPath来记录所获取的文件位置(懒得做接口了)

OpenFileDialog FileImg = new OpenFileDialog();
FileImg.ShowDialog();
ImgPath = FileImg.FileName;
ImgShow.Image = Image.FromFile(FileImg.FileName);

        2.识别

             原理是将图片转换为二进制流传输到百度AI然后返回一段JSON给程序,百度官方提供了很多方法可供选择,包括手写体识别和一些特殊文件如身份证等。

百度AI的官网如下:http://ai.baidu.com/

            if (ImgPath == "")
                MessageBox.Show("请先选择图片", "提醒");
            Ocr client = new Ocr(apiKey, secretKey)
            {
                Timeout = 30000//延时时间
            };
            try
            {
                byte[] image = File.ReadAllBytes(ImgPath);//需要识别的图片路径
                JObject result = new JObject();
                result = client.GeneralBasic(image);//打印体标准识别
                //result = client.Handwriting(image);//手写
                List WordsList = AnayJson(result.Last.ToString());
                foreach (var item in WordsList)
                {
                    string Template = item + "\r\n";
                    txtDetail.Text += Template;
                }
            }
            catch (Exception)
            {
                MessageBox.Show("出现了意料之外的错误", "提示:");
            }

其中:apiKey和secretKey为你自己的API接口(可定义为全局变量方便使用)

返回的JSON字符串对象结构如下

WinForm使用百度AI识别文字(OCR)_第2张图片

可见我们需要的数据为result.Last中的数据,Json格式格式大致如下:

WinForm使用百度AI识别文字(OCR)_第3张图片

由于我不太想去构建用于Json结构的数据模型(还是懒),于是在这里采用了手写的算法。

由图我们不难看出用 " 号将数据切割开来即可得出一个个单独的对象,将这些数据悉数填充到泛型集合中

然后检查泛型集合中的": ",再获取": "的下一个元素即可得到所识别到的语句

获取到的string集合如下:

List AnayJson(string Origin)
        {
            string[] StringArray = Origin.Split('"');    //按照“ ”进行切割
            List WordsList = new List();
            for (int i = 0; i < StringArray.Length; i++)
            {
                if (StringArray[i] == ": ")
                {
                    string TemplateStr = StringArray[i + 1];
                    TemplateStr.Replace("\"", "");
                    WordsList.Add(TemplateStr);
                }
            }
            return WordsList;
        }

将解析完成的泛型集合返回给主程序即可完成一次文字识别了

最后放一张证件测试的图片,效果出乎意料的好

WinForm使用百度AI识别文字(OCR)_第4张图片

你可能感兴趣的:(WinForm)