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

ブログ    
ブログ    
ブログ    

推薦する

小さなバッチがディープラーニングの一般化を高める理由

バッチ サイズは、機械学習における重要なハイパーパラメータの 1 つです。このハイパーパラメータは、...

76ページのレビュー+300以上の参考文献で、Tiandaチームは大規模言語モデルアライメント技術を包括的に紹介しています。

最近、天津大学の熊徳一教授のチームが大規模言語モデルアライメント技術に関するレビュー論文(以下、アラ...

...

人工知能によるUAV戦闘能力の向上

[[282882]]リーパードローンつい最近、米国空軍は、リーパー無人航空機の製造元であるゼネラル・...

車載グレードの安全チップとチップ安全性テスト技術を1つの記事で理解する

世界の自動車産業におけるインテリジェンスと車両のインターネットの発展により、新時代の人々はますます便...

人工知能とはいったい何でしょうか?それは人間に取って代わるのでしょうか? AIのすべてを解説した本

[[379264]]人工知能(AI)の発展に伴い、機械が人間の労働に取って代わるというニュース報道が...

滴滴自動運転、世界初となる5時間連続無人道路テストのビデオを公開

[[391970]]画像キャプション:滴滴自動運転のCOO孟星氏とUdacityの創設者兼会長セバス...

アマゾンのドローン配送部門の主要メンバーが目標未達成で辞任

アマゾンのドローン配送部門プライムエアで安全、飛行運用、規制業務を担当していたショーン・キャシディ氏...

EasyDLが新しくアップグレードされ、ERNIEの3つの機能によりエンタープライズレベルのNLPモデルを迅速にカスタマイズできるようになりました。

最近、百度文心は3つの主要機能をリリースし、カスタマイズされたマルチラベルテキスト分類、感情傾向分析...

...

MetaはTransformerアーキテクチャにアクションを起こします。新しい注目メカニズムは推論をよりよく理解します。

大規模言語モデル (LLM) が強力であることは議論の余地のない事実ですが、それでも単純な間違いを犯...

人工知能はチェスをプレイする以外に何をすべきでしょうか?

[[183486]]医療、金融、交通、教育、公安、小売、商業サービスなどの業界は、電子データの度合...

会話型AIが顧客体験を向上させる方法

[[380661]] [51CTO.com クイック翻訳] 会話型 AI により、アプリケーションは...

将来のディープラーニングの鍵はフォトニックコンピューティング

今日では、人間の直感を備えたコンピューターは、画像内の物体の認識、音声の書き起こし、外国語の翻訳、病...