CnSTD简介
CnSTD(Chinese Scene Text Detection)是一款基于PyTorch的开源场景文字检测工具,由breezedeus开发并维护。尽管名称中包含"Chinese",但CnSTD同样支持英文等其他语言的文字检测。自V1.2.1版本起,CnSTD还加入了数学公式检测(Mathematical Formula Detection,MFD)功能,并提供了训练好的模型可直接用于检测图片中的行内公式和独立行公式。
CnSTD的主要特点包括:
- 支持中英文场景文字检测
- 支持数学公式检测
- 支持版面分析
- 提供多种预训练模型,适用于不同场景
- 支持CPU和GPU环境
- 易于安装和使用
- 与OCR工具包cnocr无缝集成
安装CnSTD
安装CnSTD非常简单,可以通过pip直接安装:
pip install cnstd
如果需要使用ONNX模型(通常性能更好),可以使用以下命令:
- CPU环境:
pip install cnstd[ort-cpu]
- GPU环境:
pip install cnstd[ort-gpu]
注意:如果安装速度较慢,可以指定国内的安装源,例如使用阿里云源:
pip install cnstd -i https://mirrors.aliyun.com/pypi/simple
CnSTD要求Python版本为3.6及以上,并依赖opencv库。首次使用时,系统会自动下载模型文件并存放在~/.cnstd
目录中(Windows下为C:\Users\<username>\AppData\Roaming\cnstd
)。
CnSTD模型概览
CnSTD提供了多种预训练模型,适用于不同的场景和需求。这些模型可以分为两类:
- CnSTD自己训练的模型
- 从其他OCR引擎(如PaddleOCR)移植过来的模型
CnSTD自训练模型
CnSTD自V1.1.0版本起使用DBNet作为文字检测模型,相比之前使用的PSENet模型,检测耗时大幅下降,同时精度也得到显著提升。目前提供的模型包括:
- db_resnet34
- db_resnet18
- db_mobilenet_v3
- db_mobilenet_v3_small
- db_shufflenet_v2
- db_shufflenet_v2_small
- db_shufflenet_v2_tiny
这些模型在参数规模、模型大小、精度和推理速度上各有权衡。例如,db_shufflenet_v2_tiny模型只有1.9M参数,模型文件大小仅7.5M,但仍能达到较高的检测精度。
外部移植模型
CnSTD还提供了PaddleOCR中部分模型的ONNX版本,这些模型不依赖PaddlePaddle相关工具包,支持检测竖排文字。包括:
- ch_PP-OCRv3_det
- ch_PP-OCRv2_det
- en_PP-OCRv3_det
这些模型支持中英文、数字等的检测,模型文件大小在2.2M到2.3M之间。
使用CnSTD进行文字检测
基本使用
使用CnSTD进行文字检测非常简单,以下是一个基本的示例:
from cnstd import CnStd
std = CnStd()
box_info_list = std.detect('examples/taobao.jpg')
或者,如果你已经有一个PIL Image对象:
from PIL import Image
from cnstd import CnStd
std = CnStd()
img_fp = 'examples/taobao.jpg'
img = Image.open(img_fp)
box_infos = std.detect(img)
检测结果解析
detect()
方法返回的是一个列表,每个元素是一个字典,对应一张图片的检测结果。字典中包含以下关键信息:
rotated_angle
: 整张图片旋转的角度(仅当auto_rotate_whole_image=True
时可能非0)detected_texts
: 检测出的文本框列表,每个元素包含:box
: 文字对应的矩形框坐标score
: 检测置信度cropped_img
: 对应文本框的图片patch
与OCR结合使用
CnSTD可以与OCR工具包cnocr无缝集成,实现从文字检测到识别的完整流程:
from cnstd import CnStd
from cnocr import CnOcr
std = CnStd()
cn_ocr = CnOcr()
box_infos = std.detect('examples/taobao.jpg')
for box_info in box_infos['detected_texts']:
cropped_img = box_info['cropped_img']
ocr_res = cn_ocr.ocr_for_single_line(cropped_img)
print('OCR result:', str(ocr_res))
数学公式检测与版面分析
CnSTD不仅支持普通文字检测,还提供了数学公式检测(MFD)和版面分析(Layout Analysis)功能。这两个功能都基于YOLOv7检测架构,使用LayoutAnalyzer
类实现。
数学公式检测
数学公式检测模型可以识别图片中的行内公式和独立行公式。使用示例:
from cnstd import LayoutAnalyzer
img_fp = 'examples/mfd/zh5.jpg'
analyzer = LayoutAnalyzer('mfd')
out = analyzer.analyze(img_fp, resized_shape=700)
print(out)
版面分析
版面分析模型可以识别图片中的不同排版元素,包括正文、标题、图片、表格等。使用方法与数学公式检测类似,只需将model_name
参数设置为'layout'
即可。
命令行工具
CnSTD还提供了命令行工具,方便快速进行文字检测或版面分析。
文字检测
使用cnstd predict
命令可以对单个图片或整个文件夹进行文字检测:
cnstd predict -i examples/taobao.jpg -o outputs
数学公式检测或版面分析
使用cnstd analyze
命令可以进行数学公式检测或版面分析:
cnstd analyze -m mfd -i examples/mfd/zh5.jpg -o outputs
总结
CnSTD作为一个功能强大、易用的场景文字检测工具,不仅支持中英文文字检测,还能进行数学公式检测和版面分析。它提供了多种预训练模型,适应不同的应用场景和性能需求。无论是通过Python API还是命令行工具,CnSTD都能轻松集成到各种项目中,为OCR相关任务提供有力支持。
随着版本的不断更新,CnSTD的功能和性能还在持续改进。对于有特殊需求的用户,CnSTD的开发者还维护了一个知识星球,提供更多私有资源和详细的训练教程。总的来说,CnSTD是一个值得关注和使用的开源工具,为中文自然语言处理领域做出了重要贡献。