顔領域の匿名化(HypoX64/DeepMosaics を使用)

DeepMosaics を用いて,画像・動画の顔領域にモザイクを追加する.

DeepMosaics は,セマンティックセグメンテーションにより対象領域を求め,その領域にモザイクを追加する(add モード).逆に,モザイクを除去する clean モードも持つ.

配布ファイルの利用条件は,GitHub のページで確認すること.

謝辞:DeepMosaics の作者に感謝します

DeepMosaics の Windows 用 GUI 版のダウンロードと展開(解凍)

Windows 用の GUI 版は,DeepMosaics 0.5.1(2021 年 5 月公開)が最新である.CPU 版と GPU 版がある.
GPU 版の動作条件は,NVIDIA GPU(GTX 1060 以上),NVIDIA ドライバ 460 以上,CUDA 11.0 である.条件を満たさないときは CPU 版を使う.
  1. Microsoft Visual C++ 再頒布可能パッケージ(x64)をインストールする

    https://aka.ms/vs/16/release/vc_redist.x64.exe

  2. Web ページを開く

    https://github.com/HypoX64/DeepMosaics/

  3. ダウンロードのリンクをクリック(「Google Drive」をクリック).
  4. DeepMosaics 本体(DeepMosaics_0.5.1_cpuonly_windows_amd64.7z または DeepMosaics_0.5.1_gpu_windows_amd64.7z)をダウンロードする
    GitHub のリリースのページ https://github.com/HypoX64/DeepMosaics/releases からも同じファイルをダウンロードできる.
  5. 展開(解凍)する

    このとき,どのディレクトリ(フォルダ)に展開(解凍)したか,確認しておくこと.

    Windows での展開(解凍)に便利な 7-Zip: 別ページ »で説明
  6. 先ほどの Google Drive のページで,pretrained_models をダウンロードする
    右クリックメニューで「Download」を選ぶ.しばらく待つ.
  7. ダウンロードした .zip ファイルを,展開(解凍)する.
    Windows での展開(解凍)に便利な 7-Zip: 別ページ »で説明
  8. 展開(解凍)してできた学習済みモデルのファイルを確認する
  9. 学習済みモデルのファイルを,DeepMosaics を展開(解凍)してできたディレクトリの下の pretrained_models に置く.
    モザイクの追加・除去では,pretrained_models/mosaic の下にファイルを置く.

学習済みモデル

モザイクの追加・除去に用いる主な学習済みモデルは次の通りである.

add_face.pth:画像・動画中の顔にモザイクを追加する
clean_face_HD.pth:画像・動画中の顔のモザイクを除去する(メモリ 8GB 以上が必要)
mosaic_position.pth:モザイクの位置を求める.clean モードで必要である

このほかに,画風変換用の style_vangogh.pth などがある.

手の領域用のモデルは,現在配布されている学習済みモデルには含まれていない.Google Drive の oldVersions に,古いバージョン用のファイルがある.

GUI で使ってみる

  1. DeepMosaics を起動する
  2. 「step 1: choose video or image」で,動画ファイルもしくは画像ファイルを選択する. ここでは,付属のサンプル画像 imgs/ruoruo.jpg を選択してみる
  3. 「step 2: choose pretrained model」で,学習済みモデルを選択する.
    顔にモザイクを追加するので,add_face.pth を選ぶ
  4. 「Run」をクリックすると,処理が始まる
  5. result の下に結果のファイルができるので確認
  6. 再生してみる

    Windows 付属の Windows Media Player でうまく再生できないときは,VLC media player など,他の動画プレイヤーをインストールし試してみること.

  7. 演習:顔が写っている写真,ビデオを入手.「add_face.pth」で処理しなさい.

ソースコードの入手と準備

GUI 版には,Python プログラムから呼び出すための deepmosaic.py は含まれない.コマンドラインや Python プログラムから使うときは,ソースコードを入手する.
必要なもの: Python 3.6 以上,ffmpeg,PyTorch
  1. コマンドプロンプトを開き,次のコマンドを実行する
    git clone https://github.com/HypoX64/DeepMosaics.git
    cd DeepMosaics
    pip install -r requirements.txt
    
  2. 学習済みモデルのファイルを,DeepMosaics/pretrained_models/mosaic に置く.
  3. コマンドプロンプトで,次のコマンドを実行し,動作を確認する
    python deepmosaic.py --media_path ./imgs/ruoruo.jpg --model_path ./pretrained_models/mosaic/add_face.pth --mode add --gpu_id 0
    
    GPU を搭載していないパソコンでは,--gpu_id に -1 を指定する.この場合は CPU で処理される.

Python プログラムから使ってみる

GUI は 1 件ずつファイルを指定して処理する形になっているが,deepmosaic.py はコマンドラインから呼び出すこともできる.
ここでは,指定したフォルダに含まれる画像・動画ファイルすべてに対し,順番に「顔領域へのモザイク追加」処理を行う Python プログラムを示す.
deepmosaic.py が結果ファイルを result フォルダに出力するので,このプログラム側で出力先を指定する必要はない.
  1. 次のプログラムを,DeepMosaics のディレクトリの直下に保存する(例:batch_add_mosaic.py).
    # DeepMosaics の deepmosaic.py を用いて,
    # 指定フォルダ内の画像・動画すべてに,顔のモザイクを追加する
    
    import os
    import sys
    import glob
    import subprocess
    
    # 処理対象のファイルが入っているフォルダ
    INPUT_DIR = './imgs'
    
    # 学習済みモデルのパス
    MODEL_PATH = './pretrained_models/mosaic/add_face.pth'
    
    # 使用する GPU 番号(GPU を使わないときは -1)
    GPU_ID = '0'
    
    targets = sorted(glob.glob(os.path.join(INPUT_DIR, '*.*')))
    
    for media_path in targets:
        subprocess.run([
            sys.executable, 'deepmosaic.py',
            '--media_path', media_path,
            '--model_path', MODEL_PATH,
            '--mode', 'add',
            '--gpu_id', GPU_ID
        ])
    
  2. フォルダ INPUT_DIR に,匿名化したい画像・動画ファイルを入れておく.
  3. MODEL_PATH に,学習済みモデルのパスを指定する.
  4. コマンドプロンプトを開き,DeepMosaics のディレクトリに移動し,次のコマンドで実行する.
    python batch_add_mosaic.py
    
  5. 処理が終わると,result フォルダの下に,ファイルごとの結果(モザイクが追加された画像・動画)ができるので確認する.
    GPU を搭載していないパソコンでは,GPU_ID に -1 を指定する.この場合は CPU で処理される.