Mangaup / inference.py
K1Z3M1112's picture
Upload 5 files
26d17cd verified
import argparse
import os
import time
import numpy as np
import PIL.Image as Image
from denoisator import MangaDenoiser
from colorizator import MangaColorizator
from upscalator import MangaUpscaler
from utils.utils import distance_from_grayscale, save_image, clear_torch_cache
def process_image(image_path, output_folder, colorizer, upscaler, denoiser, config):
image_name = os.path.basename(image_path)
image = Image.open(image_path).convert("RGB")
image = np.array(image)
coloredness = distance_from_grayscale(image)
if coloredness > 1:
print(f"[+] {image_name} is already colored, skipping.")
return
if config.denoise:
print(f"[*] Denoising {image_name}...")
image = denoiser.denoise(image, config.denoise_sigma)
if config.colorize:
print(f"[*] Colorizing {image_name}...")
colorizer.set_image((image.astype('float32') / 255), config.colorized_image_size)
image = colorizer.colorize()
if config.upscale:
print(f"[*] Upscaling {image_name} by {config.upscale_factor}x...")
image = upscaler.upscale((image.astype('float32') / 255), config.upscale_factor)
output_path = os.path.join(output_folder, image_name)
save_image(image, output_path)
print(f"[+] Processed {image_name} -> Saved to {output_path}")
def main():
parser = argparse.ArgumentParser(description="Batch Colorize Images")
parser.add_argument("--input_path", type=str, default="input", help="Folder containing images")
parser.add_argument("--output_path", type=str, default="output", help="Folder to save processed images")
parser.add_argument('--device', choices=['cpu', 'cuda'], default='cuda', help='Device to use')
parser.add_argument('--colorizer_path', default='networks/generator.zip')
parser.add_argument('--extractor_path', default='networks/extractor.pth')
parser.add_argument('--upscaler_path', default='networks/RealESRGAN_x4plus_anime_6B.pt')
parser.add_argument('--upscaler_type', choices=['ESRGAN', 'GigaGAN'], default='ESRGAN')
parser.add_argument('--no-upscale', dest='upscale', action='store_false', default=True, help='Disable upscaling')
parser.add_argument('--no-colorize', dest='colorize', action='store_false', default=True,
help='Disable colorization')
parser.add_argument('--no-denoise', dest='denoise', action='store_false', default=True, help='Disable denoiser')
parser.add_argument('--upscale_factor', choices=[2, 4], default=4, type=int, help='Upscale by x2 or x4')
parser.add_argument('--denoise_sigma', default=25, type=int, help='How much noise to expect from the image')
config = parser.parse_args()
os.makedirs(config.output_path, exist_ok=True)
config.upscaler_tile_size = 256
config.colorizer_tile_size = 0
config.tile_pad = 8
config.colorized_image_size = 576 # Width
colorizer = MangaColorizator(config) if config.colorize else None
upscaler = MangaUpscaler(config) if config.upscale else None
denoiser = MangaDenoiser(config) if config.denoise else None
print("[+] Components initialized")
images = [f for f in os.listdir(config.input_path) if f.lower().endswith((".png", ".jpg", ".jpeg", ".webp"))]
for img in images:
process_image(os.path.join(config.input_path, img), config.output_path, colorizer, upscaler, denoiser, config)
print("[+] Batch processing complete")
clear_torch_cache()
print("[+] Components released")
if __name__ == "__main__":
main()