今回は、架空の顔写真を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.9 | 3.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.xml | https://drive.google.com/uc?id=1HL0BkZtKo22cThTVXpPqOBZG6a__OI_s |
MappingNetwork.bin | https://drive.google.com/uc?id=1B8i2bSxfCAu9jKSQouN2rY7hqEQQemU9 |
SynthesisNetwork.xml | https://drive.google.com/uc?id=1iLiwYRHwwrTnwHCYsMNBAlAINdjnr_Dc |
SynthesisNetwork.bin | https://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 であること、そしてモデルを手動でダウンロードする必要があることです。
このポイントを押さえておけば、簡単にインストールできますので、興味のある方は是非挑戦してみてください。
コメント