在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在本教程中,我們將學習如何從視頻文件中提取硬字幕。我們將取一個示例視頻文件,並將硬字幕提取到txt文件。我們將開發一個C# .NET程序,使用OCR過程提取硬字幕。我會讓這個教程簡單易懂,即使是初學者的C#程序員也能理解。
我們需要一個高效的光學字符識別(Optical Character Recognition) (光學字符識別) 引擎可以處理視頻並獲取字幕文件,無論字幕語言是什麼。
有許多庫可用於提供OCR結果。其中一些是付費的,有些難以使用,有些則效率或準確性不高。因此,找到一個免費、高效、易於使用且結果準確的庫非常困難。
IronOCR對於開發是免費的,並且提供一個月的商業用途免費試用。它支持超過150種語言,並且提供比大多數其他OCR庫更高的準確性。它還高效且易於使用。我們將使用這個庫來進行演示。
IronOCR 是一個由Iron Software開發和維護的庫,幫助C#軟體工程師在.NET項目中執行OCR、條碼掃描和文字提取。
IronOCR的功能包括:
修正 低質量掃描和照片 使用大量的過濾器,如校正、去噪、二值化、增強解析度、膨脹等
讓我們開發一個示範應用程式來讀取車牌號碼。
第一步是建立一個新專案。
打開 Visual Studio。點擊 建立新專案,並選擇控制台應用程式專案模板。
點擊 下一步 按鈕,然後命名專案 (我將其命名為「OCR字幕」,您可以根據自己的選擇命名。).
點擊 Next 按鈕,並選擇您的目標 Framework。最後,點擊 Create 按鈕來創建專案。
專案將會如下面所示被創建。
在 Visual Studio 中建立一個新專案
現在,我們需要安裝 IronOCR 庫以在我們的專案中使用它。最簡單的方法是通過 NuGet 套件管理器來安裝。
點擊頂部選單欄中的 工具,選擇 NuGet 套件管理員 > 為解決方案管理 NuGet 套件,如下所示。
在 Visual Studio 中安裝 IronOCR
將會出現以下視窗。
Visual Studio NuGet 包管理器 UI
點擊瀏覽,搜尋 IronOCR。選擇 IronOCR 包並點擊 安裝 按鈕,如下所示。
在 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提供了:
IronOCR 是 Iron Software 套件中有用的庫的一部分 讀取和編寫PDF文件, 操作 Excel 文件, 從圖像中讀取文本,和 從網站抓取內容購買完整的 Iron Suite 的 價格 的兩個獨立庫。