README_ch.md 10.7 KB
Newer Older
grasswolfs's avatar
grasswolfs committed
1
2
[English](README.md) | 简体中文

grasswolfs's avatar
grasswolfs committed
3
4
# PPOCRLabel

Leif's avatar
Leif committed
5
PPOCRLabel是一款适用于OCR领域的半自动化图形标注工具,内置PPOCR模型对数据自动标注和重新识别。使用python3和pyqt5编写,支持矩形框标注和四点标注模式,导出格式可直接用于PPOCR检测和识别模型的训练。
grasswolfs's avatar
grasswolfs committed
6
7
8

<img src="./data/gif/steps.gif" width="100%"/>

9
10
#### 近期更新

Leif's avatar
Leif committed
11
12
13
- 2021.8.11:
  - 新增功能:打开数据所在文件夹、图像旋转(注意:旋转前的图片上不能存在标记框)(by [Wei-JL](https://github.com/Wei-JL)
  - 新增快捷键说明(帮助-快捷键)、修复批处理下的方向快捷键移动功能(by [d2623587501](https://github.com/d2623587501)
14
- 2021.2.5:新增批处理与撤销功能(by [Evezerest](https://github.com/Evezerest))
Leif's avatar
Leif committed
15
16
  - **批处理功能**:按住Ctrl键选择标记框后可批量移动、复制、删除、重新识别。
  - **撤销功能**:在绘制四点标注框过程中或对框进行编辑操作后,按下Ctrl+Z可撤销上一部操作。
17
  - 修复图像旋转和尺寸问题、优化编辑标记框过程(by [ninetailskim](https://github.com/ninetailskim)[edencfc](https://github.com/edencfc)
18
19
20
21
22
- 2021.1.11:优化标注体验(by [edencfc](https://github.com/edencfc)):
  - 用户可在“视图 - 弹出标记输入框”选择在画完检测框后标记输入框是否弹出。
  - 识别结果与检测框同步滚动。
  - 识别结果更改为单击修改。(如果无法修改,请切换为系统自带输入法,或再次切回原输入法)
- 2020.12.18: 支持对单个标记框进行重新识别(by [ninetailskim](https://github.com/ninetailskim)),完善快捷键。
Leif's avatar
Leif committed
23
24
25
26
27

#### 尽请期待

- 锁定框模式:针对同一场景数据,被锁定的检测框的大小与位置能在不同图片之间传递。

28
如果您对以上内容感兴趣或对完善工具有不一样的想法,欢迎加入我们的SIG队伍与我们共同开发。可以在[此处](https://github.com/PaddlePaddle/PaddleOCR/issues/1728)完成问卷和前置任务,经过我们确认相关内容后即可正式加入,享受SIG福利,共同为OCR开源事业贡献(特别说明:针对PPOCRLabel的改进也属于PaddleOCR前置任务)
Leif's avatar
Leif committed
29

30

grasswolfs's avatar
grasswolfs committed
31
32
## 安装

Leif's avatar
Leif committed
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
### 1. 环境搭建
#### 安装PaddlePaddle

```bash
pip3 install --upgrade pip

如果您的机器安装的是CUDA9或CUDA10,请运行以下命令安装
python3 -m pip install paddlepaddle-gpu==2.0.0 -i https://mirror.baidu.com/pypi/simple

如果您的机器是CPU,请运行以下命令安装

python3 -m pip install paddlepaddle==2.0.0 -i https://mirror.baidu.com/pypi/simple
```

更多的版本需求,请参照[安装文档](https://www.paddlepaddle.org.cn/install/quick)中的说明进行操作。

#### **安装PaddleOCR**

```bash
【推荐】git clone https://github.com/PaddlePaddle/PaddleOCR

如果因为网络问题无法pull成功,也可选择使用码云上的托管:

git clone https://gitee.com/paddlepaddle/PaddleOCR

注:码云托管代码可能无法实时同步本github项目更新,存在3~5天延时,请优先使用推荐方式。
```

#### 安装第三方库

```bash
cd PaddleOCR
pip3 install -r requirements.txt
```

注意,windows环境下,建议从[这里](https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely)下载shapely安装包完成安装, 直接通过pip安装的shapely库可能出现`[winRrror 126] 找不到指定模块的问题`
grasswolfs's avatar
grasswolfs committed
69
70

### 2. 安装PPOCRLabel
Leif's avatar
Leif committed
71

Leif's avatar
Leif committed
72
#### Windows
grasswolfs's avatar
grasswolfs committed
73

Leif's avatar
Leif committed
74
```bash
grasswolfs's avatar
grasswolfs committed
75
76
77
78
79
80
81
pip install pyqt5
cd ./PPOCRLabel # 将目录切换到PPOCRLabel文件夹下
python PPOCRLabel.py --lang ch
```

#### Ubuntu Linux

Leif's avatar
Leif committed
82
```bash
grasswolfs's avatar
grasswolfs committed
83
84
85
86
87
88
pip3 install pyqt5
pip3 install trash-cli
cd ./PPOCRLabel # 将目录切换到PPOCRLabel文件夹下
python3 PPOCRLabel.py --lang ch
```

Leif's avatar
Leif committed
89
90
#### MacOS
```bash
grasswolfs's avatar
grasswolfs committed
91
92
pip3 install pyqt5
pip3 uninstall opencv-python # 由于mac版本的opencv与pyqt有冲突,需先手动卸载opencv
WenmuZhou's avatar
WenmuZhou committed
93
pip3 install opencv-contrib-python-headless==4.2.0.32 # 安装headless版本的open-cv
grasswolfs's avatar
grasswolfs committed
94
95
96
97
cd ./PPOCRLabel # 将目录切换到PPOCRLabel文件夹下
python3 PPOCRLabel.py --lang ch
```

Leif's avatar
Leif committed
98
99


grasswolfs's avatar
grasswolfs committed
100
101
102
103
104
105
106
## 使用

### 操作步骤

1. 安装与运行:使用上述命令安装与运行程序。
2. 打开文件夹:在菜单栏点击 “文件” - "打开目录" 选择待标记图片的文件夹<sup>[1]</sup>.
3. 自动标注:点击 ”自动标注“,使用PPOCR超轻量模型对图片文件名前图片状态<sup>[2]</sup>为 “X” 的图片进行自动标注。
Leif's avatar
Leif committed
107
4. 手动标注:点击 “矩形标注”(推荐直接在英文模式下点击键盘中的 “W”),用户可对当前图片中模型未检出的部分进行手动绘制标记框。点击键盘Q,则使用四点标注模式(或点击“编辑” - “四点标注”),用户依次点击4个点后,双击左键表示标注完成。
grasswolfs's avatar
grasswolfs committed
108
109
110
5. 标记框绘制完成后,用户点击 “确认”,检测框会先被预分配一个 “待识别” 标签。
6. 重新识别:将图片中的所有检测画绘制/调整完成后,点击 “重新识别”,PPOCR模型会对当前图片中的**所有检测框**重新识别<sup>[3]</sup>
7. 内容更改:双击识别结果,对不准确的识别结果进行手动更改。
Leif's avatar
Leif committed
111
8. **确认标记:点击 “确认”,图片状态切换为 “√”,跳转至下一张。**
grasswolfs's avatar
grasswolfs committed
112
9. 删除:点击 “删除图像”,图片将会被删除至回收站。
Leif's avatar
Leif committed
113
10. 导出结果:用户可以通过菜单中“文件-导出标记结果”手动导出,同时也可以点击“文件 - 自动导出标记结果”开启自动导出。手动确认过的标记将会被存放在所打开图片文件夹下的*Label.txt*中。在菜单栏点击 “文件” - "导出识别结果"后,会将此类图片的识别训练数据保存在*crop_img*文件夹下,识别标签保存在*rec_gt.txt*<sup>[4]</sup>
grasswolfs's avatar
grasswolfs committed
114
115
116
117
118
119
120
121
122
123
124
125
126

### 注意

[1] PPOCRLabel以文件夹为基本标记单位,打开待标记的图片文件夹后,不会在窗口栏中显示图片,而是在点击 "选择文件夹" 之后直接将文件夹下的图片导入到程序中。

[2] 图片状态表示本张图片用户是否手动保存过,未手动保存过即为 “X”,手动保存过为 “√”。点击 “自动标注”按钮后,PPOCRLabel不会对状态为 “√” 的图片重新标注。

[3] 点击“重新识别”后,模型会对图片中的识别结果进行覆盖。因此如果在此之前手动更改过识别结果,有可能在重新识别后产生变动。

[4] PPOCRLabel产生的文件放置于标记图片文件夹下,包括一下几种,请勿手动更改其中内容,否则会引起程序出现异常。

|    文件名     |                             说明                             |
| :-----------: | :----------------------------------------------------------: |
Leif's avatar
Leif committed
127
|   Label.txt   | 检测标签,可直接用于PPOCR检测模型训练。用户每确认5张检测结果后,程序会进行自动写入。当用户关闭应用程序或切换文件路径后同样会进行写入。 |
grasswolfs's avatar
grasswolfs committed
128
129
| fileState.txt | 图片状态标记文件,保存当前文件夹下已经被用户手动确认过的图片名称。 |
|  Cache.cach   |              缓存文件,保存模型自动识别的结果。              |
Leif's avatar
Leif committed
130
|  rec_gt.txt   | 识别标签。可直接用于PPOCR识别模型训练。需用户手动点击菜单栏“文件” - "导出识别结果"后产生。 |
grasswolfs's avatar
grasswolfs committed
131
132
133
|   crop_img    |   识别数据。按照检测框切割后的图片。与rec_gt.txt同时产生。   |

## 说明
134
135
136
137
138
139
140
141
142
143

### 快捷键

| 快捷键           | 说明                         |
| ---------------- | ---------------------------- |
| Ctrl + shift + R | 对当前图片的所有标记重新识别 |
| W                | 新建矩形框                   |
| Q                | 新建四点框                   |
| Ctrl + E         | 编辑所选框标签               |
| Ctrl + R         | 重新识别所选标记             |
144
145
| Ctrl + C         | 复制并粘贴选中的标记框       |
| Ctrl + 鼠标左键  | 多选标记框                   |
146
147
148
149
150
151
152
153
154
| Backspace        | 删除所选框                   |
| Ctrl + V         | 确认本张图片标记             |
| Ctrl + Shift + d | 删除本张图片                 |
| D                | 下一张图片                   |
| A                | 上一张图片                   |
| Ctrl++           | 缩小                         |
| Ctrl--           | 放大                         |
| ↑→↓←             | 移动标记框                   |

grasswolfs's avatar
grasswolfs committed
155
156
157
158
159
160
161
162
### 内置模型

 - 默认模型:PPOCRLabel默认使用PaddleOCR中的中英文超轻量OCR模型,支持中英文与数字识别,多种语言检测。

 - 模型语言切换:用户可通过菜单栏中 "PaddleOCR" - "选择模型" 切换内置模型语言,目前支持的语言包括法文、德文、韩文、日文。具体模型下载链接可参考[PaddleOCR模型列表](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/models_list.md).

 - 自定义模型:用户可根据[自定义模型代码使用](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/whl.md#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%A8%A1%E5%9E%8B),通过修改PPOCRLabel.py中针对[PaddleOCR类的实例化](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/PPOCRLabel/PPOCRLabel.py#L110)替换成自己训练的模型。

Leif's avatar
Leif committed
163
### 导出标记结果
Leif's avatar
Leif committed
164

Leif's avatar
Leif committed
165
PPOCRLabel支持三种导出方式:
Leif's avatar
Leif committed
166

Leif's avatar
Leif committed
167
168
169
- 自动导出:点击“文件 - 自动导出标记结果”后,用户每确认过一张图片,程序自动将标记结果写入Label.txt中。若未开启此选项,则检测到用户手动确认过5张图片后进行自动导出。
- 手动导出:点击“文件 - 导出标记结果”手动导出标记。
- 关闭应用程序导出
Leif's avatar
Leif committed
170

grasswolfs's avatar
grasswolfs committed
171
172
173
174
### 导出部分识别结果

针对部分难以识别的数据,通过在识别结果的复选框中**取消勾选**相应的标记,其识别结果不会被导出。

Leif's avatar
Leif committed
175
*注意:识别结果中的复选框状态仍需用户手动点击确认后才能保留*
grasswolfs's avatar
grasswolfs committed
176
177
178

### 错误提示
- 如果同时使用whl包安装了paddleocr,其优先级大于通过paddleocr.py调用PaddleOCR类,whl包未更新时会导致程序异常。
WenmuZhou's avatar
WenmuZhou committed
179

grasswolfs's avatar
grasswolfs committed
180
- PPOCRLabel**不支持对中文文件名**的图片进行自动标注。
Leif's avatar
Leif committed
181

Leif's avatar
Leif committed
182
- 针对Linux用户:如果您在打开软件过程中出现**objc[XXXXX]**开头的错误,证明您的opencv版本太高,建议安装4.2版本:
grasswolfs's avatar
grasswolfs committed
183
184
185
    ```
    pip install opencv-python==4.2.0.32
    ```
WenmuZhou's avatar
WenmuZhou committed
186

Leif's avatar
Leif committed
187
- 如果出现 ```Missing string id``` 开头的错误,需要重新编译资源:
grasswolfs's avatar
grasswolfs committed
188
189
190
    ```
    pyrcc5 -o libs/resources.py resources.qrc
    ```
WenmuZhou's avatar
WenmuZhou committed
191
192

- 如果出现``` module 'cv2' has no attribute 'INTER_NEAREST'```错误,需要首先删除所有opencv相关包,然后重新安装4.2.0.32版本的headless opencv
Leif's avatar
Leif committed
193
    ```
WenmuZhou's avatar
WenmuZhou committed
194
    pip install opencv-contrib-python-headless==4.2.0.32
Leif's avatar
Leif committed
195
    ```
Leif's avatar
Leif committed
196

grasswolfs's avatar
grasswolfs committed
197
198
199
### 参考资料

1.[Tzutalin. LabelImg. Git code (2015)](https://github.com/tzutalin/labelImg)