当前位置:   article > 正文

记录:那些封装成几行代码的OCR项目_cnocr和paddleocr

cnocr和paddleocr

一.介绍

简易流程: 输入图像 》检测文本 》截取文本 》识别文本 》输出
在这里插入图片描述

简单开发一些小工具,这几款ocr库相对使用起来简易;便于简易开发。

  • PaddleOCR— 适用于通用文本
  • cnocr+cnstd ——— 适用于文档文本
  • easyOCR —— 适用于通用文本
  • ddddocr ——— 适用于验证码
  • MuggleOCR ——— 适用于印刷文本,验证码
  • tesseractOCR —— 通用OCR(未测试)

二.环境依赖

  1. PaddleOCR
    基于paddlepaddle 与 paddlehub
pip install paddlepaddle
pip install paddlehub
  • 1
  • 2
  1. cnocr
    基于pytorch
pip install cnocr
pip install cnstd
  • 1
  • 2
  1. easyOCR
    基于pytorch
pip install easyocr
  • 1
  1. dddddocr
pip install ddddocr
  • 1
  1. MuggleOCR
    这里需要适用豆瓣源
pip install muggle-ocr -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
  • 1
  1. 注意
    部分依赖可能安装过不去可去https://www.lfd.uci.edu/~gohlke/pythonlibs/下载whl,手动安装。

三.代码

  • cnocr

单独cnocr模块,只适合打印或文本格式。

import cv2
from cnocr import CnOcr

ocr = CnOcr()
img = './1.jpg'
img = cv2.imread(img)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  

res = ocr.ocr(gray)
print(res)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

cnstd+cnocr 通用图片中的文字。

from cnstd import CnStd
from cnocr import CnOcr

std = CnStd()
cn_ocr = CnOcr()

box_info_list = std.detect('examples/taobao4.jpg')

for box_info in box_info_list:
    cropped_img = box_info['cropped_img']  # 检测出的文本框
    ocr_res = cn_ocr.ocr_for_single_line(cropped_img)
    print('ocr result: %s' % ''.join(ocr_res))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • easyocr
 import easyocr

#指定文字模型
reader = easyocr.Reader(['ch_sim','en']) 
res = reader.readtext('./1.jpg')
print(res)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • paddleocr
import paddlehub as hub
import cv2
#模型选择
ocr = hub.Module(name="chinese_ocr_db_crnn_mobile")
res = ocr.recognize_text(images=[cv2.imread('./12.jpg')],output_dir='result',visualization=True)

print(res)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • ddddocr
import ddddocr
 
ocr=ddddocr.DdddOcr()
with open('test_img.png', 'rb') as f:
    img_bytes=f.read()
 
res=ocr.classification(img_bytes)
print(res)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • MuggleOCR
# 导入包
import muggle_ocr

# 初始化;model_type 包含了 ModelType.OCR/ModelType.Captcha 两种,OCR能识别中文
sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.OCR)

with open(r"test1.png", "rb") as f:
    b = f.read()
text = sdk.predict(image_bytes=b)
print(text)


# ModelType.Captcha 可识别4-6位验证码
sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha)
with open(r"test1.png", "rb") as f:
    b = f.read()
text = sdk.predict(image_bytes=b)
print(text)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

四.效果对比

原图:
请添加图片描述
easyocr输出:
请添加图片描述
paddleocr输出:
在这里插入图片描述
ddddocr贴张官方图:
在这里插入图片描述

  • 总结
    通用场景下还是paddleocr效果最好;cnocr更适合文本的图像;ddddocr与MuggleOCR相比,前者验证码效果更好一点。

五.参考

https://github.com/breezedeus/cnstd
https://github.com/breezedeus/cnocr
https://github.com/JaidedAI/EasyOCR
https://github.com/PaddlePaddle/PaddleOCR
https://github.com/sml2h3/ddddocr
https://www.cnblogs.com/pythonywy/p/13226330.html
https://pypi.org/project/muggle-ocr/

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号