毎秒3,000枚以上のナンバープレート認識を高速に実現
駐車場や高速道路の自動制御パイプラインを構築する際、ナンバープレート認識はすぐにパフォーマンスの壁に直面します。Tesseractや重量級のEasyOCRを使用した標準的なアプローチでは、切り抜かれたナンバープレート画像1枚あたり数十ミリ秒を消費します。複数のカメラと車両が流れ込むと、サーバーが処理しきれなくなったり、高価なGPUクラスターが必要になったりします。

最近、開発者ankandrewのリポジトリfast-plate-ocrを見つけました。このプロジェクトは1つの狭いタスクに特化していますが、高速に実行します。検出器で既に切り抜かれたナンバープレート画像を受け取り、1ミリ秒未満で文字を読み取ります。
ナンバープレートOCRに専用のライブラリが必要な理由
ALPR(自動ナンバープレート認識)のコンピュータビジョンでは、パイプラインは通常2つのステップに分けられます:
- 検出器が車両を見つけ、ナンバープレートを切り抜きます(例:YOLOを使用)。
- テキスト認識モデルが実際のプレート番号を読み取ります。
汎用テキストOCRは書籍、領収書、看板、文書などで訓練されています。そのため、アーキテクチャが肥大化し、非標準フォントや複雑な角度のプレートで頻繁にミスを犯します。
fast-plate-ocrライブラリは、CCT(Compact Convolutional Transformer)アーキテクチャに基づいたコンパクトなモデルを使用しています。これらのネットワークは、冗長なパラメータなしで小さな構造化画像を認識するように特別に設計されています。軽量なアーキテクチャとONNX Runtimeでの実行により、RTX 3090での1枚あたりのレイテンシは0.32~0.67ミリ秒です。スループットに変換すると、1枚のカードで毎秒14,000枚から3,000枚のプレートを処理できます。
内部構造と動作原理
このリポジトリには、 готовые модели CCT、トレーニングスクリプト、エクスポートツールが含まれています。
готовые модели CCT
著者はいくつかのモデルバージョンを準備しています:
cct-xs-v1-global-modelとcct-xs-v2-global-model— レイテンシ0.3~0.4ミリ秒の最小ネットワーク。cct-s-v1-global-modelとcct-s-v2-global-model— 複雑な視点角度での精度を優先するわずかに深いバリアント。
バージョン2(v2)では、ナンバープレートの地域または国を分類するための別 головкаが追加されています。カメラが国際交通を捕捉する場合、モデルはテキストとプレートの出身国の両方を即座に返します。
柔軟なランタイム選択
ニューラルネットワークをデプロイする際の一般的な課題は、重いフレームワークへの依存です。ここでは、推論がトレーニングから分離されています。ライブラリ自体は重い依存関係なしでインストールでき、ONNX Runtimeバックエンドはpip extrasでターゲットハードウェア用に選択されます:
# Для обычного процессора
pip install fast-plate-ocr[onnx]
# Для видеокарт NVIDIA
pip install fast-plate-ocr[onnx-gpu]
# Оптимизация под процессоры Intel
pip install fast-plate-ocr[onnx-openvino]
# Поддержка DirectML для Windows
pip install fast-plate-ocr[onnx-directml]
# Чипсеты Qualcomm
pip install fast-plate-ocr[onnx-qnn]
プロジェクトを軽量なDockerコンテナに組み込む必要がある場合や、ゲートのマイクロコンピュータで実行する必要がある場合に便利です。
コードでのクイックスタート
このライブラリの使用は数行で完了します。まず、ハブから目的のモデル名を渡して認識器を初期化し、次に画像のパスまたはNumPy配列を提供します。
from fast_plate_ocr import LicensePlateRecognizer
# Загружаем готовую предобученную модель
recognizer = LicensePlateRecognizer('cct-s-v2-global-model')
# Распознаем текст на вырезанной плашке
result = recognizer.run('test_plate.png')
print(result)
モデルが地域検出をサポートしている場合、信頼度スコアをリクエストできます:
from fast_plate_ocr import LicensePlateRecognizer
recognizer = LicensePlateRecognizer('cct-s-v2-global-model')
prediction = recognizer.run('test_plate.png', return_confidence=True)[0]
print(f"Номер: {prediction.text}")
print(f"Регион: {prediction.region}")
print(f"Уверенность в регионе: {prediction.region_prob:.2f}")
マシンでのパフォーマンスをベンチマークするための組み込みメソッドもあります:
recognizer.benchmark()
独自のプレートのためのトレーニングとファインチューニング
グローバルモデルは標準フォーマットを適切に処理しますが、現実のプロジェクトでは特定のナンバープレートに遭遇することがよくあります:軍用、外交用、2行、または特定の国の地域フォーマットなど。
トレーニングにはKeras 3を使用するため、PyTorch、TensorFlow、JAXなど、慣れ親しんだバックエンドでネットワークをトレーニングできます。トレーニング用の依存関係をインストールするには、次を実行します:
pip install fast-plate-ocr[train]
リポジトリにはプロセスをステップバイステップで説明する готовые модели Jupyterノートブック(9)が含まれています:
- ラベル付き切り抜きのデータセットと許可された文字の辞書を準備します。
- YAMLファイルでデータ拡張を設定します。
- 独自のデータでモデルをファインチューニングします。
- 重みをONNX、TFLite、またはCoreMLにエクスポートします。
トレーニング済みネットワークをTFLiteまたはCoreMLにエクスポートできる機能により、检查官や駐車場係向けのモバイルアプリに直接認識機能を埋め込む必要があっても問題ありません。
注意点
このプロジェクトはOCRステップのみに特化しています。フレーム内の車両を検索したり、鋭い角度で撮影されたプレートの Perspective を補正したりすることはできません。
ストリート全体のフレーム全体を入力すると、モデルは意味のない出力を生成します。 всегда должен предшествовать 検出器(YOLOv8、RT-DETR、またはその他)が常に先行してプレートの座標を見つけ、画像を切り抜く必要があります。カメラが大幅に傾いている場合に最適な結果を得るには、OCRに入力する前に Perspective 変換を追加してください。
このプロジェクトの対象者
このライブラリは、ミリ秒単位のレイテンシを競いながら実際のビデオ分析システムを構築している人々にアピールします:
- ミニPCベースの駐車場管理系统と自動バリヤー。
- 重量・寸法制御複合施設と交通監視。
- 有料駐車場の取り締まり用モバイルアプリ。
このプロジェクトはオープンソースで、コードは明確で、依存関係は最小限です。交通タスクで汎用OCRライブラリの遅さと戦い疲れているなら、fast-plate-ocrはサーバー資源と開発時間の両方を節約します。
関連プロジェクト