
对于生产制造型企业来说,信息化建设是非常重要的环节,如何高效的解决信息过程中信息高效率的录入对于信息化建设的推进和人工效率的提升非常的有帮助,今天从物流环节给大家介绍一下如何通过腾讯云智能结构化识别服务轻松提取送货单的信息,通过该功能可以减少物流人员信息的录入也可以大幅度减少人工录入出错后无法排查追溯原因的困境。本文通过 C#+WinForm 的方式给出一个实际的案例来实现,希望对大家能有所帮助!
一、智能结构化服务介绍

智能结构化(Smart Structure Optical Character Recognition)融合了业界顶尖的深度学习技术、图像检测技术以及 OCR 大模型能力,实现了对任意版式结构化信息的精准抽取。无论是规范的固定卡证还是繁杂的物流单据,它都能轻松应对,实现智能化识别。此产品通过预学习构建键值对应关系,并支持客户定制模板,从而大幅提高数据提取与录入的效率。智能结构化适用于众多场景,包括政务处理、票据核销、行业表单处理以及国际物流管理等。

二、开发完整流程

开通智能化服务
申请创建开发者密钥
创建C#项目编写代码集成 Demo
2.1 开通智能化结构服务

开通服务后可以通过控制台查看资源包,开通后默认有1000次的免费额度,方便大家本地开发测试,确认符合功能需求后后再去购买资源包,最后部署到生产环境使用。这个对于企业开发者还是非常有好的。

2.2 创建开发者密钥
因为需要本地调用接口集成开发,需要申请开发者密钥,然后创建开发者密钥,当然如果之前创建过的话可以忽略该步骤。创建成功之后如下:

特点注意:一定要妥善保护后自己的开发密钥,避免泄露,造成重大财产损失。
2.3 创建项目编写代码集成
首先从网络上找到一张送货单单据,具体如下图:

本次实现的是通过该单据识别图片中的:
收货单位、送货单号、客户地址、送货日期、合计 五个字段。
首先打开 VS2022 创建一个WinForm项目,
项目名称为 DeliveryNoteRecognitionDemo,具体创建如下图:

然后点击创建按钮来初始化项目。项目初始化如下:

安装腾讯云文字识别的依赖包依赖包搜索 TencentCloudSDK.Ocr。

安装成功后如下:

接着创建一个送货单识别工具类 DeliveryNoteRecognitionUtils.cs。

具体代码如下:
using Newtonsoft.Json;using Newtonsoft.Json.Linq;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using TencentCloud.Common;using TencentCloud.Common.Profile;using TencentCloud.Ocr.V20181119;using TencentCloud.Ocr.V20181119.Models;namespace DeliveryNoteRecognitionDemo{/// <summary>/// 送货单识别工具类/// </summary>public class DeliveryNoteRecognitionUtils{/// <summary>////// </summary>/// <param name="imageUrl">图片URL</param>/// <returns></returns>public static DeliveryNoteRecognitionModel Get(string imageUrl){// 注意密钥妥善保存,避免泄露,可以放入配置文件或者数据库中Credential cred = new Credential{SecretId = "",SecretKey = ""};// 实例化一个client选项,可选的,没有特殊需求可以跳过ClientProfile clientProfile = new ClientProfile();// 实例化一个http选项,可选的,没有特殊需求可以跳过HttpProfile httpProfile = new HttpProfile();httpProfile.Endpoint = ("ocr.tencentcloudapi.com");clientProfile.HttpProfile = httpProfile;// 实例化要请求产品的client对象,clientProfile是可选的OcrClient client = new OcrClient(cred, "", clientProfile);// 实例化一个请求对象,每个接口都会对应一个request对象SmartStructuralProRequest req = new SmartStructuralProRequest();req.ImageUrl = imageUrl;req.ItemNames = new string[] { "收货单位", "送货单号", "客户地址", "送货日期", "合计" };DeliveryNoteRecognitionModel deliveryNoteRecognitionModel = new DeliveryNoteRecognitionModel();// 返回的resp是一个SmartStructuralProResponse的实例,与请求对象对应SmartStructuralProResponse resp = client.SmartStructuralProSync(req);JObject jsonObject = JObject.Parse(AbstractModel.ToJsonString(resp));deliveryNoteRecognitionModel.Consignee = jsonObject["StructuralList"][0]["Groups"][0]["Lines"][0]["Value"]["AutoContent"].ToString();deliveryNoteRecognitionModel.DeliveryNoteNumber = jsonObject["StructuralList"][1]["Groups"][0]["Lines"][0]["Value"]["AutoContent"].ToString();deliveryNoteRecognitionModel.CustomerAddress = jsonObject["StructuralList"][2]["Groups"][0]["Lines"][0]["Value"]["AutoContent"].ToString();deliveryNoteRecognitionModel.DeliveryDate = jsonObject["StructuralList"][3]["Groups"][0]["Lines"][0]["Value"]["AutoContent"].ToString();deliveryNoteRecognitionModel.TotalAmount = jsonObject["StructuralList"][4]["Groups"][0]["Lines"][0]["Value"]["AutoContent"].ToString();return deliveryNoteRecognitionModel;}}}
说明:因为 json 结构比较复杂,目前不采用实体的方式获取字段属性,直接根据自定义的字段顺序进行获取,大家注意获取的顺序号。避免出现获取的字段对不上。
界面设计
这里增加一个图片地址的输入框和查询按钮,另外增加一个分组展示解析结果,具体后台代码如下:
private void btnSearch_Click(object sender, EventArgs e){tring url = txtImageUrl.Text;if (string.IsNullOrWhiteSpace(url)){MessageBox.Show("请输入查询送货单图片的URL");}else{DeliveryNoteRecognitionModel model = DeliveryNoteRecognitionUtils.Get(url);txtAddress.Text = model.CustomerAddress;txtDate.Text = model.DeliveryDate;txtAmount.Text = model.TotalAmount;txtBillNo.Text = model.DeliveryNoteNumber;txtReceiveCompany.Text = model.Consignee;}}
界面效果如下:

调试获取请求的数据如下图:

json 格式的数据:

返回的json数据
{"Angle": 0.0,"StructuralList": [{"Groups": [{"Lines": [{"Key": {"AutoName": "收货单位","ConfigName": null},"Value": {"AutoContent": "源悦餐饮连锁有限公司","Coord": {"LeftTop": {"X": 0,"Y": 0},"RightTop": {"X": 0,"Y": 0},"RightBottom": {"X": 0,"Y": 0},"LeftBottom": {"X": 0,"Y": 0}}}}]}]}, {"Groups": [{"Lines": [{"Key": {"AutoName": "送货单号","ConfigName": null},"Value": {"AutoContent": "NO:HT202402040010","Coord": {"LeftTop": {"X": 0,"Y": 0},"RightTop": {"X": 0,"Y": 0},"RightBottom": {"X": 0,"Y": 0},"LeftBottom": {"X": 0,"Y": 0}}}}]}]}, {"Groups": [{"Lines": [{"Key": {"AutoName": "客户地址","ConfigName": null},"Value": {"AutoContent": "陕西省西安市高新技术产业开发区1000号","Coord": {"LeftTop": {"X": 0,"Y": 0},"RightTop": {"X": 0,"Y": 0},"RightBottom": {"X": 0,"Y": 0},"LeftBottom": {"X": 0,"Y": 0}}}}]}]}, {"Groups": [{"Lines": [{"Key": {"AutoName": "送货日期","ConfigName": null},"Value": {"AutoContent": "2024/2/4","Coord": {"LeftTop": {"X": 0,"Y": 0},"RightTop": {"X": 0,"Y": 0},"RightBottom": {"X": 0,"Y": 0},"LeftBottom": {"X": 0,"Y": 0}}}}]}]}, {"Groups": [{"Lines": [{"Key": {"AutoName": "合计","ConfigName": null},"Value": {"AutoContent": "¥1,733,000.00","Coord": {"LeftTop": {"X": 0,"Y": 0},"RightTop": {"X": 0,"Y": 0},"RightBottom": {"X": 0,"Y": 0},"LeftBottom": {"X": 0,"Y": 0}}}}]}]}],"WordList": [],"RequestId": "b1c0bc85-ead7-4fd7-86e8-88683613fcce"}
最终界面结果如下:

三、总结
通过以上案例可以借助腾讯云智能化结构服务轻松提取送货单的信息,大家如果使用的时候只需要把该服务器封装为 API 接口就可以轻松和其他系统进行对接集成,非常实用。当然也可以通过该案例去集成更多的场景,例如出货、发货标签的识别、质量检验单的识别、出入库单据的识别、客户发票、应付单等等各种单据的识别都可以做到。通过腾讯云智能化结构服务可以大大节省人工录入的准确率和效率。还是非常实用的,感兴趣的朋友可以自己体验一下,大家如果有问题欢迎评论区沟通交流!