Spaces:
Running
on
Zero
Running
on
Zero
File size: 9,177 Bytes
981b0ab |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 |
---
backbone:
- convNext-Tiny
integrating: True
domain:
- cv
frameworks:
- pytorch
language:
- en
- ch
license: Apache License 2.0
metrics:
- Line Accuracy
finetune-support: True
tags:
- OCR
- Alibaba
- 文字识别
- 读光
tasks:
- ocr-recognition
studios:
- damo/cv_ocr-text-spotting
datasets:
test:
- damo/WebText_Dataset
widgets:
- task: ocr-recognition
inputs:
- type: image
examples:
- name: 1
inputs:
- name: image
data: http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/mass_img_tmp_20220922/ocr_recognition.jpg
---
# 读光文字识别
## News
- 2023年6月:
- 新增轻量化端侧识别[LightweightEdge-通用场景](https://www.modelscope.cn/models/damo/cv_LightweightEdge_ocr-recognitoin-general_damo/summary)模型和轻量化端侧[行检测模型](https://www.modelscope.cn/models/damo/cv_proxylessnas_ocr-detection-db-line-level_damo/summary)。
- 2023年4月:
- 新增训练/微调时读取本地数据集的lmdb,用训练/微调后的模型继续识别,详见代码示例。
- 2023年3月:
- 新增训练/微调流程,支持自定义参数及数据集,详见代码示例。
- 2023年2月:
- 新增业界主流[CRNN-通用场景](https://www.modelscope.cn/models/damo/cv_crnn_ocr-recognition-general_damo/summary)模型。
## 传送门
各场景文本识别模型:
- [ConvNextViT-手写场景](https://www.modelscope.cn/models/damo/cv_convnextTiny_ocr-recognition-handwritten_damo/summary)
- [ConvNextViT-文档印刷场景](https://www.modelscope.cn/models/damo/cv_convnextTiny_ocr-recognition-document_damo/summary)
- [ConvNextViT-自然场景](https://www.modelscope.cn/models/damo/cv_convnextTiny_ocr-recognition-scene_damo/summary)
- [ConvNextViT-车牌场景](https://www.modelscope.cn/models/damo/cv_convnextTiny_ocr-recognition-licenseplate_damo/summary)
- [CRNN-通用场景](https://www.modelscope.cn/models/damo/cv_crnn_ocr-recognition-general_damo/summary)
- [LightweightEdge-通用场景](https://www.modelscope.cn/models/damo/cv_LightweightEdge_ocr-recognitoin-general_damo/summary)
各场景文本检测模型:
- [SegLink++-通用场景行检测](https://modelscope.cn/models/damo/cv_resnet18_ocr-detection-line-level_damo/summary)
- [SegLink++-通用场景单词检测](https://modelscope.cn/models/damo/cv_resnet18_ocr-detection-word-level_damo/summary)
- [DBNet-通用场景行检测](https://www.modelscope.cn/models/damo/cv_resnet18_ocr-detection-db-line-level_damo/summary)
整图OCR能力:
- [整图OCR-多场景](https://modelscope.cn/studios/damo/cv_ocr-text-spotting/summary)
欢迎使用!
## 模型描述
- 文字识别,即给定一张文本图片,识别出图中所含文字并输出对应字符串。
- 本模型主要包括三个主要部分,Convolutional Backbone提取图像视觉特征,ConvTransformer Blocks用于对视觉特征进行上下文建模,最后连接CTC loss进行识别解码以及网络梯度优化。识别模型结构如下图:
<p align="center">
<img src="./resources/ConvTransformer-Pipeline.jpg"/>
</p>
## 期望模型使用方式以及适用范围
本模型主要用于给输入图片输出图中文字内容,具体地,模型输出内容以字符串形式输出。用户可以自行尝试各种输入图片。具体调用方式请参考代码示例。
- 注:输入图片应为包含文字的单行文本图片。其它如多行文本图片、非文本图片等可能没有返回结果,此时表示模型的识别结果为空。
## 模型推理
在安装完成ModelScope之后即可使用ocr-recognition的能力。(在notebook的CPU环境或GPU环境均可使用)
- 使用图像的url,或准备图像文件上传至notebook(可拖拽)。
- 输入下列代码。
### 代码范例
```python
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
import cv2
ocr_recognition = pipeline(Tasks.ocr_recognition, model='damo/cv_convnextTiny_ocr-recognition-general_damo')
### 使用url
img_url = 'http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/mass_img_tmp_20220922/ocr_recognition.jpg'
result = ocr_recognition(img_url)
print(result)
### 使用图像文件
### 请准备好名为'ocr_recognition.jpg'的图像文件
# img_path = 'ocr_recognition.jpg'
# img = cv2.imread(img_path)
# result = ocr_recognition(img)
# print(result)
```
### 模型可视化效果
以下为模型的可视化文字识别效果。
<p align="center">
<img src="./resources/rec_result_visu.jpg" width="400" />
</p>
### 模型局限性以及可能的偏差
- 模型是在中英文数据集上训练的,在其他语言的数据上有可能产生一定偏差,请用户自行评测后决定如何使用。
- 当前版本在python3.7的CPU环境和单GPU环境测试通过,其他环境下可用性待测试。
## 模型微调/训练
### 训练数据及流程介绍
- 本文字识别模型训练数据集是MTWI以及部分收集数据,训练数据数量约6M。
- 本模型参数随机初始化,然后在训练数据集上进行训练,在32x300尺度下训练20个epoch。
### 模型微调/训练示例
#### 训练数据集准备
示例采用[ICDAR13手写数据集](https://modelscope.cn/datasets/damo/ICDAR13_HCTR_Dataset/summary),已制作成lmdb,数据格式如下
```
'num-samples': number,
'image-000000001': imagedata,
'label-000000001': string,
...
```
详情可下载解析了解。
#### 配置训练参数并进行微调/训练
参考代码及详细说明如下
```python
import os
import tempfile
from modelscope.hub.snapshot_download import snapshot_download
from modelscope.metainfo import Trainers
from modelscope.msdatasets import MsDataset
from modelscope.trainers import build_trainer
from modelscope.utils.config import Config, ConfigDict
from modelscope.utils.constant import ModelFile, DownloadMode
### 请确认您当前的modelscope版本,训练/微调流程在modelscope==1.4.0及以上版本中
### 当前notebook中版本为1.3.2,请手动更新,建议使用GPU环境
model_id = 'damo/cv_convnextTiny_ocr-recognition-general_damo'
cache_path = snapshot_download(model_id) # 模型下载保存目录
config_path = os.path.join(cache_path, ModelFile.CONFIGURATION) # 模型参数配置文件,支持自定义
cfg = Config.from_file(config_path)
# 构建数据集,支持自定义
train_data_cfg = ConfigDict(
name='ICDAR13_HCTR_Dataset',
split='test',
namespace='damo',
test_mode=False)
train_dataset = MsDataset.load(
dataset_name=train_data_cfg.name,
split=train_data_cfg.split,
namespace=train_data_cfg.namespace,
download_mode=DownloadMode.REUSE_DATASET_IF_EXISTS)
test_data_cfg = ConfigDict(
name='ICDAR13_HCTR_Dataset',
split='test',
namespace='damo',
test_mode=True)
test_dataset = MsDataset.load(
dataset_name=test_data_cfg.name,
split=test_data_cfg.split,
namespace=train_data_cfg.namespace,
download_mode=DownloadMode.REUSE_DATASET_IF_EXISTS)
tmp_dir = tempfile.TemporaryDirectory().name # 模型文件和log保存位置,默认为"work_dir/"
# 自定义参数,例如这里将max_epochs设置为15,所有参数请参考configuration.json
def _cfg_modify_fn(cfg):
cfg.train.max_epochs = 15
return cfg
####################################################################################
'''
使用本地文件
lmdb:
构建包含下列信息的lmdb文件 (key: value)
'num-samples': 总样本数,
'image-000000001': 图像的二进制编码,
'label-000000001': 标签序列的二进制编码,
...
image和label后的index为9位并从1开始
下面为示例 (local_lmdb为本地的lmdb文件)
'''
# train_dataset = MsDataset.load(
# dataset_name=train_data_cfg.name,
# split=train_data_cfg.split,
# namespace=train_data_cfg.namespace,
# download_mode=DownloadMode.REUSE_DATASET_IF_EXISTS,
# local_lmdb='./local_lmdb')
# test_dataset = MsDataset.load(
# dataset_name=test_data_cfg.name,
# split=test_data_cfg.split,
# namespace=train_data_cfg.namespace,
# download_mode=DownloadMode.REUSE_DATASET_IF_EXISTS,
# local_lmdb='./local_lmdb')
####################################################################################
kwargs = dict(
model=model_id,
train_dataset=train_dataset,
eval_dataset=test_dataset,
work_dir=tmp_dir,
cfg_modify_fn=_cfg_modify_fn)
# 模型训练
trainer = build_trainer(name=Trainers.ocr_recognition, default_args=kwargs)
trainer.train()
```
#### 用训练/微调后的模型进行识别
```python
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
import os
ep_num = 3 # 选择模型checkpoint
cmd = 'cp {} {}'.format('./work_dir/epoch_%d.pth' % ep_num, './work_dir/output/pytorch_model.pt') # 'work_dir'为configuration中设置的路径,'output'为输出默认路径
os.system(cmd)
ocr_recognition = pipeline(Tasks.ocr_recognition, model='./work_dir/output' )
result = ocr_recognition('http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/mass_img_tmp_20220922/ocr_recognition_icdar13.jpg')
print(result)
``` |