之前我有记载过,关于Python的图像识别的文章,但是识别率不高且不够灵活,实用性不强,所以不怎么推荐
最近发现一个新的Python写好的的轮子--paddleocr,本人也安装并使用了,识别率也大大提高,一些工作中也能利用到,特别不错~
相关链接:https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/whl.md
pip安装: pip install paddleocr
注意:安装完成以后,运行有可能会报:ModuleNotFoundError: No module named 'paddle' 错误
解决方法:查阅相关的书籍,发现安装paddle
这个模块是需要安装的是paddlepaddle, 即:pip install paddlepaddle
检测+分类+识别全流程
from paddleocr import PaddleOCR, draw_ocr
# Paddleocr目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换
# 参数依次为`ch`, `en`, `french`, `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 = 'PaddleOCR/doc/imgs/11.jpg'
result = ocr.ocr(img_path, cls=True)
for line in result:
print(line)
# 显示结果
from PIL import Image
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='/path/to/PaddleOCR/doc/simfang.ttf')
im_show = Image.fromarray(im_show)
im_show.save('result.jpg')
结果是一个list,每个item包含了文本框坐标位置,文字内容和识别置信度
[[[24.0, 36.0], [304.0, 34.0], [304.0, 72.0], [24.0, 74.0]], ['纯臻营养护发素', 0.964739]]
[[[24.0, 80.0], [172.0, 80.0], [172.0, 104.0], [24.0, 104.0]], ['产品信息/参数', 0.98069626]]
[[[24.0, 109.0], [333.0, 109.0], [333.0, 136.0], [24.0, 136.0]], ['(45元/每公斤,100公斤起订)', 0.9676722]]
......
结果存储的jpg文件可视化是:
当内置模型无法满足需求时,需要使用到自己训练的模型。 首先,参照inference.md 第一节转换将检测、分类和识别模型转换为inference模型,然后按照如下方式使用
相关链接:https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/inference.md
from paddleocr import PaddleOCR, draw_ocr
# 模型路径下必须含有model和params文件
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)
img_path = 'PaddleOCR/doc/imgs/11.jpg'
result = ocr.ocr(img_path, cls=True)
for line in result:
print(line)
# 显示结果
from PIL import Image
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='/path/to/PaddleOCR/doc/simfang.ttf')
im_show = Image.fromarray(im_show)
im_show.save('result.jpg')
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 --cls true
参数说明
字段 | 说明 | 默认值 |
---|---|---|
use_gpu | 是否使用GPU | TRUE |
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_thresh | DB模型输出预测图的二值化阈值 | 0.3 |
det_db_box_thresh | DB模型输出框的阈值,低于此值的预测框会被丢弃 | 0.5 |
det_db_unclip_ratio | DB模型输出框扩大的比例 | 2 |
det_east_score_thresh | EAST模型输出预测图的二值化阈值 | 0.8 |
det_east_cover_thresh | EAST模型输出框的阈值,低于此值的预测框会被丢弃 | 0.1 |
det_east_nms_thresh | EAST模型输出框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 |
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 | 是否启用mkldnn | FALSE |
use_zero_copy_run | 是否通过zero_copy_run的方式进行前向 | FALSE |
lang | 模型语言类型,目前支持 中文(ch)和英文(en) | ch |
det | 前向时使用启动检测 | TRUE |
rec | 前向时是否启动识别 | TRUE |
cls | 前向时是否启动分类 | FALSE |
好啦,这个够一般的小白和普通工作用户使用,简单易上手,识别效率也不错,安利给大家,希望能帮助到大家~