Skip to content

如何运行自定义 OCR 模型

在本教程中,我们首先介绍如何获取自定义 OCR 模型,然后介绍如何转换你自己的 OCR 模型,使其能够被 opencv_dnn 模块正确运行,最后我们会提供一些预训练模型。

这个仓库 是训练你自己的 OCR 模型的一个良好起点。在该仓库中,默认将 MJSynth+SynthText 设置为训练集。此外,你可以配置所需的模型结构和数据集。

将 OCR 模型转换为 ONNX 格式并在 OpenCV DNN 中使用

Section titled “将 OCR 模型转换为 ONNX 格式并在 OpenCV DNN 中使用”

完成模型训练之后,请使用 transform_to_onnx.py 将模型转换为 onnx 格式。

Python 版本的示例代码可以在这里找到。

示例:

Terminal window
$ text_detection -m=[path_to_text_detect_model] -ocr=[path_to_text_recognition_model]

一些预训练模型可以在 https://drive.google.com/drive/folders/1cTbQ3nuZG-EKWak6emD_s8_hHXWz7lAr?usp=sharing 找到。

它们在不同文本识别数据集上的性能如下表所示:

模型名称IIIT5k(%)SVT(%)ICDAR03(%)ICDAR13(%)ICDAR15(%)SVTP(%)CUTE80(%)平均准确率(%)参数量( x10^6 )
DenseNet-CTC72.26767.3982.818048.3849.4542.5063.260.24
DenseNet-BiLSTM-CTC73.7672.3386.1583.1550.6757.98449.82667.693.63
VGG-CTC75.9675.4285.9283.5454.8957.5250.1769.065.57
CRNN_VGG-BiLSTM-CTC82.6382.0792.9688.86766.2871.0162.3778.038.45
ResNet-CTC84.0084.0892.3988.9667.7474.7367.6079.9344.28

文本识别模型的性能是在 OpenCV DNN 上测试的,不包含文本检测模型。

文本识别模型的输入是文本检测模型的输出,这导致文本检测的性能会极大地影响文本识别的性能。

DenseNet_CTC 的参数量最小、FPS 最高,适合用于对计算成本非常敏感的边缘设备。如果你的计算资源有限,但又希望获得更好的准确率,VGG_CTC 是一个不错的选择。

CRNN_VGG_BiLSTM_CTC 适用于对识别准确率要求较高的场景。