EasyOCR简单实用

Posted AI浩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EasyOCR简单实用相关的知识,希望对你有一定的参考价值。

摘要

EasyOCR 是一个python版的文字识别工具。目前支持80中语言的识别。
框架如下:

  • 图像预处理(去噪、色彩饱和度、尖锐处理)
  • CRAFT文字检测
  • 中间处理(倾斜处理等)
  • 文字识别
  • 后续处理
  • 输出结果

安装

安装稳定版

pip install easyocr

安装最新版本:

pip install git+https://github.com/JaidedAI/EasyOCR.git

安装完成后,可以通过easyocr.__version__查看版本号:

import easyocr
print(easyocr.__version__)

测试

第一次安装使用,easyocr会下载默认模型。

等待的时间比较长,而且容易失败。
如果一直失败,可以采用另一种方式,登录到网站:https://www.jaided.ai/easyocr/modelhub/
下载模型。
下载检测器模型

下载识别器模型

将下载的模型文件解压后拷贝到当前登录的用户目录的.EasyOCR\\model文件夹下,Windows系统为:C:\\Users\\用户名.EasyOCR\\model。
识别模型(语言包)的文件名称和后面看到的语言类型并不是完全对应的,ch_sim对应简体中文(zh_sim_g2),en对应英文(english_g2)。

调用方式

import easyocr
reader = easyocr.Reader(['ch_sim','en']) # this needs to run only once to load the model into memory
result = reader.readtext('chinese.jpg')

输出结果:

[([[189, 75], [469, 75], [469, 165], [189, 165]], '愚园路', 0.3754989504814148),
 ([[86, 80], [134, 80], [134, 128], [86, 128]], '西', 0.40452659130096436),
 ([[517, 81], [565, 81], [565, 123], [517, 123]], '东', 0.9989598989486694),
 ([[78, 126], [136, 126], [136, 156], [78, 156]], '315', 0.8125889301300049),
 ([[514, 126], [574, 126], [574, 156], [514, 156]], '309', 0.4971577227115631),
 ([[226, 170], [414, 170], [414, 220], [226, 220]], 'Yuyuan Rd.', 0.8261902332305908),
 ([[79, 173], [125, 173], [125, 213], [79, 213]], 'W', 0.9848111271858215),
 ([[529, 173], [569, 173], [569, 213], [529, 213]], 'E', 0.8405593633651733)]

方法详解

Reader()参数详解:

  • lang_list (list):识别语言代码,比如[‘ch_sim’,’en’]分别表示简体中文和英文。
  • gpu (bool, string, default = True) :是否使能GPU,只有安装了GPU版本才有效。
  • model_storage_directory (string, default = None) :模型存储位置,依次查找系统变量EASYOCR_MODULE_PATH (preferred)、MODULE_PATH (if defined)表示的路径或者~/.EasyOCR/路径。
  • download_enabled (bool, default = True):如果没有对应模型文件时,自动下载模型。
  • user_network_directory (bool, default = None) :用户自定义识别网络的路径,如果没有指明,则在MODULE_PATH + ‘/user_network’ (~/.EasyOCR/user_network)目录中查找。
  • recog_network (string, default = ‘standard’) :替代标准模型,使用自定义的识别网络。
  • detector (bool, default = True) :是否加载检测模型。
  • recognizer (bool, default = True) :是否加载识别模型。

readtext()参数详解

  • image (string, numpy array, byte) : 输入图像;
  • decoder (string, default = ‘greedy’):选项有 ‘greedy’、‘beamsearch’ 和 ‘wordbeamsearch’;
  • beamWidth (int, default = 5) : 当解码器 = ‘beamsearch’ 或 ‘wordbeamsearch’ 时要保留多少光束;
  • batch_size (int, default = 1) : batch_size>1 将使 EasyOCR 更快但使用更多内存;
  • worker (int, default = 0) : 数据加载器中使用的编号线程;
  • allowlist (string) : 强制 EasyOCR 只识别字符的子集。对特定问题有用(例如车牌等);
  • blocklist (string) : 字符的块子集。如果给定了允许列表,则此参数将被忽略。
  • detail (int, default = 1): 将此设置为 0 以进行简单输出;
  • paragraph (bool, default = False):将结果合并到段落中;
  • min_size (int, default = 10) : 过滤文本框小于最小值(以像素为单位);
  • rotation_info (list, default = None) : 允许 EasyOCR 旋转每个文本框并返回具有最佳置信度分数的文本框。符合条件的值为 90、180 和 270。例如,对所有可能的文本方向尝试 [90, 180 ,270]。
  • contrast_ths (float, default = 0.1) : 对比度低于此值的文本框将被传入模型 2 次。首先是原始图像,其次是对比度调整为“adjust_contrast”值。结果将返回具有更高置信度的那个;
  • adjust_contrast (float, default = 0.5) : 低对比度文本框的目标对比度级别。
  • text_threshold (float, default = 0.7) : 文本置信度阈值
  • low_text (float, default = 0.4) : 文本下限分数
  • link_threshold (float, default = 0.4) : 链接置信度阈值
  • canvas_size (int, default = 2560) :最大图像尺寸。大于此值的图像将被缩小。
  • mag_ratio (float, default = 1) :图像放大率
  • slope_ths (float, default = 0.1) - 考虑合并的最大斜率 (delta y/delta x)。低值意味着不会合并平铺框。
  • ycenter_ths (float, default = 0.5) - y 方向的最大偏移。不应该合并不同级别的框。
  • height_ths (float, default = 0.5) - 盒子高度的最大差异。不应合并文本大小非常不同的框。
  • width_ths (float, default = 0.5) - 合并框的最大水平距离。
  • add_margin (float, default = 0.1) - 将边界框向所有方向扩展某个值。这对于具有复杂脚本的语言(例如泰语)很重要。
  • x_ths (float, default = 1.0) - 当段落=True 时合并文本框的最大水平距离。
  • y_ths (float, default = 0.5) - 当段落 = True 时合并文本框的最大垂直距离。

以上是关于EasyOCR简单实用的主要内容,如果未能解决你的问题,请参考以下文章

图像识别 (easyocr)

Python文档阅读笔记-Number Plate Recognition with OpenCV and EasyOCR

Python使用easyocr模块完成图片文字识别

如何从easyocr获得干净的输出

Python使用EasyOCR实现图片文字识别

Python Easyocr 图片文字识别