C#实战:使用腾讯云识别服务轻松提取火车票信息

news/2024/11/14 15:55:33/文章来源:https://www.cnblogs.com/hgmyz/p/18539013

公司内部涉及到车票报销的时候一个个输入火车票信息非常麻烦,尤其是出差比较多的企业,这对于财务人员的涉及报销单据录入还是非常麻烦的。今天给大家分享使用腾讯云车票识别服务,轻松提取火车票信息。这样可以方便把识别服务集成到业务系统,可以大大减轻财务人员录入单据信息的工作量。今天采用C#编程语言给大家提供一个可用的Demo,感兴趣的朋友可以了解一下!

 

一、腾讯票据单据识别 Invoice OCR服务介绍

 

官网

该服务基于腾讯优图实验室的深度学习技术,可以将图片上的文字内容,智能准确识别成为可编辑的文本。这里主要说一下火车票识别。

该服务支持火车票图片全字段的识别,包括编号、出发站、到达站、出发时间、车次、座位号、姓名、票价、席别、身份证号、发票消费类型、序列号、加收票价、手续费、大写金额、售票站、原票价、发票类型、收据号码、是否仅供报销使用等字段的识别。它具有识别速度快、准确率高等特点。

二、开发完整流程

● 开通服务

● 申请创建开发者密钥

● 创建项目编写代码集成

2.1 开通文字识别服务

首先需要使用自己的账户登录腾讯云官网,然后进入文字识别服务控制台,开通服务。开通服务后可以查看资源包,默认有1000次的免费额度,方便大家本地开发测试,确认没问题后再去购买资源包,部署到生产环境使用。这个对于开发者还是非常有好的。

另外给大家分享腾讯云双十一拼团活动,优惠多多,不容错过!专属链接

 

这里给推荐拼团购买轻量级服务器配置为2核2G3M带宽一年仅需68元,并且加赠3个月,相当于68元购买了15个月轻量级服务器简直太划算了,需要购买服务器的朋友不容错过!

 

2.2 创建开发者密钥

如果需要本地集成开发的话,需要申请开发者密钥,然后创建开发者密钥。创建成功之后如下:

 

注意:一定要妥善保护后自己的开发密钥

2.3 创建项目编写代码集成

首先打开VS2022创建一个WinForm项目,项目名称为TrainTicketRecognitionDemo

,具体创建如下:

 

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

 

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

 

安装成功后如下

 

接着创建一个火车票识别工具类TrainTicketRecognitionUtils.cs

using Newtonsoft.Json;
using TencentCloud.Common;
using TencentCloud.Common.Profile;
using TencentCloud.Ocr.V20181119;
using TencentCloud.Ocr.V20181119.Models;namespace TrainTicketRecognitionDemo
{/// <summary>/// 火车票查询工具类/// </summary>public class TrainTicketRecognitionUtils{public static TrainTicketRecognitionModel GetTicketStr(string imageUrl){// 注意密钥妥善保存,避免泄露,可以放入配置文件或者数据库中Credential cred = new Credential{SecretId = "个人SecretId",SecretKey = "个人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, "ap-beijing", clientProfile);// 实例化一个请求对象,每个接口都会对应一个request对象TrainTicketOCRRequest req = new TrainTicketOCRRequest();req.ImageUrl = imageUrl;// 返回的resp是一个TrainTicketOCRResponse的实例,与请求对象对应TrainTicketOCRResponse resp = client.TrainTicketOCRSync(req);           TrainTicketRecognitionModel trainTicketRecognitionModel = JsonConvert.DeserializeObject<TrainTicketRecognitionModel>(AbstractModel.ToJsonString(resp));return trainTicketRecognitionModel;}}
}

 


创建TrainTicketRecognitionModel.cs 实体类

用来接收调用接口成功后返回过来的结果

public class TrainTicketRecognitionModel
{/// <summary>/// 编号/// </summary>public string TicketNum { get; set; }/// <summary>/// 出发站/// </summary>public string StartStation { get; set; }/// <summary>/// 到达站/// </summary>public string DestinationStation { get; set; }/// <summary>/// 出发时间/// </summary>public string Date { get; set; }/// <summary>/// 车次/// </summary>public string TrainNum { get; set; }/// <summary>/// 座位号/// </summary>public string Seat { get; set; }/// <summary>/// 乘车人姓名/// </summary>public string Name { get; set; }/// <summary>/// 票价/// </summary>public string Price { get; set; }/// <summary>/// 席别/// </summary>public string SeatCategory { get; set; }/// <summary>/// 身份证号/// </summary>public string ID { get; set; }/// <summary>/// 发票消费类型/// </summary>public string InvoiceType { get; set; }/// <summary>/// 序列号/// </summary>public string SerialNumber { get; set; }/// <summary>/// 加收票价/// </summary>public string AdditionalCost { get; set; }/// <summary>/// 手续费/// </summary>public string HandlingFee { get; set; }/// <summary>/// 大写金额(票面有大写金额该字段才有值/// </summary>public string LegalAmount { get; set; }/// <summary>/// 售票站/// </summary>public string TicketStation { get; set; }/// <summary>/// 原票价(一般有手续费的才有原始票价字段)/// </summary>public string OriginalPrice { get; set; }/// <summary>/// 发票类型:火车票、火车票补票、火车票退票凭证/// </summary>public string InvoiceStyle { get; set; }/// <summary>/// 收据号码/// </summary>public string ReceiptNumber { get; set; }/// <summary>/// 仅供报销使用:1为是,0为否/// </summary>public string IsReceipt { get; set; }/// <summary>/// 唯一请求 ID,由服务端生成/// </summary>public string RequestId { get; set; }
}

 

界面设计

这里增加一个图片地址的输入框和查询按钮,另外增加一个分组展示解析结果,具体后台代码如下:

 /// <summary>///  查询代码/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnSearch_Click(object sender, EventArgs e){string url = txtImageUrl.Text;if (string.IsNullOrWhiteSpace(url)){MessageBox.Show("请输入查询车票图片的URL");}else{TrainTicketRecognitionModel model = TrainTicketRecognitionUtils.GetTicketStr(url);txtStartStation.Text = model.StartStation;txtDestinationStation.Text = model.DestinationStation;txtDate.Text = model.Date;txtTrainNum.Text= model.TrainNum;txtPrice.Text = model.Price;txtSeat.Text = model.Seat;txtSeatCategory.Text = model.SeatCategory;txtName.Text = model.Name;}}

  

 

查询结果如下:

 

三、总结

通过以上案例可以轻松实现火车票信息识别提取的功能,以上案例代码提供的比较完整,如果大家还有问题的话欢迎沟通交流!

腾讯云原文地址:https://cloud.tencent.com/developer/article/2464115

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/831606.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Django 5 By Example》阅读笔记:p1-p16

《Django 5 By Example》学习第1天,p1-p16总结,总计16页。 一、技术总结 1.Django基本操作 (1)创建 project & 创建 app django-admin startproject mysitedjango-admin startapp blog(2)定义model (3)启动项目 python manage.py runserver二、英语总结(生词:8) 1.finte…

2024/11/11

软件设计 实验12:外观模式 在计算机主机(Mainframe)中,只需要按下主机的开机按钮(on()),即可调用其他硬件设备和软件的启动方法 ,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(HardDisk)的读取(read())、操作系统(OS)的载入(load()),如果某一过程发生错误则计算…

2024.11.6(周三)

用透明组合模式实现教材中的“文件夹浏览”这个例子。 实验要求: 1.文件的执行不需真正实现,只需简单提示即可; 2.提交源代码; 3.注意编程规范。1、类图2、源代码 #include <iostream> #include <string> #include<list> using namespace std;class Abst…

2024.11.7(周四)

用装饰模式模拟手机功能的升级过程:简单的手机(SimplePhone)在接收来电时,会发出声音提醒主人;而JarPhone除了声音还能振动;更高级的手机(ComplexPhone)除了声音、振动外,还有灯光闪烁提示。 实验要求: 1.提交类图; 2.提交源代码; 3.注意编程规范。1、类图2、源代码 #i…

2024.11.5(周二)

用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。 实验要求: 1.画出对应的类图; 2.提交源代码; 3.注意编程规范。1、类图2、源代码 (1) Bus.java package test;public class Bus implements Vehicle{@Overridepublic void run() {Sy…

CFAT:三角窗口实现图像超分辨率

CFAT:三角窗口实现图像超分辨率基于变换器的模型通过利用其固有的捕获复杂上下文特征的能力,彻底改变了图像超分辨率(SR)的效果。如今,在Transformer架构中使用的重叠矩形移位窗口技术是超分辨率模型中的一种常见做法,可以提高图像放大的质量和鲁棒性。然而,它在边界处存…

CFAT:释放三角窗口实现图像超分辨率

CFAT:释放三角窗口实现图像超分辨率基于变换器的模型通过利用其固有的捕获复杂上下文特征的能力,彻底改变了图像超分辨率(SR)的效果。如今,在Transformer架构中使用的重叠矩形移位窗口技术是超分辨率模型中的一种常见做法,可以提高图像放大的质量和鲁棒性。然而,它在边界…

读数据工程之道:设计和构建健壮的数据系统34读后总结与感想兼导读

读后总结与感想兼导读1. 基本信息 数据工程之道:设计和构建健壮的数据系统[美]乔里斯(Joe Reis),[美]马特豪斯利(Matt Housley)著机械工业出版社,2024年2月出版1.1. 读薄率 书籍总字数473千字,笔记总字数109584字。 读薄率109584473000≈23.17% 1.2. 读厚方向Data Mesh权威指…

鸿蒙NEXT开发案例:抛硬币

【1】引言(完整代码在最后面) 本项目旨在实现一个简单的“抛硬币”功能,用户可以通过点击屏幕上的地鼠图标来模拟抛硬币的过程。应用会记录并显示硬币正面(地鼠面)和反面(数字100面)出现的次数。为了增强用户体验,我们还添加了动画效果,使抛硬币的过程更加生动有趣。 …

【CodeForces训练记录】Codeforces Round 986 (Div. 2)

训练情况赛后反思 C题逆风翻盘,可能勉强青名了。A题愣神了,我觉得还能再做的快一点。 A题 给定一个字符串,NWSE,重复着字符串走,我们直接模拟即可,用 while 来判断是否走到终点,然后对于不可能走到的终点,我选择了一个不会超时的步数范围,超出就跳出 while 即可,最后…

24. 使用MySQL之使用游标

1. 游标 由前几章可知,MySQL检索操作返回一组称为结果集的行。这组返回的行都是与SQL语句相匹配的行(零行或多行)。 使用简单的SELECT语句,例如,没有办法得到第一行、下一行或前10行,也不存在每次一行地处理所有行的简单方法(相对于成批地处理它们)。 有时,需要在检索…

Python clickhouse-driver 类库使用学习总结

实践环境 python3 .9.13 clickhouse-driver 0.2.9 实践操作 # -*- coding:utf-8 -*-import clickhouse_driverif __name__ == __main__:host = 192.168.88.131port = 9000 # 注意,不能使用默认的8123username = testaccpassword = test1234database = default# 连接方式1# con…