PaddleOCR+OpenCVで中国語と英語の認識を実現

I. 概要

  • 前回の記事によると、PaddleOCRv2.0の認識効果は非常に優れているとのことなので、こちらでビルドして動作を確認してみます。
  • この記事では、テスト用にバージョン v2.0.0 を使用します。これは、公式にコンパイルされたライブラリに相当します。
  • 使用したテスト環境はwin10、vs2017、x64、Releaseです
  • 使用するライブラリには、PaddleOCR 予測ライブラリ 2.0.2 (公式にコンパイルされた CPU バージョンと GPU バージョン)、OpenCV (私は 4.5.1 を使用しています。他のバージョンも利用できるはずです。画像読み取りのみ)。
  • プロジェクトの構築には cmake を使用することも、vs2017 を直接使用してプロジェクトを構築してから手動でライブラリを追加することもでき、どちらも使用できます。

2. コンパイルと変更

2.1 準備

  • PaddleOCRv2.0のソースコードをダウンロードします
  • 公式にコンパイルされたサードパーティ ライブラリPaddleOCR 予測ライブラリ 2.0.2をダウンロードします。コンピューターに NVIDIA をサポートする CUDA が搭載されている場合は、CPU と GPU のバージョンを同時にダウンロードできます。GPU バージョンをダウンロードする場合は、CUDA と cudnn のバージョンに注意してください。同時に、解凍後のライブラリ ファイル内のversion.txtに注意してください。これには、ライブラリがコンパイルされたときのすべての環境ライブラリと依存ライブラリが含まれています。CPU のバージョンは特に注意する必要はありませんが、GPU のバージョンは TensorRT のバージョンに注意する必要があります。
  • GPU バージョンを使用する必要がある場合は、グラフィック カードが GPU をサポートしていることを確認し、対応するドライバー、CUDA、cudnn、および TensorRT ライブラリをインストールします。
  • PaddleOCR ソース コードでディレクトリを見つけます“path\PaddleOCR-release-2.0\deploy\cpp_infer”。ここで、インクルード ディレクトリはすべてのヘッダー ファイル、src は使用するソース コード (main、cpp はメイン関数)、tools ディレクトリにはconfig.txtテンプレートがあります。"pathPaddleOCR-release-2.0\ppocr\utils"ファイル内にはフォント ファイルppocr_keys_v1.txtがあります。

2.2 コンパイル時の問題

  • 1. cmake の使用やプロジェクトの直接ビルドについては多くは言いませんが、非常に簡単なので、知らない人はいないでしょう。
  • 2. 手動でビルドしたプロジェクトの場合は、対応するヘッダー ファイルとライブラリ ファイル、つまり、ダウンロードしたPaddleOCR 予測ライブラリとコンパイルされた OpenCV を手動で追加する必要があります。
  • 3. コンパイル プロセス中に、dirent.h ファイルが見つからないように見えますが、問題はありません。このブログを参照して新しいファイルを作成し、プロジェクトに追加します。記事の最後には、誰もがテストして使用できるように、コンパイルされたプロジェクトも提供されます。
  • 4. glog ライブラリは必要ないかもしれません。コンパイル時にエラーが報告されたため、直接コメントアウトしました。
  • 5. VS017 の config.cpp には文字列割り当てメモリ構文エラーがあります。これは次のように修正できます。
  char* strs = new char[str.length() + 1];
  //char strs[str.length() + 1];
  std::strcpy(strs, str.c_str());

  char* d = new char[delim.length() + 1];
  //char d[delim.length() + 1];
  std::strcpy(d, delim.c_str());
  • 6. VS017 のutility.cpp の lstat 未定義識別子は次のように変更できます。
  struct stat s;
  stat(dir_name, &s);
  • 7. コードの文字認識結果出力関数を単純に修正し、結果をtxtに保存します。

3. 運用と結果

CPUバージョンについて

  • まず、対応するモデル ファイル(軽量または通常)をダウンロードする必要があります解凍後、任意のディレクトリに配置してください(各機種で3ファイルまで解凍可能)。
  • 以前のフォント ファイル ppocr_keys_v1.txt と構成ファイル config.txt も、簡単に検索できるようにこのディレクトリに配置できます。config.txt 内のモデル ファイルのパスと設定を変更することに注意してくださいuse_gpu 0
  • プロジェクト プロパティのデバッグ オプションで次のようなコマンド パラメータを設定します。./cfg/config.txt ./imgs
  • プロジェクト プロパティの環境オプションで DLL のパスを設定します。path=../3rd_party/paddle_inference_install_cpu/bin;../3rd_party/opencv/bin;セミコロンを忘れないでください。そうしないと、DLL ファイルが見つかりません。
  • 文字認識の際、 exe を使用して文字化けを実行する場合は、 exe を実行する前にターミナルに入力し、CHCP 65001ターミナルのエンコード方式を GBK エンコード (デフォルト) から UTF-8 エンコードに変更することができます。
  • VS2017コンソールで文字化けが出力される場合、色々試してみましたが今のところ良い解決策がなく、結果を比較用にtxtに保存しています。変更方法を知っている人は、コメント欄にメッセージを残して指導を受けることができます。
  • 認識結果の画像:
    ここに画像の説明を挿入
    ここに画像の説明を挿入
    ここに画像の説明を挿入
    ここに画像の説明を挿入
    ここに画像の説明を挿入
    ここに画像の説明を挿入
    ここに画像の説明を挿入
    ここに画像の説明を挿入
    ここに画像の説明を挿入
  • txt に保存されたテキストの認識効果は依然として非常に優れていますが、出力の順序が上から下の順序ではなく、一貫性がない場合があるため、長方形の枠の位置に応じて修正する必要があります。
    ここに画像の説明を挿入
    GPUのプログラムコードテストの場合:
  • 実際にはCPUとほぼ同じですが、次の点が必要です。
  • 1. 主な問題はここで説明されています: https://github.com/PaddlePaddle/PaddleOCR/issues/2355
  • 2. CUDA、cudnn、およびtensorRTライブラリを追加します。
  • 3. config.txt に設定use_gpu 1use_tensorrt 0これを高速に開くには問題があるようで、公式はサポートしていないようですが、このライブラリは必要です)
  • 4. 自分の GPU のメモリ サイズに応じて設定しますgpu_mem 1000(私の GPU は 2G で比較的小さいので、1000 に設定します)
  • 5. 実行結果が上記と一致する場合は表示されません。

4. 完全なエンジニアリング コードと 3 部構成のライブラリ

おすすめ

転載: blog.csdn.net/qq_38589460/article/details/119742105