文章目录
- 安装并下载模型
- 试用
- 类和方法
安装并下载模型
easyocr是基于PyTorch的光学字符识别(Optical Character Recongnition, OCR)工具,开箱即用,支持从自然场景图像到密集文档的文本提取。在确认安装Pytorch之后,用pip安装即可。
pip install easyocr -i https://pypi.tuna.tsinghua.edu.cn/simpleeasyocr在使用时需要从github下载模型,考虑到github经常抽风,这里推荐离线下载,下载完成后,可将.pth文件放进C:\Users\用户名\.EasyOCR\model\路径下。
共有两类文件,一个是检测模型,地址为
https://github.com/JaidedAI/EasyOCR/releases/download/pre-v1.1.6/craft_mlt_25k.zip https://github.com/JaidedAI/EasyOCR/releases/download/v1.6.0/pretrained_ic15_res18.zip https://github.com/JaidedAI/EasyOCR/releases/download/v1.6.0/pretrained_ic15_res50.zip另一类是语言模型,语言列表为EasyOCR Model Hub。
试用
下面以下面这张刚截的图片为例
运行结果如下
importeasyocr path="easyocr.png"# 图片路径reader=easyocr.Reader(['ch_sim','en'])result=reader.readtext(path)forresinresult:print(f"{res[2]:.2}:{res[1]}")''' 0.86: import easyocr 1.0: path 0.45: easyocr. Png" 0.77: 图片路径 0.75: peader 0.3: easyocr .Reader ( [ 'ch_sim' 0.8: pesult 0.69: reader.readtext (path ) '''其中,readtext方法的返回值是结果列表,其中每一项都是一个三元组,依次是文本框的坐标,识别结果以及置信度。
类和方法
【Reader】是easyocr的核心类,【readtext】为Reader的核心方法。二者签名如下
classReader(lang_list,gpu=True,model_storage_directory=None,user_network_directory=None,detect_network="craft",recog_network='standard',download_enabled=True,detector=True,recognizer=True,verbose=True,quantize=True,cudnn_benchmark=False):defreadtext(image,decoder='greedy',beamWidth=5,batch_size=1,workers=0,allowlist=None,blocklist=None,detail=1,rotation_info=None,paragraph=False,min_size=20,contrast_ths=0.1,adjust_contrast=0.5,filter_ths=0.003,text_threshold=0.7,low_text=0.4,link_threshold=0.4,canvas_size=2560,mag_ratio=1.,slope_ths=0.1,ycenter_ths=0.5,height_ths=0.5,width_ths=0.5,y_ths=0.5,x_ths=1.0,add_margin=0.1,threshold=0.2,bbox_min_score=0.2,bbox_min_size=3,max_candidates=0,output_format='standard')参数非常多,除了刚刚已经用到的lang_list和image之外,还有几个参数相对比较重要,其中Reader类的参数
gpu设为True时启用GPU。否则用CPU。- ``model_storage_directory
**模型路径**。自定义预训练权重(.pth文件)的存放目录。设为None时使用系统默认路径(如~/.EasyOCR/model`)
readtext的参数。
allowlist白名单。强制模型仅输出该字符串中包含的字符。例如识别车牌时设为'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'blocklist黑名单。强制模型忽略该字符串中包含的字符。detail输出详细度。1返回[边界框坐标, 识别文本, 置信度];设为0则仅返回纯文本字符串列表。
其他参数含义如下
| 参数 | 含义 | 备注 |
|---|---|---|
user_network_directory | 自定义网络路径 | 用于加载用户自行训练的网络结构定义文件。 |
detect_network | 检测算法 | 指定文本检测网络,默认为"craft",也可选其他支持的轻量级变体 [[2]]。 |
recog_network | 识别算法 | 指定文本识别网络。可选"standard"或"generation2"(g2 版本通常推理更快) [[2]]。 |
download_enabled | 自动下载 | 模型缺失时是否允许联网下载。离线部署必须设为False。 |
detector | 启用检测 | 若设为False,则跳过检测阶段,假定输入图像已是裁剪好的单行文本,直接执行识别。 |
recognizer | 启用识别 | 若设为False,则仅执行文本框检测,不进行文字识别。 |
verbose | 日志输出 | 是否在控制台打印模型加载和运行的详细信息。 |
quantize | 模型量化 | 是否对模型进行 INT8 量化,可减少内存占用并提升 CPU 推理速度,但可能轻微损失精度。 |
cudnn_benchmark | cuDNN 优化 | 若输入图像尺寸固定,设为True可让 cuDNN 自动寻找最优卷积算法,提升 GPU 速度。 |
| 参数 | 含义 | 备注 |
|---|---|---|
decoder | 解码策略 | 默认为贪心解码'greedy'。可选束搜索'beamsearch',精度更高但更慢 |
beamWidth | 束搜索宽度 | 仅在beamsearch解码时生效,控制搜索树的分支数量。 |
batch_size | 批处理大小 | 大于 1 可显著提升 GPU 识别速度,但会线性增加显存消耗 |
workers | 数据加载线程 | PyTorch DataLoader 使用的线程数,0 表示使用主线程。 |
paragraph | 段落合并 | 是否根据空间位置将相邻的检测框合并为完整的段落文本 |
检测阶段(Detection)超参数注:通常无需修改,仅在特定场景(如极小文本、低对比度图像)识别失败时微调。
text_threshold(0.7): 文本像素的置信度阈值,高于此值判定为文本。low_text(0.4): 文本区域的下限阈值,用于连接相邻的弱文本像素。link_threshold(0.4): 连接相邻字符区域形成完整文本行的阈值。canvas_size(2560): 检测网络输入图像的最大边长。超大图像会被等比缩放至此尺寸。mag_ratio(1.0): 图像放大比例。处理极小文本时可设为1.5或更高。min_size(20): 忽略面积或边长小于此像素值的检测框,用于过滤噪点。contrast_ths(0.1): 判定图像为“低对比度”的阈值。adjust_contrast(0.5): 当图像对比度低于contrast_ths时,自动增强到的目标对比度。filter_ths(0.003): 基于字符高度的后处理过滤阈值,剔除异常比例的检测框。bbox_min_score(0.2): 检测框的最低置信度得分,低于此值的框被丢弃。bbox_min_size(3): 检测框允许的最小像素尺寸。max_candidates(0): 检测阶段保留的最大候选框数量,0表示无限制。
识别与几何后处理超参数
rotation_info(None): 列表,如[90, 180, 270]。指定模型尝试旋转图像的角度,用于处理多方向或倒置文本。add_margin(0.1): 在裁剪检测框周围额外添加的边距比例(10%),以保留更多字符边缘上下文。slope_ths,ycenter_ths,height_ths,width_ths,y_ths,x_ths: 均为浮点数。仅在paragraph=True时生效,用于计算两个文本框在斜率、中心点距离、宽高比上的几何相似度,以决定是否合并为同一段落。output_format('standard'): 输出数据格式,可选'standard'或'dict'(返回结构化字典)。