使用 IRONOCR

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

Kannaopat Udonpant
坎那帕·乌东攀
2023年二月21日
更新 2023年十二月17日
分享:

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

我们需要一个高效的光学字符识别 (OCR) 引擎,可以处理视频并获取字幕文件,而不论字幕语言是什么。

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

IronOCR 用于开发是免费的,用于商业目的则提供一个月的免费试用期。 它支持 150 多种语言,比现有的大多数其他 OCR 库具有更高的准确性。 同时还要高效易用。 我们将使用该库进行演示。

IronOCR

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

IronOCR 的功能包括

  • 从多种格式读取文本,例如图像(JPEG、PNG、BMP)、GIFTIF/TIFF、流和PDF
  • 使用大量过滤器(例如矫正倾斜、去噪、二值化、增强分辨率、膨胀等)来校正低质量的扫描和照片
  • 读取超过20种不同格式的条形码,并支持QR码
  • 使用 Tesseract OCR 的最新版本,其性能经过调整后已超越其他同类库
  • 导出可搜索的 PDF、hOCR / HTML 导出和图像内容文本。

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

创建 Visual Studio 项目

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

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

点击下一步按钮,并为项目命名(我将其命名为 "OCR Subtitles",您可以根据自己的选择命名)。

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

项目创建如下所示。

如何在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# 中识别字幕(教程),图 3:Visual Studio NuGet 包管理器 UI

Visual Studio NuGet 包管理器 UI

点击浏览,搜索 IronOCR。 选择 IronOCR 软件包,点击下方所示的安装按钮。

如何在C#中OCR字幕(教程),图4:在NuGet包管理器UI中搜索IronOCR

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

IronOCR 库将已安装并可随时使用。

提取硬编码字幕

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

我们将使用以下截图提取字幕。

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

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

添加以下命名空间:

using IronOcr;
using IronOcr;
Imports IronOcr
$vbLabelText   $csharpLabel

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

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
$vbLabelText   $csharpLabel

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

  1. 初始化 IronTesseract 对象。 它将创建一个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
$vbLabelText   $csharpLabel

这将带来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
$vbLabelText   $csharpLabel

result.SaveAsTextFile 将输出路径作为参数,并将文件保存到指定路径。

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

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

摘要

在本教程中,我们学习了 IronOCR 的使用方法,并开发了一个非常简单的程序来读取视频截图中的字幕。 我们还可以指定要提取文本的区域

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

总之,IronOCR 提供以下服务:

Kannaopat Udonpant
坎那帕·乌东攀
软件工程师
在成为软件工程师之前,Kannapat 从日本北海道大学完成了环境资源博士学位。在攻读学位期间,Kannapat 还成为了生物生产工程系车辆机器人实验室的成员。2022年,他利用自己的 C# 技能加入了 Iron Software 的工程团队,专注于 IronPDF。Kannapat 珍视他的工作,因为他能直接向编写 IronPDF 大部分代码的开发者学习。除了同伴学习,Kannapat 还享受在 Iron Software 工作的社交方面。不写代码或文档时,Kannapat 通常在 PS5 上玩游戏或重看《最后生还者》。
< 前一页
如何在C#中使用OCR从屏幕截图获取文本