README.md 4.63 KB
Newer Older
liucong's avatar
liucong committed
1
# CRNN
shizhm's avatar
shizhm committed
2

liucong's avatar
liucong committed
3
## 论文
Your Name's avatar
Your Name committed
4

liucong's avatar
liucong committed
5
6
7
An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition

- https://arxiv.org/abs/1507.05717
Your Name's avatar
Your Name committed
8
9
10
11
12

## 模型结构

CRNN模型的主要结构包括基于CNN的图像特征提取模块以及基于双向LSTM的文字序列特征提取模块。

liucong's avatar
liucong committed
13
<img src="./Doc/Images/CRNN_01.jpg" style="zoom:100%;" align=middle>
liucong's avatar
liucong committed
14

liucong's avatar
liucong committed
15
16
17
18
## 算法原理

CRNN是文本识别领域的一种经典算法,该算法的主要思想是认为文本识别需要对序列进行预测,所以采用了预测序列常用的RNN网络。该算法首先通过CNN提取图片特征,然后采用RNN对序列进行预测,最终使用CTC方法得到最终结果。

liucong's avatar
liucong committed
19
20
<img src="./Doc/Images/CRNN_02.png" style="zoom:100%;" align=middle>

liucong's avatar
liucong committed
21
## 环境配置
liucong's avatar
liucong committed
22

liucong's avatar
liucong committed
23
### Docker(方法一)
Your Name's avatar
Your Name committed
24

liucong's avatar
liucong committed
25
拉取镜像:
Your Name's avatar
Your Name committed
26

liucong's avatar
liucong committed
27
```plaintext
liucong's avatar
liucong committed
28
docker pull image.sourcefind.cn:5000/dcu/admin/base/migraphx:4.3.0-ubuntu20.04-dtk24.04.1-py3.10
Your Name's avatar
Your Name committed
29
30
```

liucong's avatar
liucong committed
31
32
33
创建并启动容器,安装相关依赖:

```plaintext
liucong's avatar
liucong committed
34
docker run --shm-size 16g --network=host --name=crnn_migraphx --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v $PWD/crnn_migraphx:/home/crnn_migraphx -v /opt/hyhal:/opt/hyhal:ro -it <Your Image ID> /bin/bash
liucong's avatar
liucong committed
35
36
37
38
39

# 激活dtk
source /opt/dtk/env.sh
```

liucong's avatar
liucong committed
40
41
42
43
44
45
### Dockerfile(方法二)

```
cd ./docker
docker build --no-cache -t crnn_migraphx:2.0 .

liucong's avatar
liucong committed
46
docker run --shm-size 16g --network=host --name=crnn_migraphx --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v $PWD/crnn_migraphx:/home/crnn_migraphx -v /opt/hyhal:/opt/hyhal:ro -it <Your Image ID> /bin/bash
liucong's avatar
liucong committed
47
48
49

# 激活dtk
source /opt/dtk/env.sh
liucong's avatar
liucong committed
50
51
```

liucong's avatar
liucong committed
52
53
54
55
56
57
58
59
60
61
62
## 数据集

根据提供的样本数据,进行文本识别。

## 推理

### Python版本推理

下面介绍如何运行Python代码示例,Python示例的详细说明见Doc目录下的Tutorial_Python.md。

#### 设置环境变量
shizhm's avatar
shizhm committed
63
64
65
66
67

```
export PYTHONPATH=/opt/dtk/lib:$PYTHONPATH
```

liucong's avatar
liucong committed
68
#### 运行示例
liucong's avatar
liucong committed
69
70
71
72
73

CRNN工程的Python推理示例仅提供静态推理,可使用如下命令运行:

```
# 进入python示例目录
shizhm's avatar
shizhm committed
74
cd <path_to_crnn_migraphx>/Python
liucong's avatar
liucong committed
75
76

# 安装依赖
liucong's avatar
liucong committed
77
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
shizhm's avatar
shizhm committed
78

liucong's avatar
liucong committed
79
# 运行示例
liucong's avatar
liucong committed
80
81
82
python Crnn_infer_migraphx.py 
```

liucong's avatar
liucong committed
83
### C++版本推理
liucong's avatar
liucong committed
84

liucong's avatar
liucong committed
85
注意:当使用操作系统不一样时,CMakeList需要做相应的修改:
liucong's avatar
liucong committed
86
87
88
89
90
91
92
93
94

```
# ubuntu操作系统
${CMAKE_CURRENT_SOURCE_DIR}/depend/lib64/ 修改为 ${CMAKE_CURRENT_SOURCE_DIR}/depend/lib/

# centos操作系统
${CMAKE_CURRENT_SOURCE_DIR}/depend/lib/ 修改为 ${CMAKE_CURRENT_SOURCE_DIR}/depend/lib64/
```

shizhm's avatar
shizhm committed
95
96
97
下面介绍如何运行C++代码示例,C++示例的详细说明见Doc目录下的Tutorial_Cpp.md。


liucong's avatar
liucong committed
98
#### 构建工程
Your Name's avatar
Your Name committed
99
100

```
yaoht's avatar
yaoht committed
101
cd <path_to_crnn_migraphx>
Your Name's avatar
Your Name committed
102
rbuild build -d depend
Your Name's avatar
Your Name committed
103
104
```

liucong's avatar
liucong committed
105
#### 设置环境变量
Your Name's avatar
Your Name committed
106
107
108

将依赖库依赖加入环境变量LD_LIBRARY_PATH,在~/.bashrc中添加如下语句:

liucong's avatar
liucong committed
109
110
当操作系统是ubuntu系统时:

Your Name's avatar
Your Name committed
111
```
liucong's avatar
liucong committed
112
export LD_LIBRARY_PATH=<path_to_crnn_migraphx>/depend/lib/:$LD_LIBRARY_PATH
Your Name's avatar
Your Name committed
113
114
```

liucong's avatar
liucong committed
115
116
117
118
119
120
当操作系统是centos系统时:

```
export LD_LIBRARY_PATH=<path_to_crnn_migraphx>/depend/lib64/:$LD_LIBRARY_PATH
```

Your Name's avatar
Your Name committed
121
然后执行:
Your Name's avatar
Your Name committed
122
123

```
Your Name's avatar
Your Name committed
124
125
126
source ~/.bashrc
```

liucong's avatar
liucong committed
127
#### 运行示例
Your Name's avatar
Your Name committed
128

shizhm's avatar
shizhm committed
129
130
131
132
133
134
135
136
137
成功编译CRNN工程后,执行如下命令运行该示例:

```
# 进入crnn migraphx工程根目录
cd <path_to_crnn_migraphx> 

# 进入build目录
cd build/
```
Your Name's avatar
Your Name committed
138
139
140
141

1. 静态推理

```
liucong's avatar
liucong committed
142
./CRNN 0
Your Name's avatar
Your Name committed
143
144
```

liucong's avatar
liucong committed
145
146
147
148
149
150
151
152
153
154
2. 动态shape推理

```
# 执行动态推理示例程序
./CRNN 1
```

## result

### Python版本
Your Name's avatar
Your Name committed
155

liucong's avatar
liucong committed
156
输入样本图像得到文本识别的结果
Your Name's avatar
Your Name committed
157

liucong's avatar
liucong committed
158
<img src="./Resource/Images/text.jpg" style="zoom:100%;" align=middle>
Your Name's avatar
Your Name committed
159
160
161
162
163

```
a-----v--a-i-l-a-bb-l-e--- => available
```

liucong's avatar
liucong committed
164
### C++版本
Your Name's avatar
Your Name committed
165

liucong's avatar
liucong committed
166
静态推理:
Your Name's avatar
Your Name committed
167

liucong's avatar
liucong committed
168
169
170
171
172
173
输入样本图像得到文本识别的结果

<img src="./Resource/Images/CrnnDynamicPic/text0.jpg" style="zoom:100%;" align=middle>

```
a-----v--a-i-l-a-bb-l-e--- => available
Your Name's avatar
Your Name committed
174
175
```

liucong's avatar
liucong committed
176
177
178
179
180
181
182
183
184
185
186
动态推理:

可以连续对多张样本图像进行文本识别

<img src="./Resource/Images/CrnnDynamicPic/text0.jpg" style="zoom:100%;" align=middle>

<img src="./Resource/Images/CrnnDynamicPic/text1.jpg" style="zoom:80%;" align=middle>

<img src="./Resource/Images/CrnnDynamicPic/text2.jpg" style="zoom:60%;" align=middle>

<img src="./Resource/Images/CrnnDynamicPic/text3.jpg" style="zoom:80%;" align=middle>
Your Name's avatar
Your Name committed
187
188
189
190
191
192
193
194

```
available
migraphx
waiting
recognition
```

liucong's avatar
liucong committed
195
196
197
198
### 精度



liucong's avatar
liucong committed
199
200
201
202
203
204
205
206
## 应用场景

### 算法类别

`ocr`

### 热点应用行业

liucong's avatar
liucong committed
207
`金融`,`交通`,`教育`,`医疗`
liucong's avatar
liucong committed
208

shizhm's avatar
shizhm committed
209
## 源码仓库及问题反馈
Your Name's avatar
Your Name committed
210

chenzk's avatar
chenzk committed
211
https://developer.sourcefind.cn/codes/modelzoo/crnn_migraphx
Your Name's avatar
Your Name committed
212

liucong's avatar
liucong committed
213
## 参考资料
Your Name's avatar
Your Name committed
214

liucong's avatar
liucong committed
215
https://github.com/meijieru/crnn.pytorch