如何运行自定义 OCR 模型
在本教程中,我们首先介绍如何获取自定义 OCR 模型,然后介绍如何转换你自己的 OCR 模型,使其能够被 opencv_dnn 模块正确运行,最后我们会提供一些预训练模型。
训练你自己的 OCR 模型
Section titled “训练你自己的 OCR 模型”这个仓库 是训练你自己的 OCR 模型的一个良好起点。在该仓库中,默认将 MJSynth+SynthText 设置为训练集。此外,你可以配置所需的模型结构和数据集。
将 OCR 模型转换为 ONNX 格式并在 OpenCV DNN 中使用
Section titled “将 OCR 模型转换为 ONNX 格式并在 OpenCV DNN 中使用”完成模型训练之后,请使用 transform_to_onnx.py 将模型转换为 onnx 格式。
在网络摄像头中运行
Section titled “在网络摄像头中运行”Python 版本的示例代码可以在这里找到。
示例:
$ text_detection -m=[path_to_text_detect_model] -ocr=[path_to_text_recognition_model]提供预训练的 ONNX 模型
Section titled “提供预训练的 ONNX 模型”一些预训练模型可以在 https://drive.google.com/drive/folders/1cTbQ3nuZG-EKWak6emD_s8_hHXWz7lAr?usp=sharing 找到。
它们在不同文本识别数据集上的性能如下表所示:
| 模型名称 | IIIT5k(%) | SVT(%) | ICDAR03(%) | ICDAR13(%) | ICDAR15(%) | SVTP(%) | CUTE80(%) | 平均准确率(%) | 参数量( x10^6 ) |
|---|---|---|---|---|---|---|---|---|---|
| DenseNet-CTC | 72.267 | 67.39 | 82.81 | 80 | 48.38 | 49.45 | 42.50 | 63.26 | 0.24 |
| DenseNet-BiLSTM-CTC | 73.76 | 72.33 | 86.15 | 83.15 | 50.67 | 57.984 | 49.826 | 67.69 | 3.63 |
| VGG-CTC | 75.96 | 75.42 | 85.92 | 83.54 | 54.89 | 57.52 | 50.17 | 69.06 | 5.57 |
| CRNN_VGG-BiLSTM-CTC | 82.63 | 82.07 | 92.96 | 88.867 | 66.28 | 71.01 | 62.37 | 78.03 | 8.45 |
| ResNet-CTC | 84.00 | 84.08 | 92.39 | 88.96 | 67.74 | 74.73 | 67.60 | 79.93 | 44.28 |
文本识别模型的性能是在 OpenCV DNN 上测试的,不包含文本检测模型。
模型选择建议
Section titled “模型选择建议”文本识别模型的输入是文本检测模型的输出,这导致文本检测的性能会极大地影响文本识别的性能。
DenseNet_CTC 的参数量最小、FPS 最高,适合用于对计算成本非常敏感的边缘设备。如果你的计算资源有限,但又希望获得更好的准确率,VGG_CTC 是一个不错的选择。
CRNN_VGG_BiLSTM_CTC 适用于对识别准确率要求较高的场景。