首页 > 编程语言 >C#实战:使用腾讯云识别服务轻松提取火车票信息

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

时间:2024-11-11 08:46:05浏览次数:1  
标签:set string get C# Text 腾讯 识别 public 火车票

公司内部涉及到车票报销的时候一个个输入火车票信息非常麻烦,尤其是出差比较多的企业,这对于财务人员的涉及报销单据录入还是非常麻烦的。今天给大家分享使用腾讯云车票识别服务,轻松提取火车票信息。这样可以方便把识别服务集成到业务系统,可以大大减轻财务人员录入单据信息的工作量。今天采用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

 

标签:set,string,get,C#,Text,腾讯,识别,public,火车票
From: https://www.cnblogs.com/hgmyz/p/18539013

相关文章

  • [C++]类和对象(上篇)
    类和对象类①类的声明与定义②成员变量的规范化1.成员变量为声明③计算类的大小1.对齐数的意义2.错题展示④成员函数的位置以及传参细节1.成员函数的位置2.传参细节this指针⑤类的6个默认成员函数1.构造函数概念特性无参构造函数与全缺省构造函数不能同时出现默......
  • NetDiag 是一个由 Microsoft 提供的网络诊断工具,用于帮助管理员和用户诊断和排除网络
    Netdiag|MicrosoftLearnNetDiag是一个由Microsoft提供的网络诊断工具,用于帮助管理员和用户诊断和排除网络连接和配置方面的问题。它主要用于在Windows操作系统中分析和诊断与网络连接相关的问题,尤其是在ActiveDirectory环境中的问题。起源和历史背景:早期的网络诊......
  • C语言PBC库(持续更新)
    PBC前言我的环境是Ubantu24边写边整理,持续更新。最近做毕设需要用到,就借此机会写一些关于c语言PBC库的教程,一些用法有结合GPT。说是教程不过是把官方文档说的函数用法翻译了一遍,关于双线性配对的知识我不了解,这里就不将了,我看网上大部分说的有就只是当黑盒调用就行了。官方......
  • 「杂题乱刷2」CF1354E
    题目链接CF1354EGraphColoring(*2100)解题思路发现这个东西就是类似于二分图染色的东西。因为\(2\)只能和\(1,3\)链接。其余种类的点都不能连接。不妨把\(1,3\)都看成同一个点放到最后处理。那么我们就相当于是要找到一种方案使得选择每个联通快的黑点或白点,使得最......
  • 操作系统CPU调度
    在像MSDOS这样的单编程系统中,当进程等待任何I/O操作完成时,CPU仍然是空闲的。这是一个开销,因为它浪费时间并导致饥饿问题。但是,在多程序系统中,CPU在进程的等待时间内不会保持空闲状态,而是开始执行其他进程。操作系统必须定义CPU将被给予哪个进程。在多程序系统中,操作系统调......
  • 操作系统FCFS护航效果
    如果第一个作业的爆发时间是最高的,FCFS可能会受到队列影响。就像在现实生活中一样,如果队列在路上经过,那么其他人可能会被堵塞,直到完全通过。这也可以在操作系统中进行模拟。如果CPU在就绪队列的前端获得较高突发时间的进程,则较低突发时间的进程可能被阻塞,这意味着如果执行中......
  • JDBC-Util工具类
     根据前面的代码,当我们要对数据库进行大量的操作时,会产生非常多的重复代码。而且不利于后续的修改操作,因此我们可以写一个jdbc的工具类,让它从配置文件中读取配置参数,然后创建连接对象。properties  properties配置文件是一种用于存储应用程序配置信息的文本文件。通过pro......
  • LLMOps Essentials: A Practical Guide to Operationalizing Large Language Models
    LLMOpsEssentials:APracticalGuidetoOperationalizingLargeLanguageModelshttps://www.datacamp.com/blog/llmops-essentials-guide-to-operationalizing-large-language-models Whenwe,asusers,interactwithChatGPT,wesimplytypeapromptintothewe......
  • The 2024 ICPC Asia East Continent Online Contest (I) G
    Link:TheMedianoftheMedianoftheMedian考虑二分答案,对中位数进行二分,每次去判断是否比中位数大即可。我们钦定了一个中位数\(x\),对于\(\{a\}\)数组,若\(a_i\gex\),则令\(a_i=1\),否则\(a_i=0\),这样有一个好处,我们只关心\(1\)和\(0\)的数量,就可以知道中位数......
  • 【C/C++】5.字节对齐和字节填充
    字节对齐(alignment)和字节填充(padding)是优化内存访问效率和确保数据结构正确存储的重要机制。了解字节对齐和填充的原理可以帮助我们更好地设计数据结构,并且减少因不合理的内存布局引起的性能问题或程序错误。1.字节对齐(Alignment)字节对齐是指在内存中存储数据时,将数据......