>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Python

车牌识别:以每秒三千帧的速度

在构建停车场或高速公路的自动控制流程时,车牌识别很快就会遇到性能瓶颈。使用 Tesseract 或笨重的 EasyOCR 等标准方法,每张裁剪后的车牌矩形图像需要消耗数十毫秒。当有多个摄像头和车辆流经时,服务器开始卡顿或需要昂贵的 GPU 集群。

Intro

最近发现了开发者 ankandrew 的仓库 fast-plate-ocr。该项目只解决一个狭窄的任务,但速度很快。它接收检测器已裁剪的车牌,并在亚毫秒级时间内读取字符。

为什么需要单独的车牌识别库

在 ALPR(自动车牌识别)的计算机视觉应用中,流程通常分为两个步骤:

  1. 检测器定位车辆并裁剪车牌(例如通过 YOLO)。
  2. 文本识别模型读取实际的车牌号码。

通用文本 OCR 系统针对书籍、收据、标牌和文档进行训练。由于这个原因,架构变得臃肿,在处理非标准字体或复杂角度的车牌时经常出错。

fast-Plate-ocr 库使用基于 CCT(紧凑卷积 Transformer)架构的紧凑模型。这些网络专门为识别小型结构化图像而设计,没有冗余参数。得益于轻量级架构和 ONNX Runtime 执行,在 RTX 3090 上单张图像的延迟范围为 0.32 到 0.67 毫秒。换算成吞吐量,这意味着单张卡片每秒可处理 14,000 到 3,000 个车牌。

内部机制与工作原理

该仓库包含现成的模型库、训练脚本和导出工具。

现成的 CCT 模型

作者准备了多个模型版本:

  • cct-xs-v1-global-modelcct-xs-v2-global-model — 最小网络,延迟 0.3-0.4 毫秒。
  • cct-s-v1-global-modelcct-s-v2-global-model — 稍深的变体,优先考虑复杂视角下的准确性。

第二版(v2)添加了单独的头部来分类车牌的区域或国家。如果摄像头捕捉到国际交通,模型会立即返回文本和车牌来源国家。

灵活的运行时选择

部署神经网络时的一个常见痛点是依赖重型框架。推理与训练是分开的。库本身安装时没有重型依赖,通过 pip extras 选择目标硬件的 ONNX Runtime 后端:

# Для обычного процессора
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 容器中或在门口的微型计算机上运行,这会很方便。

代码中的快速开始

使用这个库只需几行代码。首先,通过传递 hub 中所需模型的名称来初始化识别器,然后提供图像路径或 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()

针对自有车牌的训练和微调

尽管全球模型对标准格式的处理相当不错,但实际项目经常遇到特定的车牌:军用、外交、双行或特定国家的区域格式。

训练使用 Keras 3,因此可以使用任何熟悉的后端(PyTorch、TensorFlow 或 JAX)来训练网络。安装训练依赖项只需运行:

pip install fast-plate-ocr[train]

仓库中包含一个现成的 Jupyter Notebook(examples/tutorial_fine_tune_plate_model.ipynb),逐步演示整个过程:

  1. 准备带标签的裁剪图像数据集和允许字符的字典。
  2. 通过 YAML 文件配置数据增强。
  3. 使用自有数据微调模型。
  4. 将权重导出为 ONNX、TFLite 或 CoreML 格式。

能够将训练好的网络导出为 TFLite 或 CoreML 解决了在移动应用中嵌入识别功能的难题——如果需要将识别功能直接嵌入检查员或停车场管理员的移动应用中。

需要注意的事项

项目仅专注于 OCR 步骤。它不会在画面中搜索车辆,也不会在车牌以锐角拍摄时纠正其透视。

如果输入包含整条街道的完整画面,模型会输出垃圾数据。必须始终在 fast-plate-ocr 之前使用检测器(YOLOv8、RT-DETR 或其他)来定位车牌坐标并裁剪图像。对于倾斜严重的摄像头,在输入 OCR 之前添加透视变换可获得最佳效果。

适用对象

该库适合构建实时视频分析系统并争取毫秒级延迟的开发者:

  • 基于迷你 PC 的停车场管理系统和自动栏杆。
  • 称重和尺寸控制综合体以及交通监控。
  • 付费停车执法的移动应用。

项目采用开源许可,代码清晰,依赖项最少。如果厌倦了在交通任务中与通用 OCR 库的缓慢性能作斗争,fast-Plate-ocr 可以节省服务器资源和开发时间。

相关项目