中国企業のBaiduが開発している軽量を売りにするPaddleOCR。
本記事ではPaddleOCRを使って日本語の文字を認識する方法を紹介します
|
出典: https://github.com/PaddlePaddle/PaddleOCR
|
PaddleOCRとは?
英語、日本語、中国語等の文字認識が可能なAIOCRです。
ソースコード学習済みモデルが公開されており、
学習済みモデルを使って文字認識を実行することも、
公開されたソースコードを使って学習し、新たにモデルをトレーニングすることも可能です
2 stageモデルのため文字検出、文字認識それぞれで別のモデルを使用します
また、文字の向きの検出にもモデルを使用しています。
このため、文字検出、文字の向きの検出、文字認識の合計3つの学習済みモデルを使用して3回予測し、AIOCRを実現しています。
|
出典: https://github.com/PaddlePaddle/PaddleOCR
|
特長は下記の4点です
- 中国語や日本語など複数言語をサポートしていること
- 2021年10月時点で活発にコードが保守されていること
- PaddlePaddleフレームワークで実装されていること
- 軽量(メモリ消費量が少ない・モデルサイズが小さい)であること
1点目のサポート言語数は2022年1月時点で下記のとおりです。
chinese and english
Arabic
english
Hindi
french
Uyghur
german
Persian
japan
Urdu
korean
Serbian(latin)
chinese traditional
Occitan
Italian
Marathi
Spanish
Nepali
Portuguese
Serbian(cyrillic)
Russia
Bulgarian
Ukranian
Estonian
Belarusian
Irish
Telugu
Croatian
Saudi Arabia
Hungarian
Tamil
Indonesian
Afrikaans
Icelandic
Azerbaijani
Kurdish
Bosnian
Lithuanian
Czech
Latvian
Welsh
Maori
Danish
Malay
Maltese
Adyghe
Dutch
Kabardian
Norwegian
Avar
Polish
Dargwa
Romanian
Ingush
Slovak
Lak
Slovenian
Lezghian
Albanian
Tabassaran
Swedish
Bihari
Swahili
Maithili
Tagalog
Angika
Turkish
Bhojpuri
Uzbek
Magahi
Vietnamese
Nagpur
Mongolian
Newari
Abaza
Goan Konkani
留意すべき特徴は、3点目でしょうか。
PytorchやTensorflowなどのAIフレームワークではなくPaddlePaddleで実装されているため
若干の学習コストが発生します
また、技術的な最大の特徴は、4点目の軽量化に重点を置いたAIOCRである点です。
近年機械学習を使ったモデルはGPUや、CPUメモリのハードウェアリソースの発展に伴い肥大化の一途を辿っています。
このため、たとえ論文とソースコードが公開されているモデルであっても個人所有のGPUでは実行に必要なメモリが不足する場合や実行時間が非常に遅い場合があります。
対してこのPaddleOCRは、モデルサイズが非常に小さく、実行時に必要なメモリもそれほど多くはありません。CPUのみで実行したとしても十分現実的な実行時間となります
この点、とりあえず動かしてみたい方にとっては適切ではないでしょうか。
なお、2022年1月時点のモデルサイズは下記のとおりです。
■Mobile用モデル
detection(文字の検出): 3.0MB
direction classifer(文字の方向の分類): 1.4MB
recognition(文字の認識): 5.0MB
■Server用モデル
detection(文字の検出): 47.1MB
direction classifer(文字の方向の分類): 1.4MB
recognition(文字の認識): 94.9MB
なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。
導入手順
LinuxにPaddleOCRを導入していきます
PaddleOCRのGitHubにDockerを使った導入手順が記載されていますが、
環境によって動かない場合があるため、本記事ではminicondaを使った導入手順を記載します
始めにminicondaの仮想環境を作成します
conda create -n ppocr python=3.7 -y # conda環境作成
conda activate ppocr # 仮想環境起動
cd ppocr
mkdir workspace
cd workspace
次にGitHubからPaddleOCRのソースコードをクローンします
git clone https://github.com/PaddlePaddle/PaddleOCR.git -b v2.0.0
次にPaddlePaddleをインストールします
環境によってレポジトリからのインストールに失敗する場合があるため
ファイルをダウンロードしてローカルでインストールします
# 下記からpython version, cuda versionに一致するものをダウンロード
# https://anaconda.org/Paddle/paddlepaddle-gpu
# paddlepaddle-gpu 2.1.0 cuda 10.1 python 3.7をダウンロード
wget https://anaconda.org/Paddle/paddlepaddle-gpu/2.1.0/download/linux-64/paddlepaddle-gpu-2.1.0-py37_gpu_cuda10.1_many_linux.tar.bz2
# ダウンロードファイルをcondaにインストール
conda install paddlepaddle-gpu-2.1.0-py37_gpu_cuda10.1_many_linux.tar.bz2
次にpipを使ってライブラリをインストールします
このときProxy環境下である場合は下記コマンドでプロキシ設定をpipに通しておく必要があります
# Proxyを環境変数に設定
export HTTP_PROXY=http://"username":"password"@"proxy":"port"
export HTTPS_PROXY=http://"username":"password"@"proxy":"port"
pipを使ってrequirements.txtに記載のライブラリをインストール
cd PaddleOCR
pip3 install -r requirements.txt
以上で導入は完了です
日本語の予測
始めに日本語の文字認識モデルをダウンロードします
ダウンロード場所は任意ですが本記事では下記のディレクトリ構成とします
ppocr
|- workspace
|- PaddleOCR
|- infer_model
|- det
|- rec
|- cls
cd /ppocr/workspace/PaddleOCR/infer_model/rec
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/japan_mobile_v2.0_rec_infer.tar
tar -xvf japan_mobile_v2.0_rec_infer.tar
同様に文字検出モデルと文字の向きを検出するモデルもダウンロードします
この2つのモデルは言語に多言語共通です
cd /ppocr/workspace/PaddleOCR/infer_model/det
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar
tar -xvf ch_ppocr_server_v2.0_det_infer.tar
cd /ppocr/workspace/PaddleOCR/infer_model/cls
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar
tar -xvf ch_ppocr_mobile_v2.0_cls_infer.tar
最後にこれらを使って日本語のOCRを実行します
cd /ppocr/workspace/PaddleOCR
# --image_dir OCR対象の画像パスまたはディレクトリ
# --rec_char_dict_path 文字認識モデルが利用する辞書データ
# --drop_score 文字認識のスコアの閾値, 閾値以下のものは出力されません
python3 tools/infer/predict_system.py \
--image_dir="./doc/imgs/japan_2.jpg" \
--det_model_dir="./infer_model/det/ch_ppocr_server_v2.0_det_infer" \
--cls_model_dir="./infer_model/cls/ch_ppocr_mobile_v2.0_cls_infer" \
--rec_model_dir="./infer_model/rec/japan_mobile_v2.0_rec_infer" \
--use_angle_cls=true \
--rec_char_dict_path=./ppocr/utils/dict/japan_dict.txt \
--rec_char_type=japan \
--use_gpu=True \
--drop_score=0.5
cd /ppocr/workspace/PaddleOCR/inference_results
に予測結果が出力されます
まとめ
PaddleOCRと日本語の文字認識の実行手順を紹介させて頂きました
見慣れないフレームワークですが、実行に求められるスペックが低く機械学習そのものの学習には打ってつけのモデルです。また物体検知や、物体認識といった画像を用いた機械学習のいくつかの手法も学べるため初学者にもおすすめのモデルです。
また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。
リンク
リンク
また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。
--rec_char_type=japan \ でエラーが出ます
返信削除ご覧いただきありがとうございます。
返信削除multilingual modelsのリリースに伴い、認識言語の指定が不要になりrec_char_typeが削除されています。
git clone https://github.com/PaddlePaddle/PaddleOCR.git -b v2.0.0
でタグを指定して過去バージョンのPaddleOCRをクローンして頂くことエラーなく実行可能です。
本記事も修正しました。