MENU

【Python】AIで架空の顔画像を生成しよう by Random Face

今回は、架空の顔写真をAIで生成したいと思います。

架空の顔画像生成は、StyleGAN2やStyleGAN3と呼ばれるニューラルネットワークアーキテクチャが主流ですが、処理速度や計算量といった課題も存在します。

今回紹介する Random Face は、StyleGAN2よりも処理速度が9.5倍、計算量が3.5倍も少ない軽量モデル「MobileStyleGAN」を使用しており、CPUのみで高速な顔画像生成を実現できるのが特徴です。

GitHub上で公開されているRandom Faceのインストール手順を読む限りでは簡単にインストールできそうですが、ライブラリのバージョンが当時と異なるため、正しくインストールできません。

また、簡単なデモプログラムは用意されているものの、単に画面に顔画像を表示するだけで、そのままではファイルに保存することもできません。

本記事は、2024年6月時点のWindows11上で、エラーなくインストールする手順と合わせて、フォルダと生成枚数を指定して画像生成する、オリジナルの簡易ツールのソースコードを紹介しています。

架空の顔画像を生成してみたい方は必見です。

目次

Random Faceの公式サイト

https://github.com/bes-dev/random_face

インストールの前提条件

Python/CUDAのバージョン

動作に必要な環境は次の通りです。

必要な環境・ライブラリバージョンなど備考
Python 環境Python 3.93.9 以外ではエラーになります
Git 環境その時の最新版

インストール手順の概要

次の手順でインストールを行います。既にインストール済みの場合はその手順を省いてください。

Step1
Python動作環境の構築
①Python 3.9の環境準備
②Gitの環境準備
Step2
Random Faceのインストール
GitからRandom Faceをインストール
Step 3
モデルファイルをダウンロード
mode zoo からモデルをダウンロードし、所定のフォルダにコピーします。

Random Face の公式ページに記載されているインストール手順には python download_model.py を実行するように記載されています。これはモデルをダウンロードするためのPythonプログラムですが、Windows環境ではダウンロードエラーが発生します。
本記事では、python_download_model.py に記載されているURLから直接モデルファイルをダウンロードする方法で対応しています。

インストール手順

Step1.Python動作環境の構築

【最初の一歩】生成AI向けPython環境構築手順(スクリーンショットで解説)」の記載内容を実行してください。

Random Face の公式ページには Python 3.8 + と書かれていますが、必ず Python 3.9 の環境を用意してください。Python 3.9 以外では何らかのエラーになり、正しくインストールできません。

また、Random Face はCPUだけで高速に動作するため、インストール項目 Step ①、②のみインストールするだけで動作します。

Step2.Random Faceのインストール

コマンドプロンプトを開き、次のコマンドを実行します。

pip install random_face

もし piop のバージョンが古い場合は、pip のバージョンアップを行っておきます。
次に、OpvenVinoをインストールしますが、新しいバージョンでは動作しないので、必ず 2021.4.2 を指定してください。

python -m pip install --upgrade pip
pip install openvino==2021.4.2

次に、git からソースコード一式をダウンロードし、必要なライブラリのインストールを行うため、次のコマンドを実行してください。

git clone https://github.com/bes-dev/random_face.git
cd random_face
pip install -r requirements.txt
pip install .

Step3.モデルファイルをダウンロード

OpenVino用に4つのモデルファイルをダウンロードする必要があります。下記のURLをクリックし、ダウンロードしてください。

モデルファイルダウンロードURL
MappingNetwork.xmlhttps://drive.google.com/uc?id=1HL0BkZtKo22cThTVXpPqOBZG6a__OI_s
MappingNetwork.binhttps://drive.google.com/uc?id=1B8i2bSxfCAu9jKSQouN2rY7hqEQQemU9
SynthesisNetwork.xmlhttps://drive.google.com/uc?id=1iLiwYRHwwrTnwHCYsMNBAlAINdjnr_Dc
SynthesisNetwork.binhttps://drive.google.com/uc?id=1A2DhRm3ys_9P86qQh-zrX6QA4JfZN7A8

URLをクリックすると、それぞれのURLについて下記のような画面が表示されるので、「このままダウンロード」をクリックします。

4つのモデルファイルのダウンロードが完了したら、Random Faceをインストールしたフォルダから数えて
random_face ⇒ random_face ⇒ data のフォルダにモデルファイルをコピーします。

デモプログラムの実行方法

コマンドプロンプトを開き、Random Face をインストールしたフォルダに移動します。

cd random_face

次のコマンドを入力すると顔画像が生成されます。顔画像の生成を中止するには、 キーボードの q を押してください。

python -m random_face.demo

使い方

Random Face を使うには、あらかじめコマンドプロンプトを開き、Random Face をインストールしたフォルダに移動しておきましょう。

cd random_face

サイトに紹介されているプログラムの実行

Pythonを起動します。

Python

次のソースコードをクリップボードにコピーして、Pythonの画面(インタープリタ画面)に張り付けて下さい。

import cv2
import random_face

engine = random_face.get_engine()
face = engine.get_random_face()
cv2.imshow("face", face)
cv2.waitKey()

顔画像が1枚だけ生成されます。

簡易プログラムによる顔画像生成

Python標準のUIライブラリ「Tkinter」で簡単な画面を作りました。 下記のソースコードをテキストエディタに張り付けて、ui.py という名前で保存してください。

# ui.py という名前で保存してください

import cv2
import random_face
import tkinter as tk
import datetime
from tkinter import filedialog

def get_folder_path():
  """
  Opens a file selection dialog and returns the selected folder path.
  """
  folder_path = filedialog.askdirectory()
  return folder_path

def generate_faces():
  # Get folder path and number of faces
  folder_path = folder_entry.get()
  num_faces = int(num_faces_slider.get())

  # Generate and save random faces
  for i in range(num_faces):
    face = engine.get_random_face()

    now = datetime.datetime.now()
    timestamp = now.strftime("%Y%m%d%H%M%S") + str(datetime.datetime.now().microsecond)[:3]
    cv2.imwrite(f"{folder_path}/face_{timestamp}.jpg", face)

  message_label.config(text=f"{num_faces}枚の顔を生成して保存しました。")

# Create the GUI
window = tk.Tk()
window.title("ランダム顔画像生成")

# Folder path label, entry, and button (row 1)
folder_frame = tk.Frame(window)
folder_frame.pack(padx=10,pady=10,side=tk.TOP, fill=tk.X, expand=True)  # Stretch horizontally
folder_label = tk.Label(folder_frame, text="フォルダパス:")
folder_entry = tk.Entry(folder_frame)
folder_select_button = tk.Button(folder_frame, text="参照", command=lambda: folder_entry.delete(0, tk.END) or folder_entry.insert(0, get_folder_path()))
folder_label.pack(side=tk.LEFT)
folder_entry.pack(padx=10,side=tk.LEFT, fill=tk.X, expand=True)  # Stretch entry horizontally
folder_select_button.pack(side=tk.LEFT)


# Number of faces slider (row 2)
num_faces_frame = tk.Frame(window)
num_faces_frame.pack(padx=10,pady=10,side=tk.TOP, fill=tk.X, expand=True)  # Stretch horizontally
num_faces_label = tk.Label(num_faces_frame, text="生成枚数:")
num_faces_slider = tk.Scale(num_faces_frame, from_=1, to=100, orient=tk.HORIZONTAL)

num_faces_label.pack(pady=10,side=tk.LEFT)
num_faces_slider.pack(side=tk.LEFT, fill=tk.X, expand=True)  # Stretch slider horizontally

# Generate button (row 3)
generate_button = tk.Button(window, text="生成", command=generate_faces)
generate_button.pack(padx=10,pady=20,fill=tk.X, expand=True)  # Stretch button horizontally

# Message label
message_label = tk.Label(window, text="")
message_label.pack(side=tk.LEFT, fill=tk.X, expand=True)  # Stretch message label horizontally

# Initialize the random face engine
engine = random_face.get_engine()

# Run the main loop
window.mainloop()

次のコマンドを実行すると、UI画面が表示されます。これは指定したフォルダに、指定した枚数だけ顔画像を生成し、保存する簡易プログラムです。

python ui.py

下記は実行結果のフォルダのキャプチャ画像です。

まとめ

今回は、架空の顔画像を生成するための Random Face というAIを紹介しました。

Random Face は、MobileStyleGANと呼ばれるアーキティクチャを使用しており、CPUのみでの高速な顔画像生成を実現しています。

Random Face を Windows11 で動作させるためには、Pythonとライブラリのバージョンを正しく合わせる必要があるため、本記事はその手順についてスクリーンショット付きで詳細に解説しました。

ポイントは Python のバージョンが 3.9、openvinoのバージョンが2021.4.2 であること、そしてモデルを手動でダウンロードする必要があることです。

このポイントを押さえておけば、簡単にインストールできますので、興味のある方は是非挑戦してみてください。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次