| |
|
|
| |
| |
| |
| |
| |
|
|
| |
| |
|
|
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
|
|
|
|
|
|
| '''NEURAL STYLE TRANSFER ''' |
|
|
| import numpy as np |
| import tensorflow as tf |
| import tensorflow_hub as hub |
| import gradio as gr |
| from PIL import Image |
| import os |
| import logging |
|
|
| |
| logging.basicConfig(level=logging.INFO) |
| logger = logging.getLogger(__name__) |
|
|
| np.set_printoptions(suppress=True) |
|
|
| |
| try: |
| logger.info("Loading TensorFlow Hub model...") |
| model = hub.load('https://tfhub.dev/google/magenta/arbitrary-image-stylization-v1-256/2') |
| logger.info("Model loaded successfully!") |
| except Exception as e: |
| logger.error(f"Error loading model: {str(e)}") |
| raise |
|
|
| def tensor_to_image(tensor): |
| try: |
| tensor *= 255 |
| tensor = np.array(tensor, dtype=np.uint8) |
| if tensor.ndim > 3: |
| tensor = tensor[0] |
| return Image.fromarray(tensor) |
| except Exception as e: |
| logger.error(f"Error in tensor_to_image: {str(e)}") |
| raise |
|
|
| def transform_my_model(content_image, style_image): |
| try: |
| if content_image is None or style_image is None: |
| raise ValueError("Both content and style images are required") |
| |
| logger.info("Processing images...") |
| content_image = content_image.astype(np.float32)[np.newaxis, ...] / 255.0 |
| style_image = style_image.astype(np.float32)[np.newaxis, ...] / 255.0 |
| stylized_image = model(tf.constant(content_image), tf.constant(style_image))[0] |
| logger.info("Style transfer completed successfully!") |
| return tensor_to_image(stylized_image) |
| except Exception as e: |
| logger.error(f"Error in transform_my_model: {str(e)}") |
| raise |
|
|
| |
| example_images = [ |
| ["Content_Images/contnt12.jpg", "VG516.jpg"], |
| ["Content_Images/contnt2.jpg", "Content_Images/styl9.jpg"], |
| ["Content_Images/contnt.jpg", "Content_Images/styl22.jpg"] |
| ] |
|
|
| valid_examples = [] |
| for content_path, style_path in example_images: |
| if os.path.exists(content_path) and os.path.exists(style_path): |
| valid_examples.append([content_path, style_path]) |
| else: |
| logger.warning(f"Example image not found: {content_path} or {style_path}") |
|
|
| demo = gr.Interface( |
| fn=transform_my_model, |
| inputs=[gr.Image(label="Content Image"), gr.Image(label="Style Image")], |
| outputs=gr.Image(label="Result"), |
| title="Neural Style Transfer", |
| description="Upload a content image and a style image to create a stylized version of your content image.", |
| examples=valid_examples if valid_examples else None, |
| article="References-\n\nExploring the structure of a real-time, arbitrary neural artistic stylization network. Golnaz Ghiasi, Honglak Lee, Manjunath Kudlur, Vincent Dumoulin." |
| ) |
|
|
| if __name__ == "__main__": |
| demo.launch( |
| server_name="0.0.0.0", |
| server_port=7860, |
| share=True, |
| show_error=True |
| ) |
|
|