フッターコンテンツにスキップ
IRONOCRの使い方

C#での字幕のOCR方法(チュートリアル)

このチュートリアルでは、ビデオファイルからハードコードされた字幕を抽出する方法を学びます。 サンプルのビデオファイルを取り出し、ハードコードされた字幕をテキストファイルに抽出します。OCRプロセスを使用してハードコードされた字幕を抽出するC# .NETプログラムを開発します。 このチュートリアルをシンプルで簡単にして、C#の初心者でも理解できるようにします。

字幕の言語に関係なく、ビデオを処理して字幕ファイルを取得できる効率的な光学文字認識(OCR)エンジンが必要です。

OCRの結果を提供する多くのライブラリが利用可能です。 その中には有料のもの、使いにくいもの、効果的ではないものや正確でないものもあり、無料で、効率的で、使いやすく、正確な結果を提供するライブラリを見つけるのは非常に難しいです。

開発に無料で使用できるIronOCRは、商業目的に1か月の無料トライアルを提供しています。 150以上の言語をサポートし、他の多くのOCRライブラリよりも高い精度を提供します。 効率的で使いやすいのも魅力です。 このライブラリをデモンストレーションに使用します。

IronOCRの概要

IronOCRは、C#ソフトウェアエンジニアが.NETプロジェクトでOCR、バーコードスキャン、テキスト抽出を行うのを支援するために、Iron Softwareによって開発および維持されているライブラリです。

IronOCRの機能には以下が含まれます:

  • 画像(JPEG、PNG、BMP)、GIFTIF/TIFF、ストリーム、PDFなど多くの形式からのテキスト読み取り
  • デスキュー、ノイズ除去、2値化、解像度の向上、拡張などの多数のフィルターによる低品質のスキャンや写真の補正
  • 20以上の異なる形式からのバーコードの読み取り、QRコードサポート付き
  • そのパフォーマンスが他の同種ライブラリを大幅に上回る最新のTesseract OCRビルドを使用
  • 検索可能なPDF、hOCR / HTMLエクスポート、画像のコンテンツテキストをエクスポート

ナンバープレートを読み取るデモアプリケーションを開発しましょう。

Visual Studioプロジェクトを作成

最初のステップは、新しいプロジェクトを作成することです。

Visual Studioを開きます。 新しいプロジェクトを作成をクリックし、コンソールアプリケーションのプロジェクトテンプレートを選択します。

次へボタンをクリックし、プロジェクトに名前を付けます(私は"OCR字幕"と名付けましたが、好みの名前に変更できます)。

次へボタンをクリックし、ターゲットフレームワークを選択します。 最後に、作成ボタンをクリックしてプロジェクトを作成します。

プロジェクトは以下のように作成されます。

C#で字幕をOCRする方法 (Tutorial), Figure 1: Creating a New Project in Visual Studio Visual Studioで新しいプロジェクトを作成する

今、プロジェクトで使用するためにIronOCRライブラリをインストールする必要があります。 最も簡単な方法は、NuGetパッケージマネージャーを使用してソリューションにインストールすることです。

IronOCRの概要 NuGetパッケージをインストールする

上部メニューバーからツールをクリックし、NuGetパッケージマネージャー > ソリューションのNuGetパッケージを管理を選択します。

C#で字幕をOCRする方法 (Tutorial), Figure 2: Installing IronOCR within Visual Studio Visual StudioでのIronOCRのインストール

次のウィンドウが表示されます。

C#で字幕をOCRする方法 (Tutorial), Figure 3: Visual Studio NuGet Package Manager UI Visual Studio NuGet Package Manager UI

"参照"をクリックして、IronOCRを検索します。 IronOCRパッケージを選択し、インストールボタンをクリックします。

C#で字幕をOCRする方法 (Tutorial), Figure 4: Searching for IronOCR in the NuGet Package Manager UI NuGet Package Manager UIでIronOCRを検索する

IronOCRライブラリがインストールされ、使用可能になります。

ハードコードされた字幕を抽出する

ハードコードされた字幕を抽出するプログラムを書きましょう。

以下のスクリーンショットを使用して字幕を抽出します。

C#で字幕をOCRする方法 (Tutorial), Figure 5: Sample video screenshot from which text will be extracted 抽出されるテキストのサンプルビデオスクリーンショット

以下の名前空間を追加します。

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

namespace宣言の下に以下のコードを書きます。

// Initialize IronTesseract object
var ocr = new IronTesseract();
// Create an OCR Input using the specified image path
using (var input = new OcrInput(@"D:\License Plate\plate3.jpg"))
{
    // Perform OCR on the input image to extract text
    var result = ocr.Read(input);
    // Output the extracted text to the console
    Console.WriteLine(result.Text);
}
// Initialize IronTesseract object
var ocr = new IronTesseract();
// Create an OCR Input using the specified image path
using (var input = new OcrInput(@"D:\License Plate\plate3.jpg"))
{
    // Perform OCR on the input image to extract text
    var result = ocr.Read(input);
    // Output the extracted text to the console
    Console.WriteLine(result.Text);
}
' Initialize IronTesseract object
Dim ocr = New IronTesseract()
' Create an OCR Input using the specified image path
Using input = New OcrInput("D:\License Plate\plate3.jpg")
	' Perform OCR on the input image to extract text
	Dim result = ocr.Read(input)
	' Output the extracted text to the console
	Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

上記のコードは次のように動作します:

  1. IronTesseractオブジェクトを初期化します。 それにより、IronTesseractのデフォルトインスタンスが作成されます。
  2. OcrInputオブジェクトを作成し、入力画像ファイルまたはPDFドキュメントで埋めます。 OcrInputはマルチページドキュメントのOCRを可能にし、OCRの前に画像を強化することでより速く、より正確な結果を得ることができるため、推奨入力タイプです。
  3. OCR入力オブジェクトからテキストを読み取り、OCR結果オブジェクトを返します。 ocr.Readは、与えられた入力スクリーンショットから字幕を抽出します。
  4. result.Textは、与えられた入力から抽出された全内容を返します。

サンプルプログラムは以下のコンソール出力を生成します:

C#で字幕をOCRする方法 (Tutorial), Figure 7: Console output generated from performing text extraction on the sample image using IronOCR IronOCRを使用してサンプル画像のテキスト抽出を実行した際に生成されるコンソール出力

ビデオタイトルと字幕の両方を含むビデオフレームがあると仮定しましょう:

C#で字幕をOCRする方法 (Tutorial), Figure 6: A single frame of a longer video containing text regions for the video title and the video subtitles ビデオタイトルと字幕のテキスト領域を含む長いビデオの1コマ

私たちの目標は、画像の下部領域からハードコードされた字幕を抽出することです。 この場合、字幕が表示されるテキスト領域を指定する必要があります。

フレームでの字幕の位置を指定する

System.Drawing.Rectangleを使用することで、ビデオフレームから字幕を読み取る領域を指定できます。 計測単位は常にピクセルです。

テキスト領域を指定するために以下のサンプルコードを使用します。

// Initialize IronTesseract object
var ocr = new IronTesseract();
// Create an OCR Input and specify the region of interest
using (var input = new OcrInput())
{
    // Define the area within the image where subtitles are located for a 41% improvement on speed
    var contentArea = new CropRectangle(x: 189, y: 272, height: 252, width: 77);
    // Add the specific region of the image to the OCR input
    input.AddImage(@"D:\subtitle\image.png", contentArea);
    // Perform OCR on the specified region
    var result = ocr.Read(input);
    // Output the extracted text to the console
    Console.WriteLine(result.Text);
}
// Initialize IronTesseract object
var ocr = new IronTesseract();
// Create an OCR Input and specify the region of interest
using (var input = new OcrInput())
{
    // Define the area within the image where subtitles are located for a 41% improvement on speed
    var contentArea = new CropRectangle(x: 189, y: 272, height: 252, width: 77);
    // Add the specific region of the image to the OCR input
    input.AddImage(@"D:\subtitle\image.png", contentArea);
    // Perform OCR on the specified region
    var result = ocr.Read(input);
    // Output the extracted text to the console
    Console.WriteLine(result.Text);
}
' Initialize IronTesseract object
Dim ocr = New IronTesseract()
' Create an OCR Input and specify the region of interest
Using input = New OcrInput()
	' Define the area within the image where subtitles are located for a 41% improvement on speed
	Dim contentArea = New CropRectangle(x:= 189, y:= 272, height:= 252, width:= 77)
	' Add the specific region of the image to the OCR input
	input.AddImage("D:\subtitle\image.png", contentArea)
	' Perform OCR on the specified region
	Dim result = ocr.Read(input)
	' Output the extracted text to the console
	Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

これにより、41%の速度向上が実現し、特定性を高めることができます。 contentAreaでは、字幕領域のスタートポイントをxとyで指定し、その後に高さと幅を設定しています。

字幕を字幕テキストファイルに保存する

抽出された字幕をテキストファイルに保存しましょう。

// Initialize IronTesseract object
var ocr = new IronTesseract();
// Create an OCR Input with the specified image path
using (var input = new OcrInput(@"D:\subtitle\subtitle1.png"))
{
    // Perform OCR on the input image to extract text
    var result = ocr.Read(input);
    // Save the extracted text to a specified file path
    result.SaveAsTextFile(@"D:\subtitle\subtitlefile.txt");
}
// Initialize IronTesseract object
var ocr = new IronTesseract();
// Create an OCR Input with the specified image path
using (var input = new OcrInput(@"D:\subtitle\subtitle1.png"))
{
    // Perform OCR on the input image to extract text
    var result = ocr.Read(input);
    // Save the extracted text to a specified file path
    result.SaveAsTextFile(@"D:\subtitle\subtitlefile.txt");
}
' Initialize IronTesseract object
Dim ocr = New IronTesseract()
' Create an OCR Input with the specified image path
Using input = New OcrInput("D:\subtitle\subtitle1.png")
	' Perform OCR on the input image to extract text
	Dim result = ocr.Read(input)
	' Save the extracted text to a specified file path
	result.SaveAsTextFile("D:\subtitle\subtitlefile.txt")
End Using
$vbLabelText   $csharpLabel

result.SaveAsTextFileは、出力パスを引数として取り、指定されたパスにファイルを保存します。

C#で字幕をOCRする方法 (Tutorial), Figure 8: A single frame of a longer video containing text regions for the video title and the video subtitles ビデオタイトルと字幕のテキスト領域を含む長いビデオの1コマ

概要

このチュートリアルでは、IronOCRを使用し、ビデオスクリーンショットから字幕を読み取る非常にシンプルなプログラムを開発する方法を学びました。 また、抽出したいテキストの領域を指定することもできます

IronOCRは、OpenCVによるコンピュータビジョンの機能を提供しています。 IronOCRを使用すると、ぼやけた画像や解像度の低い画像からテキストを読み取ることができることを確認しました。 このライブラリは効率的で、正確性を提供します。 125以上の言語を完全な精度でサポートしています。 開発には無料で、製品化には制限がありません。

要約すると、IronOCRは以下を提供します:

  • 画像とスキャンされたドキュメントのスキャンおよび読み取り機能
  • 150以上の世界言語のサポート
  • テキスト、構造化データ、または検索可能なPDFとしての出力
  • .NET 6、5、Core、Standard、Frameworkをサポート

IronOCRは、PDFの読み書き、Excelファイルの操作、画像からのテキストの読み取り、Webサイトからのコンテンツのスクレイピングに便利なIron Softwareのライブラリスイートの一部です。 Iron Suite二つの個別ライブラリの価格で購入できます。

よくある質問

C#でビデオファイルからハードコードされた字幕をどのように抽出するのですか?

C#でIronOCRを使用してビデオファイルからハードコードされた字幕を抽出できます。NuGetパッケージマネージャーを通じてライブラリをインストールし、その後ビデオフレームを処理してテキストを抽出します。

字幕抽出においてTesseractに対するIronOCRの利点は何ですか?

IronOCRは、150以上の言語をサポートし、動画から字幕を抽出するのに適しており、精度の向上や使いやすさを備えたTesseractのアップグレードされた代替手段を提供します。

処理速度を改善するためにIronOCRで字幕の位置をどのように指定しますか?

System.Drawing.Rectangleを使用して対象領域に集中することで、処理速度を最大41%向上させることができます。

IronOCRは字幕抽出の際に英語以外の言語でも使用できますか?

はい、IronOCRは150以上の言語をサポートしており、複数の言語のビデオから正確に字幕を抽出できます。

C#字幕OCRチュートリアルの前提条件は?

このチュートリアルには、C#プログラミングの基本的な知識と、NuGetパッケージマネージャーを使用してVisual StudioでIronOCRライブラリをインストールする能力が必要です。

IronOCRは低品質のビデオフレームをどのように処理しますか?

IronOCRには低品質のスキャンを修正する機能が含まれており、サブオプティマルなビデオフレームからのテキスト抽出の精度を向上させます。

IronOCRで字幕を抽出した後の出力フォーマットは何がありますか?

抽出された字幕は、テキストファイル、構造化データ、または検索可能なPDFとして保存できます。

商業プロジェクトでIronOCRを使用することには費用がかかりますか?

IronOCRは開発目的で無料で、商業プロジェクトには1か月間の無料トライアルを提供しています。継続して商業用に利用するにはライセンスが必要です。

IronOCRは追加機能のために他のライブラリと統合できますか?

はい、IronOCRはPDF操作やウェブスクレイピングなどを行うために他のIron Softwareライブラリと統合でき、その機能を向上させます。

Kannaopat Udonpant
ソフトウェアエンジニア
ソフトウェアエンジニアになる前に、Kannapatは北海道大学で環境資源の博士号を修了しました。博士号を追求する間に、彼はバイオプロダクションエンジニアリング学科の一部である車両ロボティクスラボラトリーのメンバーになりました。2022年には、C#のスキルを活用してIron Softwareのエンジニアリングチームに参加し、IronPDFに注力しています。Kannapatは、IronPDFの多くのコードを執筆している開発者から直接学んでいるため、この仕事を大切にしています。同僚から学びながら、Iron Softwareでの働く社会的側面も楽しんでいます。コードやドキュメントを書いていない時は、KannapatはPS5でゲームをしたり、『The Last of Us』を再視聴したりしていることが多いです。