【要約】実写画像のOCRで、CPU専用モデルを2つに分けた理由 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者が、GPUを使用できない環境で多言語のOCRを実現しようとした際、以下の技術的課題に直面した。
- ・多言語汎用モデルでは、ベトナム語の声調記号が欠落する。
- ・汎用モデルを調整すると、既存の英・日・中の精度が低下する。
- ・VietOCRはメモリ消費が極めて大きく、リソースを圧迫する。
- ・重いモデルがプロセスを占有し、軽量モデルの処理を阻害する。
// Approach
開発者は、単一の汎用モデルに頼らず、用途に応じた2つの独立したエンジンを採用した。
- ・PP-OCRv6とVietOCRを分離し、個別のエンドポイントとして扱う。
- ・環境変数を用いて、不要な時はVietOCRをロードしない設計にする。
- ・asyncio.Semaphoreを用い、エンジンごとに並行実行数を制御する。
- ・識別番号の抽出には、正規表現やLuhnチェックサム等のルールベースを用いる。
// Result
実装の結果、開発者は高い認識精度と安定したリソース管理の両立に成功した。
- ・英語で0.997、日本語で0.999、ベトナム語で0.913の信頼度を達成。
- ・エンジンごとの排他制御により、リクエストの待機時間を最適化した。
- ・SHA256によるモデル検証と、計54件のテストで信頼性を確保。
Senior Engineer Insight
> リソース制約下でのモデル分離は極めて合理的だ。単一モデルの肥大化を防ぎ、既存精度を保護する判断は実戦的である。特にセマフォによる並行数制御は、CPU環境でのスループット維持に不可欠だ。ただし、モデルが増える分、デプロイ管理の複雑性は増す。