优秀的编程知识分享平台

网站首页 > 技术文章 正文

开源前线|扫描识别PDF,并转为MarkDown格式,支持本地AI模型!

nanyue 2025-04-26 20:01:47 技术文章 3 ℃

大家好,我是Jack Bytes,一个专注于将人工智能应用于日常生活的程序猿,平时主要分享AI、NAS、开源项目等。

最近很多人问我怎么识别PDF格式的书籍并转换为其他可以编辑的格式,目前主流的商业软件其实都支持这个功能,但基本都需要收费。

今天给大家介绍一款开源项目:pdf-craft,能够将PDF文件转换为各种其他格式,下面我们一起来看下吧!

项目介绍

pdf-craft是一个开源的PDF处理项目,能够把pdf转换为其他格式,并支持将PDF一页一页读出,使用AI模型将pdf中的正文提取出来,并过滤掉页眉、页脚、脚注、页码等元素。并且还会使用算法判断前后文跨页衔接的问题,生成语义通顺的文本。

使用的主要技术:

  • OCR文本识别技术
  • Layoutreader模型
  • 大语言模型

安装

在安装之前,需要准备好python 3.10以上的环境,然后执行下面的命令进行安装:

pip install pdf-craft
pip install onnxruntime==1.21.0

GPU加速

如果你有GPU设备,并且希望使用GPU进行加速,可以先确保已经准备好CUDA环境,然后把上面的pip install onnxruntime==1.21.0替换成下面的命令:

pip install onnxruntime-gpu==1.21.0

功能

PDF转为MarkDown

这个功能无需调用远程LLM,只需要本地算力即可完成,需要注意的是第一次调用会联网下载所需的模型,如果遇到插入、表格、公式,会直接截图插入到MarkDown文件中。如下面的代码所示:

from pdf_craft import PDFPageExtractor, MarkDownWriter

extractor = PDFPageExtractor(
  device="cpu", # 如果希望使用 CUDA,请改为 device="cuda" 这样的格式。
  model_dir_path="/path/to/model/dir/path", # AI 模型下载和安装的文件夹地址
)
with MarkDownWriter(markdown_path, "images", "utf-8") as md:
  for block in extractor.extract(pdf="/path/to/pdf/file"):
    md.write(block)

转化效果如下:

PDF转化为EPUB

前面的操作和上面一样,使用OCR从PDF中扫描并识别文字:

from pdf_craft import PDFPageExtractor

extractor = PDFPageExtractor(
  device="cpu", # 如果希望使用 CUDA,请改为 device="cuda" 这样的格式。
  model_dir_path="/path/to/model/dir/path", # AI 模型下载和安装的文件夹地址
)

然后,配置LLM模型,作者推荐使用DeepSeek:

from pdf_craft import LLM

llm = LLM(
  key="sk-XXXXX", # LLM 供应商提供的 key
  url="https://api.deepseek.com", # LLM 供应商提供的 URL
  model="deepseek-chat", # LLM 供应商提供的模型
  token_encoding="o200k_base", # 进行 tokens 估算的本地模型名(与 LLM 无关,若不关心就保留 "o200k_base")
)

然后就可以开始扫描并分析书籍了:

from pdf_craft import analyse

analyse(
  llm=llm, # 上一步准备好的 LLM 配置
  pdf_page_extractor=pdf_page_extractor, # 上一部准备好的 PDFPageExtractor 对象
  pdf_path="/path/to/pdf/file", # PDF 文件路径
  analysing_dir_path="/path/to/analysing/dir", # analysing 文件夹地址
  output_dir_path="/path/to/output/files", # 分析结果将写入这个文件夹
)

分析结束之后,把output_dir_path文件夹传给下面的代码作为参数,即可生成EPUB文件:

from pdf_craft import generate_epub_file

generate_epub_file(
  from_dir_path=output_dir_path, # 来自上一步分析所产生的文件夹
  epub_file_path="/path/to/output/epub", # 生成的 EPUB 文件保存路径
)

效果如下图:

进阶功能

这个项目还有一些进阶功能,如多重OCRLLM进阶等等,可以进一步提高识别的质量,大家感兴趣的可以去试试!

我是Jack Bytes

一个专注于将人工智能应用于日常生活的半吊子程序猿!

平时主要分享AI、NAS、Docker、搞机技巧、开源项目等技术,喜欢的话请关注吧!

最近发表
标签列表