分享

python图像识别

 大傻子的文渊阁 2021-02-18

前言

之前我有记载过,关于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

代码使用

检测+分类+识别全流程

  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. ......

结果存储的jpg文件可视化是:

自定义模型

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

相关链接:https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/inference.md

代码使用

  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 --cls true
  2. 参数说明
字段说明默认值
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

结语

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

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多