跳至页脚内容
使用 IRONOCR

用 C# 构建一个能够真正提取有用数据的收据 OCR API

手动输入收据数据是一种繁琐且容易出错的工作,这会让开发人员质疑自己的职业选择。 收据 OCR API 利用光学字符识别技术自动从收据图像中提取文本,并将其转换为应用程序实际可以使用的结构化数据,从而消除手动数据输入。 无论是费用管理自动化、会计软件集成,还是为会员忠诚度计划提供支持,可靠的收据 OCR 解决方案都能轻松应对繁重的工作。

在本文中,我们将演示如何使用IronOCR(一个完全在本地运行的.NET库)在 C# 中构建收据 OCR API,该库在本地处理收据图像,无需将敏感的收据数据发送到第三方云服务。 这意味着在不牺牲准确性的前提下,实现全面的数据保护。

立即开始免费试用IronOCR ,并跟随以下示例进行操作。

收据OCR技术的工作原理是什么?

用 C# 构建一个真正能提取有用数据的收据 OCR API:图 1 - 收据 OCR API 输出示例

收据 OCR(光学字符识别)通过将收据图像上的打印文本转换为机器可读文本,自动从收据中提取数据。 在底层,人工智能技术和深度学习模型分析收据的视觉布局,识别文本区域,并以无与伦比的准确度识别字符,在清晰的扫描件上通常能达到 99% 或更高的准确率。

现代收据 OCR API 使用机器学习技术从各种收据格式和布局中解析关键信息,例如商家名称、日期、各个项目、总计和税额。 深度学习技术使这些模型能够通过学习大型数据集不断改进,并随着时间的推移适应新的收据设计和语言。最终实现了快速、可靠的收据数据提取,从而取代了各行各业缓慢且容易出错的手动录入。

收据扫描技术可以处理多种语言,处理 JPG、PNG 和 PDF 等格式的文档,并以结构化 JSON 等标准化格式提供结果,从而轻松与现有系统无缝集成。

如何使用 C# 提取收据数据?

使用IronOCR,在 C# 中从收据中提取数据只需要几行代码。 核心工作流程加载收据图像文件,运行 OCR 引擎,并返回提取的完整文本。

using IronOcr;
// Initialize the OCR engine for receipt scanning
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
// Load the receipt image for data extraction
using var input = new OcrInput();
input.LoadImage("receipt.jpg");
// Extract text from the receipt
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
// Initialize the OCR engine for receipt scanning
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
// Load the receipt image for data extraction
using var input = new OcrInput();
input.LoadImage("receipt.jpg");
// Extract text from the receipt
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

' Initialize the OCR engine for receipt scanning
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English

' Load the receipt image for data extraction
Using input As New OcrInput()
    input.LoadImage("receipt.jpg")
    ' Extract text from the receipt
    Dim result As OcrResult = ocr.Read(input)
    Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

输出

用 C# 构建一个真正能提取有用数据的收据 OCR API:图 2 - IronOCR 读取收据输出

IronTesseract 类是主要的 OCR 引擎,它是 Tesseract 5 的一个托管封装,免去了原生 C++ 互操作和手动设置的麻烦。设置 OcrLanguage.English 可以告诉引擎使用哪种语言模型,不过IronOCR 支持超过 125 种语言,可用于处理来自世界各地的收据。

OcrInput 接受几乎所有常见格式(JPG、PNG、BMP、TIFF、GIF、WEBP)以及 PDF 格式的收据图像。 Read 方法执行实际的 OCR,并返回一个 OcrResult 对象,这是一个丰富的文档对象模型,不仅包含纯文本,还包含对段落、行、单词和单个字符的结构化访问以及置信度分数。 这非常适合需要提取细粒度数据的收据解析工作流程。

图像预处理如何减少收据扫描中的错误?

现实生活中的收据图片很少是完美的。 纸张褶皱、光线不足和轻微旋转都会引入噪声,从而导致数据提取过程中出现错误。 在运行 OCR 之前对图像进行预处理可以显著提高准确率,并有助于减少可能损坏收据数据的错误。

using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("receipt.jpg");
// Preprocess the receipt image to improve OCR accuracy
input.DeNoise();    // Remove digital noise from the scanned receipt
input.Deskew();     // Straighten a tilted or rotated receipt capture
input.Sharpen();    // Enhance text clarity for better recognition
OcrResult result = ocr.Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
Console.WriteLine(result.Text);
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("receipt.jpg");
// Preprocess the receipt image to improve OCR accuracy
input.DeNoise();    // Remove digital noise from the scanned receipt
input.Deskew();     // Straighten a tilted or rotated receipt capture
input.Sharpen();    // Enhance text clarity for better recognition
OcrResult result = ocr.Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
Console.WriteLine(result.Text);
Imports IronOcr

Dim ocr As New IronTesseract()
Using input As New OcrInput()
    input.LoadImage("receipt.jpg")
    ' Preprocess the receipt image to improve OCR accuracy
    input.DeNoise()    ' Remove digital noise from the scanned receipt
    input.Deskew()     ' Straighten a tilted or rotated receipt capture
    input.Sharpen()    ' Enhance text clarity for better recognition
    Dim result As OcrResult = ocr.Read(input)
    Console.WriteLine($"Confidence: {result.Confidence}%")
    Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

用 C# 构建一个能够真正提取有用数据的收据 OCR API:图 3 - 收据图像质量差的示例输出

图像预处理功能

为了提高提取精度, IronOCR提供了几个内置过滤器,用于在 OCR 过程开始之前清理图像。

功能 目的
DeNoise() 去除扫描文档中常见的斑点和数字瑕疵。
Deskew() 检测并校正歪斜或倾斜图像的旋转。
Sharpen() 增强模糊边缘,使褪色的文字更清晰易读。
Binarize() 将图像转换为黑白图像以增加对比度。
ToGrayScale() 移除颜色数据,以简化图像,便于 OCR 引擎识别。
EnhanceResolution() 将低 DPI 图像放大,以提高字符识别率。

利用置信度评分验证数据

除了简单的文本提取之外,Confidence 属性在 OcrResult 上返回一个百分比分数,指示输出的可靠性。

对于处理大量数据的自动化收据处理流程而言,该评分非常有价值。 它允许系统设置阈值——例如,自动处理任何高于90% 的结果,同时标记置信度低的结果以供人工审核。 这样既能保证数据质量,又无需人工检查每一张收据。

如何从 OCR 文本中解析出特定的收据字段?

从 OCR 引擎获取原始文本是一个很好的开始,但这仅仅是个开始。 如果你要构建一个费用报告或一个具有实时处理的会计工具,你需要的不仅仅是"一团"文本,而是具体的数据字段,例如日期、商家名称和最终总额。

IronOCR完成读取图像的繁重工作后,我们就可以在收据 API 中使用标准的 C# 逻辑和正则表达式 (Regex) 来提取我们正在寻找的特定字段。

using IronOcr;
using System.Text.RegularExpressions;

var ocr = new IronTesseract();
using var input = new OcrInput("receipt.jpg");
input.DeNoise();
OcrResult result = ocr.Read(input);
string ocrText = result.Text;

// Parse the date from receipt data
var dateMatch = Regex.Match(ocrText, @"\d{1,2}/\d{1,2}/\d{2,4}");
string receiptDate = dateMatch.Success ? dateMatch.Value : "Not found";

// Parse the total amount
var totalMatch = Regex.Match(ocrText, @"(?i)total[\s:$]*(\d+\.\d{2})");
string total = totalMatch.Success ? totalMatch.Groups[1].Value : "Not found";

Console.WriteLine($"Date: {receiptDate}");
Console.WriteLine($"Total: ${total}");
using IronOcr;
using System.Text.RegularExpressions;

var ocr = new IronTesseract();
using var input = new OcrInput("receipt.jpg");
input.DeNoise();
OcrResult result = ocr.Read(input);
string ocrText = result.Text;

// Parse the date from receipt data
var dateMatch = Regex.Match(ocrText, @"\d{1,2}/\d{1,2}/\d{2,4}");
string receiptDate = dateMatch.Success ? dateMatch.Value : "Not found";

// Parse the total amount
var totalMatch = Regex.Match(ocrText, @"(?i)total[\s:$]*(\d+\.\d{2})");
string total = totalMatch.Success ? totalMatch.Groups[1].Value : "Not found";

Console.WriteLine($"Date: {receiptDate}");
Console.WriteLine($"Total: ${total}");
Imports IronOcr
Imports System.Text.RegularExpressions

Dim ocr As New IronTesseract()
Using input As New OcrInput("receipt.jpg")
    input.DeNoise()
    Dim result As OcrResult = ocr.Read(input)
    Dim ocrText As String = result.Text

    ' Parse the date from receipt data
    Dim dateMatch As Match = Regex.Match(ocrText, "\d{1,2}/\d{1,2}/\d{2,4}")
    Dim receiptDate As String = If(dateMatch.Success, dateMatch.Value, "Not found")

    ' Parse the total amount
    Dim totalMatch As Match = Regex.Match(ocrText, "(?i)total[\s:$]*(\d+\.\d{2})")
    Dim total As String = If(totalMatch.Success, totalMatch.Groups(1).Value, "Not found")

    Console.WriteLine($"Date: {receiptDate}")
    Console.WriteLine($"Total: ${total}")
End Using
$vbLabelText   $csharpLabel

用 C# 构建一个能够真正提取有用数据的收据 OCR API:图 4 - 使用 IronOCR 和简单正则表达式模式的示例输出

本示例使用简单的正则表达式模式从原始 OCR 收据文本中自动提取日期和总额。 日期模式与常见的收据日期格式(如 03/15/2026)相匹配,而总额模式则查找"TOTAL"字样,后跟美元金额。 对于生产系统,应调整这些模式以匹配遇到的具体收据格式。

要提取行项目数据(单个产品名称、数量和价格),请按行拆分 OCR 文本,并应用识别行项目行的模式。 这种方法非常适合将收据图像转换为适合 JSON 格式输出、费用管理工作流程以及与会计软件直接集成的结构化数据。 对于跨各种布局的更高级的收据解析,可以考虑将基于区域的 OCR 读取(使用 ContentArea 矩形)与 IronOCR 的文档结构功能相结合,从收据的特定部分提取行项目数据。

开发者对正则表达式的现实检验

说实话:正则表达式是一种"快速简便"的入门方法,但它并非万无一失。 现实生活中的收据很杂乱。 有的商家可能会印上"总计",有的可能会印上"应付余额",还有的可能会在美元符号上留下咖啡渍。

如果要将此功能投入生产环境,不要只依赖单一模式。 以下是如何使其更稳健的方法:

*使用置信度分数:* IronOCR会给出它读取的每个单词的置信度百分比。 如果您对"总计"金额的置信度低于 80%,则应该将该收据标记出来,以便人工进行复核。 验证数据:**不要仅仅相信字符串。 尝试将"总计"解析成小数。 如果识别失败,可能是您的 OCR 识别器将"5"误读为"S"。 *位置很重要:对于复杂的布局,请使用 IronOCR 的 OcrResult.BlocksLines 按其在页面上的位置查找文本。 如果"总计"始终位于右下角,则针对该特定区域进行操作可以减少收据上其他数字造成的"干扰"。

收据 OCR API 如何与费用管理系统集成?

当收据 OCR API 将结构化的收据数据直接导入业务系统时,它才能真正发挥强大的作用。 IronOCR提供了一个对开发者友好的 API,可以与任何.NET应用程序无缝集成,无论是ASP.NET Web 服务、桌面费用跟踪器,还是批量处理收据的后台工作程序。

API 返回提取的文本作为 OcrResult 对象,该对象提供对单个页面、段落和行的访问。 这样就可以轻松构建收据处理流程,该流程将 OCR 文本解析为结构化的 JSON,验证数据(包括重复检测和购买验证),并将其转发到会计软件、ERP 系统或数据库。

IronOCR 的所有 OCR 处理都在本地运行,无需依赖云,免费试用计划无需信用卡,并可完全控制敏感的财务文件。 这种本地优先的方法意味着收据 OCR API 可以处理大量的数字收据而无需担心延迟问题,并为各个行业中具有严格合规要求的组织提供固有的数据保护。 该库提供全面的文档,并通过NuGet与现有系统无缝集成,对于既重视性能又注重简易性的团队来说,这是一个务实的选择。

对于希望构建完整收据扫描解决方案的开发人员来说, IronOCR还支持条形码和二维码读取可搜索 PDF 生成以及多页文档处理,所有这些都在同一个库中。

立即开始自动化收据数据提取

使用IronOCR在 C# 中构建收据 OCR API,可以消除手动数据输入的痛苦,并以快速、准确、自动化的数据提取取而代之。 从基本的收据扫描到具有字段级提取功能的高级收据解析,该库提供了将收据图像转换为有价值、可操作的结构化数据所需的一切,所有这些都无需将文档发送到外部。

IronOCR结合了强大的预处理过滤器、简洁的.NET API、机器学习增强的识别和本地处理功能,非常适合费用管理、收据处理以及任何需要可靠且大规模地从收据中提取数据的工作流程。

准备好从收据工作流程中彻底消除手动录入了吗? 探索IronOCR许可选项,找到适合您团队的方案,或者先进行免费试用,亲眼见证效果。

Install-Package IronOcr

常见问题解答

什么是收据 OCR API?

收据 OCR API 是一种利用光学字符识别技术从收据图像中提取文本并将其转换为结构化数据的工具,从而无需手动输入数据。

IronOCR 可用于收据数据提取吗?

IronOCR 利用其先进的 OCR 功能,为从收据图像中提取结构化数据提供了强大的解决方案,使整个过程流畅且准确。

在 C# 中使用收据 OCR API 有哪些好处?

在 C# 中使用收据 OCR API 可以简化从收据中提取数据的过程,减少与手动输入相关的错误,并提高费用管理和会计等应用程序的效率。

IronOCR能否与会计软件集成?

是的,IronOCR 可以与会计软件集成,自动提取和处理收据数据,从而提高工作流程效率和准确性。

IronOCR 是否适用于费用管理自动化?

IronOCR 非常适合费用管理自动化,因为它能够高效地提取和处理收据数据,从而减少手动数据输入所需的时间和精力。

IronOCR如何处理不同的收据格式?

IronOCR 旨在识别和处理各种收据格式,无论收据的布局或设计如何,都能确保准确提取数据。

IronOCR 能够准确提取收据上的文本,其原因是什么?

IronOCR 使用先进的光学字符识别算法,即使是从复杂的收据图像中提取文本,也能确保高精度。

IronOCR 可以用于会员忠诚度计划应用吗?

是的,IronOCR 可以用于支持忠诚度计划应用程序,通过准确提取和处理收据数据来跟踪购买和奖励。

用于实现收据 OCR API 的编程语言是什么?

可以使用 C# 实现收据 OCR API,利用 IronOCR 的功能来开发高效可靠的数据提取解决方案。

IronOCR是否支持本地处理收据图像?

是的,IronOCR 支持对收据图像进行本地处理,提供了一种安全高效的数据提取方式,无需使用云服务。

Kannaopat Udonpant
软件工程师
在成为软件工程师之前,Kannapat 在日本北海道大学完成了环境资源博士学位。在攻读学位期间,Kannapat 还成为了车辆机器人实验室的成员,隶属于生物生产工程系。2022 年,他利用自己的 C# 技能加入 Iron Software 的工程团队,专注于 IronPDF。Kannapat 珍视他的工作,因为他可以直接从编写大多数 IronPDF 代码的开发者那里学习。除了同行学习外,Kannapat 还喜欢在 Iron Software 工作的社交方面。不撰写代码或文档时,Kannapat 通常可以在他的 PS5 上玩游戏或重温《最后生还者》。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我