OpenMMLab の MMOCR を使ってみる

公開日: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_r18dbnet_r18_fpnc_1200e_icdar2015
DB_r50dbnet_r50dcnv2_fpnc_1200e_icdar2015
DBPP_r50dbnetpp_r50dcnv2_fpnc_1200e_icdar2015
DRRGdrrg_r50_fpn_unet_1200e_ctw1500
FCE_IC15fcenet_r50_fpn_1500e_icdar2015
FCE_CTW_DCNv2fcenet_r50dcnv2_fpn_1500e_ctw1500
MaskRCNN_CTWmask_rcnn_r50_fpn_160e_ctw1500
MaskRCNN_IC15mask_rcnn_r50_fpn_160e_icdar2015
MaskRCNN_IC17mask_rcnn_r50_fpn_160e_icdar2017
PANet_CTWpanet_r18_fpem_ffm_600e_ctw1500
PANet_IC15panet_r18_fpem_ffm_600e_icdar2015
PS_CTWpsenet_r50_fpnf_600e_ctw1500
PS_IC15psenet_r50_fpnf_600e_icdar2015
TextSnaketextsnake_r50_fpn_unet_1200e_ctw1500

Recognitionモデル

CRNNcrnn_academic_dataset
SARsar_r31_parallel_decoder_academic
SAR_CNsar_r31_parallel_decoder_chinese
NRTR_1/16-1/8nrtr_r31_1by16_1by8_academic
NRTR_1/8-1/4nrtr_r31_1by8_1by4_academic
RobustScannerrobustscanner_r31_academic
SATRNsatrn_academic
SATRN_smsatrn_small
ABINetabinet_academic
ABINet_Visionabinet_vision_only_academic
SEGseg_r31_1by16_fpnocr_academic
CRNN_TPScrnn_tps_academic_dataset

Key Information Extractionモデル

SDMGRsdmgr_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