缘起

最近手上拿到了几本书的 PDF 扫描版本,可惜分辨率过低,看着辣眼睛。急切需要将这几份 PDF 文件恢复到较高的分辨率。

Adobe Acrobat 这款商用软件应该提供了这个功能。但是,一是之前 NKU 给的教育账号早已失效,二是我既不想用盗版软件也不想使用付费的专有软件,因此我希望找到 FOSS 的替代方案。

工具简介

这两天在 GitHub 上偶然搜到了一个名为“书之溯源 SourceBook”的仓库。该仓库实现了使用超分辨率技术将低分辨率的扫描书恢复为高分辨率的功能。

模型

作者在 Readme 中介绍,本软件使用的模型是 Real-ESRGAN。想深究具体原理的朋友可以读读 ESRGANReal-ESRGAN 等相关论文。

模型训练使用的数据集 是由作者自行搜集的。

使用工具

作者提供了两种方式:

一种是在本地 Windows/Linux 系统上运行的软件包(需要安装 Java 依赖)。由于我特别不希望在本地安装这些乱七八糟的依赖工具来“污染”我的硬盘,遂弃之。本文也不涉及此种方式的使用。

另一种是在谷歌 Colab 平台上白嫖算力,作者也贴心地把 链接 放出来了。本文大概描述一下使用这种方式的流程:

  1. 首先运行初始化的代码,下载相应的包。

  2. 上传 PDF 文件到 Colab 平台上。⚠️这里建议先把 PDF 文件上传到谷歌网盘中,再装载谷歌云盘到 Colab。这样比直接上传到 Colab 平台上稳妥一些。

    确认目标文件位于 Real-ESRGAN/upload 位置。

  3. 根据代码提示,输入文件名,设置导出图片,操作的相关参数。运行对应的代码片段。

    代码的逻辑大概是:先把 PDF 拆分成一张一张的图片,暂存到 Real-ESRGAN/upload/(文件名)_pdfimg/ 文件夹中;然后使用训练好的模型对这些图片一张一张的提升分辨率,结果暂存到 Real-ESRGAN/upload/(文件名)_pdfimg_2x/ 文件夹中。

  4. 运行”把图片打包回 pdf 文件“的代码片段。

    这一步就是用 Real-ESRGAN/upload/(文件名)_pdfimg_2x/ 的图片去替换掉原来 pdf 文件中对应的页面,执行完的结果另存为 Real-ESRGAN/upload/(文件名)[source-book].pdf

    得到的这个结果就是最终想要的,可以直接下载,也可以扔硬盘里再下载。

    之后的代码片段我就没管了。朋友们使用的时候按需运行即可。

待改进的地方

首先感谢作者提供了一个不错的工具🌹

但此处也提出一些值得改进的地方:

  • 有的 PDF 文件中的页面虽然很糊,但是分辨率很高。在这种情况下根据代码设置会直接跳过。因此需要手动的去将这种页面的分辨率调低,不方便。

  • 待处理的文件不能太糊,否则重建出来太奇怪了。一个特别糊的拉丁字母文档经过分辨率增强后亲测可能会变成”希伯来语字母“文档😓