この記事は公開から1年以上経過しています。
久々にTencentARC GFPGANを使ってみたので、今更ながらPythonからダイレクトに手軽に顔写真の高解像化を試す方法を紹介します。
検証環境はLinux(Ubuntu 22)+GPU(RTX3060 12GB)+Python(3.10)です。
風景画やアニメ画を高解像化したい場合はこちらのエントリ「PythonでReal ESRGANを使った写真高解像化を行う方法」をご参照ください。
サンプルソースコード
モデルのダウンロードサイズが数百MBありますので、通信環境にご注意ください。
pip:
basicsr
gfpgan
opencv-python
pillow
realesrgan
torch
main.py
import cv2
from basicsr.utils import imwrite
from gfpgan import GFPGANer
import torch
INPUT_IMG_PATH = 'input.png'
OUTPUT_IMG_PATH = 'output.png'
MODEL_PATH = 'https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.4.pth'
bg_upsampler = None
if torch.cuda.is_available():
from basicsr.archs.rrdbnet_arch import RRDBNet
from realesrgan import RealESRGANer
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64,
num_block=23, num_grow_ch=32, scale=2)
bg_upsampler = RealESRGANer(
scale=2,
model_path='https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.1/RealESRGAN_x2plus.pth',
model=model,
tile=0,
tile_pad=10,
pre_pad=0,
half=True)
gfpganer = GFPGANer(model_path=MODEL_PATH,
channel_multiplier=2, bg_upsampler=bg_upsampler)
img = cv2.imread(INPUT_IMG_PATH, cv2.IMREAD_COLOR)
cropped_faces, restored_faces, restored_img = gfpganer.enhance(img)
imwrite(restored_img, OUTPUT_IMG_PATH)
コードは説明するまでもないですが、入力画像、出力画像、学習済モデルを指定しているだけです。
背景の高解像化を行わない場合は、Real-ESRGAN部分は無くても問題ありません。
検証結果
よくあるサンプル画像を使って試すのも味気ないので、夏っぽい爽やかなモデル画像を使って試してみました。
ちなみに、このモデルは過去のエントリ「Stable Diffusionをローカル環境で使用する方法」のコードを使ってStable Diffusion(safetensors)で適当に生成した架空の人物です。
【オリジナル(768×768)】
【入力画像(768×768 → 96×96 → 512×512)】
【出力画像(1024×1024)】
ちょっと目元メイクが崩れて気分が↷してしまった感じは否めませんが、同じ人物かな?と分かる程度に高解像化できているのではないか、と思えます。
ちなみに、上記サンプルコードは高解像を試すのに必要最低限の部分+αを抜粋していますので、あれこれやってみたい場合は参考ウェブサイトをご参照ください。
参考ウェブサイトなど
以上です。