IRONSOFTWAREHOME
USING IRONOCR

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

Kannaopat Udonpant
Kannapat Udonpant
Updated: 2026年4月21日

手动输入收据数据是一种繁琐且容易出错的工作,这会让开发人员质疑自己的职业选择。 收据 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);

输出

在C#中构建一个实际提取有用数据的收据OCR API:图像2 - IronOCR读取收据输出

IronTesseract类是主要的OCR引擎,是Tesseract 5的托管封装,消除了本地C++互操作和手动设置的麻烦。设置OcrLanguage.English告诉引擎使用哪个语言模型,尽管IronOCR支持超过125种语言来处理来自全球的收据。

OcrInput接受几乎任何常见格式的收据图像(JPG,PNG,BMP,TIFF,GIF,WEBP)以及PDF。 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);

在C#中构建一个实际提取有用数据的收据OCR API:图像3 - 收据图像较差的示例输出

图像预处理功能

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

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

利用置信度评分验证数据

除了简单的文本提取,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}");

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

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

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

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

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

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

*使用置信度分数: IronOCR会给出它读取的每个单词的置信度百分比。 如果您对"总计"金额的置信度低于 80%,则应该将该收据标记出来,以便人工进行复核。 ***验证数据:**不要仅仅相信字符串。 尝试将"总计"解析成小数。 如果识别失败,可能是您的 OCR 识别器将"5"误读为"S"。

  • 位置重要: 对于复杂布局,使用IronOCR的Lines根据页面上的位置查找文本。 如果"总计"始终位于右下角,则针对该特定区域进行操作可以减少收据上其他数字造成的"干扰"。

收据 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许可选项,找到适合您团队的方案,或者先进行免费试用,亲眼见证效果。

PM > Install-Package IronOcr

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户