• [技术干货] 实战案例!Python批量识别银行卡号码并且写入Excel,小白也可以轻松使用~【转】
    今天我们就来学习一下,如何用1行代码,自动识别银行卡信息并且自动生成Excel文件~ 第一步:识别一张银行卡识别银行卡的代码最简单,只需要1行腾讯云AI的第三方库potencent的代码,如下所示。左右滑动,查看全部。👇# pip install potencent import potencent # 可以填写本地图片的地址:img_path,也可以填写在线图片的地址:img_url # 如果2个都填,则只用在线图片 res = potencent.ocr.BankCardOCR( img_path=r'C:\Users\程序员晚枫的文件夹\银行卡图片', img_url='https://python-office-1300615378.cos.ap-chongqing.myqcloud.com/2-free-group.jpg', configPath=r'配置文件的信息,可以不填,默认是同级目录下的potencent-config.toml') print(res)识别后的返回结果,几乎涵盖所有银行卡上肉眼可见的内容。👇{ "CardNo": "621700888888888889", "BankInfo": "建设银行(01050000)", "ValidDate": "08/2026", "CardType": "借记卡", "CardName": "龙卡通", "RequestId": "86b70007-3ef5-4b7e-8685-556b0a7df1c9" }支持对中国大陆主流银行卡正反面关键字段的检测与识别,包括卡号、卡类型、卡名字、银行信息、有效期。支持竖排异形卡识别、多角度旋转图片识别。支持对复印件、翻拍件、边框遮挡的银行卡进行告警,可应用于各种银行卡信息有效性校验场景,如金融行业身份认证、第三方支付绑卡等场景。 以上代码中,关于potencent-config.toml的配置方法,可以参考昨天视频的讲解👇第二步:写入Excel想把上面这个代码用来识别大量银行卡信息,并且将识别后的返回数据,全部写入Excel文件。代码如下👇import os from os.path import join import pandas as pd # home_path = "你存放大量银行卡图片的位置" home_path = r"C:\Users\Lenovo\Desktop\temp\test\card" res_df = pd.DataFrame() for (root, dirs, files) in os.walk(home_path): for file in files: single_res = potencent.ocr.BankCardOCR(img_path=join(root, file)) single_res = json.loads(single_res.to_json_string()) line_df = pd.DataFrame(single_res, index=[0]) print(line_df) res_df = res_df.append(other=line_df) print(res_df) res_df.to_excel(r"./银行卡信息(程序员晚枫).xlsx")运行后的结果如下,会在同级目录下,生成一个Excel文件 第三步:优化思路以上代码还可以进一步优化,例如:路径处理改为Path方法,适配更多的平台变量名称更简洁index改为序号但优化的前提是程序能运行成功,赶紧去跑起来吧~转载自:cid:link_0
  • [技术干货] 华为云OCR服务
    1.简要介绍华为云OCR服务华为云文字识别主要分为:通用类、证件类、票据类、行业类、定制类。1.1 通用类OCR服务接口通用表格识别通用文字识别网络截图识别签名盖章检测手写数字字母识别OCR优势识别精度高,支持不同版面自适应分析自动化匹配信息,提升审核准确度提高效率,节约人工成本1.2 证件类OCR服务接口身份证识别行驶证识别驾驶证识别护照检测缅甸身份证识别OCR优势识别精度高,支持任意角度倾斜、缺角、反光、复杂背景等场景的卡证识别支持外语证件的订制OCR识别通过卡证识别,快速完成快递录单、手机开户等场景信息录入,实名认证1.3 票据类OCR服务接口增值税发票识别医疗发票识别机动车销售发票识别海关清关单据识别OCR优势支持多种票据自动识别,结构化提取多项关键信息支持图像翻转、文字错行、盖章干扰等复杂场景,数字、符号等文本识别精度高1.4 行业类OCR服务接口物流电子面单识别物流纸质面单识别医疗化验单据识别OCR优势行业解决方案成熟支持姓名、地址、电话等关键字段自动提取支持复杂背景、扭曲等情况1.5 定制类服务功能用户自定义模板,识别各类证件、票据专属API定制开发,满足高精度特殊场景OCR优势可视化界面操作,用户轻松指定识别区域,完成模板设计并调用服务接口对各类证件、票据定制独立模板,适应不同格式图片的自动识别及结构化提取2.华为云OCR服务的应用场景华为云OCR服务的应用场景主要有:身份验证场景物流快递场景2.1 身份验证场景在金融、证券、保险、政务、安防等众多领域中,大量场景需要对客户进行身份验证。本服务可审核证件是否为原件,有效防止照片翻拍、复印件翻拍、P图等欺骗行为,识别证件中的文字内容,并对接公安系统验证身份是否真实有效。2.2 物流快递场景物流快递场景用到OCR服务主要有两个方面:快递员取件填写运单、提取运单信息存入系统。物流快递场景主要流程如下:2.2.1 快递员取件填写运单1、身份证OCR:实名认证取件时,移动端APP:身份证拍照、识别、校验速度快:<1秒;精度高:>98%2、网络截图OCR电商收到买家地址截图、聊天截图OCR识别、自动提取信息(姓名、地址、电话等)快递员取件填写运单:华为云OCR能够准确识别不同角度、复杂背景图片,简化录入过程,提高服务效率。2.2.2 提取运单信息存入系统1、电子面单OCR自动提取:编号信息,收/寄件人姓名、电话、地址平均字符精度:99%2、纸质面单OCR文字检测:特定内容是否填写盖章检测:是否盖章(检视章),合规性检测等提取运单信息存入系统:华为云OCR能够智能处理各种复杂背景,提取结构化信息大幅节省人力,提升流程自动化程度。2.3 医疗保险理赔场景华为云OCR在医疗保险理赔场景中的优势主要有:加快理赔处理速度,明显提高用户体验,同时降低人保人工成本有效解决医疗单据中错行、文字相互覆盖、盖章干扰等复杂场景的文字识别;解决维吾尔文干扰的身份证文字识别2.4 汽车金融场景华为云OCR在汽车金融场景中的优势主要有:大幅提高数据录入核对效率,改善用户体验,同时降低人工成本提取购车发票等图片的结构化信息,有效解决旋转、错行、模糊变形等复杂场景,准确率高>98%自动进行合同签名检测,保证合规2.5 互联网网络截图场景互联网网络截图场景主要分为:电商图片、聊天截图。2.5.1 电商图片电商图片提取的主要信息主要有:店铺、商品主图,详情图用户评价图、打分订单编号、金额识别关注、收藏、心愿单截图华为云OCR在电商图片场景中的优势主要有:批量提取商品信息:价格、销量、评价等用户评价审核判断是否关注、收藏(淘宝返利)2.5.2 聊天截图电商图片提取的主要信息主要有:1、聊天截图聊天软件、社交网络截图聊天内容自动识别提取2、用户自生成(UGC)图片各种手机截图、网页截图用户拍照图片、合成图片华为云OCR在聊天截图场景中的优势主要有:快捷提取聊天信息:地址、电话等图像内容审查:敏感词检测信息统计、数据挖掘2.6 政法法院场景华为云OCR在政法法院场景中的优势主要有:支持各种格式文档、表格等图片识别,返回结构化文档大幅效率提升,准确率高,建立数据资产2.7 财务报销场景华为云OCR在财务报销场景中的优势主要有:支持方向检测,票据倾斜和扭曲矫正去除盖章影响2.8 医疗化验单/检验单OCR识别场景华为云OCR在医疗化验单/检验单OCR识别场中的优势主要有:自适应识别不同医院不同版式化验单自动提取姓名、年龄、住院号等关键信息支持扭曲变形、倾斜遮挡等复杂场景2.9 定制专属OCR服务接口:缅甸身份证OCR识别缅甸身份证OCR服务:支持缅甸文OCR识别适应任意角度倾斜、缺角、反光、复杂背景等场景,识别精度高定制专属OCR服务:满足不同版式个性化需求支持外语OCR识别专业团队快速定制开发在华为云上提供专属API接口3.华为云OCR服务定价3.1 按需付费、阶梯收费文字识别服务提供两种计费方式:按需付费、套餐包。用户可以根据实际需求变更资源的资费方式。套餐包价格相比“按需计费”具有更大折扣。API调用次数大时,套餐包更优惠。具体以官网实际价格为准:cid:link_03.2 专属定制如果需要专属定制OCR可以联系华为云客服进行咨询。官网:cid:link_0转载的原文链接:【云驻共创】华为云文字识别服务的体验之旅_华为云文字识别服务暂时只能支持中文和英文两种语言-CSDN博客
  • [技术干货] 华为云OCR使用指南
    1.华为云OCR SDK开发指南华为云SDK官网:cid:link_82.华为云OCR .NET SDK的使用2.1 前提准备进入密钥管理界面:cid:link_1点击确定后选择立即下载就可以获取Access Key(AK)和Secret Access Key(SK)。切换到API凭证,获取“IAM用户名”“、帐号名”以及待使用区域的“项目ID”。调用服务时会用到这些信息,请提前保存。2.2 安装对应语言的SDK使用SDK前,需要安装“HuaweiCloud.SDK.Core”和“HuaweiCloud.SDK.Ocr”,有两种安装方式,分别如下。使用 .NET CLI 工具dotnet add package HuaweiCloud.SDK.Coredotnet add package HuaweiCloud.SDK.Ocr使用 Package ManagerInstall-Package HuaweiCloud.SDK.CoreInstall-Package HuaweiCloud.SDK.Ocr2.3 开始使用2.3.1 导入依赖模块using HuaweiCloud.SDK.Core;using HuaweiCloud.SDK.Core.Auth;using HuaweiCloud.SDK.Ocr.V1;using HuaweiCloud.SDK.Ocr.V1.Model;2.3.2 配置客户端连接参数首先开通文字识别服务网址:cid:link_22.3.2.1 默认配置// 使用默认配置var config = HttpConfig.GetDefaultConfig();2.3.2.2 网络代理(可选)// 根据需要配置网络代理config.ProxyHost = "proxy.huaweicloud.com";config.ProxyPort = 8080;config.ProxyUsername = "test";config.ProxyPassword = "test";2.3.2.3 超时配置(可选)// 默认超时时间为120秒,可根据需要调整config.Timeout = 120;2.3.2.41 SSL配置(可选)// 根据需要配置是否跳过SSL证书验证config.IgnoreSslVerification = true;2.3.3 配置客户端连接参数配置AK、SK信息。华为云通过AK识别用户的身份,通过SK对请求数据进行签名验证,用于确保请求的机密性、完整性和请求者身份的正确性。//配置AK和SKconst string ak = "";const string sk = "";var auth = new BasicCredentials(ak,sk);2.3.4 初始化客户端2.3.4.1 指定云服务region方式(推荐)// 初始化指定云服务的客户端 {Service}Client ,以初始化OCR服务的 OcrClient 为例var client = OcrClient.NewBuilder() .WithCredential(auth) .WithRegion(OcrRegion.ValueOf("cn-north-4")) .WithHttpConfig(config) .Build();2.3.4.2 指定云服务endpoint方式// 指定终端节点,以OCR服务北京四的 endpoint 为例String endpoint = "https://ocr.cn-north-4.myhuaweicloud.com";// 初始化客户端认证信息,需要填写相应 projectId,以初始化 BasicCredentials 为例var auth = new BasicCredentials(ak, sk, projectId);// 初始化指定云服务的客户端 {Service}Client,以初始化OCR服务的 OcrClient 为例var client = OcrClient.NewBuilder() .WithCredential(auth) .WithEndPoint(endpoint) .WithHttpConfig(config) .Build();endpoint是华为云各服务应用区域和各服务的终端节点.2.3.5 发送请求并查看响应// 以调用通用表格识别接口 RecognizeGeneralTable 为例var req = new RecognizeGeneralTextRequest{};req.Body = new GeneralTextRequestBody(){ Url = "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F202005%2F23%2F20200523172615_reSrQ.thumb.1000_0.jpeg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1655881933&t=52e3a855c74ac4096d5c7a5a721e9e6f"};try{ var resp = client.RecognizeGeneralText(req); var respStatusCode = resp.HttpStatusCode; Console.WriteLine(respStatusCode);}catch (Exception e){ Console.WriteLine(e);}2.3.6 异常处理一级分类一级分类说明二级分类二级分类说明ConnectionException连接类异常HostUnreachableException网络不可达、被拒绝。ConnectionException连接类异常SslHandShakeExceptionSSL认证异常。RequestTimeoutException响应超时异常CallTimeoutException单次请求,服务器处理超时未返回。RequestTimeoutException响应超时异常RetryOutageException在重试策略消耗完成后,仍无有效的响应。ServiceResponseException服务器响应异常ServerResponseException服务端内部错误,Http响应码:[500,]。ServiceResponseException服务器响应异常ClientRequestException请求参数不合法,Http响应码:[400,500)try{ var resp = client.RecognizeGeneralText(req); var respStatusCode = resp.HttpStatusCode; Console.WriteLine(respStatusCode);}catch (RequestTimeoutException requestTimeoutException){ Console.WriteLine(requestTimeoutException.ErrorMessage);}catch (ServiceResponseException clientRequestException){ Console.WriteLine(clientRequestException.HttpStatusCode); Console.WriteLine(clientRequestException.ErrorCode); Console.WriteLine(clientRequestException.ErrorMsg);}catch (ConnectionException connectionException){ Console.WriteLine(connectionException.ErrorMessage);}2.3.7 运行程序2.3.7.1 华为云在线调用2.3.7.1 代码调用github源码仓库地址:cid:link_4using HuaweiCloud.SDK.Core;using HuaweiCloud.SDK.Core.Auth;using HuaweiCloud.SDK.Ocr.V1;using HuaweiCloud.SDK.Ocr.V1.Model;//使用默认配置var config = HttpConfig.GetDefaultConfig();//配置AK和SKconst string ak = "DCZGIQS0WPHT9BJG5FNO";const string sk = "vE33MJGR2LC7uIrxNc8kznPNcNzjCtSbjTwxGEwb";//const string projectId = "0caad8f75980f3982f31c0016b5bd5ed";// 初始化客户端认证信息,需要填写相应 projectId,以初始化 BasicCredentials 为例var auth = new BasicCredentials(ak, sk);// 初始化指定云服务的客户端 {Service}Client ,以初始化OCR服务的 OcrClient 为例var client = OcrClient.NewBuilder() .WithCredential(auth) .WithRegion(OcrRegion.ValueOf("cn-north-4")) .WithHttpConfig(config) .Build();// 以调用通用表格识别接口 RecognizeGeneralTable 为例var req = new RecognizeGeneralTextRequest{};req.Body = new GeneralTextRequestBody(){ Url = "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F202005%2F23%2F20200523172615_reSrQ.thumb.1000_0.jpeg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1655881933&t=52e3a855c74ac4096d5c7a5a721e9e6f"};try{ var resp = client.RecognizeGeneralText(req); var respStatusCode = resp.HttpStatusCode; Console.WriteLine(respStatusCode);}catch (RequestTimeoutException requestTimeoutException){ Console.WriteLine(requestTimeoutException.ErrorMessage);}catch (ServiceResponseException clientRequestException){ Console.WriteLine(clientRequestException.HttpStatusCode); Console.WriteLine(clientRequestException.ErrorCode); Console.WriteLine(clientRequestException.ErrorMsg);}catch (ConnectionException connectionException){ Console.WriteLine(connectionException.ErrorMessage);}// See https://aka.ms/new-console-template for more informationConsole.WriteLine("Hello, World!");3.华为云OCR SDK的相关参考华为云OCR SDK参考文档:cid:link_3华为云OCR API参考文档:cid:link_52.华为云文字识别OCR服务操作指南2.1 选择华为云文字识别OCR服务的理由华为云文字识别OCR服务主要优势有以下几点:优势1:识别精度高采用先进的深度学习算法,针对各种业务场景优化,文字识别精度高优势2:稳定服务成功应用于各类场景,基于华为等企业客户的长期实践,经受过复杂场景考验优势3:支持复杂场景证件支持复杂背景、扭曲、倾斜;表单支持盖章、错行等场景优势4:简单易用提供符合RESTful规范的API访问接口,兼容性强,使用方便2.2 华为云文字识别Console介绍华为云OCR服务官网:cid:link_92.2.1 进入Console页面2.2.1.1 申请服务在“文字识别”控制台的“商用服务”页签中可以申请服务,确保申请服务成功的前提是账号已经通过实名验证。找到文字识别OCR进入页面点击立即使用进入控制台在当前的服务申请页面中可以通过“了解更多”了解该服务支持的场景表,同时建议申请服务前通过“了解计费详情”了解每个服务的计费标准,目前OCR服务计费项是根据每个服务API成功调用的次数进行阶梯计费(调用量越大单次调用的费用越低),调用API的方式有两种:TokenAK/SKToken及AK/SK获取方式请参考以下链接:http://forum.huaweicloud.com/forum.php?mod=viewthread&tid=5028&page=1&extra=#pid60432.2.1.2 服务支持场景及API调用计费标准场景说明身份证识别自动识别身份证上的全部信息,支持身份证正反面识别,一次扫描即可识别身份证号码、姓名、地址等全部信息,在暗光、倾斜、过曝光、阴影等异常条件下均可准确识别身份证信息驾驶证识别自动识别驾驶证正页上的全部信息,自动提取出姓名、性别、领证日期、准驾车型、有效期限等结构化信息,在暗光、倾斜、过曝光、防伪标志干扰、阴影等异常条件下均可准确识别驾驶证信息行驶证识别自动识别行驶证正页上的全部信息,自动提取出号牌号码、车辆类型、所有人、使用性质、品牌型号、车辆识别代号、发动机号码、注册日期等结构化信息,在暗光、倾斜、过曝光、防伪标志干扰、阴影等异常条件下均可准确识别行驶证信增值税发票识别通过对增值税发票图片预处理、表格提取、文字提取、文字识别、结构化信息输出等一系列技术化手段,快速将增值税发票上的文字信息识别出来,用于后续的进一步处理,节省大量的人工录入成本英文海关单据识别可识别出英文海关单据图片上的文字内容和数字,智能提取为可编辑的文本。英文海关单据识别采用了自动定位分割算法、分布式计算框架、集成深度学习进行纠错,经过大规模图像文字训练,达到高精度的识别要通用表格识别提取表格内的文字和所在行列位置信息,适应不同格式的表格。同时也识别表格外部的文字区域。用于各种单据和报表的电子化,恢复结构化信息通用文字识别提取图片内的文字及其对应位置信息,并能够根据文字在图片中的位置进行结构化整理工作手写字母数字识别提取表格内的手写字母、数字和所在行列位置信息,适应不同格式的表格。同时也支持表格外部文字区域的手写字母数字识别机动车销售发票识别自动识别机动车销售发票图片内的文本内容,并返回结构化字段信息,用于后续的进一步处理,节省大量的人工录入成本更多价格详情:cid:link_7总结文字识别应用的场景非常的广,基本上所有用到文字的领域都需要文字识别。比如说是物流与制造业,金融保险,医疗教育,政务政法,互联网等,我们的产品基本上在这几个方面都有应用。华为云文字识别服务有如下的特点,首先的识别精度高,证件和票据类的识别率在很多场景都能达到99%以上,数据安全和端云协同前面已经提过了。我们还有高适应性,比如说支持错行、盖章、倾斜、文字叠加、反光、任意角度等复杂场景,同时多种易用的SDK。很多时候你的产品再好,不好用,消费者也是不认可的。最后就是高可用,基本上可以支持每月十亿级或者更高的调用量。本文主要介绍了华为云文字识别服务的相关概念和使用实操,想使用华为云OCR服务的小伙伴可以执行实操流程步骤来实现自己业务场景。原文链接:【云驻共创】华为云文字识别服务的体验之旅_华为云文字识别服务暂时只能支持中文和英文两种语言-CSDN博客
  • [技术干货] 初识OCR技术
    1.文字识别技术的概念1.1 文字识别(OCR)介绍文字识别:光学字符识别(Optical Character Recognition,OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。OCR以开放API(Application Programming Interface,应用程序编程接口)的方式提供给用户,用户使用Python、Java等编程语言调用OCR服务API将图片识别成文字,帮助用户自动采集关键数据,打造智能化业务系统,提升业务效率。1.2 文字识别(OCR)应用场景华为云OCR使用要求用户需要具备编程能力,熟悉Java/Python/iOS/Android/Node.js编程语言。服务需要用户通过调用API接口,实现将图片或扫描件中的文字识别成可编辑的文本。文字提取之后返回的结果是JSON格式,用户需要通过编码将识别结果对接到业务系统或保存为TXT、Excel等格式。文字识别(OCR)应用场景主要有以下三个方面:类型说明通用类OCR(General OCR)支持表格识别、文档识别、网络图片识别、手写文字识别、智能分类识别、健康码识别、核酸检测记录识别等任意格式图片上文字信息的自动化识别,自适应分析各种版面和表格,快速实现各种文档电子化。票据类OCR(Receipt OCR)支持增值税发票识别、机动车销售发票识别、出租车发票识别、火车票识别、定额发票识别、车辆通行费发票识别、飞机行程单识别以及发票验真;支持图片及PDF、OFD文档上有效信息的自动识别和结构化提取。证件类OCR(Card OCR)支持身份证识别、行驶证识别、驾驶证识别、护照识别、营业执照识别、银行卡识别、道路运输证识别、车牌识别、名片识别、VIN码识别、道路运输从业资格证识别等卡证图片上有效信息的自动识别和关键字段结构化提取。2.文字识别技术的发展历程2.1 OCR识别领域发展历程OCR识别领域发展历程主要经历以下几个历程:西文OCR=》Tesseract=》LeNet=》深度学习OCR2.1.1 西文OCR在OCR技术中,印刷体文字识别是开展最早,技术上最为成熟的一个。欧美国家为了将浩如烟海、与日俱增的大量报刊杂志、文件资料和单据报表等文字材料输入计算机进行信息处理,从上世纪50年代就开始了西文OCR技术的研究,以便代替人工键盘输入。经过40多年的不断发展和完善,并随着计算机技术的飞速发展,西文OCR技术现已广泛应用于各个领域,使得大量的文字资料能够快速、方便、省时省力和及时地输入到计算机中,实现了信息处理的“电子化”。2.1.1 TesseractTesseract的OCR引擎最先由HP实验室于1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一。然而,HP不久便决定放弃OCR业务,Tesseract也从此尘封。数年以后,HP意识到,与其将Tesseract束之高阁,不如贡献给开源软件业,让其重焕新生。2005年,Tesseract由美国内华达州信息技术研究所获得,并求诸于Google对Tesseract进行改进、消除Bug、优化工作。Tesseract目前已作为开源项目发布在Google Project,其最新版本3.0已经支持中文OCR,并提供了一个命令行工具。2.1.3 LeNetLeNet是经典CNN(Convolutional Neural Network)神经网络构造之一,第一次是在1995年由Yann LeCun,Leon Bottou,Yoshua Bengio,和Patrick Haffner提出的,这种神经网络结构在MINIST手写数字数据集上取得了优异的结果。下面是使用LeNet进行识别的过程:安排数据确定超参数建立网络结构,写上损失函数和优化器安排训练过程安排测试过程保存模型# coding=utf-8 (在源码开头声明编码方式,这样注释和代码中有中文不会报错)import torch # 导入pytorch库import torch.nn as nn # torch.nn库import torch.nn.functional as Fimport torch.optim as optim#torch.optim包主要包含了用来更新参数的优化算法,比如SGD、AdaGrad,RMSProp、 Adam等from torchvision import datasets, transforms#torchvision包含关于图像操作的方便工具库。# vision.datasets:几个常用的数据库,可以下载和加载;#vision.models:流行的模型,比如AlexNet,VGG,ResNet等#vision.transforms:常用的图像操作,例如:随机切割,旋转,数据类型转换,图像转到tensor,tensor到图像等。#vision.utils: 用于把形似 (3 x H x W) 的张量保存到硬盘中,给一个mini-batch的图像可以产生一个图像格网。from torch.autograd import Variable#torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现from torch.utils.data import DataLoader#PyTorch中数据读取的一个重要接口是torch.utils.data.DataLoader,该接口定义在dataloader.py脚本中,只要是用PyTorch来训练模型基本都会用到该接口,该接口主要用来将自定义的数据读取接口的输出或者PyTorch已有的数据读取接口的输入按照batch size封装成Tensor,后续只需要再包装成Variable即可作为模型的输入# 下载训练集。在pytorch下可以直接调用torchvision.datasets里面的MNIST数据集(这是官方写好的数据集类),这是方法一。还可以自己定义和加载。加载之后的train_dataset等于train_dataset = datasets.MNIST(root='./num/', train=True, transform=transforms.ToTensor(), download=True)#root(string): 数据集的根目录root directory。'./num/'意思就是建立在根目录下建立一个num文件夹,把num下的MNIST数据集加载进来。#train是可选填的,表示从train.pt创建数据集,就是进入训练数据集开启训练模式。#transform是选填的,接收PIL图像并且返回已转换版本。#download也是选填的,如果true就从网上下载数据集并放在根目录/num下,如果已经下载好了就不会再次下载。# 下载测试集test_dataset = datasets.MNIST(root='./num/', train=False, transform=transforms.ToTensor(), download=True)# dataset 参数用于指定我们载入的数据集名称# 在装载的过程会将数据随机打乱顺序并进打包batch_size = 64# batch_size参数设置了每个包中的图片数据个数# 装载训练集train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)#建立一个数据迭代器,在训练模型时使用到此函数,用来把训练数据分成多个小组,此函数每次抛出一组数据。直至把所有的数据都抛出。就是做一个数据的初始化。#dataset——给出需要加载的数据来源,train_dataset的类型是torchvision.datasets.mnist.MNIST#batchsize——选填,一次加载多少个数据样本,默认是1个#shuffle——选填,true就是每个epoch都会洗一下牌,默认是不洗牌# 装载测试集test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=True)#建立网络结构# 卷积层使用 torch.nn.Conv2d# 激活层使用 torch.nn.ReLU# 池化层使用 torch.nn.MaxPool2d# 全连接层使用 torch.nn.Linearclass LeNet(nn.Module):#LeNet类是从torch.nn.Module这个父类继承下来的,在__init__构造函数中申明各个层的定义,然后再写上forward函数,在forward里定义层与层之间的连接关系,这样就完成了前向传播的过程。 def __init__(self): super(LeNet, self).__init__()#super(LeNet,self)__init__():在单继承中 super 主要是用来调用父类的方法的,而且在python3中可以 用super().xxx 代替 super(Class, self).xxx self.conv1 = nn.Sequential(nn.Conv2d(1, 6, 3, 1, 2), nn.ReLU(), nn.MaxPool2d(2, 2))#nn.Sequential是一个顺序容器,将神经网络模块按照传入顺序依次被添加到计算图中执行。#Conv2D的结构是:nn.Conv2d(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)) self.conv2 = nn.Sequential(nn.Conv2d(6, 16, 5), nn.ReLU(), nn.MaxPool2d(2, 2)) self.fc1 = nn.Sequential(nn.Linear(16 * 5 * 5, 120), nn.BatchNorm1d(120), nn.ReLU()) self.fc2 = nn.Sequential( nn.Linear(120, 84), nn.BatchNorm1d(84), nn.ReLU(), nn.Linear(84, 10)) # 最后的结果一定要变为 10,因为数字的选项是 0 ~ 9 def forward(self, x): x = self.conv1(x) x = self.conv2(x) x = x.view(x.size()[0], -1) #x.view(x.size(0), -1)这句话是说将第二次卷积的输出拉伸为一行,接下来就是全连接层 x = self.fc1(x) x = self.fc2(x) return x#指定设备。“cuda:0”代表起始的device_id为0,如果直接是“cuda”,同样默认是从0开始。可以根据实际需要修改起始位置,如“cuda:1”。device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')LR = 0.001#LR是学习率,这是一个超参数#实例化LeNet。to(device)代表将模型加载到指定设备上。net = LeNet().to(device)# 损失函数使用交叉熵criterion = nn.CrossEntropyLoss()# 优化函数使用 Adam 自适应优化算法optimizer = optim.Adam( net.parameters(), lr=LR,)epoch = 1if __name__ == '__main__': #如果这个脚本是主函数,那么就运行如下代码。“__name__”是Python的内置变量,用于指代当前模块。 for epoch in range(epoch): sum_loss = 0.0 for i, data in enumerate(train_loader): #enumerate()用于可迭代\可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标。data里面包含图像数据(inputs)(tensor类型的)和标签(labels)(tensor类型) inputs, labels = data inputs, labels = Variable(inputs).cuda(), Variable(labels).cuda() #注意使用多gpu时训练或测试 inputs和labels需加载到gpu中。模型和相应的数据进行.cuda()处理。就可以将内存中的数据复制到GPU的显存中去 optimizer.zero_grad() #每个batch开始时都需要将梯度归零 outputs = net(inputs) #将数据传入网络进行前向运算 loss = criterion(outputs, labels) #得到损失函数 loss.backward() #反向传播 optimizer.step() #通过梯度做一步参数更新 # print(loss) sum_loss += loss.item() #pytorch中,.item()方法 是得到一个元素张量里面的元素值#具体就是 用于将一个零维张量转换成浮点数,比如计算loss,accuracy的值 if i % 100 == 99: print('[%d,%d] loss:%.03f' % (epoch + 1, i + 1, sum_loss / 100)) sum_loss = 0.0net.eval() #将模型变换为测试模式#在PyTorch中进行validation时,会使用model.eval()切换到测试模式,在该模式下,主要用于通知dropout层和batchnorm层在train和val模式间切换。#在train模式下,dropout网络层会按照设定的参数p设置保留激活单元的概率(保留概率=p); batchnorm层会继续计算数据的mean和var等参数并更新。#在val模式下,dropout层会让所有的激活单元都通过,而batchnorm层会停止计算和更新mean和var,直接使用在训练阶段已经学出的mean和var值。该模式不会影响各层的gradient计算行为,即gradient计算和存储与training模式一样,只是不进行backprobagation。correct = 0total = 0for data_test in test_loader: images, labels = data_test images, labels = Variable(images).cuda(), Variable(labels).cuda() output_test = net(images) _, predicted = torch.max(output_test, 1) #其中这个 1代表行,0的话代表列。#不加_,返回的是一行中最大的数。#加_,则返回一行中最大数的位置。 total += labels.size(0) correct += (predicted == labels).sum() print("correct1: ", correct) print("Test acc: {0}".format(correct.item() / len(test_dataset)))2.1.4 深度学习OCR随着深度学习OCR发展,MINST数据集的建立开始使用各种深度学习算法,OCR也广泛进入了商业化领域。进入20世纪90年代以后,随着平台式扫描仪的广泛应用,以及我国信息自动化和办公自动化的普及,大大推动了OCR技术的进一步发展,使OCR的识别正确率、识别速度满足了广大用户的要求。其中以OCR为科技核心的云脉技术不断创新进取,研发了一系列OCR软件产品,并且运用在医院,学校,企业等各大市场。2.2 OCR识别流程历程下面是经典的光学字符识别系统流程和技术框架图解:下面是基于CNN-RNN的序列光学字符识别流程图解:目前,在OCR文字定位与识别领域,主流方法都是基于深度学习方法。如在ICDAR2013自然场景上前20名已经见不到传统方法的影子了。3.简要介绍文字定位与文字识别技术目前OCR技术主要分为文字定位和文字识别两个流程。3.1 文字定位文字定位是文字识别的前提条件,要解决的问题是如何在杂乱无序、千奇百怪的不同场景中准确地定位出文字的位置。由于不同场景背景的复杂性、光照的多变性以及字体的不可预测性等原因,文字定位面临着极大的挑战。文字定位主要有传统方法和深度学习两种:基于传统方法、基于深度学习。3.1 基于传统方法传统方法:人工设计特征描述,基于模板匹配方式识别文字,需要准确的特征描述,难以满足复杂场景识别任务。基于连通区域(MSER,SWT…)基于滑动窗3.2 基于深度学习深度学习方法:海量标注数据自动学习文字特征,主流方法是基于CNN+RNN的深度学习网络。3.2.1 基于侯选框TextBoxes:A fast text detector with a single deep neural networkDetecting Oriented Text in Natural Images by Linking Segments3.2.2 基于分割Multi-oriented text detection with fully convolutional networks3.2.3 直接回归Deep Direct Regression for Multi-Oriented Scene Text Detection原文链接:【云驻共创】华为云文字识别服务的体验之旅_华为云文字识别服务暂时只能支持中文和英文两种语言-CSDN博客
  • [技术干货] 体验华为云OCR产品
    什么叫OCROCR(光学字符识别,Optical Character Recognition)是一种技术,指电子设备(如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。简单来说,OCR 技术就是通过光学方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工。OCR的原理是什么OCR 技术的实现过程可以分为以下几个步骤:预处理:首先对输入的图像进行预处理,包括灰度化、二值化、噪声去除、倾斜矫正等操作。灰度化是将彩色图像转换为灰度图像,使图像仅包含亮度信息;二值化是将灰度图像转换为二值图像,即只有黑白两种亮度;噪声去除是消除图像中的杂乱信息,提高识别精度;倾斜矫正是为了纠正图像中字符的倾斜角度,使字符更好地与识别模板匹配。特征提取:在预处理完成后,需要从图像中提取出字符的特征信息,如笔画、长度、宽度等。这些特征信息将用于与字符识别库中的字符模板进行匹配。字符识别:将提取到的特征信息与字符识别库中的字符模板进行匹配,通过比较特征信息之间的相似度,确定图像中的字符是什么。这一步通常采用一些机器学习或深度学习方法,如支持向量机(SVM)、神经网络(NN)等。后处理:对识别结果进行校对和修正,以提高识别准确性。这一步可能包括对识别结果的排版和格式调整,以便于输出或进一步编辑。总之,OCR 技术通过检测图像中的暗、亮模式来确定字符的形状,然后利用字符识别方法将形状翻译成计算机文字。在识别过程中,需要进行预处理、特征提取、字符识别和后处理等操作,以提高识别的准确性和效果。OCR在生产生活中的重要意义OCR 技术在提高工作效率、实现自动化文档处理方面具有重要意义。例如,运用 OCR 技术可以将印刷体或手写字转换成电子文本,自动地将纸质文档转化为电子文档,从而节省人力和时间。此外,OCR 技术在金融、医疗、教育等领域也有广泛应用,如识别银行票据、病历、试卷等。随着人工智能技术的发展,OCR 在图像识别、自然语言处理等方面的应用也在不断拓展。华为云OCR入口在哪首先,打开华为云官网 cid:link_1然后,在产品选项卡中,找到人工智能,选择文字识别OCR,进入华为云OCR产品主页OCR主页地址是:cid:link_0点击页面中的“Demo体验”按钮,开始进行OCR体验实际体验华为云OCR点击“Demo体验”按钮后,会来到OCR控制台我们切换到“通用类”。要知道,能识别出电脑输出的标准字体并不算什么,厉害的OCR要能识别出人写的未知字体,才算真正能用的OCR我们在网上随便搜一个“小学生语文作文”,然后找个稍微清晰的,如下图。我们将图片下载下来,然后送给OCR看看它能不能识别现在网上的图片多为 jfif 格式,为了便于查找,我们将其重命名一下,然后点击保存按钮。接着,切换到“通用类”—>“OCR通用文字”,然后点击“上传本地图片”按钮,上传我们刚刚下载的图片可以看到,华为云提示并不支持jfif。上传文件仅支持JPEG、JPG、PNG格式这样的话,我们只能右击,使用画图打开文件然后将其另存为 PNG 图片可以看到,识别大体都正确。但还是有些瑕疵的,希望改进
  • [技术干货] 使用API Explorer在线调试OCR
    华为云OCR介绍通用类OCR(General OCR),支持通用文字识别、通用表格识别、网络图片识别、智能分类识别、手写文字识别等任意格式图片上文字信息的自动化识别,自适应分析各种版面和表格,快速实现各种文档电子化。按次计费,提供多种规格的预付费套餐包OCR 产品特色产品主页地址为 cid:link_0功能包含智能文档解析通用类票据类证件类行业类产品做的好是一方面,方不方便用户调试也是一个隐藏的重点。我们以往的调试方式,通常要先下载SDK,按照帮助文档一步步编写代码,然后编译运行才能看得到结果。如果是HTTP接口,我们可以借助Postman, Apifox 等工具进行调试Postman的图标 Apifox的图标 而华为云做出了大胆的创新,官方集成了接口调试工具 Api Explorer,它可以帮你不费吹灰之力的调试接口,并且对所有参数都进行了注释说明,还能自动填写参数,非常方便。下面就让我们来亲自尝试一下Api Explorer 在线调试首先,在OCR控制台左侧功能面板中,点击“调用指南”,然后在展开的面板中选择“在线调试”在 Api Explorer 页面中,OCR产品的所有接口一目了然我们展开这个“通用文字识别”,可以看到右侧的接口说明,和参数说明,都写的非常详尽并且还有着多种语言的实际调用代码供你选择,可以拿来即用,非常方便这里可以看到图片仅支持URL地址与BASE64编码点击帮助链接,可以获取图片转Base64的python脚本import base64 with open("d:\demo.jpg", "rb") as image_file: encoded_string = base64.b64encode(image_file.read()).decode() print(encoded_string)把代码贴到 Spyder 中跑一下,得到图片的base64编码图片如下(由于Base64编码太长,超过1w字了,因此无法上传)将图片的Base64编码贴入image参数中,点击调试按钮我这里报错了,说我没开通这个服务。大家如果开通并且付费了,就应该能调用成功了
  • [问题求助] OCR发票识别参数错误
    在学习rpa高级课程时,尝试使用增值税发票识别时,使用学习材料中的user id和user key时提示参数错误,请问怎么解决User ID:com.huawei.gts.rparobotUser Key/Token:hC4Q2yZ8p11h186KcC8b6un6ZS2 tcAtegOn89HCJy6CurddgTkCzmm 7hXCH3mJJt
  • [技术干货] HttpClient最丰富和灵活的版本
    // Java 8 and earlier import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; public class Main { public static void main(String[] args) throws IOException { URL url = new URL("https://www.example.com"); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setRequestMethod("GET"); int status = con.getResponseCode(); System.out.println(status); } } // 优点:简单易用。缺点:功能有限,不够灵活。 // Java 8 import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; public class Main { public static void main(String[] args) throws IOException, InterruptedException { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://www.example.com")) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); } } // 优点:比Java 8和之前的版本具有更多的功能和灵活性。缺点:仍然缺少一些高级功能。 // Java 9 import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; public class Main { public static void main(String[] args) throws IOException, InterruptedException { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://www.example.com")) .GET() .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); } } // 优点:添加了Java 8中缺少的一些功能。缺点:仍然不如Java 11功能丰富。 // Java 11 import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; public class Main { public static void main(String[] args) throws IOException, InterruptedException { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://www.example.com")) .GET() .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); } } // 优点:HttpClient最丰富和灵活的版本。缺点:需要Java 11或更高版本。​
  • [问题求助] 验证码识别
    这种验证码用哪种方法识别率高一些呀,我目前直接用ext_aiverifyinput_1.0.1这种验证码识别还有ocr验证码识别  识别出来效果都很差
  • [问题求助] 设计器出错,请稍后重试
    weAutomate studio 右上叫报设计器出错请稍后重试
  • [问题求助] Manas引擎中验证码识别解密失败
    我用设计器运行时是正常的,但是用机器人助手运行时却报解密失败 机器人助手日志如下:[2023-02-17 14:42:38] 启动机器人 3.1.1[2023-02-17 14:42:38] 开始执行[脚本] [残疾证办理][2023-02-17 14:42:40] 开始执行[子脚本] [playbackScript.xml 第4行] 调用子脚本(共享上下文) (login.xml) [调用子脚本(共享上下文)][2023-02-17 14:42:43] 完成执行[原子命令] [login.xml 第4行] 打开网页 [打开网页] [OK][2023-02-17 14:42:44] 完成执行[原子命令] [login.xml 第12行] 在网页中输入文本 [在网页中输入文本] [OK][2023-02-17 14:42:44] 完成执行[原子命令] [login.xml 第24行] 在网页中输入文本 [在网页中输入文本] [OK][2023-02-17 14:42:45] 完成执行[原子命令] [login.xml 第36行] 截取元素图片 [截取元素图片] [OK][2023-02-17 14:42:45] 完成执行[原子命令] [login.xml 第48行] 验证码识别 [验证码识别] [NOK] [RobotDecryptError] [系统执行错误: 解密失败][2023-02-17 14:42:45] [调试日志] @{getVerificationCodeInfoOcr_ret}[2023-02-17 14:42:45] 完成执行[子脚本] [playbackScript.xml 第4行] 调用子脚本(共享上下文) (login.xml) [调用子脚本(共享上下文)] [NOK] [RobotDecryptError] [系统执行错误: 解密失败][2023-02-17 14:42:45] 完成执行[脚本] [残疾证办理] [NOK] [RobotDecryptError] [系统执行错误: 解密失败][2023-02-17 14:42:45] 成功向管理中心发送数据[2023-02-17 14:42:45] 结束机器人
  • [问题求助] 请问OCR-自定义模板使用JavaSDK的形式 目前是不支持嘛
    我看api调用的形式可以多传一个模板id的参数,但是sdk里面的源码里面的种类根本没有说自定义模板形式的类,没有地方传这个模板id参数呀
  • [问题求助] 华为云OCR服务支持视频中字幕进行识别么?
    华为云OCR服务支持视频中字幕进行识别么?
  • [问题求助] 华为的OCR支持用户自定义模板吗?
    请问,华为的OCR,支持用户自定义模板吗?
  • 发票验真综合应用开发
    1.开通服务使用OCR文字识别服务“增值税发票识别”、“发票验真”接口之前,必须先申请并开通服务。① 登录后跳转至控制台页面,点击左上角服务列表按钮,下拉找到【人工智能】,在【人工智能】栏下找到【文字识别OCR】,点击进入文字识别OCR服务控制台,如下图: ② 区域默认显示“华北-北京四”,实验中无需修改。(注:实际生产使用时,请根据各服务的部署区域选择对应区域,开通与调用的服务必须在同一个区域。) ③ 在“总览”页,根据【开通状态】查看“增值税发票识别”和“发票验真”服务是否已开通,若未开通,则需点击【开通服务】按钮,如下图: 2.获取AK、SK① 华为云控制台页面右上角账号处点击【我的凭证】 ② 依次点击【访问密钥】、【新增访问密钥】 ③ 完成后会生成credentials.csv文件,点击“立即下载”。3.ECS环境准备收起3.1 新建安全组① 服务列表搜索“ecs”,找到并进入ECS控制台: ② 找到最下方“安全组”标签页 ③ 点击左上角“创建安全组” ④ 名称自定义,模板选择“通用web服务器”,点击“确定”: ⑤ 点击“配置规则”: ⑥ 点击“添加规则”: ⑦ 添加入方向端口8501-8503,点击“确定”完成安全组设置。 8501端口为本次实验开发的web应用所在的端口,要想正常访问该web应用,需开放该端口。3.2 购买ECS① 回到ECS控制台“弹性云服务器”标签页,点击“购买弹性云服务器” ② 计费模式选择“按需计费”,区域选择“华北-北京四”,可用区选“随机分配”: ③ CPU架构选择“x86计算”,规格选择“通用计算增强型”“2vCPUS-8GB内存”: ④ 镜像选择“公共镜像”、“Ubuntu”、“Ubuntu 20.04 server 64bit”,主机安全保持默认配置: ⑤ 系统盘保持默认的“40GB”,点击“下一步:网络配置” ⑥ 网络选择默认的“vpc-default”,如果之前没有创建,可点击下图所示的“前往控制台创建”,创建完成后,刷新后即可看到: ⑦ 安全组选择上一小节创建的自定义安全组: ⑧ 弹性公网IP选择“全动态BGP”,带宽选择“按流量计费”,带宽大小选择“5”,完成后点击“下一步:高级配置”: ⑨ 自定义云服务器名称和root用户密码 ⑩ 其他保持默认,点击“下一步:确认配置”: ⑪ 勾选协议,点击“立即购买”: 提交成功后,如下所示:3.3 环境配置① 回到ECS控制台,找到刚创建的ECS服务器,点击“远程登录” ② 点击“CloudShell”登录 ③ 使用root用户登录,输入密码a3hZJfup%kIrhKT$后,点击“连接”: 连接成功后,进入cloudshell命令行界面: ④ 安装软件环境命令行终端输入如下命令,按回车,输入y,再按回车,即可安装相应软件:sudo apt install python3-testresources命令执行情况如下所示: 命令行终端输入并执行如下命令,安装相应python库pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jinja2==3.1.0 protobuf==3.19.4 streamlit==1.7.0 huaweicloudsdkcore==3.0.80 huaweicloudsdkocr==3.0.80命令执行情况如下所示: 此处共安装了五个库:jinja2、protobuf、streamlit、huaweicloudsdkcore和huaweicloudsdkocr,其中streamlit 为Python的一个简易的web组件库,帮助我们搭建UI界面,jinja2、protobuf是运行streamlit所依赖的库,huaweicloudsdkcore和huaweicloudsdkocr是OCR服务相应的Python SDK。4.增值税验真web应用开发收起4.1 工程代码准备① 下载项目代码命令行终端输入如下命令,下载项目代码:wget https://sandbox-expriment-files.obs.cn-north-1.myhuaweicloud.com/20220408/ocr_project.zip② 解压项目代码unzip ocr_project.zip③ 执行ls命令确认文件是否解压成功 4.2 项目代码解读① 生成OCR请求客户端,需要AK, SK鉴权: ② 增值税识别函数,调用增值税识别API接口: ③ 发票验真函数,调用发票验真API接口: ④ main函数,定义了UI界面以及程序执行过程: 4.3 项目运行测试① 打开凭证下载目录,查看AK/SK信息。执行下面命令,查看此前下载的凭证文件。cd /home/user/Downloads/;ls执行cat credentials.csv |grep ,查看AK/SK的值cat credentials.csv |grep ,② 切换到浏览器,进入cloudshell标签页,点击左侧文件浏览器,定位至root/ocr_project/main.py文件,双击main.py,修改代码,复制修改填入上步骤中的AK/SK信息 复制AK值 修改main.py的AK值 复制SK值 修改main.py的SK值 备注:修改完后,记得保存(快捷键ctrl+s)。③ 启动运行应用:在cloudshell终端输入以下命令,执行main.py,启动应用APP:cd ocr_projectstreamlit run main.py 2>run.log将外部URL地址复制到浏览器,查看页面效果: ④ 下载测试图片: 测试图片链接如下: cid:link_0 将其复制到浏览器,下载至本地 ⑤ 增值税发票验真测试 回到web应用界面,点击“Browse files”: 选择刚下载的测试图片: web页面显示发票图像,继续点击“发票验真”按钮: 显示验真结果: 至此,增值税发票验真H5应用开发完毕,您也可在手机端打开浏览器,输入上面的外部URL地址进行访问。由于该H5应用只部署在单台ECS上,所以能够支持的访问量较小,多人访问会使该页面卡顿。 如您想拥有一个支持大流量访问的H5应用,可以使用华为云云容器实例(Cloud Container Instance,CCI)服务进行应用部署,CCI能提供容器秒级弹性伸缩能力,让您能够轻松应对快速变化的业务访问流量,稳健保障业务高可靠性。