win10 Tesseract-ORC安装教程以及使用案例(pdf拆分)

2023-05-16

简介

OCR(Optical Character Recognition):光学字符识别,是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。
Tesseract:开源的OCR识别引擎,初期Tesseract引擎由HP实验室研发,后来贡献给了开源软件业,后由Google进行改进、修改bug、优化,重新发布。

下载

1、 Windows版本tesseract各版本下载T,本教程用的版本是tesseract-ocr-setup-4.00.00dev.exe(【注意】要3.0以上才支持中文)
在这里插入图片描述

2、 各版本对应字库,要识别简体中文需要下载chi_sim.traindata字库(【注意】根据版本下载对应字库)。

安装好tesseract后,可下载中文包

在这里插入图片描述
下载好中文包后,将文件放在C:\Program Files (x86)\Tesseract-OCR\tessdata目录下
在这里插入图片描述

安装

1 点击tesseract-ocr-setup-4.00.00dev.exe文件,按提示安装就行,安装成功之后如下张图:

在这里插入图片描述
2 在cmd窗口输入tesseract -v,配置成功如下图:
在这里插入图片描述
3 查看支持的语言类型:
1 将目录cd 到:
cd C:\Program Files (x86)\Tesseract-OCR
2 输入指令:
tesseract -v tesseract --list-langs -v tesseract --list-langs  # 查看Tesseract-OCR支持语言,结果如图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/fdb2aa2d6581494d937010227cf1c86f.png

环境配置

1 增加一个TESSDATA_PREFIX变量名,变量值为我的语言字库文件夹安装路径C:\Program Files (x86)\Tesseract-OCR\tessdata 添加到变量中;如下图:
在这里插入图片描述
2 增加一个OCR_HOME变量名,变量值C:\Program Files (x86)\Tesseract-OCR;如下图:
在这里插入图片描述
3 在path中添加如图所示两个值
在这里插入图片描述
4 配置tesseract运行文件

...\Lib\site-packages\pytesseract\pytesseract.py 

找到文件:tesseract_cmd = 'tesseract'
修改为:tesseract_cmd = r'C:\Program Files (x86)\Tesseract-OCR\tesseract.exe'       你放tesseract.exe的路径

使用

Tesseract-ORC文字识别是配合着pytesseract模块使用的

pip install pytesseract

代码示例:
实现批量的根据关键字对pdf进行拆分的功能(这里的pdf为扫描件pdf):

from PIL import Image
import os
import pytesseract
import cv2 as cv
import fitz


def pdf_image(pdfPath,imgPath,new_pdf_file_path,keywords,zoom_x=2,zoom_y=2,rotation_angle=0):
  """

  :param pdfPath: 需要处理的.pdf文件所在文件夹的位置
  :param imgPath: .pdf转成图片后图片的保存路径
  :param new_pdf_file_path: 新产生的.pdf所在文件夹的位置
  :param keywords: 关键字
  :param zoom_x:
  :param zoom_y:
  :param rotation_angle:
  :return:
  """
  file_list = []  # 新建一个空列表用于存放文件名
  file_dir =pdfPath
  for files in os.walk(file_dir):  # 遍历指定文件夹及其下的所有子文件夹
      for file in files[2]:  # 遍历每个文件夹里的所有文件,(files[2]:母文件夹和子文件夹下的所有文件信息,files[1]:子文件夹信息,files[0]:母文件夹信息)
          if os.path.splitext(file)[1] == '.PDF' or os.path.splitext(file)[1] == '.pdf':  # 检查文件后缀名,逻辑判断用==
              # file_list.append(file)#筛选后的文件名为字符串,将得到的文件名放进去列表,方便以后调用
              file_list.append(file_dir + '\\' + file)  # 给文件名加入文件夹路径
  # print(file_list)
  # 创建存储图片的文件夹 D:\Users\admin\Desktop\save\img
  if not os.path.exists(os.path.dirname(imgPath)):
      os.mkdir(os.path.dirname(imgPath))
  # 创建存储拆分后新pdf的文件夹 D:\Users\admin\Desktop\save\new_pdf_result
  if not os.path.exists(new_pdf_file_path):
      os.mkdir(new_pdf_file_path)
  for file_path in file_list:
      pdf = fitz.open(file_path) # 打开PDF文件
      png_files = []
      sources = []
      # 逐页读取PDF
      for pg in range(0, pdf.page_count):
        page = pdf[pg]
        # 设置缩放和旋转系数
        trans = fitz.Matrix(zoom_x, zoom_y).prerotate(rotation_angle)
        pm = page.get_pixmap(matrix=trans, alpha=False)
        # 开始写图像
        pm._writeIMG(imgPath + str(pg) + ".png", 1)
        # 依赖opencv
        img=cv.imread(imgPath+str(pg)+".png")
        text=pytesseract.image_to_string(Image.fromarray(img),lang='chi_sim')
        # text = pytesseract.image_to_string(Image.open(imgPath +str(pg)+ ".png"), lang='chi_sim')
        print(text)
        # 将多个图片合并成一个pdf
        if keywords in text:
            png_files.append(imgPath+str(pg)+".png")
      pdf.close()
      if png_files:
          png_files.sort()
          output = Image.open(png_files[0])
          png_files.pop(0)
          for file in png_files:
              png_file = Image.open(file)
              if png_file.mode == "RGB":
                  png_file = png_file.convert("RGB")
              sources.append(png_file)
          # output.save(new_pdf_path, "pdf", save_all=True, append_images=sources)
          new_pdf_path = os.path.join(new_pdf_file_path, os.path.basename(file_path))
          output.save(new_pdf_path,  save_all=True, append_images=sources)


pdf_path =r'D:\Users\admin\Desktop\new_pdf'
# keywords='中 国 证 券 期 货 市 场 衍 生 品 交 易 主 协 议'
keywords='中 国 证 券'
img_path =r'D:\Users\admin\Desktop\save\img\test'
new_pdf_file_path=r'D:\Users\admin\Desktop\save\new_pdf_result'
pdf_image(pdf_path,img_path,new_pdf_file_path,keywords)

可能遇到的问题有:

运行项目时,报错无法打开C:\Program Files (x86)\Tesseract-OCR\tessdata里面的中文包

pytesseract.pytesseract.TesseractError: (1, 'Error opening data file C:\\Program Files\\Tesseract-OCR\\tessdata/chi_sim.traineddata Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory. Failed loading language \'chi_sim\' Tesseract couldn\'t load any languages! Could not initialize tesseract.') 

解决方案:
项目环境配置添加TESSDATA_PREFIX=C:\Program Files (x86)\Tesseract-OCR\tessdata
如图所示:

在这里插入图片描述
参考资料:
Tesseract-OCR 安装、中文识别与训练字库
在window下搭建Tesseract-OCR图片识别文字环境变量
OCR识别扫描版PDF文件(Python版)
基于Python的PDF扫描文件OCR识别
如何使用Python进行PDF图片识别OCR
Please make sure the TESSDATA_PREFIX environment variable is set to your “tessdata“ directory.
解决pytesseract.pytesseract.TesseractError: (1, ‘Error opening data file C:\Program Files\Tesseract-
OS库应用之遍历文件夹的pdf文件,批量解析然后归档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

win10 Tesseract-ORC安装教程以及使用案例(pdf拆分) 的相关文章

  • linux-vim编辑工具的基础的常用操作 小结

    1 设置行号 xff08 临时设置和永久性设置 xff09 临时设置 如果要显示该文件的所有行号 xff0c 则需要在vim的命令模式下输入 set nu 设置显示行号 xff0c 等同setnumber set nonu xff08 取消
  • 内网离线安装vscode插件

    一 官网下载vscode安装包 xff08 https code visualstudio com xff09 下载之后将安装包拷贝到需要的电脑进行安装并创建桌面快捷方式 二 vscode插件官网 xff08 https marketpla
  • usb/uart转网口模块选型设计 小结

    选型原则 通讯速率尽量可能快 xff0c 工作温度必须是工业级的 xff0c 成本尽量可能低 xff1b 保证用户可操作空间较大 1usb转网口 AX88772BLI xff0c ZLAN1003 xff0c IP101GRI xff08
  • Git bash基础操作指令 小结

    1 常用git指令 git的安装配置 xff08 只有初次使用需要配置 xff09 用户名和邮件 git config global user name 34 noxue 34 git config global user email ad
  • linux-ARM开发板--嵌入式开发平台-选型

    最近有一个项目以前一直在用工控机实现 xff0c 现在需要优化功能 缩减成本 xff0c 故有寻找linux ARM开发板的需求 xff1b 后期有很大可能还会自己会画PCB板 内核裁剪等设计的需求 xff1b 1 根据需求 xff0c 限
  • linux 线程与进程 -2-多线程应用编程

    多线程的管理 多线程的互斥锁和条件变量的使用 xff01 什么是进程 进程 xff08 process xff09 是一个已经开始执行但还没终止的程序实例 Linux系统下使用ps 命令可以查看到当前正在执行的进程 每个进程包含有进程运行环
  • 基于ARM开发板或linux工控机的远程操作的小结

    需求 xff1a xff08 1 xff09 黑龙江现场A处有一个一直在执行任务的工控机 xff08 或ARM板 xff09 xff0c 该板子处在一个局域网192 xxx 2 1网段 xff0c 局域网可以联网 xff1b xff08 2
  • linux-Ubuntu server输出.csv文件方法 小结

    导语 xff1a 在ARM上或在其他芯片上做开发 xff0c 有时候会有这样的需求 xff0c 将你工控机 开发板或者你的设备采集出来的数据做成一个exc列表 xff1b 最简单的方式就是用数据直接输出为 txt文件 xff0c 但是这样并
  • arm板/工控机 连接外网 小结

    arm板外网连接的总结 1 判断自己的开发板或者虚拟机是否连接外网的方式非常简单 直接ping外网的一个ip即可 xff0c 比如ping百度 2 如果arm开发板ping外网不同有几个思路去修复 xff08 1 xff09 先检查你的外网
  • Cannot access androidx.lifecycle.HasDefaultViewModelProviderFactory 警告

    项目androidx中 报警告 Cannot access androidx lifecycle HasDefaultViewModelProviderFactory 但是不影响运行 xff0c 解决方法 xff1a ViewModel a
  • 一些简单的shell脚本实例

    自己写了一下小的shell实例 xff0c 虽然很小 xff0c 但所有的大的程序都是由小的模块堆积起来的 xff0c 程序员一定要懂得一种脚本的书写 xff0c 而我 xff0c 只会在linux下工作 xff0c 所以就只能写linux
  • 房子装修工程师CSS(七): 伪元素 ::before 和 ::after的用法介绍

    一 W3C的解释用一句话概括 xff1a 单冒号 用于CSS3伪类 xff0c 双冒号 用于CSS3伪元素 单冒号写法兼容性比较强 可支持解析的浏览器较多 双冒号的写法只支持较新的主流浏览器 二 基础理论 before和 after 是用来
  • SSM框架整合时,无法正确连接数据库

    SSM框架整合时 xff0c 无法正确连接数据库 报错如下所示 xff1a 报错信息 xff1a Caused by java sql SQLException Access denied for user Miomiaomiao 64 l
  • 房子装修工程师CSS(八)伪类选择器

    一 伪类选择器 xff08 一 xff09 Pseudo Classes Selectors 伪类选择器 E not s E root E target E first child E last child E only child E n
  • 房子装修工程师CSS(九)伪类选择器

    xff08 九 xff09 E first of type 意思是 xff0c 在父元素下面寻找 第一个所匹配的子元素 下面的ul 和li xff0c 在ul 里面找到第一个li xff08 十 xff09 E last of type 在
  • 国际化时配置时配置struts.custom.i18n.resources常量三种方法:

    假设要定义配置一个 basename为globalMessages的strut custom i18n resources常量 1 在属性文件struts properties中定义 xff1a 在属性文件中定义basejname stru
  • java中return用法总结

    Java中return用于方法 xff0c 两个作用 xff1a xff08 1 xff09 返回方法指定类型的值 xff08 这个值总是确定的 xff09 xff0c 也可以是对象 xff08 2 xff09 方法的结束 两种形式 xff
  • AngularJS:实现动态添加输入控件功能

    AngularJS xff1a 实现动态添加输入控件功能 功能要求如下 xff1a 1 点击加号可以增加输入框 2 点击减号可以减少输入框 3 当输入框只有一个的时候 xff0c 不能再减少输入框 效果图如下 xff1a 只有一个输入框 有
  • angularjs数组基本操作

    1 ng click ng model ng bind ng class ng hide ng app 2 placeholder 3 中加入代码 xff1a true false 使用逗号隔开 xff0c 可以控制包括样式 xff0c 显
  • Jasmine 常用语法

    jasmine测试脚本 function jasmine基本语法介绍 xff1a describe string function xff1a 可以理解为是一个测试集或者测试包 xff08 官方称之为suite xff09 xff0c 主要

随机推荐