Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Just_Paranoid
CnOCR
提交
19d653fe
CnOCR
项目概览
Just_Paranoid
/
CnOCR
与 Fork 源项目一致
Fork自
Cloud IDE / CnOCR
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
CnOCR
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
19d653fe
编写于
11月 05, 2021
作者:
B
breezedeus
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update docs
上级
e515dd4b
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
99 addition
and
45 deletion
+99
-45
Makefile
Makefile
+1
-1
cnocr/cli.py
cnocr/cli.py
+2
-2
docs/RELEASE.md
docs/RELEASE.md
+10
-0
docs/command.md
docs/command.md
+50
-13
docs/examples/train_config.json
docs/examples/train_config.json
+1
-3
docs/models.md
docs/models.md
+0
-5
docs/train.md
docs/train.md
+24
-9
docs/usage.md
docs/usage.md
+11
-12
未找到文件。
Makefile
浏览文件 @
19d653fe
...
...
@@ -15,7 +15,7 @@ train:
# 在测试集上评估模型,所有badcases的具体信息会存放到文件夹 `evaluate/$(MODEL_NAME)` 中
evaluate
:
cnocr evaluate
--model-name
$(MODEL_NAME)
-i
data/test/dev.tsv
\
--image-folder
exampl
es
--batch-size
128
-o
eval_results/
$(MODEL_NAME)
--image-folder
data/imag
es
--batch-size
128
-o
eval_results/
$(MODEL_NAME)
predict
:
cnocr predict
-m
$(MODEL_NAME)
-i
docs/examples/rand_cn1.png
...
...
cnocr/cli.py
浏览文件 @
19d653fe
...
...
@@ -73,7 +73,7 @@ def cli():
'--train-config-fp'
,
type
=
str
,
required
=
True
,
help
=
'训练使用的json配置文件,参考 `
example
/train_config.json`'
,
help
=
'训练使用的json配置文件,参考 `
docs/examples
/train_config.json`'
,
)
@
click
.
option
(
'-r'
,
...
...
@@ -239,7 +239,7 @@ def predict(model_name, pretrained_model_fp, context, img_file_or_dir, single_li
default
=
'test.txt'
,
)
@
click
.
option
(
"--img-folder"
,
required
=
True
,
help
=
"图片所在文件夹,相对于索引文件中记录的图片位置"
)
@
click
.
option
(
"--batch-size"
,
type
=
int
,
help
=
"batch size"
,
default
=
128
)
@
click
.
option
(
"--batch-size"
,
type
=
int
,
help
=
"batch size
. 默认值:128
"
,
default
=
128
)
@
click
.
option
(
'-o'
,
'--output-dir'
,
...
...
docs/RELEASE.md
浏览文件 @
19d653fe
# Release Notes
### Update 2021.11.06: 发布 cnocr V2.1.0
主要变更:
*
使用了更精简的模型架构:
`densenet_lite_*`
;
*
使用了更丰富的数据重新训练了所有模型,精度相较于之前版本更高;
*
提供了更多预训练好的模型;
*
加入了
`cnocr evaluate`
命令以评估效果。
### Update 2021.09.21: 发布 cnocr V2.0.1
主要变更:
...
...
docs/command.md
浏览文件 @
19d653fe
...
...
@@ -11,15 +11,13 @@
```
bash
(
venv
)
➜ cnocr git:
(
pytorch
)
✗ cnocr predict
-h
(
venv
)
➜ cnocr git:
(
dev
)
✗ cnocr predict
-h
Usage: cnocr predict
[
OPTIONS]
Options:
-m
,
--model-name
[
densenet-s-lstm|densenet-s-gru|densenet-s-fc]
模型名称。默认值为 densenet-s-fc
--model_epoch
INTEGER model epoch。默认为
`
None
`
,表示使用系统自带的预训练模型
-m
,
--model-name
TEXT 模型名称。默认值为 densenet_lite_136-fc
-p
,
--pretrained-model-fp
TEXT 使用训练好的模型。默认为
`
None
`
,表示使用系统自带的预训练模型
-
-context
TEXT
使用cpu还是
`
gpu
`
运行代码,也可指定为特定gpu,如
`
cuda:0
`
。默认为
-
c
,
--context
TEXT
使用cpu还是
`
gpu
`
运行代码,也可指定为特定gpu,如
`
cuda:0
`
。默认为
`
cpu
`
-i
,
--img-file-or-dir
TEXT 输入图片的文件路径或者指定的文件夹
[
required]
...
...
@@ -43,21 +41,62 @@ cnstd predict -i docs/examples/rand_cn1.png -s
## 模型评估
使用命令
**`cnocr evaluate`**
在指定的数据集上评估模型效果,以下是使用说明:
```
bash
(
venv
)
➜ cnocr git:
(
dev
)
✗ cnocr evaluate
-h
Usage: cnocr evaluate
[
OPTIONS]
Options:
-m
,
--model-name
TEXT 模型名称。默认值为 densenet_lite_136-fc
-p
,
--pretrained-model-fp
TEXT 使用训练好的模型。默认为
`
None
`
,表示使用系统自带的预训练模型
-c
,
--context
TEXT 使用cpu还是
`
gpu
`
运行代码,也可指定为特定gpu,如
`
cuda:0
`
。默认为
`
cpu
`
-i
,
--eval-index-fp
TEXT 待评估文件所在的索引文件,格式与训练时训练集索引文件相同,每行格式为
`
<图片路径>
<以空格分割的labels>
`
--img-folder
TEXT 图片所在文件夹,相对于索引文件中记录的图片位置
[
required]
--batch-size
INTEGER batch size. 默认值:
`
128
`
-o
,
--output-dir
TEXT 存放评估结果的文件夹。默认值:
`
eval_results
`
-v
,
--verbose
whether to print details to screen
-h
,
--help
Show this message and exit.
```
例如可以使用以下命令评估
`data/test/dev.tsv`
中指定的所有样本:
```
bash
cnocr evaluate
-i
data/test/dev.tsv
--image-folder
data/images
```
具体使用也可参考文件
[
Makefile
](
https://github.com/breezedeus/cnocr/blob/master/Makefile
)
。
## 模型训练
使用命令
**`cnocr train`**
训练文本检测模型,以下是使用说明:
```
bash
(
venv
)
➜ cnocr git:
(
pytorch
)
✗ cnocr train
-h
(
venv
)
➜ cnocr git:
(
dev
)
✗ cnocr train
-h
Usage: cnocr train
[
OPTIONS]
Options:
-m
,
--model-name
[
densenet-s-fc|densenet-s-lstm|densenet-s-gru]
模型名称。默认值为 densenet-s-fc
-m
,
--model-name
TEXT 模型名称。默认值为 densenet_lite_136-fc
-i
,
--index-dir
TEXT 索引文件所在的文件夹,会读取文件夹中的 train.tsv 和 dev.tsv 文件
[
required]
--train-config-fp
TEXT 训练使用的json配置文件,参考
`
example/train_config.json
`
--train-config-fp
TEXT 训练使用的json配置文件,参考
`
docs/examples/train_config.json
`
[
required]
-r
,
--resume-from-checkpoint
TEXT
...
...
@@ -74,14 +113,12 @@ Options:
例如可以使用以下命令进行训练:
```
bash
cnocr train
-m
densenet
-s
-fc
--index-dir
data/test
--train-config-fp
docs/examples/train_config.json
cnocr train
-m
densenet
_lite_136
-fc
--index-dir
data/test
--train-config-fp
docs/examples/train_config.json
```
训练数据的格式见文件夹
[
data/test
](
https://github.com/breezedeus/cnocr/blob/master/data/test
)
中的
[
train.tsv
](
https://github.com/breezedeus/cnocr/blob/master/data/test/train.tsv
)
和
[
dev.tsv
](
https://github.com/breezedeus/cnocr/blob/master/data/test/dev.tsv
)
文件。
训练数据的格式见文件夹
[
data/test
](
https://github.com/breezedeus/cnocr/blob/master/data/test
)
中的
[
train.tsv
](
https://github.com/breezedeus/cnocr/blob/master/data/test/train.tsv
)
和
[
dev.tsv
](
https://github.com/breezedeus/cnocr/blob/master/data/test/dev.tsv
)
文件。
...
...
docs/examples/train_config.json
浏览文件 @
19d653fe
...
...
@@ -13,9 +13,7 @@
"lr_scheduler"
:
{
"name"
:
"cos_warmup"
,
"min_lr_mult_factor"
:
0.01
,
"warmup_epochs"
:
0
,
"milestones"
:
[
5
,
10
,
16
,
22
,
30
],
"gamma"
:
0.5
"warmup_epochs"
:
0.2
},
"precision"
:
32
,
"limit_train_batches"
:
1.0
,
...
...
docs/models.md
浏览文件 @
19d653fe
...
...
@@ -14,11 +14,6 @@ cnocr的ocr模型可以分为两阶段:第一阶段是获得ocr图片的局部
cnocr
**V2.1**
目前包含以下可直接使用的模型,训练好的模型都放在
**[cnstd-cnocr-models](https://github.com/breezedeus/cnstd-cnocr-models)**
项目中,可免费下载使用:
| 模型名称 | 局部编码模型 | 序列编码模型 | 模型大小 | 迭代次数 | 测试集准确率 |
| :------- | ------------ | ------------ | -------- | ------ | -------- |
| densenet-s-gru | densenet-s | gru | 11 M | 11 | 95.5% |
| densenet-s-fc | densenet-s | fc | 8.7 M | 39 | 91.9% |
| Name | 参数规模 | 模型文件大小 | 准确度 | 平均推断耗时(毫秒/图) |
| --- | --- | --- | --- | --- |
| densenet
\_
lite
\_
114-fc | 1.3 M | 4.9 M | 0.9274 | 9.229 |
...
...
docs/train.md
浏览文件 @
19d653fe
# 模型训练
自带模型基于
`
4
00+万`
的文字图片训练而成。
自带模型基于
`
5
00+万`
的文字图片训练而成。
## 训练命令
...
...
@@ -8,16 +8,16 @@
[
命令行工具
](
command.md
)
介绍了训练命令。使用命令
**`cnocr train`**
训练文本检测模型,以下是使用说明:
```
bash
(
venv
)
➜ cnocr git:
(
pytorch
)
✗ cnocr train
-h
(
venv
)
➜ cnocr git:
(
dev
)
✗ cnocr train
-h
Usage: cnocr train
[
OPTIONS]
Options:
-m
,
--model-name
[
densenet-s-fc|densenet-s-lstm|densenet-s-gru]
模型名称。默认值为 densenet-s-fc
-m
,
--model-name
TEXT 模型名称。默认值为 densenet_lite_136-fc
-i
,
--index-dir
TEXT 索引文件所在的文件夹,会读取文件夹中的 train.tsv 和 dev.tsv 文件
[
required]
--train-config-fp
TEXT 训练使用的json配置文件,参考
`
example/train_config.json
`
--train-config-fp
TEXT 训练使用的json配置文件,参考
`
docs/examples/train_config.json
`
[
required]
-r
,
--resume-from-checkpoint
TEXT
...
...
@@ -34,16 +34,31 @@ Options:
例如可以使用以下命令进行训练:
```
bash
cnocr train
-m
densenet
-s
-fc
--index-dir
data/test
--train-config-fp
docs/examples/train_config.json
cnocr train
-m
densenet
_lite_136
-fc
--index-dir
data/test
--train-config-fp
docs/examples/train_config.json
```
训练数据的格式见文件夹
[
data/test
](
https://github.com/breezedeus/cnocr/blob/master/data/test
)
中的
[
train.tsv
](
https://github.com/breezedeus/cnocr/blob/master/data/test/train.tsv
)
和
[
dev.tsv
](
https://github.com/breezedeus/cnocr/blob/master/data/test/dev.tsv
)
文件。
训练数据的格式见文件夹
[
data/test
](
https://github.com/breezedeus/cnocr/blob/master/data/test
)
中的
[
train.tsv
](
https://github.com/breezedeus/cnocr/blob/master/data/test/train.tsv
)
和
[
dev.tsv
](
https://github.com/breezedeus/cnocr/blob/master/data/test/dev.tsv
)
文件。
具体使用也可参考文件
[
Makefile
](
https://github.com/breezedeus/cnocr/blob/master/Makefile
)
。
# 模型精调
如果需要在已有模型的基础上精调模型,需要把训练配置中的学习率设置的较小,
`lr_scheduler`
的设置可参考以下:
```
json
"learning_rate"
:
3e-5
,
"lr_scheduler"
:
{
"name"
:
"cos_warmup"
,
"min_lr_mult_factor"
:
0.01
,
"warmup_epochs"
:
2
}
,
```
> 注:需要尽量避免过度精调!
docs/usage.md
浏览文件 @
19d653fe
...
...
@@ -2,9 +2,9 @@
## 模型文件自动下载
首次使用cnocr时,系统会
**自动下载**
zip格式的模型压缩文件,并存于
`~/.cnocr`
目录(Windows下默认路径为
`C:\Users\<username>\AppData\Roaming\cnocr`
)。
下载后的zip文件代码会自动对其解压,然后把解压后的模型相关目录放于
`~/.cnocr/2.
0
`
目录中。
下载后的zip文件代码会自动对其解压,然后把解压后的模型相关目录放于
`~/.cnocr/2.
1
`
目录中。
如果系统无法自动成功下载zip文件,则需要手动从
**[cnstd-cnocr-models](https://
github.com/breezedeus/cnstd-cnocr-models)**
下载此zip文件并把它放于
`~/.cnocr/2.0`
目录。如果Github下载太慢,也可以从
[
百度云盘
](
https://pan.baidu.com/s/1c68zjHfTVeqiSMXBEPYMrg
)
下载, 提取码为
` 9768
`
。
如果系统无法自动成功下载zip文件,则需要手动从
**[cnstd-cnocr-models](https://
huggingface.co/breezedeus/cnstd-cnocr-models/tree/main)**
下载此zip文件并把它放于
`~/.cnocr/2.1`
目录。如果下载太慢,也可以从
[
百度云盘
](
https://pan.baidu.com/s/1N6HoYearUzU0U8NTL3K35A
)
下载, 提取码为
` gcig
`
。
放置好zip文件后,后面的事代码就会自动执行了。
...
...
@@ -22,7 +22,7 @@
from
cnocr
import
CnOcr
ocr
=
CnOcr
()
res
=
ocr
.
ocr
(
'examples/multi-line_cn1.png'
)
res
=
ocr
.
ocr
(
'
docs/
examples/multi-line_cn1.png'
)
print
(
"Predicted Chars:"
,
res
)
```
...
...
@@ -32,7 +32,7 @@ from cnocr.utils import read_img
from
cnocr
import
CnOcr
ocr
=
CnOcr
()
img_fp
=
'examples/multi-line_cn1.png'
img_fp
=
'
docs/
examples/multi-line_cn1.png'
img
=
read_img
(
img_fp
)
res
=
ocr
.
ocr
(
img
)
print
(
"Predicted Chars:"
,
res
)
...
...
@@ -50,7 +50,7 @@ print("Predicted Chars:", res)
from
cnocr
import
CnOcr
ocr
=
CnOcr
()
res
=
ocr
.
ocr_for_single_line
(
'examples/helloworld.jpg'
)
res
=
ocr
.
ocr_for_single_line
(
'
docs/
examples/helloworld.jpg'
)
print
(
"Predicted Chars:"
,
res
)
```
...
...
@@ -61,7 +61,7 @@ from cnocr.utils import read_img
from
cnocr
import
CnOcr
ocr
=
CnOcr
()
img_fp
=
'examples/helloworld.jpg'
img_fp
=
'
docs/
examples/helloworld.jpg'
img
=
read_img
(
img_fp
)
res
=
ocr
.
ocr_for_single_line
(
img
)
print
(
"Predicted Chars:"
,
res
)
...
...
@@ -97,7 +97,7 @@ print("Predicted Chars:", res)
class
CnOcr
(
object
):
def
__init__
(
self
,
model_name
:
str
=
'densenet
-s
-fc'
model_name
:
str
=
'densenet
_lite_136
-fc'
*
,
cand_alphabet
:
Optional
[
Union
[
Collection
,
str
]]
=
None
,
context
:
str
=
'cpu'
,
# ['cpu', 'gpu', 'cuda']
...
...
@@ -109,7 +109,7 @@ class CnOcr(object):
其中的几个参数含义如下:
*
`model_name`
: 模型名称,即上面表格第一列中的值。默认为
`densenet
-s
-fc`
。
*
`model_name`
: 模型名称,即上面表格第一列中的值。默认为
`densenet
_lite_136
-fc`
。
*
`cand_alphabet`
: 待识别字符所在的候选集合。默认为
`None`
,表示不限定识别字符范围。取值可以是字符串,如
`"0123456789"`
,或者字符列表,如
`["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]`
。
...
...
@@ -121,7 +121,7 @@ class CnOcr(object):
*
`root`
: 模型文件所在的根目录。
*
Linux/Mac下默认值为
`~/.cnocr`
,表示模型文件所处文件夹类似
`~/.cnocr/2.
0/densenet-s
-fc`
。
*
Linux/Mac下默认值为
`~/.cnocr`
,表示模型文件所处文件夹类似
`~/.cnocr/2.
1/densenet_lite_136
-fc`
。
*
Windows下默认值为
`C:\Users\<username>\AppData\Roaming\cnocr`
。
...
...
@@ -175,7 +175,7 @@ print("Predicted Chars:", res)
上面使用的图片文件
[
examples/multi-line_cn1.png
](
./examples/multi-line_cn1.png
)
内容如下:
上面使用的图片文件
[
docs/
examples/multi-line_cn1.png
](
./examples/multi-line_cn1.png
)
内容如下:
![
examples/multi-line_cn1.png
](
./examples/multi-line_cn1.png
)
...
...
@@ -231,7 +231,7 @@ print("Predicted Chars:", res)
```
对图片文件
[
examples/rand_cn1.png
](
./examples/rand_cn1.png
)
:
对图片文件
[
docs/
examples/rand_cn1.png
](
./examples/rand_cn1.png
)
:
![
examples/rand_cn1.png
](
./examples/rand_cn1.png
)
...
...
@@ -278,4 +278,3 @@ print("Predicted Chars:", res)
更详细的使用方法,可参考
[
tests/test_cnocr.py
](
https://github.com/breezedeus/cnocr/blob/master/tests/test_cnocr.py
)
中提供的测试用例。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录