WinForm使用百度AI识别文字(OCR)
先进行一下效果展示:
!!!记得先到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的官网如下:百度AI开放平台-全球领先的人工智能服务平台
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<string> 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字符串对象结构如下
可见我们需要的数据为result.Last中的数据,Json格式格式大致如下:
由于我不太想去构建用于Json结构的数据模型(还是懒),于是在这里采用了手写的算法。
由图我们不难看出用 " 号将数据切割开来即可得出一个个单独的对象,将这些数据悉数填充到泛型集合中
然后检查泛型集合中的": ",再获取": "的下一个元素即可得到所识别到的语句
获取到的string集合如下:
List<string> AnayJson(string Origin){string[] StringArray = Origin.Split('"'); //按照“ ”进行切割List<string> WordsList = new List<string>();for (int i = 0; i < StringArray.Length; i++){if (StringArray[i] == ": "){string TemplateStr = StringArray[i + 1];TemplateStr.Replace("\"", "");WordsList.Add(TemplateStr);}}return WordsList;}
将解析完成的泛型集合返回给主程序即可完成一次文字识别了
最后放一张证件测试的图片,效果出乎意料的好
----------------------------------------------------------------分割线--------------------------------------------------------
2022年7月28日订正
由于百度修改了数据协议,需要将reslut.Last.ToString()修改为reslutToString()
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<string> WordsList = AnayJson(result.ToString());foreach (var item in WordsList){string Template = item + "\r\n";txtDetail.Text += Template;}}catch (Exception){MessageBox.Show("出现了意料之外的错误", "提示:");}
同时在使用中出现了大批量访问超限的问题,建议在识别的时候加个延迟,避免段时间大量访问被ban的情况(土豪请充钱随意)
foreach (var item in objOpen.FileNames){Temp.Add(GoToOCR(item.ToString()));Thread.Sleep(5000);//防止过快访问}
同时现百度AI需要实名认证之后送每月1000次的免费识别套餐,实测并不需要费用
同时上传了最新的测试Demo,各位小伙伴可以用来学习
新版测试Demo下载
WinForm使用百度AI识别文字(OCR)相关推荐
- python调用百度AI识别文字和表格
python调用百度AI识别文字和表格 获取账户信息 1.需要先注册百度AI,获得ID和密钥.百度AI社区关于注册的详细说明:https://ai.baidu.com/forum/topic/show ...
- python 百度ai批量识别_Python基于百度AI的文字识别的示例
Python基于百度AI的文字识别的示例 使用百度AI的文字识别库,做出的调用示例,其中filePath是图片的路径,可以自行传入一张带有文字的图片,进行识别. 下载baidu-aip这个库,可以直接 ...
- 百度AI识别图片文字
判断图片格式,转换为Jpg格式,为图片文字识别做准备 # !/usr/bin/env python # -*- coding: utf-8 -*- # 转换图片格式为jpg格式import os fr ...
- 基于百度AI的文字识别(Python语言)
简 介:百度大脑是百度 AI 核心技术引擎,包括视觉.语音.自然语言处理.知识图谱.深度学习等AI核心技术和AI开放平台.本文介绍百度 AI 核心技术中文字识别功能的使用方法. 关键词:百度AI.文字 ...
- ai图像识别python的项目_Python3调用百度AI识别图片中的文字功能示例【测试可用】...
本文实例讲述了Python3调用百度AI识别图片中的文字功能.分享给大家供大家参考,具体如下: 首先pip install命令安装baidu-aip模块,如下图所示(这里使用pip3 install ...
- python 利用百度AI实现文字识别(cv2 + aip module)
python 利用百度AI实现文字识别(cv2 + aip module) (该案例将利用cv2,aip等模块,详细的安装以及使用的方法将在后文进行简单的介绍.) 一.KNN算法的简介(机器学习算法之 ...
- python 百度云文字识别 proxy_Python基于百度AI的文字识别的示例
Python基于百度AI的文字识别的示例 发布时间:2020-10-03 14:52:27 来源:脚本之家 阅读:66 使用百度AI的文字识别库,做出的调用示例,其中filePath是图片的路径,可以 ...
- Python调用百度AI识别身份证
本文介绍应用百度AI的文字识别功能对身份证进行识别,感兴趣的朋友一起来看看效果吧. 一.安装baidu-aip模块 按win+R打开cmd,在里面输入 pip3 install baidu ...
- Python用百度AI识别车牌号教程(超详细)
Python用百度AI识别车牌号教程 创建API接口 用浏览器打开http://ai.baidu.com/ 点击右上角的"控制台" 登录账号(没有就注册一个) 点击 产品服务> ...
最新文章
- 《赛博朋克2077》是捏脸游戏?上科大学生社团开发了一款赛博“滤镜”
- vue开发页面自适应_vue-cli 【flexible】屏幕字体自适应布局及配置
- python查数据库写入excel_【Python】将数据库中的数据查询出来自动写入excel文档...
- hub设备_USB不够用,一个HUB全部搞定!ORICO 群控USB扩展器
- Ansible搭建hadoop3.1.3高可用集群
- 【8086汇编-Day6】关于loop的实验
- java类成员初始化_简单了解Java类成员初始化顺序
- [算法天天练] 归并排序
- 深入理解Java中的逃逸分析
- 遥感影像处理有高招,“专治”各类花式并发的述求!
- 阿里云 wdcp面板后台控制安装
- P4859 已经没有什么好害怕的了
- Flutte的ListView不能直接嵌套ListView解决办法
- python学习之小说爬虫
- iphone开发常用代码
- 贾玲,这次你是不是可以真的快乐了?
- 03 在CentOS7中安装oracle11g
- Winfrom 常用控件(二)
- Pytorch聊天机器人
- 阿里云服务器和虚拟主机之间的区别
热门文章
- UML(一)——面向对象方法与软件过程模型
- SQL导入excel用---EXCEL如何批量添加逗号
- VBA多个WORD文档表格数据写入到EXCEL中
- springboot毕设项目高速公路联网收费系统13z1s(java+VUE+Mybatis+Maven+Mysql)
- 2019年免费抢票神器
- 联想手机刷机了数据丢失了怎么办?
- SOLIDWORKS和CATIA两款三维设计软件区别
- vue实现消息badge 标记_一天一个 Element 组件 - Badge
- 《汇编语言》知识重点总结
- 3月份不良与垃圾信息举报:垃圾邮件占31.7%