Perspec 1.0
2026-07-29 — 3020 字 — 16 分钟 我非常高兴地宣布 Perspec 1.0 版本发布!Perspec 是一款用于纠正图像透视的桌面应用程序。这主要适用于文件和收据的照片,但也可以用于任何类型的图像。这终于成为了我在 9 年前开始这个项目时设想的应用程序。我没想到会花这么长时间才能到达这里,但我很高兴这个结果,希望你们也会喜欢! 最初的动机 你可能熟悉移动电话上可用的扫描仪应用程序,比如 Adobe Scan、vFlat、SwiftScan 等,以及其他众多应用。扫描功能还集成在 Dropbox 中,如今甚至在 iOS 中都是原生的。然而,我不喜欢在手机上工作,我宁愿拍下文件和收据,等到其他日子再处理整理它们。在电脑上,我有一个大屏幕、一个键盘和一个精确的鼠标,这使得编辑更快更准确。此外,移动应用在给用户熟悉的东西时做出了一些令人烦恼的技术决策。例如:如果将文档存储为灰度 PNG,可以获得较小的文件大小而不会引入任何压缩伪影。然而,所有流行的应用都会给你一个灰度 JPEG 图像,文件大小更大,图像质量更差,只因为 JPEG 是人们熟悉的格式。也许我给他们的评价太高了,他们实际上并不知道如果图像包含大面积均匀颜色,PNG 可以比 JPEG 更小,而对于正常照片,JPEG 又比 PNG 小。并且,之后将其转换为 PNG 也不是一个选项,因为到那时图像已经包含了所有 JPEG 压缩伪影。 例如,让我们比较扫描以下文档的结果:其他应用生成的文件更大,你可以清楚地看到压缩伪影影响了结果。 应用 结果 预览 备注 Perspec ~110 kB, PNG 查看结果 Scanner Pro ~190 kB, JPEG 查看结果 从导出的 PDF 中提取的 JPEG iOS ~300 kB, JPEG 查看结果 从导出的 PDF 中提取的 JPEG 还有一件让我烦恼的事情就是几乎每个应用如今都包含的荒唐检测预览:在你拍照时,应用会实时显示它检测到文档的位置。然而,这根本没有帮助。仅仅因为它可以在预览视频中正确检测文档,并不意味着它会在最终照片中正确检测。由于更高的分辨率、不同的光照(曝光时间、闪光灯等)和不同的对比度,最终照片中的检测结果往往会有所不同。因此,所有的预览告诉你的是,确实相机前面有一个文档,这一点你已经知道,因为你把它放在了那里。🤦♂️ 最后,也是最重要的,我知道我可以为我拍摄的那种照片构建一个更好的文档检测算法。现有应用中的检测程序通常会略有偏差,即使你有一张与背景形成良好对比的好照片。大多数应用在其流程中使用某种边缘检测步骤,正如 Dropbox 在这里解释的那样。但我知道文档和收据通常没有直边,而是皱折或曲线。当你尝试将稍微的曲线与直线匹配时,端点会相距甚远。因此,该应用应该尝试检测角落,并从那里构建文档。稍后会有关于计算机视觉技术的详细说明。 通向 1.0 的漫长道路 我在开始制作 Perspec 时仍然是一名学生,必须为我的研究扫描很多东西,因此我有大量动机去构建这样的东西。当然,你也可以用 Photoshop、Affinity Photo 或 GIMP 修复透视。但是开销是相当大的:打开每张照片,找到透视工具,拖动角落,选择正确的导出设置,对下一张照片重复这一过程,等等。这些工具是为处理任何图像而设计的,而不是为了尽可能快地处理 50 张收据。我想要一款专注于这一单一任务的应用,工作流程尽可能简化。 我的第一版是一个名为 Perspectra 的完全自动化 CLI 应用,使用 Python 和 scikit-image 实现。你只需传入你的图像,它将尝试为你检测和提取文档。就这么简单。尽管我实际上喜欢 scikit-image — 功能丰富,但比 OpenCV 更简单 — 但我很快意识到我绝对不喜欢 Python。但更重要的是,我意识到我还需要一个 GUI 来修复错误检测到的文档边界,因为完全自动化的计算机视觉流程永远不会将所有文档 100% 正确地处理。而如何构建带有 GUI 的桌面应用呢?显然用 Haskell。😝 先开个玩笑,我最近开始学习 Haskell,并且非常喜欢它。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡