C# 通过阿里云 API 实现企业营业执照OCR识别

2024-04-25 23:36

本文主要是介绍C# 通过阿里云 API 实现企业营业执照OCR识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

目录

应用场景

关于阿里云企业营业执照OCR识别

开发运行环境

类设计

类属性

类方法

实现代码

创建 Company 类

调用举例 

小结


应用场景

企业营业执照犹如个人的身份证一样,是​​​​​​​工商管理机关发给企业、个体经营者的准许从事某项生产活动的凭证。在企业会员后台注册系统中,验证电子营业执照是一项常用功能,用户上传电子营业执照图片,再通过云API服务的方式进行验证及提取相关的所有信息:主要包括工商信息(如公司名称、法人姓名、经营范围等),位置信息(如二维码位置、印章位置、国徽位置等)。

自动化提取的企业工商可以提高录入效率和准确率,另外位置信息可以帮助我们截取图象做更多的业务处理。

本文将以阿里云提供的 API 服务,实现通过对上传的企业营业执照电子图片进行OCR的识别功能。

关于阿里云企业营业执照OCR识别

官方介绍其每天更新全国企业、个体工商户的数据,为营业执照的OCR识别提供基础服务。

更多信息内容请参照:企业工商数据查询、公司营业执照验证、企业信息查询验证API接口【按天更新】支持新注册企业、个体工商户【最新版】_电商_数据_CRM-云市场-阿里云

开发前请准备如下操作:

1. 注册阿里云账号。

2. 获取开发者 AppCode,后继开发会用到。

开发运行环境

操作系统: Windows Server 2019 DataCenter

.net版本: .netFramework4.0 或以上

开发工具:VS2019  C#

类设计

类 Company (企业类) 设计见下表:

类属性

序号属性名类型说明
1ErrorMessagestring发生任何异常返回的错误信息
2ResultJsonstring请求返回结果Json完整数据
3anglestring图片的角度(顺时针旋转),[0, 90, 180,270]
4reg_numstring注册号,没有识别出来时返回"FailInRecognition"
5namestring公司名称,没有识别出来时返回"FailInRecognition"
6typestring公司类型,没有识别出来时返回"FailInRecognition"
7personstring公司法人,没有识别出来时返回"FailInRecognition"
8establish_datestring公司注册日期(例:证件上为"2014年04月16日",算法返回"20140416")
9valid_periodstring公司营业期限终止日期(例:证件上为"2014年04月16日至2034年04月15日",算法返回"20340415"),当前算法将日期格式统一为输出为"年月日"(如"20391130"),并将"长期"表示为"29991231",若证件上没有营业期限,则默认其为"长期",返回"29991231"
10addressstring公司地址,没有识别出来时返回"FailInRecognition"
11capitalstring注册资本,没有识别出来时返回"FailInRecognition"
12businessstring#经营范围,没有识别出来时返回"FailInRecognition"
13emblemstring#国徽位置[top,left,height,width],没有识别出来时返回"FailInDetection"
14titlestring标题位置[top,left,height,width],没有识别出来时返回"FailInDetection"
15stampstring印章位置[top,left,height,width],没有识别出来时返回"FailInDetection"
16qrcodestring二维码位置[top,left,height,width],没有识别出来时返回"FailInDetection"
17is_graystring是否是复印件
18successstring识别成功与否 true/false

类方法

ocr_business_license 方法无返回类型,调用均返回对应的类属性数据,参数见如下表格:

序号参数名类型说明
1UrlorBase64string传递完整的图片 Url 或者图片的Base64编码

本方法返回 string 类型的对应属性值(如果成功的话)。

实现代码

创建 Company 类

public class Company
{public string ResultJson="";public string ErrorMessage = "";public string angle = "";// : float, #输入图片的角度(顺时针旋转),[0, 90, 180,270]public string reg_num = "";// : string, #注册号,没有识别出来时返回"FailInRecognition"public string name = "";// : string, #公司名称,没有识别出来时返回"FailInRecognition"public string type = "";// : string, #公司类型,没有识别出来时返回"FailInRecognition"public string person="";// : string, #公司法人,没有识别出来时返回"FailInRecognition"public string establish_date = "";// string, #公司注册日期(例:证件上为"2014年04月16日",算法返回"20140416")public string valid_period = "";//: string, #公司营业期限终止日期(例:证件上为"2014年04月16日至2034年04月15日",算法返回"20340415")//    #当前算法将日期格式统一为输出为"年月日"(如"20391130"),并将"长期"表示为"29991231",若证件上没有营业期限,则默认其为"长期",返回"29991231"。public string address = "";// : string, #公司地址,没有识别出来时返回"FailInRecognition"public string capital = "";// : string, #注册资本,没有识别出来时返回"FailInRecognition"public string business = "";// string, #经营范围,没有识别出来时返回"FailInRecognition"public string emblem = "";// : string, #国徽位置[top,left,height,width],没有识别出来时返回"FailInDetection"public string title = "";// : string, #标题位置[top,left,height,width],没有识别出来时返回"FailInDetection"public string stamp = "";// : string, #印章位置[top,left,height,width],没有识别出来时返回"FailInDetection"public string qrcode = "";// : string, #二维码位置[top,left,height,width],没有识别出来时返回"FailInDetection"public string is_gray = "";//: false,   #是否是复印件public string success="";// : bool, #识别成功与否 true/falsepublic void ocr_business_license(string UrlorBase64){string host = "https://dm-58.data.aliyun.com";string path = "/rest/160601/ocr/ocr_business_license.json";string method = "POST";String appcode = "您的AppCode";String querys = "";String bodys = "{\"image\":\""+UrlorBase64+"\"}"; String url = host + path;HttpWebRequest httpRequest = null;HttpWebResponse httpResponse = null;if (0 < querys.Length){url = url + "?" + querys;}if (host.Contains("https://")){ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);httpRequest = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));}else{httpRequest = (HttpWebRequest)WebRequest.Create(url);}httpRequest.Method = method;httpRequest.Headers.Add("Authorization", "APPCODE " + appcode);if (0 < bodys.Length){byte[] data = Encoding.UTF8.GetBytes(bodys);using (Stream stream = httpRequest.GetRequestStream()){stream.Write(data, 0, data.Length);}}try{httpResponse = (HttpWebResponse)httpRequest.GetResponse();}catch (WebException ex){ErrorMessage = ex.Message;httpResponse = (HttpWebResponse)ex.Response;return;}Stream st = httpResponse.GetResponseStream();StreamReader reader = new StreamReader(st, Encoding.GetEncoding("utf-8"));ResultJson = (reader.ReadToEnd());if (ResultJson.IndexOf("\"success\":true") == -1&& ResultJson.IndexOf("\"success\":false")==-1){return;}Newtonsoft.Json.Linq.JObject jsonObj = Newtonsoft.Json.Linq.JObject.Parse(ResultJson);angle = jsonObj["angle"].ToString();reg_num = jsonObj["reg_num"].ToString();name = jsonObj["name"].ToString();type = jsonObj["type"].ToString();person = jsonObj["person"].ToString();establish_date = jsonObj["establish_date"].ToString();valid_period = jsonObj["valid_period"].ToString();capital = jsonObj["capital"].ToString();business = jsonObj["business"].ToString();emblem = jsonObj["emblem"].ToString();title = jsonObj["title"].ToString();stamp = jsonObj["stamp"].ToString();qrcode = jsonObj["qrcode"].ToString();is_gray = jsonObj["is_gray"].ToString();success = jsonObj["success"].ToString();}
}

调用举例 

调用判断 success 字段是否为true,为true则表示成功,继续输出具体值。

示例代码如下:

string result_base64 = ImgToBase64String("d:\\1.jpg", true);
Company cp = new Company();
cp.ocr_business_license(result_base64);
if (cp.success == "true")
{Response.Write("图片的角度:" + cp.angle + "<br>");Response.Write("注册号:" + cp.reg_num + "<br>");Response.Write("公司名称:" + cp.name + "<br>");Response.Write("公司类型:" + cp.type + "<br>");Response.Write("公司法人:" + cp.person + "<br>");Response.Write("公司注册日期:" + cp.establish_date + "<br>");Response.Write("公司营业期限终止日期:" + cp.valid_period + "<br>");Response.Write("公司地址:" + cp.bussiness + "<br>");Response.Write("注册资本:" + cp.capital + "<br>");Response.Write("经营范围:" + cp.bussiness + "<br>");Response.Write("国徽位置:" + cp.emblem + "<br>");Response.Write("标题位置:" + cp.title + "<br>");Response.Write("印章位置:" + cp.stamp + "<br>");Response.Write("二维码位置:" + cp.qrcode + "<br>");Response.Write("是否是复印件:" + cp.bussiness + "<br>");
}
else
{Response.Write("错误信息:" + cp.ErrorMessage + "<br>");Response.Write("JSON返回信息:" + cp.ResultJson + "<br>");
}

小结

调用云接口服务需要费用,我们需要根据实际应用进行成本考虑,官方说明如果查询失败则不扣除费用,具体内容可参考本文第二小节关于阿里云关于阿里云企业营业执照OCR识别API中的链接。

 如何获取图像 base64 数据的方法请参照我的文章:《C# 自动填充文字内容到指定图片》

感谢您的阅读,希望本文能够对您有所帮助。

这篇关于C# 通过阿里云 API 实现企业营业执照OCR识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936101

相关文章

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文