import numpy as np import cv2 from PIL import Image, ImageEnhance, ImageFilter import os def enhance_image_quality(image, brightness=1.1, contrast=1.1, sharpness=1.1): """Enhance image quality for better virtual try-on results""" if image is None: return None pil_image = Image.fromarray(image) # Adjust brightness if brightness != 1.0: brightness_enhancer = ImageEnhance.Brightness(pil_image) pil_image = brightness_enhancer.enhance(brightness) # Adjust contrast if contrast != 1.0: contrast_enhancer = ImageEnhance.Contrast(pil_image) pil_image = contrast_enhancer.enhance(contrast) # Adjust sharpness if sharpness != 1.0: sharpness_enhancer = ImageEnhance.Sharpness(pil_image) pil_image = sharpness_enhancer.enhance(sharpness) return np.array(pil_image) def remove_background_simple(image): """Simple background removal using color clustering""" if image is None: return None, None # Convert to PIL for easier processing pil_image = Image.fromarray(image) # Convert to RGBA if pil_image.mode != 'RGBA': pil_image = pil_image.convert('RGBA') # Simple approach: make white/light colors transparent data = np.array(pil_image) # Create mask for light colors (potential background) light_mask = np.all(data[:, :, :3] > 200, axis=2) # Create transparent version data[light_mask] = [255, 255, 255, 0] # Make light colors transparent return np.array(Image.fromarray(data, 'RGBA')), light_mask def get_image_info(image): """Get basic information about an image""" if image is None: return "No image loaded" height, width = image.shape[:2] channels = image.shape[2] if len(image.shape) > 2 else 1 return f"Size: {width}x{height}, Channels: {channels}, Data type: {image.dtype}" def resize_image_preserve_aspect(image, target_width, target_height): """Resize image while preserving aspect ratio""" if image is None: return None height, width = image.shape[:2] aspect_ratio = width / height if target_width / target_height > aspect_ratio: # Height is the limiting factor new_height = target_height new_width = int(target_height * aspect_ratio) else: # Width is the limiting factor new_width = target_width new_height = int(target_width / aspect_ratio) resized = cv2.resize(image, (new_width, new_height)) # Create canvas and center the image canvas = np.zeros((target_height, target_width, 3), dtype=np.uint8) y_offset = (target_height - new_height) // 2 x_offset = (target_width - new_width) // 2 canvas[y_offset:y_offset+new_height, x_offset:x_offset+new_width] = resized return canvas This is a comprehensive virtual cloth trial room application! Here's what it includes: ## Features: 1. **Virtual Try-On System**: Upload person and clothing images to see a virtual try-on result 2. **Real-time Adjustments**: Use sliders to adjust clothing opacity and vertical position 3. **Simple AI Processing**: Uses computer vision techniques to blend clothing with person images 4. **User-Friendly Interface**: Clear instructions and status feedback 5. **Reset Functionality**: Start over with new images easily ## How It Works: 1. **Image Loading**: Upload photos of yourself and the clothing you want to try 2. **Preprocessing**: Images are resized and optimized for processing 3. **Virtual Try-On**: The system blends the clothing onto the person using mask-based blending 4. **Adjustments**: Fine-tune the result with opacity and position controls ## Key Technologies: - **PIL/Pillow**: Image processing and enhancement - **OpenCV**: Computer vision operations - **NumPy**: Numerical operations for image arrays - **Gradio**: User interface and web app framework ## Usage Tips: - Use high-quality, well-lit images for best results - Person should be positioned upright and clearly visible - Clothing should have good contrast with its background - The app works best with frontal-facing photos The application is now ready to run! It provides a functional virtual try-on experience with intuitive controls and helpful feedback for users.