在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在本教程中,我們將學習如何從視頻文件中提取硬編碼字幕。 我們將取樣一個視頻文件,並將內嵌字幕提取到一個 txt 文件中。我們將開發一個 C# .NET 程式,使用 OCR 過程提取內嵌字幕。 我將使本教程保持簡單易懂,即使是初學者的 C# 程式設計師也能理解。
我們需要高效的光學字符識別(光學字符識別)能處理影片並取得字幕檔的引擎,不受字幕語言影響。
有許多提供 OCR 結果的庫可用。 其中有些是付費的,有些難以使用,而有些則效率不高或不準確,因此很難找到一個免費、高效、易於使用且能提供準確結果的庫。
IronOCR 在開發時免費,並為商業用途提供一個月的免費試用。 它支持超過 150 種語言,並且提供比大多數其他可用的 OCR 函式庫更高的準確性。 它既高效又易於使用。 我們將使用此庫進行示範。
IronOCR是由 Iron Software 開發和維護的庫,協助 C# 軟體工程師在 .NET 項目中執行光學字符識別 (OCR)、條碼掃描和文字提取。
IronOCR 的特點包括:
導出可搜索的PDF、hOCR/HTML導出和圖像內容文本。
讓我們開發一個讀取車牌號碼的演示應用程式。
第一步是建立一個新專案。
打開 Visual Studio。 點擊 建立新的方案,然後選擇主控台應用程式計畫範本。
點擊 下一步 按鈕,然後命名專案(我將其命名為「OCR字幕」,您可以根據自己的選擇命名。).
點擊下一步按鈕,然後選擇您的目標框架。 最後,點擊建立按鈕來創建專案。
該專案將按如下所示創建。
在 Visual Studio 中建立新專案
現在,我們需要安裝IronOCR庫以在我們的專案中使用它。 最簡單的方法是通過 NuGet 封裝管理器為解決方案安裝它。
從頂部選單列中點擊工具,然後選擇NuGet 套件管理員 > 管理方案的 NuGet 套件,如下面所示。
在 Visual Studio 中安裝 IronOCR
以下視窗將會出現。
Visual Studio NuGet 套件管理器 UI
點擊瀏覽,然後搜尋IronOCR。 選擇 IronOCR 套件,然後點擊下方顯示的 Install 按鈕。
在 NuGet 套件管理員介面中搜尋 IronOCR
IronOCR 庫將會安裝完成並可使用。
讓我們編寫一個程式來提取硬編碼字幕。
我們將使用以下螢幕截圖來提取字幕。
從中提取文字的範例視頻截圖
添加以下命名空間:
using IronOcr;
using IronOcr;
Imports IronOcr
在命名空間宣告下面寫以下代碼。
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
上述程式碼的運作如下:
初始化IronTesseract
物件。 這將創建一個 IronTessearct
的默認實例。
建立新的OcrInput物件填入輸入影像檔案或 PDF 文件。 OcrInput
是首選的輸入類型,因為它允許對多頁文件進行光學字符識別(OCR),並且允許在進行OCR之前增強圖像,以獲得更快、更準確的結果。
從 OCR 輸入物件中讀取文本並返回 OCR 結果物件。 ocr.Read
將從給定的輸入截圖中提取字幕。
result.Text
將返回從給定輸入中提取的所有內容。
範例程序生成以下控制台輸出:
使用 IronOCR 對樣本影像執行文字擷取所生成的控制台輸出
假設您有一個視頻幀,其中包含視頻的標題和字幕:
較長影片中的單個畫面,包含視頻標題和視頻字幕的文本區域
我們的目標是從影像的底部區域中提取硬編碼的字幕。 在這種情況下,我們需要指定顯示字幕的文字區域。
我們可以使用 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
這帶來了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
result.SaveAsTextFile
將輸出路徑作為參數,並將檔案儲存在指定的路徑中。
較長影片中的單個畫面,包含視頻標題和視頻字幕的文本區域
在本教程中,我們學習了使用 IronOCR 並開發了一個非常簡單的程式來從影片截圖中讀取字幕。 我們也可以指定區域我們希望提取文本的內容。
IronOCR 提供的功能有OpenCV為了電腦視覺. 我們已經看到,IronOCR 使我們能夠從模糊或低解析度的圖像中讀取文字。 此函式庫高效且提供準確性。 它支持127種以上的語言,並具有完全的準確性。 開發過程中免費使用,且在生產上沒有限制。
總結來說,IronOCR 提供:
支持 .NET 6、5、Core、Standard、Framework
IronOCR是 Iron Software 套件中有用的庫的一部分讀取和編寫PDF文件, 操作 Excel 文件, 從圖像中讀取文本,和從網站抓取內容. 購買完整的Iron Suite的價格的兩個獨立庫。