公開日:2022年9月16日
最終更新日:2022年11月24日
はじめに
今までいろいろOCRの記事を書いてきました。C#で簡単なOCRアプリを作ってみるわずか20行弱でOCRアプリを作成する
今回はOpenMMLabが開発している「MMOCR」を使わせて頂きました。
Pythonに限って言えば「EasyOCR」の方が今回の「MMOCR」より簡単かもしれません。
また、「EasyOCR」は日本語に対応していますが「MMOCR」はしていません。
ただ、「MMDetection」や「MMEditing」に慣れていれば「MMOCR」の敷居は非常に低いと思います。
後述しますが使用できるモデルの多さも「MMOCR」のメリットです。
Pythonスクリプト
Pythonの環境を構築したらその後は以下のスクリプトを実行するだけです。モデルのダウンロードは自動的に行われます。環境構築についてはこの記事の最後に載せておきます。
今回はサンプル画像も自動的にダウンロードできるようなスクリプトにしています。
import os import torch from torchvision.datasets.utils import download_url from mmocr.utils.ocr import MMOCR from mim.commands.download import download device = 'cuda' if torch.cuda.is_available() else 'cpu' img_url = 'https://github.com/open-mmlab/mmocr/raw/main/demo/demo_kie.jpeg' img_fname = img_url.split('/')[-1] download_url(img_url, root = '.', filename = img_fname) # Detection: PANet_IC15 det_checkpoint_name = 'panet_r18_fpem_ffm_600e_icdar2015' # Recognition: SEG recog_checkpoint_name = 'seg_r31_1by16_fpnocr_academic' # Key Information Extraction: SDMGR kie_checkpoint_name = 'sdmgr_unet16_60e_wildreceipt' configs = [det_checkpoint_name, recog_checkpoint_name, kie_checkpoint_name] os.makedirs('models', exist_ok=True) checkpoints = download(package='mmocr', configs=configs, dest_root="models") config_paths = [os.path.join('models', x + '.py') for x in configs] checkpoint_paths = [os.path.join('models', x) for x in checkpoints] ocr = MMOCR( det_config = config_paths[0], det_ckpt = checkpoint_paths[0], recog_config = config_paths[1], recog_ckpt = checkpoint_paths[1], kie_config = config_paths[2], kie_ckpt = checkpoint_paths[2], device = device ) result = ocr.readtext(img_fname, print_result=True, imshow=True)
結果
画像が表示され、文字が出力されます。{'filename': 'demo_kie', 'text': ['27', '32', '7302012', 'pm', 'e', 'eric', 'order', '113533', 'cashi', 'er', '90', 'gr', 'ande', 'meal', 'bean', 'bur', '90', 'gra', 'cande', 'meal', '00', '10', 'bean', 'bur', '0o', 'no', 'onions', '', 'sft', 'tac', 'party', 'pk', 'sft', 'taco', 'bf', 'taco', 'party', 'pack', 'crunchy', 'taco', 'med', '43', '94', 'drink', '11', '97', 'supreme', 'pizza', 'pizza', '1107', 'pepperoni', 'cheese', 'pizza', '47', 'm', 'sub', 'total', '25', '117', 'tax', '1102', 'total', '128', '827', 'mas', 'ter', 'card', '128', '27', 'acct', 'xxxxxxxx8425', 'a', 'approval', '052723']}
その他
解説
MMOCRのOCRは「Detection」「Recognition」「Key Information Extraction」の3つのモデルから形成されています。3つのモデルを別々にダウンロードする必要があります。組み合わせによって複数のOCRを試すことが可能になります。選択できるモデル
選択できるモデルを表にしてみました。もれがあるかもしれません。こちらのスクリプトから抽出しています。表の右側をスクリプト内で使用します。
一例を載せておきます。ここの部分を変更するだけでダウンロードも自動的に行われます。
# Detection: TextSnake det_checkpoint_name = 'textsnake_r50_fpn_unet_1200e_ctw1500' # Recognition: ABINet_Vision recog_checkpoint_name = 'abinet_vision_only_academic' # Key Information Extraction: SDMGR kie_checkpoint_name = 'sdmgr_unet16_60e_wildreceipt'
Detectionモデル
DB_r18 | dbnet_r18_fpnc_1200e_icdar2015 |
DB_r50 | dbnet_r50dcnv2_fpnc_1200e_icdar2015 |
DBPP_r50 | dbnetpp_r50dcnv2_fpnc_1200e_icdar2015 |
DRRG | drrg_r50_fpn_unet_1200e_ctw1500 |
FCE_IC15 | fcenet_r50_fpn_1500e_icdar2015 |
FCE_CTW_DCNv2 | fcenet_r50dcnv2_fpn_1500e_ctw1500 |
MaskRCNN_CTW | mask_rcnn_r50_fpn_160e_ctw1500 |
MaskRCNN_IC15 | mask_rcnn_r50_fpn_160e_icdar2015 |
MaskRCNN_IC17 | mask_rcnn_r50_fpn_160e_icdar2017 |
PANet_CTW | panet_r18_fpem_ffm_600e_ctw1500 |
PANet_IC15 | panet_r18_fpem_ffm_600e_icdar2015 |
PS_CTW | psenet_r50_fpnf_600e_ctw1500 |
PS_IC15 | psenet_r50_fpnf_600e_icdar2015 |
TextSnake | textsnake_r50_fpn_unet_1200e_ctw1500 |
Recognitionモデル
CRNN | crnn_academic_dataset |
SAR | sar_r31_parallel_decoder_academic |
SAR_CN | sar_r31_parallel_decoder_chinese |
NRTR_1/16-1/8 | nrtr_r31_1by16_1by8_academic |
NRTR_1/8-1/4 | nrtr_r31_1by8_1by4_academic |
RobustScanner | robustscanner_r31_academic |
SATRN | satrn_academic |
SATRN_sm | satrn_small |
ABINet | abinet_academic |
ABINet_Vision | abinet_vision_only_academic |
SEG | seg_r31_1by16_fpnocr_academic |
CRNN_TPS | crnn_tps_academic_dataset |
Key Information Extractionモデル
SDMGR | sdmgr_unet16_60e_wildreceipt |
動作環境
Windows 11 CUDA 11.6.2
Python 3.9.13
環境構築
すべてpipでインストール可能です。pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116 pip install mmcv-full==1.6.2 -f https://download.openmmlab.com/mmcv/dist/cu116/torch1.12.0/index.html pip install mmocr==0.6.2 pip install mmdet==2.25.3 pip install openmim==0.3.2 pip install mmengine==0.1.0
補足
開発版(v1.0.0rc)を使う場合はこちらを参照して下さい。touch-sp.hatenablog.com