アルバムに貼ってあった古い写真をスキャンしてみたものの、顔の部分がつぶれていて誰なのか分かりにくい、ということはよくあります。フィルムの粒子やスキャン時のノイズが顔の細部を埋めてしまうため、拡大するほど目や口の輪郭がぼやけていきますし、写真そのものが小さかったり昔の携帯電話で撮った低解像度の画像だったりする場合はなおさらで、そのままでは印刷にも使えません。
修復を依頼できるサービスはありますが、料金がかかるうえに家族の写真を知らない事業者のサーバーへ預けることになりますし、無料の Web サービスもほとんどはアップロードが前提なので、どこかへ送る点は変わりません。
この記事では、私が作った「Media Tools」の顔復元ツールを使って、写真の顔を AI で描き直す手順を説明します。処理はすべてブラウザの中で動くため写真がどこかへ送信されることはなく、会員登録も料金も必要ありませんし、枚数の制限も設けていません。
- 必要なもの: 復元したい写真と、ブラウザ
- 必要ないもの: アプリのインストール、アカウント登録、料金、写真のアップロード
何ができて、何ができないか
先に範囲をはっきりさせておくと、このツールが描き直すのは検出した顔の部分だけで、背景も服も元のまま残ります。
やりたいこと | できるか |
|---|---|
ぼやけた顔、ノイズの乗った顔を鮮明にする | できる |
低解像度の顔の細部を補う | できる |
集合写真に写った複数の顔をまとめて処理する | できる |
背景や服を含めて写真全体を高画質にする | できない(別のツールと併用する) |
破れや折れ目、欠損した部分を埋める | できない |
本人と完全に同じ顔を復元する | できない |
いちばん誤解されやすいのが最後の行で、このツールが使っている「GFPGAN」はもっともらしい顔を生成するモデルであって、失われた情報を正確に取り戻しているわけではありません。元の写真が低画質であるほど推定に頼る割合が増えるため、仕上がりが本人とは少し違う印象になることがあり、証明写真のように本人性が重要な用途では後で説明する「復元の強さ」を下げて元の顔を混ぜる必要があります。
用意するもの
- 復元したい写真(JPG・PNG・WebP・HEIC などをそのまま読み込めます)
- ブラウザ(Chrome・Edge・Safari・Firefox のいずれか)
- 初回だけ約 165MB の通信(AI モデルの取得)
Python の環境を作る必要も、GPU 搭載の PC を用意する必要もありません。WebGPU に対応した環境では GPU を使い、対応していない環境では CPU に切り替わって動きます。私の環境で比べると 1 枚あたり GPU が 1.0 秒、CPU が 11.85 秒という差になります。
顔を復元する手順
手順は 3 つで、写真を読み込んで「実行」を押し、保存するだけになります。

低画質やぼやけた写真の顔を AI(GFPGAN)で復元する無料ツール。目・肌・輪郭を描き直して鮮明にします。ブラウザ内で推論するため写真は送信されません。
- 顔復元のページをブラウザで開きます。
- 復元したい写真をドロップするか、クリックして選びます。複数枚まとめて読み込めます。
- 「実行」を押すと処理が始まり、終わると「N 個の顔を復元」と表示されます。
初回は AI モデルの取得が入るぶん待たされることになり、私の環境(Radeon 780M / WebGPU)ではモデルの取得を含めて 36 秒から 113 秒かかりました。回線とサーバーの混み具合でここまで開きが出ますが、2 回目以降はモデルがブラウザに保存されるため、同じ写真が 1.0 秒で終わります。
処理が終わったら「比較」で元の写真と並べて確認できます。次の画像は 1900 年ごろに撮影された肖像写真を復元したもので、左が元の写真、右が復元後です。
目と眉の輪郭がはっきりして、フィルムの粒子で埋まっていた肌の階調も戻っていますが、その一方で髪の流れは元の写真より整っていて、この部分は生成されたものになります。
「復元の強さ」で本人らしさを残す
初期値の 1 は復元した顔をそのまま使う設定で、これを下げると元の顔を混ぜ合わせるため、生成による変化を抑えられます。
設定 | 向いている場面 |
|---|---|
1(初期値) | 誰が写っているか分かればよい場合 |
0.5〜0.7 | 本人の面影を残したい場合 |
0.3〜0.4 | ノイズだけ取れればよい場合 |
私は、家族の写真のように「本人かどうか」が意味を持つ写真では 0.5 から始めて、物足りなければ上げるようにしています。最初から 1 で処理するときれいにはなるものの、別人のような印象になってしまうことがあるためです。
先に拡大する
「先に拡大」を 2× か 4× にすると、AI アップスケールで写真全体を拡大してから顔を復元するので、小さい写真を印刷したい場合に向いています。顔以外の部分も一緒に大きくなります。
顔の鮮明さだけが目的なら「拡大しない」のままで構いません。拡大を挟むぶん処理が長くなりますし、元の大きさのままで十分なことも多いためです。
集合写真の顔もまとめて復元できる
顔は自動で検出されるので、何人写っていても枚数を指定する必要はありません。1894 年の集合写真(1280×1357)で試したところ、26 個の顔を 14.5 秒で処理しました。1 人あたり 0.56 秒という計算になります。
上が元の集合写真で、下はそこから 3 人分を切り出して拡大したものです。どの顔も目と口の輪郭がはっきりした一方、帽子の飾りや毛皮の襟は元のまま残っています。顔の範囲しか変わらないというのは、こういうことです。
写真全体を高画質にしたい場合は、「AI アップスケール」で拡大してから顔復元を掛けると効果的になります。「Real-ESRGAN」は顔の細部が苦手でのっぺりしやすく、GFPGAN は顔しか直さないので、両方を順に通すとお互いの弱点が埋まります。
復元されないときは顔が検出されていない
実行しても何も変わらないように見えることがありますが、その場合は顔が検出されていません。画面には「顔が見つからなかったため、そのまま書き出しました」と表示され、元の画像がそのまま出力されます。
原因はほぼ 1 つで、顔が小さすぎることです。顔の検出は写真の長辺を 640 ピクセルに縮めてから行い、そこで 24 ピクセルより小さい顔は捨てる作りになっているため、大きな写真に小さく写った顔ほど落ちやすくなります。先ほどの集合写真を 400 ピクセルまで縮めて試したところ、顔の大きさが 19 ピクセルほどになって 1 つも検出されませんでした。
対処法は、顔の周りを切り出してから掛け直すことです。同じ 400 ピクセルの写真から人が写っている部分だけを切り出して 800 ピクセルに拡大したところ、5 個の顔が検出されて 2.9 秒で復元できました。Media Tools には切り抜きのツールもあるため、同じブラウザの中で続けて処理できます。
元の写真 | 検出された顔 | 処理時間 |
|---|---|---|
集合写真 1280px | 26 個 | 14.5 秒 |
同 640px に縮小 | 24 個 | 12.9 秒 |
同 400px に縮小 | 0 個 | 0.12 秒 |
400px から顔の周りを切り出して 800px に拡大 | 5 個 | 2.9 秒 |
ぼけ具合そのものは検出の可否にほとんど影響しないようで、強くぼかした写真を読み込ませても顔は検出されて 1.05 秒で復元されましたし、横を向いた顔も問題なく検出されています。
写真はどこにも送られない
処理の流れは次のようになっています。
- 「RetinaFace」で顔の位置と、目・鼻・口の 5 点を検出する
- その 5 点が 512×512 の基準位置に重なるよう、顔を切り出す
- 切り出した顔を「GFPGAN v1.4」で描き直す
- 元の位置へ戻し、境目を羽根状のマスクでなじませる
これは GFPGAN の公式ツールが採っている手順と同じもので、私はそれをブラウザで動くように移植しました。推論は onnxruntime-web が担当し、WebGPU があればそれを、無ければ WebAssembly を使います。この間、写真は一度もネットワークへ出ません。取得されるのは AI モデルのファイルだけなので、通信の向きが普通の Web サービスとは逆になります。
移植で一番手こずったのはモデルの変換で、165MB を少しでも削ろうと onnxconverter-common を使って計算グラフごと fp16 にしたところ、CPU では正しく動くのに WebGPU では壊れた出力が返ってきました。結局、重みだけを fp16 にして計算は fp32 のまま残す形に落ち着いています。Python の CPU で検証しているだけでは気づけない種類の不具合だったため、今はブラウザ側で入出力の統計を出して確かめるようにしました。
よくある質問
無料で使えますか?
使えます。会員登録もログインも必要ありませんし、処理できる枚数にも制限を設けていません。
写真はサーバーに送られますか?
送られません。AI の推論はブラウザの中で動くため、読み込んだ写真が端末の外へ出ることはなく、初回に取得するのは AI モデルのファイルだけです。
スマートフォンでも使えますか?
使えます。ただし初回に約 165MB の通信が発生するので、Wi-Fi に接続した状態で試すほうが安全です。
GPU が無いと使えませんか?
使えます。WebGPU に対応していない環境では CPU(WebAssembly)で動くことになり、同じ写真で比べたところ GPU の 1.0 秒に対して CPU では 11.85 秒かかりましたが、処理そのものは同じで仕上がりにも差はありません。終わったあとに GPU と CPU のどちらで動いたかが表示されます。
本人と違う顔になります
GFPGAN の性質によるものです。「復元の強さ」を 0.5〜0.7 に下げると元の顔の特徴が残りますが、元の写真が低画質であるほど推定に頼る割合が増えるため、強さを下げても限界はあります。
破れた写真や、欠けた部分も直せますか?
直せません。このツールが扱うのは顔の細部だけなので、欠損を埋める用途には向いていません。
まとめ
古い写真の顔を復元するのに、アプリのインストールも会員登録も必要ありません。写真を読み込んで「実行」を押すだけで、顔の部分だけが描き直されます。
- 顔は自動で検出され、集合写真なら 26 個をまとめて処理できる
- 私の環境では 1 顔あたり 1.0 秒、モデルの取得を含む初回だけ 36 秒から 113 秒かかった
- 何も変わらないときは顔が小さすぎる。顔の周りを切り出してから掛け直す
- 本人と同じ顔が戻るわけではない。本人性が要るなら「復元の強さ」を下げる
- 写真はブラウザの外に出ないため、家族の写真でも扱いやすい

小さい画像や古い写真を AI(Real-ESRGAN)で 2 倍・4 倍に高画質化する無料ツール。ブラウザ内で推論するため画像は送信されません。WebGPU 対応、登録不要。
画像の背景を透過するのに、写真をどこかへアップロードする必要はありません。ブラウザーの中で動く AI で人物も商品も切り抜く手順と、2 つのモデルの使い分け、実測した処理時間をまとめます。

画像の変換・圧縮・切り抜き・AI 高画質化・背景除去、音声の変換・無音除去・音量調整、動画の変換・圧縮・トリム・字幕焼き込み・GIF 化を、アップロードせずブラウザ内で処理する無料ツール集。サイズ制限なし、登録不要。



