PaddleOCRのスーパーパワーを解き放つ

PaddleOCRのスーパーパワーを解き放つ

光学文字認識 (OCR) は、機械が画像やスキャンされた文書からテキストを認識して抽出できるようにする強力なテクノロジーです。 OCR は、文書のデジタル化、画像からのテキスト抽出、テキストベースのデータ分析など、さまざまな分野で応用されています。この記事では、高度なディープラーニングベースの OCR ツールキットである PaddleOCR をテキスト検出および認識タスクに使用する方法について説明します。プロセス全体を示すコード スニペットを順に見ていきます。

1. 前提条件

コードに進む前に、PaddleOCR ライブラリが実行できる状態になっていることを確認しましょう。次の必要な前提条件がコンピューターにインストールされていることを確認してください。

  • Python (3.6 以上)
  • PaddleOCR ライブラリ
  • その他の必要な依存関係 (NumPy、pandas など)

次の pip コマンドを使用して PaddleOCR をインストールできます。

 pip install paddleocr

2. PaddleOCRの設定

Python と必要なライブラリをインストールしたら、PaddleOCR を設定しましょう。テキストの検出と認識に使用できる、PaddleOCR の事前トレーニング済みモデルを使用できます。

PaddleOCR を使用したテキスト検出と認識のコード スニペットには、次の主なコンポーネントが含まれています。

  • 画像の前処理: 入力画像を読み込み、サイズ変更や正規化などの必要な前処理手順を実行します。
  • テキスト検出: PaddleOCR テキスト検出モデルを使用して、入力画像内のテキスト領域の境界ボックスを特定します。
  • テキスト認識: 検出された境界ボックスごとに、PaddleOCR テキスト認識モデルを使用して対応するテキストを抽出します。
  • 後処理: 検出されたテキストと認識結果を整理して、さらに分析したり表示したりします。

3. 段階的に導入する

コード スニペットを分解して、各ステップを詳しく説明します。

1. テキスト検出

このコードは、実際のデータを使用して光学文字認識 (OCR) を評価するために設計された DecMain というクラスの一部です。 PaddleOCR を使用して画像からテキストを抽出し、精度、再現率、文字エラー率 [CER] などのメトリックを計算して、OCR システムのパフォーマンスを評価します。

 class DecMain: def __init__(self, image_folder_path, label_file_path, output_file): self.image_folder_path = image_folder_path self.label_file_path = label_file_path self.output_file = output_file def run_dec(self): # Check and update the ground truth file CheckAndUpdateGroundTruth(self.label_file_path).check_and_update_ground_truth_file() df = OcrToDf(image_folder=self.image_folder_path, label_file=self.label_file_path, det=True, rec=True, cls=False).ocr_to_df() ground_truth_data = ReadGroundTruthFile(self.label_file_path).read_ground_truth_file() # Get the extracted text as a list of dictionaries (representing the OCR results) ocr_results = df.to_dict(orient="records") # Calculate precision, recall, and CER precision, recall, total_samples = CalculateMetrics(ground_truth_data, ocr_results).calculate_precision_recall() CreateSheet(dataframe=df, precision=precision, recall=recall, total_samples=total_samples, file_name=self.output_file).create_sheet()

コードを分解して各部分について説明しましょう。

 class DecMain: def __init__(self, image_folder_path, label_file_path, output_file): self.image_folder_path = image_folder_path self.label_file_path = label_file_path self.output_file = output_file

DecMain クラスには、次のパラメータを使用してオブジェクトを初期化する __init__ メソッドがあります。

  • image_folder_path: OCR の入力画像が保存されているフォルダーへのパス。
  • label_file_path: 画像の実際のテキスト コンテンツを含むグラウンド トゥルース ラベル ファイルへのパス。
  • output_file: 評価結果が保存される出力ファイルの名前。
 def run_dec(self): # Check and update the ground truth file CheckAndUpdateGroundTruth(self.label_file_path).check_and_update_ground_truth_file()

run_dec メソッドは、OCR 評価プロセスを実行する役割を担います。まず、CheckAndUpdateGroundTruth クラスを使用して、グラウンド トゥルース ファイルをチェックおよび更新します。

 df = OcrToDf(image_folder=self.image_folder_path, label_file=self.label_file_path, det=True, rec=True, cls=False).ocr_to_df()

OcrToDf クラスは、OCR の結果を pandas DataFrame (df) に変換するために使用されます。次のパラメータを受け入れます:

  • image_folder: OCR 入力画像を含むフォルダーへのパス。
  • label_file: 実際のラベル ファイルへのパス。
  • det=True および rec=True パラメータは、DataFrame にテキスト検出および認識結果が含まれることを示します。
 ground_truth_data = ReadGroundTruthFile(self.label_file_path).read_ground_truth_file()

ReadGroundTruthFile クラスは、真のラベル ファイルを読み取り、その内容を ground_truth_data 変数に読み込むために使用されます。

 # Get the extracted text as a list of dictionaries (representing the OCR results) ocr_results = df.to_dict(orient="records")

DataFrame df から取得された OCR 結果は辞書のリスト (ocr_results) に変換され、各辞書は単一の画像の OCR 結果を表します。

 # Calculate precision, recall, and CER precision, recall, total_samples = CalculateMetrics(groun d_truth_data, ocr_results).calculate_precision_recall()

CalculateMetrics クラスは、OCR 評価メトリック (精度、再現率、評価されたサンプルの合計数) を計算するために使用されます。このクラスは、実際のデータと OCR 結果を入力として受け取ります。

 CreateSheet(dataframe=df, precision=precision, recall=recall, total_samples=total_samples, file_name=self.output_file).create_sheet()

CreateSheet クラスは、評価メトリックと OCR 結果を含む出力シート (Excel や CSV など) を作成する役割を担います。入力として、DataFrame df、精度、再現率、サンプルの総数、および出力ファイル名を受け入れます。

全体として、DecMain クラスは、実際のデータと PaddleOCR のテキスト検出および認識機能を使用して OCR モデルのパフォーマンスを評価するための体系的な方法を提供します。重要な評価メトリックを計算し、結果を指定された出力ファイルに保存して、さらに分析します。

2. 注意: 実際のラベルファイルの形式

DecMain クラスと OCR 評価に提供されたコードを使用するには、グラウンド トゥルース ラベル ファイルを正しくフォーマットする必要があります。グラウンド トゥルース ラベル ファイルは JSON 形式である必要があり、その構造は次のとおりです。

image_name.jpg [{"transcription": "215mm 18", "points": [[199, 6], [357, 6], [357, 33], [199, 33]], "difficult": False, "key_cls": "digits"}, {"transcription": "XZE SA", "points": [[15, 6], [140, 6], [140, 36], [15, 36]], "difficult": False, "key_cls": "text"}]

グラウンドトゥルースラベルファイルは JSON 形式である必要があります。ファイルの各行は、画像の OCR グラウンド トゥルース ラベルを表します。

各行には画像のファイル名が含まれ、その後にその画像の OCR 結果が JSON オブジェクト形式で続きます。

JSON オブジェクトには次の内容が含まれている必要があります。

  • 「転写」: 画像の実際のテキスト転写。
  • "points": 画像内のテキスト領域の境界ボックスの座標を表す 4 つのポイントのリスト。
  • 「困難」: テキスト領域が認識しにくいかどうかを示すブール値。
  • "key_cls": OCR 結果のカテゴリ ラベル (「数字」や「テキスト」など)。

OCR モデルのパフォーマンスを正確に評価するために使用するグラウンド トゥルース ラベル ファイルを作成するときは、必ずこの形式に従ってください。

3. テキスト認識

このコードは、RecMain というクラスを定義します。このクラスは、事前トレーニング済みの OCR モデルを使用して画像フォルダーに対してテキスト認識 (OCR) を実行し、評価 Excel シートを生成するように設計されています。

 class RecMain: def __init__(self, image_folder, rec_file, output_file): self.image_folder = image_folder self.rec_file = rec_file self.output_file = output_file def run_rec(self): image_paths = GetImagePathsFromFolder(self.image_folder, self.rec_file). \ get_image_paths_from_folder() ocr_model = LoadRecModel().load_model() results = ProcessImages(ocr=ocr_model, image_paths=image_paths).process_images() ground_truth_data = ConvertTextToDict(self.rec_file).convert_txt_to_dict() model_predictions, ground_truth_texts, image_names, precision, recall, \ overall_model_precision, overall_model_recall, cer_data_list = EvaluateRecModel(results, ground_truth_data).evaluate_model() # Create Excel sheet CreateMetricExcel(image_names, model_predictions, ground_truth_texts, precision, recall, cer_data_list, overall_model_precision, overall_model_recall, self.output_file).create_excel_sheet()

コードを分解して各部分について説明しましょう。

 class RecMain: def __init__(self, image_folder, rec_file, output_file): self.image_folder = image_folder self.rec_file = rec_file self.output_file = output_file

RecMain クラスには、次のパラメータを使用してオブジェクトを初期化する __init__ メソッドがあります。

  • image_folder: テキスト認識用の入力画像を含むフォルダーへのパス。
  • rec_file: 画像の実際のテキスト コンテンツを含むグラウンド トゥルース ラベル ファイルへのパス。
  • output_file: 評価結果を保存する出力 Excel テーブルのファイル名。
 def run_rec(self): image_paths = GetImagePathsFromFolder(self.image_folder, self.rec_file).get_image_paths_from_folder()

run_rec メソッドは、テキスト認識プロセスを実行する役割を担います。まず、GetImagePathsFromFolder クラスを使用して、指定された image_folder 内のすべての画像の画像パスのリストを取得します。この手順により、OCR モデルが指定されたディレクトリ内のすべての画像を処理することが保証されます。

 ocr_model = LoadRecModel().load_model()

LoadRecModel クラスは、テキスト認識用の事前トレーニング済み OCR モデルを読み込むために使用されます。モデルをロードするには、PaddleOCR または別の OCR ライブラリが使用される場合があります。

 results = ProcessImages(ocr=ocr_model, image_paths=image_paths).process_images()

ProcessImages クラスは、読み込まれた OCR モデルを使用して画像を処理する役割を担います。入力として、OCR モデル (ocr_model) と画像パスのリスト (image_paths) を受け取ります。

 ground_truth_data = ConvertTextToDict(self.rec_file).convert_txt_to_dict()

ConvertTextToDict クラスは、グラウンド トゥルース ラベル ファイルを読み取り、それを辞書形式 (ground_truth_data) に変換するために使用されます。この変換により、OCR モデルの予測と比較するための真実データが準備されます。

 model_predictions, ground_truth_texts, image_names, precision, recall, \ overall_model_precision, overall_model_recall, cer_data_list = EvaluateRecModel(results, ground_truth_data).evaluate_model()

EvaluateRecModel クラスは、OCR モデルの予測を実際のデータと比較し、精度、再現率、文字エラー率 (CER) などの評価メトリックを計算する役割を担います。 OCR モデルの予測 (結果) と真実データ (ground_truth_data) を入力として受け取ります。

 # Create Excel sheet CreateMetricExcel(image_names, model_predictions, ground_truth_texts, precision, recall, cer_data_list, overall_model_precision, overall_model_recall, self.output_file).create_excel_sheet()

CreateMetricExcel クラスは、評価メトリックと OCR 結果を含む出力 Excel テーブルを作成します。画像名、モデル予測、グラウンドトゥルーステキスト、評価メトリック、出力ファイル名 (self.output_file) など、さまざまな入力データを受け入れます。

要約すると、RecMain クラスは、OCR モデルの読み込みから詳細なメトリックを含む評価 Excel シートの生成まで、テキスト認識プロセス全体を整理します。これは、特定の画像セットに対する OCR モデルのパフォーマンスを評価するための、体系的かつ再利用可能な方法を提供します。

注: グラウンドトゥルーステキストファイル形式

RecMain クラスと OCR 評価に提供されたコードを使用する場合、グラウンド トゥルース (GT) テキスト ファイルが正しくフォーマットされていることが重要です。 GT テキスト ファイルは次の形式である必要があります。

image_name.jpg テキスト

ファイルの各行は、画像の GT テキストを表します。

各行には、画像のファイル名、タブ文字 (\t)、その画像の GT テキストが含まれます。

GT テキスト ファイルに、画像フォルダーで指定されたすべての画像の GT テキスト エントリが含まれていることを確認します。 GT テキストは画像内の実際のテキスト コンテンツと一致する必要があります。この形式は、OCR モデルのパフォーマンスを正確に評価するために必要です。

ソースコードはここから入手できます: https://github.com/vinodbaste/paddleOCR_rec_dec?source=post_page

結論は

ディープラーニングに基づく PaddleOCR をテキストの検出と認識に使用するプロセスを検討しました。テキストの検出と認識の実装を段階的に説明しました。 PaddleOCR の強力な事前トレーニング済みモデルと使いやすい API により、画像に対する OCR の実行が簡単になりました。

<<:  OpenAI が Stable Diffusion を救います! Ilya Song Yang らによるオープンソースの Dall E3 デコーダー

>>:  Fast.ai の 10,000 ワードの記事: AI の安全性と光の終焉

ブログ    
ブログ    
ブログ    

推薦する

...

中間レビュー: 2020 年に最も注目されたデータ サイエンスと機械学習のスタートアップ 10 社

企業がビッグデータを活用するには、データ サイエンティストと開発者がデータを準備して整理し、アナリス...

Ant Group の大規模セマンティック知識管理における主要技術と実践

1. Ant Financial Knowledge Graph プラットフォームの紹介まず、ナレッ...

Google の Bard チャットボットがアップデートされ、リアルタイムで応答を生成できるようになりました

10 月 29 日現在、大規模言語モデル (LLM) では即座に回答を出すことができないため、質問を...

海雲傑迅は人工知能教育分野で総合的なサービスを提供するAI Goを立ち上げようとしている

[51CTO.com オリジナル記事] 今、業界で人気のテクノロジーは何ですか?それは間違いなく人工...

...

南洋理工大学の最新の視覚言語モデルの概要:事前トレーニング、転移学習、知識蒸留

コンピュータ ビジョン (CV) 研究における長年の課題として、視覚認識 (画像分類、オブジェクト検...

2024年のGenAIおよびその他の技術への投資の変化

この記事では、GenAI やその他のテクノロジーへの投資が 2024 年までにどのように変化するかに...

本物そっくりの「人工顔」は顔認識を騙せるのか?

[[360561]]過去数年間に自分の写真をオンラインに投稿したことがあれば、Clearview ...

...

2023年のGenAI技術応用動向の観察

生成型人工知能 (GenAI) は技術革新の最前線にあり、さまざまな業界の変革と発展に新たな可能性を...

自動運転の時代において、ハッカーがあなたの車を破壊し、あなたを殺す方法はいくつあるでしょうか?

[[383265]] 「ワイルド・スピード8」を見たことがある友人なら、ハッカーが1,000台の車...

...