使用 IRONOCR

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

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

在本教程中,我們將學習如何從視頻文件中提取硬編碼字幕。 我們將取樣一個視頻文件,並將內嵌字幕提取到一個 txt 文件中。我們將開發一個 C# .NET 程式,使用 OCR 過程提取內嵌字幕。 我將使本教程保持簡單易懂,即使是初學者的 C# 程式設計師也能理解。

我們需要高效的光學字符識別(光學字符識別)能處理影片並取得字幕檔的引擎,不受字幕語言影響。

有許多提供 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字幕」,您可以根據自己的選擇命名。).

點擊下一步按鈕,然後選擇您的目標框架。 最後,點擊建立按鈕來創建專案。

該專案將按如下所示創建。

如何在 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 套件,然後點擊下方顯示的 Install 按鈕。

如何在 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 提供:

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

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

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