quickstart.md 8.5 KB
Newer Older
M
update  
MissPenguin 已提交
1
# PaddleOCR 快速开始
qq_25193841's avatar
qq_25193841 已提交
2

M
update  
MissPenguin 已提交
3
**说明:** 本文主要介绍PaddleOCR wheel包对PP-OCR系列模型的快速使用,如要体验文档分析相关功能,请参考[PP-Structure快速使用教程](../../ppstructure/docs/quickstart.md)
M
update  
MissPenguin 已提交
4

qq_25193841's avatar
qq_25193841 已提交
5 6 7
- [1. 安装](#1)
  - [1.1 安装PaddlePaddle](#11)
  - [1.2 安装PaddleOCR whl包](#12)
M
MissPenguin 已提交
8 9
- [2. 便捷使用](#2)
  - [2.1 命令行使用](#21)
E
Evezerest 已提交
10 11
      - [2.1.1 中英文模型](#211)
      - [2.1.2 多语言模型](#212)
M
MissPenguin 已提交
12
  - [2.2 Python脚本使用](#22)
E
Evezerest 已提交
13
      - [2.2.1 中英文与多语言使用](#221)
qq_25193841's avatar
qq_25193841 已提交
14
- [3.小结](#3)
qq_25193841's avatar
qq_25193841 已提交
15

W
WenmuZhou 已提交
16

E
Evezerest 已提交
17
<a name="1"></a>
qq_25193841's avatar
qq_25193841 已提交
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
## 1. 安装

<a name="11"></a>
### 1.1 安装PaddlePaddle

> 如果您没有基础的Python运行环境,请参考[运行环境准备](./environment.md)。

- 您的机器安装的是CUDA9或CUDA10,请运行以下命令安装

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

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

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

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

<a name="12"></a>
### 1.2 安装PaddleOCR whl包
qq_25193841's avatar
qq_25193841 已提交
41 42 43

```bash
pip install "paddleocr>=2.0.1" # 推荐使用2.0.1+版本
D
dyning 已提交
44 45
```

M
update  
MissPenguin 已提交
46
- 对于Windows环境用户:直接通过pip安装的shapely库可能出现`[winRrror 126] 找不到指定模块的问题`。建议从[这里](https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely)下载shapely安装包完成安装。
qq_25193841's avatar
qq_25193841 已提交
47 48


qq_25193841's avatar
qq_25193841 已提交
49
<a name="2"></a>
qq_25193841's avatar
qq_25193841 已提交
50
## 2. 便捷使用
qq_25193841's avatar
qq_25193841 已提交
51
<a name="21"></a>
qq_25193841's avatar
qq_25193841 已提交
52 53
### 2.1 命令行使用

qq_25193841's avatar
qq_25193841 已提交
54
PaddleOCR提供了一系列测试图片,点击[这里](https://paddleocr.bj.bcebos.com/dygraph_v2.1/ppocr_img.zip)下载并解压,然后在终端中切换到相应目录
D
dyning 已提交
55 56

```
qq_25193841's avatar
qq_25193841 已提交
57
cd /path/to/ppocr_img
D
dyning 已提交
58 59
```

M
update  
MissPenguin 已提交
60 61
如果不使用提供的测试图片,可以将下方`--image_dir`参数替换为相应的测试图片路径。

qq_25193841's avatar
qq_25193841 已提交
62
<a name="211"></a>
qq_25193841's avatar
qq_25193841 已提交
63 64
#### 2.1.1 中英文模型

65
* 检测+方向分类器+识别全流程:`--use_angle_cls true`设置使用方向分类器识别180度旋转文字,`--use_gpu false`设置不使用GPU
qq_25193841's avatar
qq_25193841 已提交
66 67

  ```bash
A
andyjpaddle 已提交
68
  paddleocr --image_dir ./imgs/11.jpg --use_angle_cls true --use_gpu false
qq_25193841's avatar
qq_25193841 已提交
69 70 71 72 73
  ```

  结果是一个list,每个item包含了文本框,文字和识别置信度

  ```bash
74
  [[[28.0, 37.0], [302.0, 39.0], [302.0, 72.0], [27.0, 70.0]], ('纯臻营养护发素', 0.9658738374710083)]
qq_25193841's avatar
qq_25193841 已提交
75 76 77
  ......
  ```

A
andyjpaddle 已提交
78 79 80 81 82
  此外,paddleocr也支持输入pdf文件,并且可以通过指定参数`page_num`来控制推理前面几页,默认为0,表示推理所有页。
  ```bash
  paddleocr --image_dir ./xxx.pdf --use_angle_cls true --use_gpu false --page_num 2
  ```

qq_25193841's avatar
qq_25193841 已提交
83 84 85 86 87 88 89 90 91
- 单独使用检测:设置`--rec``false`

  ```bash
  paddleocr --image_dir ./imgs/11.jpg --rec false
  ```

  结果是一个list,每个item只包含文本框

  ```bash
92 93
  [[27.0, 459.0], [136.0, 459.0], [136.0, 479.0], [27.0, 479.0]]
  [[28.0, 429.0], [372.0, 429.0], [372.0, 445.0], [28.0, 445.0]]
qq_25193841's avatar
qq_25193841 已提交
94 95 96 97 98 99
  ......
  ```

- 单独使用识别:设置`--det``false`

  ```bash
A
andyjpaddle 已提交
100
  paddleocr --image_dir ./imgs_words/ch/word_1.jpg --det false
qq_25193841's avatar
qq_25193841 已提交
101 102 103 104 105
  ```

  结果是一个list,每个item只包含识别结果和识别置信度

  ```bash
106
  ['韩国小馆', 0.994467]
qq_25193841's avatar
qq_25193841 已提交
107 108
  ```

A
andyjpaddle 已提交
109 110 111 112 113
**版本说明**
paddleocr默认使用PP-OCRv3模型(`--ocr_version PP-OCRv3`),如需使用其他版本可通过设置参数`--ocr_version`,具体版本说明如下:
|  版本名称  |  版本说明 |
|    ---    |   ---   |
| PP-OCRv3 | 支持中、英文检测和识别,方向分类器,支持多语种识别 |
A
andyjpaddle 已提交
114
| PP-OCRv2 | 支持中英文的检测和识别,方向分类器,多语言暂未更新 |
A
andyjpaddle 已提交
115
| PP-OCR   | 支持中、英文检测和识别,方向分类器,支持多语种识别 |
qq_25193841's avatar
qq_25193841 已提交
116

A
andyjpaddle 已提交
117 118 119
如需新增自己训练的模型,可以在[paddleocr](../../paddleocr.py)中增加模型链接和字段,重新编译即可。

更多whl包使用可参考[whl包文档](./whl.md)
qq_25193841's avatar
qq_25193841 已提交
120

qq_25193841's avatar
qq_25193841 已提交
121
<a name="212"></a>
122

qq_25193841's avatar
qq_25193841 已提交
123 124
#### 2.1.2 多语言模型

A
andyjpaddle 已提交
125
PaddleOCR目前支持80个语种,可以通过修改`--lang`参数进行切换,对于英文模型,指定`--lang=en`
qq_25193841's avatar
qq_25193841 已提交
126 127

``` bash
A
andyjpaddle 已提交
128
paddleocr --image_dir ./imgs_en/254.jpg --lang=en
D
dyning 已提交
129
```
qq_25193841's avatar
qq_25193841 已提交
130 131 132 133 134 135 136 137 138

<div align="center">
    <img src="../imgs_en/254.jpg" width="300" height="600">
    <img src="../imgs_results/multi_lang/img_02.jpg" width="600" height="600">
</div>

结果是一个list,每个item包含了文本框,文字和识别置信度

```text
139 140 141
[[[67.0, 51.0], [327.0, 46.0], [327.0, 74.0], [68.0, 80.0]], ('PHOCAPITAL', 0.9944712519645691)]
[[[72.0, 92.0], [453.0, 84.0], [454.0, 114.0], [73.0, 122.0]], ('107 State Street', 0.9744491577148438)]
[[[69.0, 135.0], [501.0, 125.0], [501.0, 156.0], [70.0, 165.0]], ('Montpelier Vermont', 0.9357033967971802)]
qq_25193841's avatar
qq_25193841 已提交
142
......
D
dyning 已提交
143 144
```

qq_25193841's avatar
qq_25193841 已提交
145
常用的多语言简写包括
D
dyning 已提交
146

qq_25193841's avatar
qq_25193841 已提交
147 148 149 150 151
| 语种     | 缩写        |      | 语种     | 缩写   |      | 语种     | 缩写   |
| -------- | ----------- | ---- | -------- | ------ | ---- | -------- | ------ |
| 中文     | ch          |      | 法文     | fr     |      | 日文     | japan  |
| 英文     | en          |      | 德文     | german |      | 韩文     | korean |
| 繁体中文 | chinese_cht |      | 意大利文 | it     |      | 俄罗斯文 | ru     |
D
dyning 已提交
152

qq_25193841's avatar
qq_25193841 已提交
153
全部语种及其对应的缩写列表可查看[多语言模型教程](./multi_languages.md)
G
grasswolfs 已提交
154

qq_25193841's avatar
qq_25193841 已提交
155

qq_25193841's avatar
qq_25193841 已提交
156
<a name="22"></a>
qq_25193841's avatar
qq_25193841 已提交
157
### 2.2 Python脚本使用
qq_25193841's avatar
qq_25193841 已提交
158
<a name="221"></a>
qq_25193841's avatar
qq_25193841 已提交
159 160
#### 2.2.1 中英文与多语言使用

qq_25193841's avatar
qq_25193841 已提交
161
通过Python脚本使用PaddleOCR whl包,whl包会自动下载ppocr轻量级模型作为默认模型。
qq_25193841's avatar
qq_25193841 已提交
162 163 164 165 166 167 168 169 170 171 172

* 检测+方向分类器+识别全流程

```python
from paddleocr import PaddleOCR, draw_ocr

# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换
# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
ocr = PaddleOCR(use_angle_cls=True, lang="ch")  # need to run only once to download and load model into memory
img_path = './imgs/11.jpg'
result = ocr.ocr(img_path, cls=True)
A
andyjpaddle 已提交
173 174 175 176
for idx in range(len(result)):
    res = result[idx]
    for line in res:
        print(line)
qq_25193841's avatar
qq_25193841 已提交
177 178 179

# 显示结果
from PIL import Image
A
andyjpaddle 已提交
180
result = result[0]
qq_25193841's avatar
qq_25193841 已提交
181 182 183 184 185 186 187 188 189 190
image = Image.open(img_path).convert('RGB')
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, txts, scores, font_path='./fonts/simfang.ttf')
im_show = Image.fromarray(im_show)
im_show.save('result.jpg')
```

结果是一个list,每个item包含了文本框,文字和识别置信度
W
WenmuZhou 已提交
191 192

```bash
193
[[[28.0, 37.0], [302.0, 39.0], [302.0, 72.0], [27.0, 70.0]], ('纯臻营养护发素', 0.9658738374710083)]
qq_25193841's avatar
qq_25193841 已提交
194
......
D
dyning 已提交
195 196
```

qq_25193841's avatar
qq_25193841 已提交
197 198 199 200 201
结果可视化

<div align="center">
    <img src="../imgs_results/whl/11_det_rec.jpg" width="800">
</div>
G
grasswolfs 已提交
202

qq_25193841's avatar
qq_25193841 已提交
203 204 205

<a name="3"></a>

A
andyjpaddle 已提交
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 246 247 248 249
如果输入是PDF文件,那么可以参考下面代码进行可视化

```python
from paddleocr import PaddleOCR, draw_ocr

# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换
# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
ocr = PaddleOCR(use_angle_cls=True, lang="ch" page_num=2)  # need to run only once to download and load model into memory
img_path = './xxx.pdf'
result = ocr.ocr(img_path, cls=True)
for idx in range(len(result)):
    res = result[idx]
    for line in res:
        print(line)

# 显示结果
import fitz
from PIL import Image
import cv2
import numpy as np
imgs = []
with fitz.open(img_path) as pdf:
    for pg in range(0, pdf.pageCount):
        page = pdf[pg]
        mat = fitz.Matrix(2, 2)
        pm = page.getPixmap(matrix=mat, alpha=False)
        # if width or height > 2000 pixels, don't enlarge the image
        if pm.width > 2000 or pm.height > 2000:
            pm = page.getPixmap(matrix=fitz.Matrix(1, 1), alpha=False)

        img = Image.frombytes("RGB", [pm.width, pm.height], pm.samples)
        img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
        imgs.append(img)
for idx in range(len(result)):
    res = result[idx]
    image = imgs[idx]
    boxes = [line[0] for line in res]
    txts = [line[1][0] for line in res]
    scores = [line[1][1] for line in res]
    im_show = draw_ocr(image, boxes, txts, scores, font_path='doc/fonts/simfang.ttf')
    im_show = Image.fromarray(im_show)
    im_show.save('result_page_{}.jpg'.format(idx))
```

qq_25193841's avatar
qq_25193841 已提交
250 251 252 253
## 3. 小结

通过本节内容,相信您已经熟练掌握PaddleOCR whl包的使用方法并获得了初步效果。

M
update  
MissPenguin 已提交
254
PaddleOCR是一套丰富领先实用的OCR工具库,打通数据、模型训练、压缩和推理部署全流程,您可以参考[文档教程](../../README_ch.md#文档教程),正式开启PaddleOCR的应用之旅。