Magicode logo
Magicode
1
8 min read

【悪用厳禁】モザイクを綺麗にとりたいんじゃ!

https://cdn.magicode.io/media/notebox/f0bc0b5f-0b1a-4708-95e5-f76b8d9273b0.jpeg

ヤること

モザイク付きの顔画像からモザイクを除去して綺麗にする。
ここでいう「綺麗」は「≒高画質」で進めます。
モザイク処理された顔画像を見たい時、ありますよね。

背景

Python でのモザイク除去って記事が多くあり大変参考になるのですが、
モザイク除去後の顔が歪だったりなんてことも少なくないので、
どうにかして綺麗にできないかなと。

環境

Google Colabolatory
MacOS Big Sur 11.6.8

手順

1. Google Colabの準備

まずはドライブをマウントしておきます。
以下の構成でファイル・フォルダを作成します
contents/
┗MyDrive/
  ┗mosaic/
    ┗mosaic.ipynb
mosaic.ipynbを作成したらPythonのversionを確認しておきましょう。
!python --version

2. DeepMosaicsのダウンロード

本章はこちらを参考にしてます。

2.1 必要モジュールのインポート

エラーが返ってこなければOKです。
!pip install opencv_python
!pip install matplotlib 
!pip install tensorboardX 
!pip install scikit-image

2.2 DeeepMosaicsをgitから取得

まずはディレクトリを移動します。
cd /content/drive/MyDrive/mosaic
gitからダウンロード
!git clone https://github.com/HypoX64/DeepMosaics.git
ダウンロードが完了したら移動
cd DeepMosaics
必要フォルダを作成します。
mkdir ./pretrained_models/mosaic
確認もしておきましょう。
ls

2.3 学習済みモデルのダウンロード

こちらから、以下の3つをローカルに保存します。
  • add_face.pth
  • clean_face_HD.pth
  • mosaic_position.pth
保存した学習済みモデルを以下のGoogle Driveにアップロードします。
contents/
    ┗MyDrive/
        ┗mosaic/
             ┗DeepMosaics/
                    ┗pretrained_models/
                           ┗models/
                               ┗add_face.pth
                               ┗clean_face_HD.pth
                               ┗mosaic_position.pth

3.モザイク処理

まずはモザイクをかけてみましょう。
画像はプリセットされているサンプル画像ruoruo.jpgを使用します。
# モザイク処理
!python deepmosaic.py --media_path ./imgs/ruoruo.jpg --model_path ./pretrained_models/mosaic/add_face.pth --gpu_id 0
実行結果
ノートブック上で確認します。
import matplotlib.pyplot as plt
from PIL import Image
mosaic_img = Image.open("/content/drive/MyDrive/mosaic/DeepMosaics/result/ruoruo_add.jpg")
plt.imshow(mosaic_img)
Before
After
無事にモザイク処理ができていることを確認できました。

4. モザイクを除去する(ここからが本番①)

前置きが長くなりました。長くなりすぎたのk...
実行します。
!python deepmosaic.py --media_path ./result/ruoruo_add.jpg --model_path ./pretrained_models/mosaic/clean_face_HD.pth --gpu_id 0
実行結果をノートブック上で確認。
mosaic_clean_img = Image.open("/content/drive/MyDrive/mosaic/DeepMosaics/result/ruoruo_add_clean.jpg")
plt.imshow(mosaic_clean_img)
Before
After
いい感じにモザイクが除去できました。

5. モザイク除去後の画像を綺麗にする(ここからが本番②)

これでは満足できないという探究心と知的好奇心に溢れたあなたのために、
この記事はまだ終わりません。
こちらを参考に進めます。

5.1 必要ライブラリのインポート

まずはディレクトリを移動します。
cd /content/drive/MyDrive/mosaic
必要ライブラリのインポート
!pip install timm

5.2 gitからSwinIRのダウンロード

!git clone https://github.com/JingyunLiang/SwinIR.git

5.3 学習済みモデルのダウンロード

gitから
003_realSR_BSRGAN_DFOWMFC_s64w8_SwinIR-L_x4_GAN.pth
をローカルにダウンロードします。
タブが省略表示されていてすぐに見つからないこともありますので要注意。
ローカルに保存されたら、以下のGoogleDriveに保存します。
content/
   ┗drive/
        ┗MyDrive/
            ┗mosaic/
                ┗SwinIR/
                    ┗003_realSR_BSRGAN_DFOWMFC_s64w8_SwinIR-L_x4_GAN.pth

5.4 いざ高画質化!

まずはディレクトリを移動します。
cd /content/drive/MyDrive/mosaic/SwinIR
今回はモザイク処理した画像・モザイク処理後にモザイク除去した画像で
どれくらい変わるのかなと思い、両画像ともそのまま高画質化させてみました。
必要に応じてファイルパスを変えていただければと思います。
!python main_test_swinir.py --task real_sr --model_path 003_realSR_BSRGAN_DFOWMFC_s64w8_SwinIR-L_x4_GAN.pth --folder_lq /content/drive/MyDrive/mosaic/DeepMosaics/result --scale 4 --large_model

5.5 結果発表

まずはノートブック上で確認してみましょう。
高画質化した画像は
/content/drive/MyDrive/mosaic/SwinIR/results/swinir_real_sr_x4_large/
に格納されています。
# モザイク処理画像
mosaic_SwinIR_img = Image.open("/content/drive/MyDrive/mosaic/SwinIR/results/swinir_real_sr_x4_large/ruoruo_add_SwinIR.png")
plt.imshow(mosaic_SwinIR_img)

# モザイク除去後画像
mosaic_clean_SwinIR_img = Image.open("/content/drive/MyDrive/mosaic/SwinIR/results/swinir_real_sr_x4_large/ruoruo_add_clean_SwinIR.png")
plt.imshow(mosaic_clean_SwinIR_img)
うーん・・・?
モザイク処理画像は一旦おいといて、モザイク除去後画像をまっさらなruoruo.jpgと比較しましょう。
元データ
モザイク処理→モザイク除去→高画質化
良いのでは!?

おわりに

もうちょっと薄いモザイクがかかった写真とかも試したいなー。
あくまで知的好奇心であっていかがわしい目的ではありません、断じて、ええ。

Discussion

コメントにはログインが必要です。