PaddleOCR实现批量文件识别和输出(存入Excel)
AcePlay
编辑于 2023年12月01日 02:59
收录于文集
共16篇

前言


       为找到一款自用的开源OCR,体验百度的PaddleOCR基础功能后,可以满足图片文字识别的需求;本篇总结一些在Windows 10(64位)环境下的使用经验,实现批量文件识别和输出(存入Excel)。

PaddeOCR安装


       登陆官网(https://www.paddlepaddle.org.cn),进入相应页面查看安装教程,按操作说明安装部署PaddleOCR(需要python环境),本篇不作介绍。

官网页面

修改说明

       PaddleOCR安装部署完成后,可以使用教程中的脚本运行,对一个指定的图片进行文字识别,并生成一个新图片,该图片包含识别结果和说明。

教程脚本运行后生成的图片

       所以按教程的脚本使用,无法直接使用提取出的文字(因为包含在图片中);其次每次运行只操作一个文件,不够效率。基于以上两个原因,需要我们自己修改来实现以下效果:

    (1)启动OCR

       每次要运行教程脚本,需要先打开命令行,进入anaconda3的PaddleOCR环境(教程推荐使用anaconda3),再用python运行.py教程脚本;所以将以上过程编辑为.bat文件,双击运行就可以简化以上重复步骤。

    (2)文件批量操作

      教程脚本代码只执行一次文件操作,所以修改代码使其对文件批量操作。

    (3)将所有结果输出至Excel

      修改教程脚本代码,使输出结果(文字部分)存入Excel,方便使用。

具体操作

    (1)编辑启动脚本

        新建一个txt文件,并写入以下脚本,再修改后缀名为.bat文件。

代码块
Shell
自动换行
复制代码
start cmd /k "activate paddle_env && cd /d E:\PaddleOCR-release-2.7 && python ORCoutput.py"

::activate paddle_env 代表进入环境,paddle_env是环境名称,名称根据实际情况调整。
::cd /d E:\PaddleOCR-release-2.7 代表跳转到PaddleOCR的安装目录,路径根据实际情况调整。
::python OCRoutput.py 代表用python运行OCRoutput.py,OCRoutput.py为后面要使用的修改文件。
复制成功

    (2)修改OCR源代码

        在PaddleOCR安装目录下,找到并用记事本打开paddleocr.py,修改其中对应的函数,事先备份paddleocr.py。

代码块
Python
自动换行
复制代码
if det and rec:
            ocr_res = []
            for idx, img in enumerate(imgs):
                img = preprocess_image(img)
                dt_boxes, rec_res, _ = self.__call__(img, cls)
                if not dt_boxes and not rec_res:
                    ocr_res.append(None)
                    continue
                # tmp_res = [[box.tolist(), res]
                           # for box, res in zip(dt_boxes, rec_res)]
                # ocr_res.append(tmp_res)
                ocr_res.append(rec_res)
            return ocr_res

# 在paddleocr.py找到对应代码段落,按以上替换。
复制成功

    (3)编辑运行文件

        新建一个txt文件,并写入以下脚本,再修改后缀名为.py文件(例:OCRoutput.py),再放入PaddleOCR安装目录下。

代码块
Python
自动换行
复制代码
from paddleocr import PaddleOCR, draw_ocr, os # 引入需要用到的模块

# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换
# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
ocr = PaddleOCR(use_angle_cls=True, lang="ch") # 初始化对象,use_angle_cls=True参数,代表可以识别180度以内旋转的字体,lang="ch"参数,代表识别语言是中文。
f = open("result.xlsx","a",encoding="utf-8") # 本脚本路径为PaddleOCR目录,在此新建一个result.xlsx文件(存放输出的数据),若已存在就直接打开,在尾部添加数据,编码格式设为utf-8。
path = 'E:/PaddleOCR-release-2.7/img/' # 事先在PaddleOCR安装目录下新建一个img文件夹,将需要识别的图片集中放在这里,img文件夹和路径也可以自定义。
fs = os.listdir(path) # 获取img下全部文件名称(含文件后缀),即获取我们批量存放的图片文件。
for idx in range(len(fs)): # 遍历fs
        f.write(fs[idx]) # 将图片名称写入result.xlsx作为标记
        f.write("\n") # 换一行分隔
        fs[idx] = path + fs[idx] # 将path参数和文件名拼接,得到图片文件绝对路径
        result = ocr.ocr(fs[idx], cls=True) # 对当前图片解析,结果存入变量result
        for idx in range(len(result)): # 遍历result
               res = result[idx]
               for line in res:
                       f.write(str(line[0])) # 将识别出的文字写入result.xlsx
                       f.write("\n") # 换一行分隔
        f.write("\n") # 换一行分隔
f.close() # 关闭文件连接
复制成功

    (4)使用过程(案例)

        PaddleOCR安装目录下新建的img文件夹,放入2个测试图片:Example-1.png和Example-2.png,运行第一步中的脚本(OCRBat.bat),等待程序运行完,打开result.xlsx确认结果。

新建img文件夹并放入2个图片

Example-1.png

Example-2.png

等脚本运行完

确认结果

总结


       本篇仅使用教程中【快速开始】介绍的基础识别功能,还不涉及深度学习和训练等功能,有进一步需求的小伙伴可以继续深入研究和使用。