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 の安全性と光の終焉

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

調査によると、米国の公共部門のIT意思決定者の70%にとってAIは「ミッションクリティカル」

テキサス州に拠点を置くラックスペース テクノロジーズが実施した調査によると、公共部門の IT 意思決...

機械学習の問題を解決する一般的な方法があります!この記事を1つだけ読んでみてください!

[[205485]]アビシェーク・タクル編集者: Cathy、Huang Wenchang、Jia...

メジャーアップデート! OpenAIがChatGPTエンタープライズ版をリリース、さまざまな業界向けにカスタマイズ可能なAI

人工知能研究企業OpenAIは8月29日、ChatGPTのメジャーアップグレードとなるChatGPT...

機械学習とHPCの火花は少し異なる

従来、高性能コンピューティング (HPC) は、数値解析を利用して物理方程式を解き、素粒子から銀河に...

AIサポートにより、Kiteはインテリジェントなコード補完機能を追加し、操作を半分に減らし、リアルタイムで補完します。

コード補完ツール Kite は最近最新バージョンに更新され、「インテリジェント スニペット」と呼ばれ...

Kaggle で競争する方法、全プロセスを解説

導入Kaggle は機械学習のコンペティションで最も有名なウェブサイトです。 Kaggle コンテス...

ディープラーニングの問題を無視してはいけない。ゲイリー・マーカスはそれに冷水を浴びせる義務がある

ニューヨーク大学の心理学教授であるゲイリー・マーカス氏は、かつてウーバーの人工知能研究所の所長を務め...

崑崙Core2が量産開始:性能が2~3倍向上し、中国の産業知能に強力な「コア」を注入

8月18日、百度とCCTVニュースは共同で「百度ワールド2021」カンファレンスを開催し、AIが何千...

NLP タスクに最適な 6 つの Python ライブラリ

この記事では、自然言語処理タスクに最適な 6 つの Python ライブラリを紹介します。初心者でも...

人工知能を活用して顧客サービス体験を向上させる 5 つの方法

人々がデジタルの世界に移行するにつれて、組織と顧客の関係はここ数年で変化してきました。顧客の期待はか...

...

エッジ AI ソフトウェア市場は 2023 年までに 11 億 5,000 万ドルに達する見込み

市場調査会社MarketsandMarketsによると、世界のエッジ人工知能(エッジAI)ソフトウェ...

人工知能はどのような通信分野に応用されていますか?

1. 異常なネットワークトラフィックの検出コンピュータネットワークは現代人の生活に欠かせないもので...

「リーフチップ」が小型ロボットに油圧パワーを提供

[[186706]]マサチューセッツ工科大学(MIT)は最近、同校の研究者らが樹木や植物のポンプ機構...