MindOCR是一个基于MindSpore 框架开发的OCR开源工具箱,集成系列主流文字检测识别的算法、模型,并提供易用的训练和推理工具,可以帮助用户快速开发和应用业界SoTA文本检测、文本识别模型,如DBNet/DBNet++和CRNN/SVTR,满足图像文档理解的需求。
以下是对应的“mindocr”版本和支持 Mindspore 版本。
mindocr | mindspore |
---|---|
main | master |
0.5 | 2.5.0 |
0.4 | 2.3.0/2.3.1 |
0.3 | 2.2.10 |
0.1 | 1.8 |
MindOCR基于MindSpore AI框架开发,并适配以下框架版本。模型训练场景:
Lite推理环境准备请参考离线推理环境准备。
pip install -r requirements.txt
git clone https://github.com/mindspore-lab/mindocr.git
cd mindocr
pip install -e .
使用
-e
代表可编辑模式,可以帮助解决潜在的模块导入问题。
目前提供的docker,环境信息如下
使用docker安装,根据以下步骤:
下载docker
docker pull swr.cn-central-221.ovaijisuan.com/mindocr/mindocr_dev_910_ms_2_2_10_cann7_0_py39:v1
docker pull swr.cn-central-221.ovaijisuan.com/mindocr/mindocr_dev_ms_2_2_10_cann7_0_py39:v1
新建容器
docker_name="temp_mindocr"
# 910
image_name="swr.cn-central-221.ovaijisuan.com/mindocr/mindocr_dev_910_ms_2_2_10_cann7_0_py39:v1"
# 910*
image_name="swr.cn-central-221.ovaijisuan.com/mindocr/mindocr_dev_ms_2_2_10_cann7_0_py39:v1"
docker run --privileged --name ${docker_name} \
--tmpfs /tmp \
--tmpfs /run \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
-v /etc/localtime:/etc/localtime \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
--shm-size 800g \
--cpus 96 \
--security-opt seccomp=unconfined \
--network=bridge -itd ${image_name} bash
进入容器
# 设置docker id
container_id="your docker id"
docker exec -it --user root $container_id bash
设置环境变量 进入容器后,设置环境变量:
source env_setup.sh
pip install mindocr
由于此项目正在积极开发中,从PyPI安装的版本目前已过期,我们将很快更新,敬请期待。
安装完MindOCR后,我们就很方便地进行任意图像的文本检测和识别,如下。
python tools/infer/text/predict_system.py --image_dir {path_to_img or dir_to_imgs} \
--det_algorithm DB++ \
--rec_algorithm CRNN \
--visualize_output True
运行结束后,结果将被默认保存在./inference_results
路径,可视化结果如下:
文本检测、识别结果可视化
可以看到图像中的文字块均被检测出来并正确识别。更详细的用法介绍,请参考推理教程。
使用tools/train.py
脚本可以进行OCR模型训练,该脚本可支持文本检测和识别模型训练。
python tools/train.py --config {path/to/model_config.yaml}
--config
参数用于指定yaml文件的路径,该文件定义要训练的模型和训练策略,包括数据处理流程、优化器、学习率调度器等。
MindOCR在configs
文件夹中提供系列SoTA的OCR模型及其训练策略,用户可以快速将其适配到自己的任务或数据集上,参考例子如下
# train text detection model DBNet++ on icdar15 dataset
python tools/train.py --config configs/det/dbnet/dbpp_r50_icdar15.yaml
# train text recognition model CRNN on icdar15 dataset
python tools/train.py --config configs/rec/crnn/crnn_icdar15.yaml
使用tools/eval.py
脚本可以评估已训练好的模型,如下所示:
python tools/eval.py \
--config {path/to/model_config.yaml} \
--opt eval.dataset_root={path/to/your_dataset} eval.ckpt_load_path={path/to/ckpt_file}
使用tools/infer/text/predict_system.py
脚本可进行模型的在线推理,如下所示:
python tools/infer/text/predict_system.py --image_dir {path_to_img or dir_to_imgs} \
--det_algorithm DB++ \
--rec_algorithm CRNN \
--visualize_output True
更多使用方法,请参考使用教程中的模型训练、推理章节。
你可以在MindOCR中对 MindOCR原生模型 或 第三方模型(如PaddleOCR、MMOCR等)进行MindSpore Lite推理。详情请参考模型离线推理教程。
关于以上模型的具体训练方法和结果,请参见configs下各模型子目录的readme文档。
MindSpore Lite模型推理的支持列表, 请参见MindOCR原生模型推理支持列表 和 第三方模型推理支持列表(如PaddleOCR)。
MindOCR提供了数据格式转换工具 ,以支持不同格式的OCR数据集,支持用户自定义的数据集。 当前已在模型训练评估中验证过的公开OCR数据集如下。
我们会在更多的数据集上进行模型训练和验证。该列表将持续更新。
关于配置环境、使用mindocr遇到的高频问题,可以参考常见问题。
model
字段下增加resume
参数,允许传入具体路径resume: /path/to/train_resume.ckpt
或者通过设置resume: True
来加载在ckpt_save_dir下保存的trian_resume.ckpteval.dataset.output_columns
列表中增加"shape_list"实现。pred_cast_fp32
,修复存在无效多边形的错误。model-pretrained
设置为checkpoint url或本地路径来使用。train-ema
(默认值:False)和train-ema_decay
来启用。num_columns_to_net
-> net_input_column_index
: 输入网络的columns数量改为输入网络的columns索引num_columns_of_labels
-> label_column_index
: 用索引替换数量,以表示label的位置。grouping_strategy
参数以选择预定义的分组策略,或使用no_weight_decay_params
参数选择要从权重衰减中排除的层(例如,bias、norm)。示例可参考configs/rec/crn/crnn_icdar15.yaml
gradient_accumulation_steps
,全局批量大小=batch_size * devices * gradient_aaccumulation_steps。示例可参考configs/rec/crn/crnn_icdar15.yaml
grad_clip
设置为True来启用。loss_scale
字段并将type
参数设为dynamic
,参考例子请见configs/rec/crnn/crnn_icdar15.yaml
output_keys
-> output_columns
;num_keys_to_net
-> num_columns_to_net
; i) 在OpenI云平台上创建一个训练任务;
ii) 在网页上关联数据集,如ic15_mindocr;
iii) 增加 `config` 参数,在网页的UI界面配置yaml文件路径,如'/home/work/user-job-dir/V0001/configs/rec/test.yaml';
iv) 在网页的UI界面增加运行参数`enable_modelarts`并将其设置为True;
v) 填写其他项并启动训练任务。
我们欢迎包括问题单和PR在内的所有贡献,来让MindOCR变得更好。
请参考CONTRIBUTING.md作为贡献指南,请按照Model Template and Guideline的指引贡献一个适配所有接口的模型,多谢合作。
本项目遵从Apache License 2.0开源许可。
如果本项目对您的研究有帮助,请考虑引用:
@misc{MindSpore OCR 2023,
title={{MindSpore OCR }:MindSpore OCR Toolbox},
author={MindSpore Team},
howpublished = {\url{https://github.com/mindspore-lab/mindocr/}},
year={2023}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型