モデルパッケージの構造と軽量化
EdgeOCR のモデルパッケージには、複数の OCR・バーコードモデルが含まれています。アプリで使用するモデルが限られている場合は、不要なファイルを取り除くことでアプリの配布サイズを削減できます。
ダウンロードしたモデルパッケージの原本は変更せず、コピーを作成してから軽量化してください。モデル自体の量子化や再学習は、このページで扱う軽量化には含まれません。
モデルパッケージの構造
モデルパッケージは、次のような構造になっています。
models/
├── models.json
├── composite/
│ ├── <composite UID>.json
│ └── ...
├── detectors/
│ ├── <detector UID>.json
│ ├── <detector UID>.bin
│ └── ...
└── recognizers/
├── <recognizer UID>.json
├── <recognizer UID>.bin
└── ...
| パス | 役割 |
|---|---|
models.json | アプリから選択できる Composite モデルの UID 一覧と、モデル設定形式のバージョンを定義します。 |
composite/<UID>.json | OCR 処理を構成する Detector と Recognizer の組み合わせを定義します。 |
detectors/<UID>.json | Detector の種類や設定を定義します。 |
detectors/<UID>.bin | Detector が使用するモデル本体です。モデルの種類によっては存在しません。 |
recognizers/<UID>.json | Recognizer の種類、文字一覧などの設定を定義します。 |
recognizers/<UID>.bin | Recognizer が使用するモデル本体です。モデルの種類によっては存在しません。 |
モデル管理リポジトリには .lnk ファイルが含まれる場合があります。これはモデルファイルを取得・配布するための管理情報であり、EdgeOCR SDK は実行時に参照しません。アプリへ組み込むモデルディレクトリには、実体の .bin ファイルが必要です。
モデルの依存関係
EdgeOCR は、次の順序で使用するファイルを解決します。
models.json
└── composite/<composite UID>.json
├── detectors/<detector UID>.json + .bin
└── recognizers/<recognizer UID>.json + .bin
Composite には次の種類があります。
type | 用途 | 主な参照先 |
|---|---|---|
TextOnly | テキスト認識 | textDetectorUid、textRecognizerUid |
BarcodeOnly | バーコード認識 | barcodeDetectorUid、barcodeRecognizerUid |
Hybrid | テキストとバーコードの同時認識 | Text/Barcode 用の Detector と Recognizer、または共有 Detector |
たとえば、model-d320x320 の Composite 設定が次の内容である場合、detector-d320x320 と recognizer-tiny が必要です。
{
"type": "TextOnly",
"textDetectorUid": "detector-d320x320",
"textRecognizerUid": "recognizer-tiny"
}
edgeocr_barcode_default、edgeocr_barcode_advanced、edgeocr_dummy は SDK 内部で提供されます。Composite からこれらの UID を参照していても、同名の JSON・BIN ファイルを追加する必要はありません。
モデルパッケージを軽量化する
ここでは、model-d320x320 だけを使用する場合を例に説明します。
1. 使用する Composite UID を確認する
アプリが useModel で選択する UID を確認します。この例では model-d320x320 を使用します。
2. models.json を書き換える
models には、使用する Composite UID だけを残します。version はモデルパッケージに含まれている値を変更せず、そのまま残してください。
{
"version": 4,
"models": [
"model-d320x320"
]
}
3. Composite の依存先を確認する
composite/model-d320x320.json を開き、Detector と Recognizer の UID を確認します。この例では、次のファイルが参照されています。
detectors/detector-d320x320.jsondetectors/detector-d320x320.binrecognizers/recognizer-tiny.jsonrecognizers/recognizer-tiny.bin
複数の Composite を残す場合は、それぞれの依存先を確認し、参照されるファイルの和集合を残してください。同じ Detector や Recognizer が複数の Composite から参照されている場合、ファイルを重複して用意する必要はありません。
4. 参照されていないファイルを削除する
models.json に残した UID と、その Composite から参照されるファイル以外を削除します。軽量化後の構造は次のようになります。
models/
├── models.json
├── composite/
│ └── model-d320x320.json
├── detectors/
│ ├── detector-d320x320.json
│ └── detector-d320x320.bin
└── recognizers/
├── recognizer-tiny.json
└── recognizer-tiny.bin
- Composite JSON に記載された UID と、ファイル名を一致させてください。
models.jsonに UID を残したまま、対応する Composite や依存ファイルを削除しないでください。- モデルのバージョンによって依存する UID は異なる場合があります。この例のファイル名を固定で使わず、手元の Composite JSON を確認してください。
アプリで置き換える場所
軽量化した models ディレクトリを、アプリに組み込んでいる既存のモデルディレクトリと置き換えます。
- iOS (Swift)
- Android (Java)
Xcode でアプリの Bundle に追加している models フォルダを置き換えます。置き換えたフォルダがアプリターゲットに含まれていることも確認してください。
ディレクトリ名を変更した場合は、Bundle.main.path に指定する名前、またはサンプルアプリの modelPath を変更します。
let modelPath = Bundle.main.path(forResource: "models", ofType: "")!
let edgeOCR = try ModelBuilder().fromPath(modelPath).build()
通常は次のディレクトリを置き換えます。
app/src/main/assets/models/
ディレクトリ名を変更した場合は、fromAssets に渡すパスも同じ名前に変更します。
EdgeVisionAPI api = new EdgeVisionAPI.Builder(context)
.fromAssets("models")
.build();
動作確認
軽量化後は、次の点を確認してください。
- アプリをクリーンビルドする。
availableModels()に使用する UID が含まれていることを確認する。useModelでモデルをロードし、エラーにならないことを確認する。- 使用するすべての OCR・バーコード認識パターンを実機で確認する。