Zipファイルに保管した画像を一括でリサイズしたかったので。
Google Driveにzipファイルを保管し、ドライブ上に変換後のZipファイルを生成します。
GoogleDriveのルートディレクトリに[StableDiffusion]フォルダを作成していただき、一括リサイズしたいzipファイルを設置してください。
ランタイムの実行後、リサイズするフォルダを選択するフォームが表示されるので、該当する番号を入力するとファイルが出力されます。
# -*- coding: utf-8 -*-
"""Waifu2x
Automatically generated by Colaboratory.
"""
!apt-get install -y cmake libopencv-dev
!git clone https://github.com/DeadSix27/waifu2x-converter-cpp.git
!cd waifu2x-converter-cpp && mkdir out && cd out && cmake .. && make
!/content/waifu2x-converter-cpp/out/waifu2x-converter-cpp --help
from google.colab import drive, files
import os
import subprocess
from tqdm.notebook import tqdm
import zipfile
import shutil
# Google Driveをマウント
drive.mount('/content/drive')
# StableDiffusionフォルダの存在確認、なければ作成
stable_diffusion_path = '/content/drive/MyDrive/StableDiffusion'
if not os.path.exists(stable_diffusion_path):
os.makedirs(stable_diffusion_path)
print(f"StableDiffusionフォルダが作成されました。ZIPファイルをこのフォルダにアップロードしてください。")
files.upload()
else:
zip_files = [f for f in os.listdir(stable_diffusion_path) if f.endswith('.zip')]
# ユーザーにZIPファイルを選択させる
print("以下のZIPファイルが見つかりました。選択してください:")
for i, zip_file in enumerate(zip_files):
print(f"{i+1}. {zip_file}")
selected_index = int(input("選択したいZIPファイルの番号を入力してください:")) - 1
selected_zip_file = zip_files[selected_index]
# 入出力パス設定
drive_path = os.path.join(stable_diffusion_path, selected_zip_file)
input_dir = '/content/input_images'
output_dir = '/content/output_images'
waifu2x_path = '/content/waifu2x-converter-cpp/out/waifu2x-converter-cpp'
os.makedirs(input_dir, exist_ok=True)
os.makedirs(output_dir, exist_ok=True)
# ZIPを解凍
with zipfile.ZipFile(drive_path, 'r') as zip_ref:
zip_ref.extractall(input_dir)
# 画像を拡大
for image_file in tqdm(os.listdir(input_dir), desc='Processing images'):
input_path = os.path.join(input_dir, image_file)
output_path = os.path.join(output_dir, image_file)
model_dir = "/content/waifu2x-converter-cpp/models_rgb/" # 実際のモデルファイルのパスに置き換えてください
# waifu2xで拡大
result = subprocess.run(
[waifu2x_path, '-i', input_path, '-o', output_path, '--scale-ratio', '2', '--model-dir', model_dir],
capture_output=True,
text=True
)
# デバッグ情報を表示したいときはコメントアウトを外す
# if result.returncode != 0:
# print(f"Error processing {image_file}: {result.stderr}")
# else:
# print(f"Successfully processed {image_file}. Output: {result.stdout}")
# 処理が完了したら、出力ディレクトリ内の画像をZIPにまとめる
output_zip_path = os.path.join(stable_diffusion_path, "enlarged_images.zip")
with zipfile.ZipFile(output_zip_path, 'w') as zipf:
for root, _, files in os.walk(output_dir):
for file in files:
zipf.write(os.path.join(root, file), file)
# ZIPファイル作成後、一時ディレクトリを削除
shutil.rmtree(input_dir)
shutil.rmtree(output_dir)
print(f"画像の拡大が完了しました。出力ZIPファイルはGoogle DriveのStableDiffusionフォルダに保存されています:{output_zip_path}")
ぜひコメントを残していってください