paddleocr package使用说明

快速上手

安装whl包

pip安装

  1. pip install "paddleocr>=2.0.1" # 推荐使用2.0.1+版本

本地构建并安装

  1. python3 setup.py bdist_wheel
  2. pip3 install dist/paddleocr-x.x.x-py3-none-any.whl # x.x.x是paddleocr的版本号

1. 代码使用

  • 检测+分类+识别全流程
  1. from paddleocr import PaddleOCR, draw_ocr
  2. # Paddleocr目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换
  3. # 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
  4. ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory
  5. img_path = 'PaddleOCR/doc/imgs/11.jpg'
  6. result = ocr.ocr(img_path, cls=True)
  7. for line in result:
  8. print(line)
  9. # 显示结果
  10. from PIL import Image
  11. image = Image.open(img_path).convert('RGB')
  12. boxes = [line[0] for line in result]
  13. txts = [line[1][0] for line in result]
  14. scores = [line[1][1] for line in result]
  15. im_show = draw_ocr(image, boxes, txts, scores, font_path='/path/to/PaddleOCR/doc/simfang.ttf')
  16. im_show = Image.fromarray(im_show)
  17. im_show.save('result.jpg')

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

  1. [[[24.0, 36.0], [304.0, 34.0], [304.0, 72.0], [24.0, 74.0]], ['纯臻营养护发素', 0.964739]]
  2. [[[24.0, 80.0], [172.0, 80.0], [172.0, 104.0], [24.0, 104.0]], ['产品信息/参数', 0.98069626]]
  3. [[[24.0, 109.0], [333.0, 109.0], [333.0, 136.0], [24.0, 136.0]], ['(45元/每公斤,100公斤起订)', 0.9676722]]
  4. ......

结果可视化

基于pip安装whl包快速推理 - 图1

  • 检测+识别
  1. from paddleocr import PaddleOCR, draw_ocr
  2. ocr = PaddleOCR() # need to run only once to download and load model into memory
  3. img_path = 'PaddleOCR/doc/imgs/11.jpg'
  4. result = ocr.ocr(img_path)
  5. for line in result:
  6. print(line)
  7. # 显示结果
  8. from PIL import Image
  9. image = Image.open(img_path).convert('RGB')
  10. boxes = [line[0] for line in result]
  11. txts = [line[1][0] for line in result]
  12. scores = [line[1][1] for line in result]
  13. im_show = draw_ocr(image, boxes, txts, scores, font_path='/path/to/PaddleOCR/doc/simfang.ttf')
  14. im_show = Image.fromarray(im_show)
  15. im_show.save('result.jpg')

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

  1. [[[24.0, 36.0], [304.0, 34.0], [304.0, 72.0], [24.0, 74.0]], ['纯臻营养护发素', 0.964739]]
  2. [[[24.0, 80.0], [172.0, 80.0], [172.0, 104.0], [24.0, 104.0]], ['产品信息/参数', 0.98069626]]
  3. [[[24.0, 109.0], [333.0, 109.0], [333.0, 136.0], [24.0, 136.0]], ['(45元/每公斤,100公斤起订)', 0.9676722]]
  4. ......

结果可视化

基于pip安装whl包快速推理 - 图2

  • 分类+识别
  1. from paddleocr import PaddleOCR
  2. ocr = PaddleOCR(use_angle_cls=True) # need to run only once to download and load model into memory
  3. img_path = 'PaddleOCR/doc/imgs_words/ch/word_1.jpg'
  4. result = ocr.ocr(img_path, det=False, cls=True)
  5. for line in result:
  6. print(line)

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

  1. ['韩国小馆', 0.9907421]
  • 单独执行检测
  1. from paddleocr import PaddleOCR, draw_ocr
  2. ocr = PaddleOCR() # need to run only once to download and load model into memory
  3. img_path = 'PaddleOCR/doc/imgs/11.jpg'
  4. result = ocr.ocr(img_path, rec=False)
  5. for line in result:
  6. print(line)
  7. # 显示结果
  8. from PIL import Image
  9. image = Image.open(img_path).convert('RGB')
  10. im_show = draw_ocr(image, result, txts=None, scores=None, font_path='/path/to/PaddleOCR/doc/simfang.ttf')
  11. im_show = Image.fromarray(im_show)
  12. im_show.save('result.jpg')

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

  1. [[26.0, 457.0], [137.0, 457.0], [137.0, 477.0], [26.0, 477.0]]
  2. [[25.0, 425.0], [372.0, 425.0], [372.0, 448.0], [25.0, 448.0]]
  3. [[128.0, 397.0], [273.0, 397.0], [273.0, 414.0], [128.0, 414.0]]
  4. ......

结果可视化

基于pip安装whl包快速推理 - 图3

  • 单独执行识别
  1. from paddleocr import PaddleOCR
  2. ocr = PaddleOCR() # need to run only once to download and load model into memory
  3. img_path = 'PaddleOCR/doc/imgs_words/ch/word_1.jpg'
  4. result = ocr.ocr(img_path, det=False)
  5. for line in result:
  6. print(line)

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

  1. ['韩国小馆', 0.9907421]
  • 单独执行分类
  1. from paddleocr import PaddleOCR
  2. ocr = PaddleOCR(use_angle_cls=True) # need to run only once to download and load model into memory
  3. img_path = 'PaddleOCR/doc/imgs_words/ch/word_1.jpg'
  4. result = ocr.ocr(img_path, det=False, rec=False, cls=True)
  5. for line in result:
  6. print(line)

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

  1. ['0', 0.9999924]

通过命令行使用

查看帮助信息

  1. paddleocr -h
  • 检测+分类+识别全流程
  1. paddleocr --image_dir PaddleOCR/doc/imgs/11.jpg --use_angle_cls true

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

  1. [[[24.0, 36.0], [304.0, 34.0], [304.0, 72.0], [24.0, 74.0]], ['纯臻营养护发素', 0.964739]]
  2. [[[24.0, 80.0], [172.0, 80.0], [172.0, 104.0], [24.0, 104.0]], ['产品信息/参数', 0.98069626]]
  3. [[[24.0, 109.0], [333.0, 109.0], [333.0, 136.0], [24.0, 136.0]], ['(45元/每公斤,100公斤起订)', 0.9676722]]
  4. ......
  • 检测+识别
  1. paddleocr --image_dir PaddleOCR/doc/imgs/11.jpg

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

  1. [[[24.0, 36.0], [304.0, 34.0], [304.0, 72.0], [24.0, 74.0]], ['纯臻营养护发素', 0.964739]]
  2. [[[24.0, 80.0], [172.0, 80.0], [172.0, 104.0], [24.0, 104.0]], ['产品信息/参数', 0.98069626]]
  3. [[[24.0, 109.0], [333.0, 109.0], [333.0, 136.0], [24.0, 136.0]], ['(45元/每公斤,100公斤起订)', 0.9676722]]
  4. ......
  • 分类+识别
  1. paddleocr --image_dir PaddleOCR/doc/imgs_words/ch/word_1.jpg --use_angle_cls true --det false

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

  1. ['韩国小馆', 0.9907421]
  • 单独执行检测
  1. paddleocr --image_dir PaddleOCR/doc/imgs/11.jpg --rec false

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

  1. [[26.0, 457.0], [137.0, 457.0], [137.0, 477.0], [26.0, 477.0]]
  2. [[25.0, 425.0], [372.0, 425.0], [372.0, 448.0], [25.0, 448.0]]
  3. [[128.0, 397.0], [273.0, 397.0], [273.0, 414.0], [128.0, 414.0]]
  4. ......
  • 单独执行识别
  1. paddleocr --image_dir PaddleOCR/doc/imgs_words/ch/word_1.jpg --det false

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

  1. ['韩国小馆', 0.9907421]
  • 单独执行分类
  1. paddleocr --image_dir PaddleOCR/doc/imgs_words/ch/word_1.jpg --use_angle_cls true --det false --rec false

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

  1. ['0', 0.9999924]

自定义模型

当内置模型无法满足需求时,需要使用到自己训练的模型。 首先,参照inference.md 第一节转换将检测、分类和识别模型转换为inference模型,然后按照如下方式使用

代码使用

  1. from paddleocr import PaddleOCR, draw_ocr
  2. # 模型路径下必须含有model和params文件
  3. ocr = PaddleOCR(det_model_dir='{your_det_model_dir}', rec_model_dir='{your_rec_model_dir}', rec_char_dict_path='{your_rec_char_dict_path}', cls_model_dir='{your_cls_model_dir}', use_angle_cls=True)
  4. img_path = 'PaddleOCR/doc/imgs/11.jpg'
  5. result = ocr.ocr(img_path, cls=True)
  6. for line in result:
  7. print(line)
  8. # 显示结果
  9. from PIL import Image
  10. image = Image.open(img_path).convert('RGB')
  11. boxes = [line[0] for line in result]
  12. txts = [line[1][0] for line in result]
  13. scores = [line[1][1] for line in result]
  14. im_show = draw_ocr(image, boxes, txts, scores, font_path='/path/to/PaddleOCR/doc/simfang.ttf')
  15. im_show = Image.fromarray(im_show)
  16. im_show.save('result.jpg')

通过命令行使用

  1. paddleocr --image_dir PaddleOCR/doc/imgs/11.jpg --det_model_dir {your_det_model_dir} --rec_model_dir {your_rec_model_dir} --rec_char_dict_path {your_rec_char_dict_path} --cls_model_dir {your_cls_model_dir} --use_angle_cls true

使用网络图片或者numpy数组作为输入

  1. 网络图片

代码使用

  1. from paddleocr import PaddleOCR, draw_ocr
  2. # Paddleocr目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换
  3. # 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
  4. ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory
  5. img_path = 'http://n.sinaimg.cn/ent/transform/w630h933/20171222/o111-fypvuqf1838418.jpg'
  6. result = ocr.ocr(img_path, cls=True)
  7. for line in result:
  8. print(line)
  9. # 显示结果
  10. from PIL import Image
  11. image = Image.open(img_path).convert('RGB')
  12. boxes = [line[0] for line in result]
  13. txts = [line[1][0] for line in result]
  14. scores = [line[1][1] for line in result]
  15. im_show = draw_ocr(image, boxes, txts, scores, font_path='/path/to/PaddleOCR/doc/simfang.ttf')
  16. im_show = Image.fromarray(im_show)
  17. im_show.save('result.jpg')

命令行模式

  1. paddleocr --image_dir http://n.sinaimg.cn/ent/transform/w630h933/20171222/o111-fypvuqf1838418.jpg --use_angle_cls=true
  1. numpy数组 仅通过代码使用时支持numpy数组作为输入
  1. from paddleocr import PaddleOCR, draw_ocr
  2. # Paddleocr目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换
  3. # 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
  4. ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory
  5. img_path = 'PaddleOCR/doc/imgs/11.jpg'
  6. img = cv2.imread(img_path)
  7. # img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY), 如果你自己训练的模型支持灰度图,可以将这句话的注释取消
  8. result = ocr.ocr(img_path, cls=True)
  9. for line in result:
  10. print(line)
  11. # 显示结果
  12. from PIL import Image
  13. image = Image.open(img_path).convert('RGB')
  14. boxes = [line[0] for line in result]
  15. txts = [line[1][0] for line in result]
  16. scores = [line[1][1] for line in result]
  17. im_show = draw_ocr(image, boxes, txts, scores, font_path='/path/to/PaddleOCR/doc/simfang.ttf')
  18. im_show = Image.fromarray(im_show)
  19. im_show.save('result.jpg')

参数说明

字段说明默认值
use_gpu是否使用GPUTRUE
gpu_mem初始化占用的GPU内存大小8000M
image_dir通过命令行调用时执行预测的图片或文件夹路径
det_algorithm使用的检测算法类型DB
det_model_dir检测模型所在文件夹。传参方式有两种,1. None: 自动下载内置模型到 ~/.paddleocr/det;2.自己转换好的inference模型路径,模型路径下必须包含model和params文件None
det_max_side_len检测算法前向时图片长边的最大尺寸,当长边超出这个值时会将长边resize到这个大小,短边等比例缩放960
det_db_threshDB模型输出预测图的二值化阈值0.3
det_db_box_threshDB模型输出框的阈值,低于此值的预测框会被丢弃0.5
det_db_unclip_ratioDB模型输出框扩大的比例2
det_east_score_threshEAST模型输出预测图的二值化阈值0.8
det_east_cover_threshEAST模型输出框的阈值,低于此值的预测框会被丢弃0.1
det_east_nms_threshEAST模型输出框NMS的阈值0.2
rec_algorithm使用的识别算法类型CRNN
rec_model_dir识别模型所在文件夹。传参方式有两种,1. None: 自动下载内置模型到 ~/.paddleocr/rec;2.自己转换好的inference模型路径,模型路径下必须包含model和params文件None
rec_image_shape识别算法的输入图片尺寸“3,32,320”
rec_char_type识别算法的字符类型,中英文(ch)、英文(en)、法语(french)、德语(german)、韩语(korean)、日语(japan)ch
rec_batch_num进行识别时,同时前向的图片数30
max_text_length识别算法能识别的最大文字长度25
rec_char_dict_path识别模型字典路径,当rec_model_dir使用方式2传参时需要修改为自己的字典路径./ppocr/utils/ppocr_keys_v1.txt
use_space_char是否识别空格TRUE
drop_score对输出按照分数(来自于识别模型)进行过滤,低于此分数的不返回0.5
use_angle_cls是否加载分类模型FALSE
cls_model_dir分类模型所在文件夹。传参方式有两种,1. None: 自动下载内置模型到 ~/.paddleocr/cls;2.自己转换好的inference模型路径,模型路径下必须包含model和params文件None
cls_image_shape分类算法的输入图片尺寸“3, 48, 192”
label_list分类算法的标签列表[‘0’, ‘180’]
cls_batch_num进行分类时,同时前向的图片数30
enable_mkldnn是否启用mkldnnFALSE
use_zero_copy_run是否通过zero_copy_run的方式进行前向FALSE
lang模型语言类型,目前支持 目前支持中英文(ch)、英文(en)、法语(french)、德语(german)、韩语(korean)、日语(japan)ch
det前向时使用启动检测TRUE
rec前向时是否启动识别TRUE
cls前向时是否启动分类 (命令行模式下使用use_angle_cls控制前向是否启动分类)FALSE