初めてのAntigravity IDEよるバイブコーディング
AI技術で画像を極限まで美しく!個人開発で「高画質化デスクトップアプリ」を作った全プロセスまとめこんにちは!本日は、AI(人工知能)を活用して画像の解像度を上げつつ、ノイズ除去やシャープネス調整、さらに人物の「顔・瞳・髪の毛」の不自然さを解消する**超本格的なデスクトップ画像アップスケーラーアプリ「AI Image Upscaler & Sharpener EX」**を開発した流れと、その技術的な裏舞台をブログ記事としてまとめました。PythonとPyTorch、 Redmondや最新のAIモデル(Real-ESRGAN & GFPGAN)を組み合わせ、GPUを活用した高速処理とモダンなダークモードUIを備えた実用的なツールが完成するまでのストーリーです。1. 作成したアプリ「AI Image Upscaler & Sharpener EX」の概要今回開発したのは、低解像度の画像をAIの力で4倍に拡大し、さらに画質を劇的に向上させるWindowsデスクトップアプリケーションです。主な特徴と機能 超解像アップスケーリング: AIモデル(Real-ESRGAN)により、ディテールを保ったまま画像を4倍に拡大。 人物・顔の超高画質化: GFPGAN(ONNX Runtime)を統合し、AI拡大で不自然になりがちな「瞳」や「髪の毛」「肌の質感」をピンポイントで補正・美化。 直感的な「Before / After」比較: 中央のスライダーをドラッグすることで、処理前と処理後の画質を左右でダイレクトに比較可能。さらにマウスホイールによる自由な「位置基準ズーム」と「ドラッグ移動(パン)」に対応。 画質自動チューニング(被写体別プリセット): 生物、物質、風景写真などの対象に合わせ、ノイズ除去(Denoise)やシャープネス(Sharpness)の強度を適正値に自動調整。 モダンなUI/UX: CustomTkinterを採用した、目に優しいプレミアムなダークモードデザイン。 進捗インジケーター: 進捗率(%)と処理ステータスをリアルタイムでバー表示。2. 開発で使用した技術スタックデスクトップアプリとして完結し、かつローカルPCのパワーを最大限に引き出すために以下の技術を採用しました。 言語: Python 3.13 GUIフレームワーク: CustomTkinter (Tkinterをモダンに拡張したライブラリ) ディープラーニングフレームワーク: PyTorch 2.6.0 (CUDA 12.4対応でGPUをフル活用) AI超解像モデル: Real-ESRGAN (RRDBNet) RealESRGAN_x4plus (標準・高精度 23ブロックモデル) RealESRGAN_x4plus_anime_6B (高速・アニメ用 6ブロックモデル) 顔復元モデル: GFPGAN v1.4 (ONNX Runtimeによる高速実行) 画像処理: OpenCV, Pillow (PIL), NumPy3. アプリ作成のステップ・開発の流れ開発は以下の5つのフェーズに分けて段階的に進めました。Step 1: 開発環境の構築Python 3.13と、NVIDIA製GPU(RTX 3080)のパワーを引き出すためのCUDA環境(PyTorch + CUDA 12.4)を仮想環境(venv)内に構築しました。最新のPython 3.13ではライブラリの対応バージョンがシビアなため、互換性のあるホイールを厳選してインストールしました。Step 2: AIアップスケールエンジンの実装まずはGUIなしで、画像を読み込んでAIで拡大するコアロジック(upscaler.py)を作成しました。PyTorchによるGPU処理、メモリを節約するためのハーフ精度(FP16)オートキャスト、および画像サイズが大きい場合に分割処理するタイリング機能(タスク切り分け)を実装しました。Step 3: GUIの基礎構築とマルチスレッド化CustomTkinterを使って基本ウィンドウを作成しました。AIの重い処理中に画面がフリーズするのを防ぐため、画質向上処理はすべてバックグラウンドのスレッドで実行し、メインスレッド(UI側)へ進捗率(%)を通知するキューシステムを実装しました。Step 4: 「Before/After」比較UIの極限強化ここが一番こだわったポイントです。単に画像を並べるだけでなく、スクロールホイールで「マウスカーソルの位置を中心に拡大・縮小」ができ、さらに左ドラッグで自由に画像を移動(パン)できる本格的なキャンバスUIを自作しました。スライダーを動かすと、拡大・縮小された状態のままリアルタイムで超解像前後の比較ができます。Step 5: 被写体別プリセットと顔復元(GFPGAN)の追加「人物を拡大したときに瞳や髪の毛が不自然になる」という課題をクリアするため、テンセント社が開発した顔修復AI「GFPGAN」をONNX Runtime経由で統合しました。さらに、生物・物質・風景などの被写体タイプを選択するだけで、適切なノイズ除去とシャープネスが自動適用される機能を組み込みました。4. 開発中に発生した技術的トラブルと解決策個人開発にエラーはつきもの。今回もいくつかの大きな壁にぶつかりましたが、知恵を絞って解決しました。① 顔修復モデル(GFPGAN)のダウンロードリンクが401エラーに! 問題: GFPGANモデルの公式ダウンロード先がリンク切れや認証エラー(401)を起こし、アプリ起動時やモデルロード時にクラッシュする問題が発生。 解決策: 堅牢性を高めるため、複数の信頼できるミラーURL(Hugging Face等)をリスト化し、どれか1つが失敗しても自動的に次のURLからダウンロードを試行する「マルチミラーフォールバックシステム」を実装しました。また、万が一ダウンロードが完全に失敗した場合でも、顔復元機能のみを優雅にスキップして処理を続行する例外処理を施しました。② PyTorch 2.6.0の警告エラー対応 問題: コード内で使用していた torch.cuda.amp.autocast がPyTorchの最新バージョンで非推奨となり、警告やエラーが発生。 解決策: 最新の書き方である torch.amp.autocast('cuda', ...) にコードをアップデートし、最新の環境でも警告なしで最適に動作するように修正しました。③ アプリがはみ出るレイアウト問題 問題: 低解像度のノートPCの画面などで、UIパーツや比較画像の一部が画面外にはみ出て見えなくなってしまう問題が発生。 解決策: ウィンドウの初期サイズを適切に調整するとともに、画像表示部がウィンドウのサイズ変更に応じて自動的に引き伸ばされるレスポンシブなグリッドレイアウト(grid_rowconfigure/grid_columnconfigure)に再設計しました。5. こだわりの機能紹介🌟 被写体プリセットによる最適化AIによる高画質化は、被写体によって最適なパラメータが異なります。 生物: 毛並みや肌を柔らかく保つため、ノイズ除去を「弱」、シャープネスを「中」に。 物質: 金属や文字の輪郭を際立たせるため、シャープネスを「強」に。 風景: 空などのノイズを消しつつディテールを残すため、ノイズ除去を「強」、シャープネスを「中」に。 これらをワンクリックで切り替えられるようにしました。🌟 顔復元(GFPGAN)の効果特に人物の顔部分(特に瞳と髪の毛)は、通常の超解像AIだけだと不自然なドット感が出てしまいます。GFPGANを組み合わせることで、ぼやけた目元がパッチリとクリアになり、髪の毛の質感も驚くほど自然に復元されるようになりました。6. まとめと今後の展望今回、AIの技術をぎゅっと詰め込んだデスクトップアプリを無事完成させることができました。Pythonの強力なAIライブラリ群と、CustomTkinterによるモダンなGUI開発の組み合わせは非常に強力で、個人開発とは思えないクオリティのツールを構築することができました。一応、プログラムを起動させたアプリの画像も載せておきます!このアプリケーションは完全ローカル環境で動作するため、アップロードした画像が外部のサーバーに送信される心配がなく、プライバシー面でも非常に安全です。