← На главную

Вышла Perspec 1.0: девять лет, своя C-библиотека, углы вместо рёбер

04.08.2026 15:40 · hackernews

Вышла версия 1.0 приложения Perspec — десктопного инструмента для исправления перспективы на фотографиях. Он заточен под снимки документов и чеков, но работает с любыми изображениями. Автор делал проект девять лет и наконец довёл до состояния, которое задумал изначально.

Всё началось с того, что ему надоело обрабатывать сканы на телефоне. Мобильные приложения вроде Adobe Scan, vFlat, SwiftScan, а также функции сканирования в Dropbox и iOS работают привычно, но не оптимально. Например, ч/б документ сохраняют как grayscale JPEG: файл больше, а качество хуже, чем у PNG с равномерными областями цвета. Плюс раздражают оверлеи детекции документа в реальном времени — они показывают только то, что документ лежит перед камерой, а не то, как алгоритм сработает на итоговом фото. Главное — существующие приложения часто находят границы неточно, особенно у мятых чеков с кривыми краями.

На пути к релизу автор перепробовал несколько вариантов: сначала CLI на Python и scikit-image, потом Haskell с ImageMagick и Hip, но в итоге написал собственную C-библиотеку FlatCV. Вместо детекции рёбер Perspec ищет углы. Обычный пайплайн — Canny, Hough transform, построение четырёхугольника — ломается, когда край бумаги изогнут: прямая линия не совпадает с кривой. Поэтому подход другой: изображение уменьшается до 256×256, размывается, через Sobel filter строится карта высот, потом watershed segmentation делит фото на документ и фон, бинарная маска сглаживается, метод Förstner даёт углы с субпиксельной точностью, и приложение выбирает четыре самых выраженных. Если алгоритм ошибся, углы и рёбра можно поправить вручную.

Вторая половина задачи — чистое ч/б изображение. Кнопка Save BW убирает тени до применения порога: делает grayscale, сильно размывает копию, вычитает её из оригинала, а затем использует Otsu's Method. Новый Save BW Smooth использует два порога и оставляет сглаженные края, поэтому текст не выглядит зазубренным, а размер файла почти не растёт.

В 1.0 появились поддержка Windows, перетаскиваемые рёбра выделения, новый экран выбора файлов, корректная обработка EXIF rotation для PNG и обновление Brillo. Сборки есть для macOS, Windows и Linux, на macOS можно поставить через Homebrew. Чтобы убрать баннер с напоминанием о покупке, нужна лицензия — её продают на itch.io и Gumroad. В планах — фиксированные размеры вывода вроде A4 или US Letter и детекция QR-кодов рядом с документами, как в посте Marcel Robitaille.

Читать оригинал →