使用 IRONOCR

如何在 C# 中進行字幕光學字符識別(教程)

已更新 2023年12月17日
分享:

在本教程中,我們將學習如何從視頻文件中提取硬字幕。我們將取一個示例視頻文件,並將硬字幕提取到txt文件。我們將開發一個C# .NET程序,使用OCR過程提取硬字幕。我會讓這個教程簡單易懂,即使是初學者的C#程序員也能理解。

我們需要一個高效的光學字符識別(Optical Character Recognition) (光學字符識別) 引擎可以處理視頻並獲取字幕文件,無論字幕語言是什麼。

有許多庫可用於提供OCR結果。其中一些是付費的,有些難以使用,有些則效率或準確性不高。因此,找到一個免費、高效、易於使用且結果準確的庫非常困難。

IronOCR對於開發是免費的,並且提供一個月的商業用途免費試用。它支持超過150種語言,並且提供比大多數其他OCR庫更高的準確性。它還高效且易於使用。我們將使用這個庫來進行演示。

IronOCR

IronOCR 是一個由Iron Software開發和維護的庫,幫助C#軟體工程師在.NET項目中執行OCR、條碼掃描和文字提取。

IronOCR的功能包括:

  • 從多種格式(如圖像)中讀取文字 (JPEG, PNG, BMP), GIF, TIF/TIFF, Streams, 和 PDFs

修正 低質量掃描和照片 使用大量的過濾器,如校正、去噪、二值化、增強解析度、膨脹等

  • 從超過20種不同格式中讀取條碼,加上 QR碼支持
  • 利用最新版本的Tesseract OCR,其性能超越同類型其他庫。
  • 匯出可搜尋的PDF、hOCR/HTML匯出和圖像內容文字。

讓我們開發一個示範應用程式來讀取車牌號碼。

建立 Visual Studio 專案

第一步是建立一個新專案。

打開 Visual Studio。點擊 建立新專案,並選擇控制台應用程式專案模板。

點擊 下一步 按鈕,然後命名專案 (我將其命名為「OCR字幕」,您可以根據自己的選擇命名。).

點擊 Next 按鈕,並選擇您的目標 Framework。最後,點擊 Create 按鈕來創建專案。

專案將會如下面所示被創建。

如何在 C# 中進行字幕 OCR(教程),圖 1:在 Visual Studio 中創建一個新項目

在 Visual Studio 中建立一個新專案

現在,我們需要安裝 IronOCR 庫以在我們的專案中使用它。最簡單的方法是通過 NuGet 套件管理器來安裝。

安裝 IronOCR NuGet 套件

點擊頂部選單欄中的 工具,選擇 NuGet 套件管理員 > 為解決方案管理 NuGet 套件,如下所示。

如何在C#中進行字幕光學字符辨識(教程),圖2:在Visual Studio中安裝IronOCR

在 Visual Studio 中安裝 IronOCR

將會出現以下視窗。

如何在 C# 中進行 OCR 字幕 (教程),圖 3: Visual Studio NuGet 套件管理器 UI

Visual Studio NuGet 包管理器 UI

點擊瀏覽,搜尋 IronOCR。選擇 IronOCR 包並點擊 安裝 按鈕,如下所示。

如何在 C# 中識別字幕 (教程),圖 4:在 NuGet 套件管理器 UI 中搜尋 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. 初始化 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
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#

result.SaveAsTextFile 將輸出路徑作為參數,並將文件保存到給定的路徑。

如何在C#中OCR字幕(教程),圖8:包含影片標題和影片字幕文字區域的較長影片單個畫面

包含影片標題和影片字幕文字區域的長影片中的一個單一畫面

整理

在本教程中,我們學習了如何使用 IronOCR 並開發一個非常簡單的程式來從影片截圖中讀取字幕。我們還可以 指定區域 我們想要提取文本的用途。

IronOCR提供以下功能: OpenCV 為了 電腦視覺我們已經看到IronOCR使我們能夠從模糊或低解析度的圖像中讀取文本。這個庫高效且提供準確性。它支持127種以上的語言且完全準確。開發是免費的,對生產沒有任何限制。

總而言之,IronOCR提供了:

  • 掃描和讀取圖像及掃描文件的能力
  • 支持 150 多種全球語言
  • 輸出為文本、結構化數據或可搜索的PDF
  • 支援 .NET 6、5、Core、Standard、Framework

IronOCR 是 Iron Software 套件中有用的庫的一部分 讀取和編寫PDF文件, 操作 Excel 文件, 從圖像中讀取文本,和 從網站抓取內容購買完整的 Iron Suite價格 的兩個獨立庫。

< 上一頁
如何在C#中從截圖中獲取文字OCR

準備開始了嗎? 版本: 2024.10 剛剛發布

免費 NuGet 下載 總下載次數: 2,433,305 查看許可證 >