
2026/08/05 0:40
Perspec 1.0
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Perspec 1.0 は、2026 年 7 月 29 日にリリースされたデスクトップアプリケーションであり、Adobe Scan、vFlat、SwiftScan、Dropbox またはネイティブスキャナーなどのモバイル代替手段よりも高い品質で文書や領収書の画像の視差を補正し、精密な編集を行うことを目的としています。より小さなグレースケール PNG ファイルを生成するだけでなく、Python/Haskell の抽象化オーバーヘッドを回避するために純粋な C ライブラリ(FlatCV)を採用することで、Windows、macOS、Linux 上で高いパフォーマンスを実現しています。標準的なモバイルアプリが直線検出で苦戦するのに対し、Perspec はフォーンストナー検出器によるサブピクセル精度を含む自動コーナー検出を活用し、皺のある面や曲面、不平整な表面を効果的に処理します。画像処理パイプラインには、256×256 ピクセルへのダウンスケール、高さマップ用のソベルフィルタリング、流域セグメンテーション、ぼかしによる減算によるシャドウ除去が適用され、その後にオースの方法(Otsu's Method)を用いて二値化が行われます。新しく追加された「Save BW Smooth」オプションは、二重閾値を使用してテキストのエッジをさらに精査します。今後のアップデートでは、A4 または US Letter 形式への出力サイズ標準化、領収書の QR コード検出機能、そして「Select Files」ビュー、ドラッグアンドドロップ対応、EXIF 回転処理といった機能を追加する予定です。現時点では、itch.io か Gumroad でライセンスキーが必要で、アップグレードバナーを除去するために使用されます。結局のところ、このソフトウェアはユーザーがモバイルデバイスに依存せず、コンピューター上で優れた画像品質を達成することを可能にします。
本文
Perspec 1.0 リリース記念:文書スキャンアプリの誕生と技術的アプローチ
2026 年 7 月 29 日、視差(歪み)補正のためのデスクトップアプリケーション Perspec の 1.0 版リリースを発表いたしました。 このプロジェクトは当初 9 年前から構想しており、ようやく思い描いたアプリが完成しました。
イニシャルな動機:なぜスキャンアプリを作るのか?
スマートフォン vs デスクトップ
Adobe Scan や vFlat などのスマートフォン向けスキャンアプリは一般的ですが、私はスマートフォンの作業を好ましくないと考えます。
- 大きな画面: コンピュータ上で画像を表示・編集できるため、より高速かつ正確な整地・整理が可能です。
- キーボードとマウス: マニュアル操作による精密な編集が容易です。
既存アプリの欠点
多くのモバイルアプリは、「ユーザーに優しい」という名目で不適切な技術的決断を強いることがあります。
- 画像フォーマットの問題:
- 均一な色のある文書スキャンでは、圧縮アーティファクトがない PNG を使用すべきですが、多くのアプリは「JPEG が一般的」という理由で画質低下を引き起こす グレースケール JPEG を提供します。
- JPG から PNG への変換は一度圧縮すると不可能です。
| アプリ | 結果形式 | ファイルサイズ概算 | 備考 |
|---|---|---|---|
| Perspec | PNG | 〜110 kB | 劣化なし |
| Scanner Pro | JPEG | 〜190 kB | 圧縮アーティファクトあり |
| iOS | JPEG | 〜300 kB | 圧縮アーティファクトあり |
「おかしな検出プレビュー」の問題
アプリはライブオーバーレイで書類の位置を示しますが、これは実質的に役に立ちません。
- プレビューでの検出=最終画像での検出ではありません。
- 解像度、照明条件、コントラストの違いにより結果が大きく変動します。
より優れた文書検出アルゴリズムの必要性
既存アプリ(エッジ検出+Hough 変換)では、しわくちゃな領収書や曲がったページの端部で角点が大きくズレてしまいます。
- Perspec のアプローチ: 直線ではなく**「輪郭から角点を導出」**します。
- FlatCV を使用した独自のコンピュータビジョン技術を採用。
1.0 への長い道:技術スタックの進化
学生時代より開発を始めた Perspec は、Photoshop や GIMP などの汎用ツールでは作業効率が低いため、特定のタスクに特化したアプリを追求しました。
開発言語とライブラリの選定歷程
- Python & scikit-image: 初期の CLI アプリ「Perspectra」で使用しましたが、自動化には不十分で手動修正用の GUI の必要性を感じました。
- Haskell + ImageMagick: Haskell 学習のため試行しましたが、外部プロセス呼び出しはプラットフォーム間のリンク設定とパフォーマンス面で課題がありました。
- OpenCV: Haskell バインディングは難航し、C++ コンテキストの経験不足もあり敬遠されました。
- Hip (Haskell Image Processing): ネイティブライブラリですが、Otsu 法など必要な機能が不足し、抽象化が複雑化するデメリットがありました。
- FlatCV (C ライブラリ + Haskell FFI): 最終的に決定しました。C 言語のシンプルさと Haskell の機能性を融合させ、SIMD や GPU 使用を視野に入れた高性能な画像処理ライブラリを開発しました。
- バージョン 0.3.0: 基本的な画像処理とアダプティブ二値化、角点検出を実装。
- バージョン 1.0: FlatCV を用いた自動角点検出機能の完全実成によりリリース可能に。
エッジ検出 vs コーナー検出:Perspec の独自技術
一般的なスキャンアプリは「画像縮小→エッジ検出→Hough 変換(直線検出)→交差点から四辺形構築」というパイプラインを使用します。しかし、これは平らな紙にしか適応しません。 しわくちゃな領収書や折れたページでは、直線で端を近似すること自体が誤りを招きます。
FlatCV による角点検出パイプライン
Perspec は**「文書の輪郭から角点を導出」**します。
- 画像縮小: グレースケール化し 256×256 に縮小(高速化)。
- ノイズ除去: ブラーリングでテクスチャと細かいノイズを除去。
- 高さにマッピング: Sobel フィルターでエッジを検出し、高さを山脈の稜線として表現。
- ウォーターシェード分割:
- 画像中心(文書)をシードし浸水させる。
- 境界(背景)をシードし浸水させる。
- 結果:文書の二値マスクを生成。
- マスク平滑化: 二値closing で境界を滑らかに。
- Förstner コーナーデテクタ: ハリス検出器とは異なり、サブピクセル精度の角点位置を返します。
- ソートと抽出: 最大角度を持つ 4 つの角点を保持。
- 解像度復元: 角点座標を元の解像度にスケーリングアップ。
- メリット: 曲線な文書境界も追跡可能。自動検出が不正確な場合でも、選択ポリゴンをドラッグして簡単に修正可能(自動+手動の両方を活用)。
二値化アルゴリズム:黒白変換の最適化
書類や領収書の場合、視差補正と同じく**「クリアな黒白画像への 변환」**が重要です。
課題:不均一な照明
Otsu の法則(ヒストグラムに基づく単一閾値)は均等照明には適していますが、影や明度勾配のある写真では機能しません。
FlatCV のスマートな黒白変換フロー
複雑な局所適応アルゴリズムに頼らず、以下の手順で高速かつ高精度に処理します。
- グレースケール変換。
- 重くぼかす: 画像の約 10% の半径でぼかし処理(照明の明度勾配と影のみを残す)。
- 差分を取る: ぼかしたコピーから元の画像を引く(低周波数の影を除去、高周波数の文字を残す)。
- Otsu 閾値適用: 均一照明された状態に仮定して二値化。
エクスポートオプション
- Save BW: 真の 1 ビット黒白画像(各ピクセルは完全な黒または白)。
- Save BW Smooth (推奨): 2 つの閾値を使用し、中間領域をスケーリングされたグレースケールで保持。
- 効果: アンチアリアシングにより文字が鋸歯状にならず、ファイルサイズはほぼ維持されます。書類、領収書、ホワイトボードに最適です。
1.0 リリースの主な新機能
自動角点検出に加え、以下の機能が強化・実装されました。
- Windows への対応: macOS/Linux の他、全ての主要デスクトップ OS で動作。
- インタラクション改善: 選択ポリゴンの端(角点だけでなく)をドラッグ可能に。グリッド線による調整サポート。
- ファイル操作: 新しい「Select Files」ビューと、画像のドロップ&ドロップサポートの追加。
- 出力品質向上: 「Save BW Smooth」オプションの実装により、印刷物への最適化。
- メタデータ処理: PNG の EXIF 回転データの自動処理対応。
- UI/UX アップデート: Brillo ライブラリの最新バージョン採用によるデザイン改善、ホバー効果、デフォルトフォントの適用。
インストール方法
リリースページから macOS、Windows、Linux のプリビルトバイナリをダウンロード可能です。
Homebrew (macOS) でのインストール例:
brew install --cask ad-si/tap/perspec
- ライセンス購入について: アップグレードバナーや「ライセンスのご購入ください」というメッセージを消去するには、itch.io または Gumroad でライセンスを購入する必要があります。Haskell アプリケーション開発への支援としてご検討ください。
コマンドラインでのバッチ処理: インストール後は CLI から以下のように実行できます。
perspec fix photos/*.jpeg
または、画像をアプリウィンドウにドロップすることも可能です。
次のステップと今後の計画
1.0 は大きなマイルストーンですが、将来のリリースで以下を実装予定しています。
- 固定出力サイズ: 出力を A4 または US Letter に強制し、スキャンされた文書の比例とサイズを標準化。
- QR コード検出: 領収書の自動化フローとして、QR コードからメタデータを抽出・追加する機能を実装(Marcel Robitaille氏の投稿に基づく)。
問題に遭遇した際や改善のアイデアがある場合は、Issue をお送りいただくか、@AdrianSieber へご連絡ください。ご意見は非常に歓迎いたします!