IRONOCRの使用

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

Kannaopat Udonpant
カンナパット・ウドンパント
2023年2月21日
更新済み 2023年12月17日
共有:

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

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

OCR結果を提供するライブラリは多数あります。 いくつかは有料であり、いくつかは使いにくく、またいくつかは効率的でないか正確でないため、無料で、効率的で、使いやすく、正確な結果を提供するライブラリを見つけることは非常に困難です。

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

IronOCR

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

IronOCRの特徴には以下が含まれます:

  • 画像(JPEG、PNG、BMP)、GIFTIF/TIFF、ストリーム、およびPDFなど、多くの形式からテキストを読み取ります。
  • Deskew、Denoise、Binarize、Enhance Resolution、Dilate などの豊富なフィルターを使用して、低品質のスキャンや写真を修正
  • バーコードを20以上の異なる形式から読み取り、QRコードのサポートも含みます
  • 最新バージョンのTesseract OCRを活用し、その性能は他の同様のライブラリをはるかに超えるように調整されています。
  • 検索可能なPDFのエクスポート、hOCR / HTMLのエクスポート、および画像コンテンツのテキスト。

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

Visual Studio プロジェクトを作成する

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

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

次へボタンをクリックし、プロジェクトに名前を付けます(私は「OCR Subtitles」と名付けましたが、お好みで名前を付けてください)。

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

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

C#で字幕をOCRする方法(チュートリアル)、図1: Visual Studioで新しいプロジェクトを作成

Visual Studioで新しいプロジェクトを作成

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

IronOCR NuGet パッケージをインストール

上部メニューバーからツールをクリックし、NuGet パッケージ マネージャー > ソリューションの NuGet パッケージを管理を選択します。以下の図を参照してください。

C#で字幕をOCRする方法(チュートリアル)、図2: Visual StudioにIronOCRをインストールする

Visual StudioでのIronOCRのインストール

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

C#で字幕をOCRする方法(チュートリアル)、図3: Visual Studio NuGet パッケージ マネージャー UI

Visual Studio NuGet パッケージマネージャー UI

参照をクリックして、IronOCRを検索してください。 IronOCRパッケージを選択し、下に示されているインストールボタンをクリックします。

C#で字幕をOCRする方法(チュートリアル)、図4: NuGet パッケージ マネージャー UI で IronOCR を検索

NuGet パッケージ マネージャー UI で IronOCR を検索

IronOCRライブラリがインストールされ、使用準備が整います。

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

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

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

C#で字幕をOCRする方法(チュートリアル)、図5:テキストが抽出されるサンプルビデオのスクリーンショット

テキストを抽出するサンプルビデオのスクリーンショット

次の名前空間を追加してください:

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

名前空間の宣言の下に次のコードを書いてください。

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
$vbLabelText   $csharpLabel

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

  1. IronTesseractオブジェクトを初期化します。 それはIronTessearctのデフォルトインスタンスを作成します。

  2. 入力画像ファイルまたはPDFドキュメントでOcrInputオブジェクトを新たに作成します。 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
$vbLabelText   $csharpLabel

これにより、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
$vbLabelText   $csharpLabel

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

C#で字幕をOCRする方法 (チュートリアル)、図8: ビデオタイトルとビデオ字幕のテキスト領域を含む長いビデオの単一のフレーム

ビデオのタイトルと字幕用のテキスト領域を含む、より長いビデオの単一フレーム

サマリー

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

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

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

Kannaopat Udonpant
カンナパット・ウドンパント
ソフトウェアエンジニア
ソフトウェアエンジニアになる前に、カンナパットは日本の北海道大学から環境資源学の博士号を取得しました。学位を取得する過程で、カンナパットはバイオプロダクション工学部に所属する車両ロボティクス研究所のメンバーにもなりました。2022年には、C#のスキルを活かしてIron Softwareのエンジニアリングチームに参加し、IronPDFに注力しています。カンナパットは、IronPDFで使用されているコードの大部分を作成した開発者から直接学べることに価値を見いだしています。同僚との学び合いに加えて、Iron Softwareで働くことの社会的側面も楽しんでいます。コードやドキュメントを書いていない時には、カンナパットは通常、PS5でゲームをしたり、『The Last of Us』を再視聴したりしています。
< 以前
C#でスクリーンショットからテキストをOCRで取得する方法