光学字符识别(OCR)技术通过将图片中的文本转换为机器可读取的数据,为物理信息与数字世界搭建了沟通的桥梁。对于.NET 开发者而言,掌握运用 C# 从图片中提取文本的技能,是开发智能文档处理、自动数据录入及无障碍应用等工具的关键。
本文将详细介绍如何借助 Spire.OCR for .NET 库在 C# 中实现 OCR 功能,涵盖基础文本提取、坐标定位等高级操作,并分享提升识别精度与效率的实用技巧。
目录:
- 了解 OCR 和 Spire.OCR
- 搭建 OCR 开发环境
- 基本识别:使用 C# 提取图片中的文本
- 进阶功能:使用 C# 提取图片中的文本及其坐标
- 提升 OCR 识别准确性的技巧
- 常见问题(支持的语言和图片格式)
- 结论
了解 OCR 和 Spire.OCR
什么是 OCR?
OCR 技术的作用是对包含文字的图片(如扫描文档、屏幕截图或照片等)进行分析,然后把这些图像中的文字转换成可以编辑、搜索或者通过编程处理的文本字符串。
Spire.OCR 的优势
Spire.OCR for .NET 是一款功能强大且对开发者友好的库,能够在 C# 应用中高精度识别图片中的文本,其主要特点如下:
- 支持多种语言(英语、中文、日语等)。
- 高精度识别算法,针对各种字体和样式进行了优化。
- 文本坐标提取,实现精确定位。
- 批量处理能力。
- 与.NET Framework 和.NET Core 兼容。
搭建 OCR 开发环境
在编写用于图片到文本 OCR 操作的 C# 代码前,需先配置好开发环境:
1. 通过 NuGet 安装:
打开 Visual Studio 的 NuGet 包管理器,搜索 “Spire.OCR”,在项目中安装最新版本。也可使用程序包管理器控制台,输入以下命令:
Install-Package Spire.OCR
2. 下载 OCR 模型:
Spire.OCR 依赖于预训练模型来识别图片文本。下载适用于您操作系统的模型文件:
下载后,将其解压到指定目录。(例如,F:\OCR Model\win-x64)
重要提示: 由于 Spire.OCR 仅支持 64 位平台,所以务必将解决方案的目标平台修改为 x64。
基本识别:使用 C# 提取图片中的文本
下面通过一个简单的 C# 示例,展示如何使用 Spire.OCR 从图片中读取文本。
using Spire.OCR;
using System.IO;
namespace OCRTextFromImage
{
internal class Program
{
static void Main(string[] args)
{
// 创建OcrScanner类的实例
OcrScanner scanner = new OcrScanner();
// 创建ConfigureOptions类的实例
ConfigureOptions configureOptions = new ConfigureOptions();
// 设置OCR模型的路径
configureOptions.ModelPath = "F:\\OCR Model\\win-x64";
// 设置文本识别的语言
configureOptions.Language = "Chinese";
// 将配置选项应用于扫描器
scanner.ConfigureDependencies(configureOptions);
// 扫描图片并提取文本
scanner.Scan("示例.png");
// 将提取的文本保存到txt文件
string text = scanner.Text.ToString();
File.WriteAllText("OCR结果.txt", text);
}
}
}
代码解析:
- OcrScanner:文本识别的核心类。
- ConfigureOptions:用于设置 OCR 参数:
- ModelPath:指定 OCR 模型文件的路径。
- Language:定义识别语言(例如,“English”、“Chinese”)。
- Scan():按照配置的设置对图片进行处理并提取文本
输出:
上述 C# 代码会处理图片文件(示例.png),并利用 File.WriteAllText() 方法将提取到的文本保存到文本文件(OCR结果.txt)中。
进阶功能:使用 C# 提取图片中的文本及其坐标
在很多场景下,了解提取的文本在图片中的位置也很重要,比如处理发票、表单或结构化文档时。Spire.OCR 不仅能提取文本,还能获取文本块的坐标,便于进行精确分析。
从图片中提取带坐标文本的 C# 代码:
using Spire.OCR;
using System.Collections.Generic;
using System.IO;
namespace OCRWithCoordinates
{
internal class Program
{
static void Main(string[] args)
{
// 创建OcrScanner类的实例
OcrScanner scanner = new OcrScanner();
// 创建ConfigureOptions类的实例
ConfigureOptions configureOptions = new ConfigureOptions();
// 设置OCR模型的路径
configureOptions.ModelPath = "F:\\OCR Model\\win-x64";
// 设置文本识别的语言
configureOptions.Language = "Chinese";
// 将配置选项应用于扫描器
scanner.ConfigureDependencies(configureOptions);
// 从图片中提取文本
scanner.Scan("报价单.png");
// 获取OCR结果文本
IOCRText text = scanner.Text;
// 创建一个列表来存储信息
List<string> results = new List<string>();
// 遍历OCR结果文本的每个块
foreach (IOCRTextBlock block in text.Blocks)
{
// 将每个块的文本及其位置信息添加到列表
results.Add($"文本:{block.Text}");
results.Add($"坐标:{block.Box}");
results.Add("---------");
}
// 将提取的带坐标的文本保存到txt文件
File.WriteAllLines("提取文本与坐标.txt", results);
}
}
}
核心方法:
- IOCRText:表示整个 OCR 结果。
- IOCRTextBlock:表示连续的文本块(例如,一个段落、一行或一个单词)。
- IOCRTextBlock.Box:包含文本块的矩形坐标:
- X(水平位置)
- Y(垂直位置)
- 宽度
- 高度
输出结果:
上述 C# 代码会对图片文件(报价单.png)执行 OCR 操作,提取识别到的文本及其在图片中的位置坐标,并将这些信息保存到文本文件(提取文本与坐标.txt)中。
提升 OCR 识别准确性的技巧
为了在使用 C# 从图片中识别文本时确保可靠的结果,可采用以下最佳实践:
- 使用高分辨率图片(300 DPI 或更高)。
- 对图片进行预处理(例如,调整大小、校正偏斜)以提高识别效果。
- 确保语言设置与图像中的文本语言一致。
- 将 OCR 模型存储在安全且易于访问的位置。
常见问题(支持的语言和图片格式)
问题 1:Spire.OCR 支持哪些图片格式?
答:Spire.OCR 支持所有常见格式:
- PNG
- JPEG/JPG
- BMP
- TIFF
- GIF
问题 2:Spire.OCR 支持哪些语言?
答:支持多种语言:
- 英语(默认)
- 中文(简体和繁体)
- 日语
- 韩语
- 德语
- 法语
问题 3:能否在ASP.NET Core 应用程序中使用 Spire.OCR 吗?
答:可以。支持的环境包括:
- NET Framework 2.0+
- NET Standard 2.0+
- NET Core 2.0+
- NET 5
问题 4:Spire.OCR 能否在从扫描 PDF 文件中提取文本?
答:此任务需要结合 Spire.PDF 实现,先将 PDF 转换为图片或从扫描的 PDF 中提取图片,然后使用上述 C# 示例从图片中获取文本。
结论
Spire.OCR for .NET 提供了一个功能强大且简单易用的解决方案,帮助开发人员实现在 C# 应用中提取图片中的文本。无论您是要开发一个简单的图片转文本工具,还是一个处理数千张发票的复杂系统,按照本文介绍的方法和最佳实践,都能轻松地将 OCR 功能集成到 .NET 应用中。
点击申请 30 天的试用许可证,以获得无限制的 OCR 功能,并提取隐藏在图片中的宝贵信息。