使用 IRONOCR

如何在C#中OCR字幕(教程)

更新 2023年十二月17日
分享:

在本教程中,我们将学习如何从视频文件中提取硬编码字幕。我们将提取一个样本视频文件,并将硬编码字幕提取到一个 txt 文件中。我们将开发一个 C# .NET 程序,使用 OCR 流程提取硬编码字幕。本教程简单易懂,即使是 C# 程序初学者也能看懂。

我们需要一个高效的光学字符识别系统 (光学字符识别) 该引擎可处理视频并获取字幕文件,而无需考虑字幕语言。

有许多库可以提供 OCR 结果。其中有些是付费的,有些难以使用,有些效率不高或不准确,因此很难找到一个免费、高效、易用且能提供准确结果的库。

IronOCR 可免费用于开发,并为商业用途提供一个月的免费试用。它支持 150 多种语言,比其他大多数 OCR 库提供更高的准确性。它还具有高效、易用的特点。我们将使用该库进行演示。

IronOCR

IronOCR 是由 Iron Software 开发和维护的一个库,可帮助 C# 软件工程师在 .NET 项目中执行 OCR、条形码扫描和文本提取。

IronOCR 的功能包括

  • 从图像等多种格式中读取文本 (JPEG、PNG、BMP), 图像互换格式, TIF/TIFF溪流,以及 PDF 文件
  • 更正 低质量扫描和照片 拥有大量滤镜,如纠偏、去噪、二值化、增强分辨率、放大等。
  • 读取 20 多种不同格式的条形码,以及 支持 QR 码
  • 使用 Tesseract OCR 的最新版本,其性能经过调整后已超越其他同类库
  • 导出可搜索的 PDF、hOCR/HTML 导出和图像内容文本。

让我们开发一个读取车牌号码的演示应用程序。

创建一个 Visual Studio 项目

第一步是创建一个新项目。

打开 Visual Studio。点击创建新项目,选择控制台应用程序项目模板。

单击下一步按钮,并为项目命名 (我已将其命名为 "OCR 字幕",您可以根据自己的喜好为其命名).

点击下一步按钮,选择目标框架。最后,点击创建按钮创建项目。

创建的项目如下图所示。

如何在 C# 中 OCR 字幕(教程),图 1:在 Visual Studio 中创建新项目

在 Visual Studio 中创建新项目

现在,我们需要安装 IronOCR 库,以便在项目中使用它。最简单的方法是通过 NuGet Package Manager for Solution 安装。

安装 IronOCR NuGet 软件包

从顶部菜单栏点击工具,然后选择NuGet 包管理器 > 管理解决方案的 NuGet 包,如下图所示。

如何在 C# 中 OCR 字幕(教程),图 2:在 Visual Studio 中安装 IronOCR

在 Visual Studio 中安装 IronOCR

将出现以下窗口。

如何在 C# 中 OCR 字幕(教程),图 3:Visual Studio NuGet 软件包管理器用户界面

Visual Studio NuGet 软件包管理器用户界面

点击浏览,搜索 IronOCR。选择 IronOCR 软件包,然后点击 安装 按钮,如下图所示。

如何在 C# 中 OCR 字幕(教程),图 4:在 NuGet 软件包管理器用户界面中搜索 IronOCR

在 NuGet 软件包管理器用户界面中搜索 IronOCR

IronOCR 库将被安装并准备就绪。

提取硬编码字幕

让我们编写一个提取硬编码字幕的程序。

我们将使用下面的截图来提取字幕。

如何在 C# 中 OCR 字幕(教程),图 5:将从中提取文本的视频截图示例

将从中提取文字的视频截图示例

添加以下命名空间:

using IronOcr;
using IronOcr;
Imports IronOcr
VB   C#

在命名空间声明下方编写以下代码。

var ocr = new IronTesseract();
using (var input = new OcrInput(@"D:\Liscence Plate\plate3.jpg"))
{
    var result = ocr.Read(input);
    Console.WriteLine(result.Text);
}
var ocr = new IronTesseract();
using (var input = new OcrInput(@"D:\Liscence Plate\plate3.jpg"))
{
    var result = ocr.Read(input);
    Console.WriteLine(result.Text);
}
Dim ocr = New IronTesseract()
Using input = New OcrInput("D:\Liscence Plate\plate3.jpg")
	Dim result = ocr.Read(input)
	Console.WriteLine(result.Text)
End Using
VB   C#

上述代码的工作原理如下:

1.初始化 钢铁魔方 对象。它将创建一个 IronTessearct 的默认实例。

2.创建一个新的 OcrInput 对象填充了输入图像文件或 PDF 文档。OcrInput "是首选的输入类型,因为它允许对多页文档进行 OCR,并允许在 OCR 之前增强图像,以获得更快、更准确的结果。

3.从 OCR 输入对象读取文本并返回 OCR 结果对象。 ocr.Read 将从给定的输入截图中提取字幕。

4.result.Text 将返回从给定输入中提取的全部内容。

示例程序的控制台输出如下:

如何在 C# 中 OCR 字幕(教程),图 7:使用 IronOCR 对样本图像进行文本提取后生成的控制台输出结果

使用 IronOCR 对样本图像进行文本提取后生成的控制台输出结果

假设有一个视频帧,其中包含视频标题和字幕:

如何在 C# 中 OCR 字幕(教程),图 6:一段较长视频的单帧,包含视频标题和视频字幕的文本区域

较长视频的单帧,包含视频标题和视频字幕的文本区域

我们的目标是从图像底部区域提取硬编码字幕。在这种情况下,我们需要指定显示字幕的文本区域。

指定字幕在画面中的位置

我们可以使用 "System.Drawing.Rectangle "来指定从视频帧中读取字幕的区域。测量单位始终是像素

我们将使用以下示例代码来指定文本区域。

var ocr = new IronTesseract();
using (var input = new OcrInput())
{
    // a 41% improvement on speed
    var contentArea = new CropRectangle(x: 189, y: 272, height: 252, width: 77);
    input.AddImage(@"D:\subtitle\image.png", contentArea);
    var result = ocr.Read(input);
    Console.WriteLine(result.Text);
}
var ocr = new IronTesseract();
using (var input = new OcrInput())
{
    // a 41% improvement on speed
    var contentArea = new CropRectangle(x: 189, y: 272, height: 252, width: 77);
    input.AddImage(@"D:\subtitle\image.png", contentArea);
    var result = ocr.Read(input);
    Console.WriteLine(result.Text);
}
Dim ocr = New IronTesseract()
Using input = New OcrInput()
	' a 41% improvement on speed
	Dim contentArea = New CropRectangle(x:= 189, y:= 272, height:= 252, width:= 77)
	input.AddImage("D:\subtitle\image.png", contentArea)
	Dim result = ocr.Read(input)
	Console.WriteLine(result.Text)
End Using
VB   C#

这样一来,速度提高了41%,而且还能让我们更具体。在 contentArea 中,我们用 x 和 y 指定了起点,然后指定了所需字幕区域的高度和宽度。

将字幕保存到字幕文本文件中

让我们把提取的字幕保存到 TXT 文件中。

var ocr = new IronTesseract();
using (var input = new OcrInput(@"D:\subtitle\subtitle1.png"))
{
    var result = ocr.Read(input);
    result.SaveAsTextFile(@"D:\subtitle\subtitlefile.txt");
}
var ocr = new IronTesseract();
using (var input = new OcrInput(@"D:\subtitle\subtitle1.png"))
{
    var result = ocr.Read(input);
    result.SaveAsTextFile(@"D:\subtitle\subtitlefile.txt");
}
Dim ocr = New IronTesseract()
Using input = New OcrInput("D:\subtitle\subtitle1.png")
	Dim result = ocr.Read(input)
	result.SaveAsTextFile("D:\subtitle\subtitlefile.txt")
End Using
VB   C#

结果.保存为文本文件 会将输出路径作为参数,并将文件保存在给定的路径中。

如何在 C# 中 OCR 字幕(教程), 图 8:一段较长视频的单帧,包含视频标题和视频字幕的文本区域

较长视频的单帧,包含视频标题和视频字幕的文本区域

摘要

在本教程中,我们学会了使用 IronOCR,并开发了一个从视频截图中读取字幕的简单程序。我们还可以 指定区域 的文本。

IronOCR 提供以下功能 OpenCV 对于 计算机视觉.我们看到,IronOCR 可以让我们从模糊或低分辨率的图像中读取文字。该库高效且准确。它支持超过 127 种语言,并且完全准确。它免费用于开发,对生产没有限制。

总之,IronOCR 提供

  • 扫描和读取图像和扫描文件的能力
  • 支持 150 多种全球语言
  • 以文本、结构化数据或可搜索 PDF 格式输出
  • 支持 .NET 6、5、核心、标准、框架

IronOCR 是 Iron Software 库套件的一部分,可用于 读写 PDF, 操作 Excel 文件, 从图像中阅读文本网站内容搜索.购买完整的 Iron Suite价格 的两个独立图书馆。

< 前一页
如何在C#中使用OCR从屏幕截图获取文本

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 2,353,651 查看许可证 >