暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

EasyOCR识别文字很简单!

瓜瓜说数据 2022-04-26
586

hello大家好,上一篇是讲的利用百度API识别文字,今天再介绍一个很简单的库也能识别文字,识别成功率还是比较高的呀!当然没有百度API高!哈哈哈

1 easyocr安装


    pip install easyocr

    EasyOCR 的模型是基于 pytorch 框架训练的,在 easyocr 下载同时会下载一些其它附加 python 包,例如 pytorch, torchvision 等,时间需要久一点(需要注意下,easyocr 默认安装的是 pytorch 的 cpu 版本,需要 gpu 配置的小伙伴可以搜一下 pytorch-gpu 相关教程进行配置)。


    可以会出现以下问题


    1、ImportError: DLL load failed: The specified module could not be found

    该问题是由于 C++ 运行包丢失造成的,解决方案,终端输入以下命令安装即可

      pip install msvc-runtime

      2、train error :ImportError: cannot import name ‘Optional’ **


      该问题是由于 pytorch 与 torchvision 版本不符造成的,安装 easyocr 时默认安装的 torchvision 版本为 0.5.0,对应 pytorch 相兼容的版本应该为 1.4.0,但通过下方命令安装时。

        pip install torch==1.14.0#会安装失败,解决方法:通过另一种 安装命令即可
        pip install torch==1.4.0+cpu torchvision==0.5.0+cpu -f https://download.pytorch.org/whl/torch_stable.htm


        3、**user** 忘记了哈哈哈哈


        pip install easyocr --user -i https://pypi.douban.com/simple

        导入库问题就可以解决了


        2 使用方式

        第一步:创建Reader实现,第二步:readtxt()方法检测和识别

        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) :是否加载识别模型。


        举一个简单的例子:

        首先创建一个reader对象,传入要使用的语言包(识别模型),然后在reader对象的readtext方法中传入要识别的文件名称:

          import easyocr
          #创建reader实现
          reader = easyocr.Reader(['ch_sim','en'])
          #readtxt()方法检测和识别
          result = reader.detect('test.png')
          print(result)
            ([[151, 101], [195, 101], [195, 149], [151, 149]], '西', 0.9816301184856115)
            ([[569, 71], [635, 71], [635, 131], [569, 131]], '东', 0.9986620851098884)
            ([[218, 92], [535, 92], [535, 191], [218, 191]], '诗和远方路', 0.8088406614287519)
            ([[137, 217], [177, 217], [177, 257], [137, 257]], 'W', 0.8304899668428476)
            ([[209, 217], [525, 217], [525, 257], [209, 257]], 'Poetry And The Places Afar Rd。', 0.40033782611925706)
            ([[571207], [611207], [611251], [571251]], 'C'0.1553293824532922)

            readtext()方法返回一个元组,包含了多个元素,每个元素由识别到文字信息的边框,文字内容,可信度等3部分组成。


            3 提取信息上传到txt

            把识别的三部分拆分上传到txt格式

              import easyocr
              from pathlib import Path
              file_url='地址.png'
              save_dir='.'
              split_symbol=''
              reader = easyocr.Reader(['ch_sim','en'],gpu=False,model_storage_directory='./model')
              result = reader.readtext(file_url)
              result.sort(key=lambda x: x[0][0][1]) # 按竖直方向,进行排序==>进行分行处理
              content = []
              row_space = 15
              item = [result[0]] # 首先放入第一个元素
              for i in result[1:]:
              if row_space >= i[0][0][1] - item[-1][0][0][1] >= 0:
              item.append(i)
              else:
              content.append(item)
              item = [i]
              content.append(item)


              filemane = Path(file_url).name.split('.')[0]
              with open(f'{save_dir}/{filemane}.txt', "w", encoding='utf8') as t:
              for i in content: # i 为每一行的内容
              i.sort(key=lambda x: x[0][0][0]) # 对每行的内容进行先后排序
              for r in i:
              # print(r)
              t.write(r[1] + split_symbol)
              t.write("\n")


              当然这个比百度API识别的慢,这样再有照片转文本就可以用了!

              文章转载自瓜瓜说数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论