当前位置: 首页 > news >正文

Tesseract + Poppler 实现图片型 PDF 转文字

用 Tesseract + Poppler 实现图片型 PDF 转文字(Windows/Linux 全流程)

一、需求背景

很多教材、文献是图片型 PDF(扫描件/截图生成),无法直接复制文字。借助 Tesseract(OCR 识别) + Poppler(PDF 转图片),可将这类 PDF 转为可编辑文本,用于知识整理、内容提取。

二、核心工具介绍

1. Tesseract(OCR 引擎)

  • 作用:识别图片中的文字,支持中英文等多语言。
  • 特点:开源免费、识别精度高,需搭配 Poppler 处理 PDF。

2. Poppler(PDF 处理工具集)

  • 作用:将 PDF 转为图片(PNG/JPEG),供 Tesseract 识别。
  • 特点:轻量高效,提供命令行工具(如 pdfinfo pdftoppm)。

三、Windows 环境安装配置

1. 下载地址

  • Tesseract
    官网(带安装器):tesseract(选最新版 .exe

  • Poppler
    官网:popple
    Windows 编译版:https://github.com/oschwartz10612/poppler-windows/releases(选 poppler-xx.x.x.zip

2. 安装步骤

Tesseract 安装
  1. 运行下载的 tesseract-ocr-w64-setup-vx.xx.x.exe,按向导安装。
  2. 配置环境变量
    • 找到安装目录(默认 C:\Program Files\Tesseract-OCR)。
    • 右键“此电脑”→属性→高级系统设置→环境变量→Path→添加上述路径。
  3. 验证:命令行输入 tesseract -v,显示版本即成功。
Poppler 安装
  1. 解压 poppler-xx.x.x.zip 到指定目录(如 D:\poppler)。
  2. 配置环境变量
    • 找到 poppler-xx.x.x\Library\bin 路径(含 pdfinfo.exe pdftoppm.exe)。
    • 添加到系统 Path 变量。
  3. 验证:打开cmd,命令行输入 pdfinfo -v,显示版本即成功。

四、Linux 环境安装配置(以 Ubuntu 为例)

1. 下载安装(通过包管理器)

# 更新软件源
sudo apt update  # 安装 Tesseract(含中文语言包)
sudo apt install tesseract-ocr tesseract-ocr-chi-sim  # 安装 Poppler
sudo apt install poppler-utils  

2. 验证

tesseract -v       # 检查 Tesseract 版本
pdfinfo -v         # 检查 Poppler 版本

五、Python 代码实现 PDF 转 Markdown

import os
import re
import gc
import subprocess
from pdf2image import convert_from_path
import pytesseract# 配置路径(Linux 下无需手动指定,依赖系统环境)
if os.name == 'nt':pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'poppler_path = r'D:\poppler\Release-24.08.0-0\poppler-24.08.0\Library\bin'
else:poppler_path = None  # Linux 下依赖系统环境def process_pdf_page(pdf_path, page_num, lang='chi_sim'):"""处理单页 PDF,识别后释放资源"""try:# 转换 PDF 页为图片pages = convert_from_path(pdf_path,dpi=200,first_page=page_num,last_page=page_num,poppler_path=poppler_path)if not pages:return ""page = pages[0]text = pytesseract.image_to_string(page, lang=lang)page.close()  # 主动释放内存return textexcept Exception as e:print(f"处理第 {page_num} 页失败: {e}")return ""def pdf_to_md(pdf_path, md_path, lang='chi_sim'):# 获取 PDF 总页数(跨平台兼容)if os.name == 'nt':pdfinfo_path = os.path.join(poppler_path, 'pdfinfo.exe')result = subprocess.run([pdfinfo_path, pdf_path],capture_output=True,text=True)else:result = subprocess.run(['pdfinfo', pdf_path],capture_output=True,text=True)# 解析页数match = re.search(r'Pages:\s+(\d+)', result.stdout)if not match:print("无法获取 PDF 页数,请检查文件")returnpage_count = int(match.group(1))md_content = ""for page_num in range(1, page_count + 1):print(f"处理第 {page_num}/{page_count} 页...")text = process_pdf_page(pdf_path, page_num, lang)md_content += text + "\n\n"# 每 20 页强制垃圾回收if page_num % 20 == 0:gc.collect()# 保存为 Markdownwith open(md_path, 'w', encoding='utf-8') as f:f.write(md_content)print(f"处理完成!共 {page_count} 页,保存至 {md_path}")if __name__ == "__main__":pdf_path = "/path/to/your/pdf.pdf"  # 替换为实际路径md_path = "/path/to/output.md"      # 替换为输出路径# 中文识别需指定 lang='chi_sim',英文可省略pdf_to_md(pdf_path, md_path, lang='chi_sim')

六、使用技巧

  1. 提升识别精度

    • 调整 dpi=200(值越大越清晰,内存消耗越高)。
    • 预处理图片(裁剪、降噪)后再识别。
  2. 多语言支持

    • 中文用 lang='chi_sim',英文省略或用 lang='eng'
    • 安装对应语言包(如 tesseract-ocr-jpn 支持日语)。
  3. 内存优化

    • 每页识别后主动 page.close(),定期 gc.collect(),适合大 PDF 处理。

通过以上步骤,即可在 Windows/Linux 环境实现图片型 PDF 转文字,完美解决医学教材、扫描文档的文字提取需求!

http://www.xdnf.cn/news/1250857.html

相关文章:

  • jmm 指令重排 缓存可见性 Volatile 内存屏障
  • Perforce P4 Plan - DevOps实时规划工具
  • Python day36
  • 基于单片机智能浇花/智能灌溉/智慧农业/智能大棚
  • 双馈和永磁风机构网型跟网型联合一次调频并入同步机电网,参与系统一次调频,虚拟惯量下垂,虚拟同步机VSG控制matlab/simulink
  • 【软考系统架构设计师备考笔记5】 - 专业英语
  • 【关于Java的泛型(基础)】
  • 《动手学深度学习》读书笔记—9.3深度循环神经网络
  • 阿里云 Flink
  • 第七章课后综合练习
  • SpringBoot 3.x整合Elasticsearch:从零搭建高性能搜索服务
  • 【网络基础】计算机网络发展背景及传输数据过程介绍
  • vue3 vite 使用vitest 单元测试 组件测试
  • Lesson 31 Success story
  • 【C++详解】STL-set和map的介绍和使用样例、pair类型介绍、序列式容器和关联式容器
  • 蓝桥杯----锁存器、LED、蜂鸣器、继电器、Motor
  • RN项目环境搭建和使用-Mac版本(模拟器启动不起来的排查)
  • 软件定义汽车 --- 电子电气架构的驱动
  • 【pytorch(02)】Tensor(张量)概述、如何创建、常见属性,切换设备
  • AI学习之大话transformer架构
  • 2025年08月 GitHub 热门项目推荐
  • Spring选择哪种方式代理?
  • 电子电气架构 ---如何焕新升级为 48V 电气架构
  • 无人机航拍数据集|第4期 无人机太阳光伏板红外目标检测YOLO数据集10945张yolov11/yolov8/yolov5可训练
  • OpenHarmony源码解析之init进程
  • Android Activity webView页面视频悬浮小窗播放效果及技术难点
  • apache-tomcat-11.0.9安装及环境变量配置
  • 聊一聊RPC接口测试工具及方法
  • MonoFusion 与 Genie 3
  • Apollo中三种相机外参的可视化分析