python图像识别 - paddleocr (小白安利款)

前言

之前我有记载过,关于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是否使用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
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)ch
det前向时使用启动检测TRUE
rec前向时是否启动识别TRUE
cls前向时是否启动分类FALSE

结语

好啦,这个够一般的小白和普通工作用户使用,简单易上手,识别效率也不错,安利给大家,希望能帮助到大家~

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值