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

相关文章

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

使用C#如何创建人名或其他物体随机分组

《使用C#如何创建人名或其他物体随机分组》文章描述了一个随机分配人员到多个团队的代码示例,包括将人员列表随机化并根据组数分配到不同组,最后按组号排序显示结果... 目录C#创建人名或其他物体随机分组此示例使用以下代码将人员分配到组代码首先将lstPeople ListBox总结C#创建人名或其他物体随机分组