一.介绍
简易流程: 输入图像 》检测文本 》截取文本 》识别文本 》输出
简单开发一些小工具,这几款ocr库相对使用起来简易;便于简易开发。
- PaddleOCR— 适用于通用文本
- cnocr+cnstd ——— 适用于文档文本
- easyOCR —— 适用于通用文本
- ddddocr ——— 适用于验证码
- MuggleOCR ——— 适用于印刷文本,验证码
- tesseractOCR —— 通用OCR(未测试)
二.环境依赖
- PaddleOCR
基于paddlepaddle 与 paddlehub
pip install paddlepaddle
pip install paddlehub
- cnocr
基于pytorch
pip install cnocr
pip install cnstd
- easyOCR
基于pytorch
pip install easyocr
- dddddocr
pip install ddddocr
- MuggleOCR
这里需要适用豆瓣源
pip install muggle-ocr -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
- 注意
部分依赖可能安装过不去可去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)
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))
- easyocr
import easyocr
#指定文字模型
reader = easyocr.Reader(['ch_sim','en'])
res = reader.readtext('./1.jpg')
print(res)
- 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)
- 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)
- 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)
四.效果对比
原图:
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/