Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from transformers import pipeline | |
| import sys # Import sys for stderr printing | |
| # Load the image-to-text pipeline | |
| # We'll use a common pre-trained model for image captioning: "nlpconnect/vit-gpt2-image-captioning" | |
| # This model requires the 'transformers' library and its dependencies (like torch) | |
| # It also requires the Pillow library for image handling. | |
| try: | |
| print("Attempting to load image-to-text model...") | |
| # Specify the task and model name | |
| image_to_text_pipeline = pipeline("image-to-text", model="nlpconnect/vit-gpt2-image-captioning") | |
| print("Image-to-text model loaded successfully.") | |
| model_loaded = True | |
| except Exception as e: | |
| print(f"Error loading model: {e}", file=sys.stderr) | |
| print("Please ensure you have 'transformers', 'torch' (or tensorflow), and 'Pillow' installed.", file=sys.stderr) | |
| image_to_text_pipeline = None # Set to None if loading fails | |
| model_loaded = False | |
| def generate_text_from_image(image): | |
| """ | |
| Generates text (caption) from an input image using the loaded model. | |
| """ | |
| if not model_loaded or not image_to_text_pipeline: | |
| return "Model not loaded. Please check the application logs for errors." | |
| if image is None: | |
| return "Please upload an image." | |
| print("Received image for processing.") | |
| try: | |
| # The pipeline expects a PIL Image object or a file path | |
| # Gradio's Image input component returns a PIL Image by default | |
| print("Calling image-to-text pipeline...") | |
| # The output is typically a list of dictionaries, e.g., [{'generated_text': 'a cat sitting on a couch'}] | |
| output = image_to_text_pipeline(image) | |
| print(f"Pipeline raw output: {output}") | |
| # Extract the generated text | |
| if output and isinstance(output, list) and len(output) > 0 and 'generated_text' in output[0]: | |
| generated_text = output[0]['generated_text'] | |
| print(f"Generated text: {generated_text}") | |
| return generated_text | |
| else: | |
| print(f"Unexpected pipeline output format: {output}", file=sys.stderr) | |
| return "Could not generate text. Unexpected output format from model." | |
| except Exception as e: | |
| print(f"An error occurred during image processing: {e}", file=sys.stderr) | |
| # Print the traceback for more detailed error info | |
| import traceback | |
| traceback.print_exc(file=sys.stderr) | |
| return f"An error occurred during image processing: {e}" | |
| # Create the Gradio interface | |
| # Input is an Image component, Output is a Textbox component | |
| if model_loaded: # Only create interface if model loaded successfully | |
| interface = gr.Interface( | |
| fn=generate_text_from_image, # The function to run | |
| inputs=gr.Image(type="pil", label="Upload Image"), # Input component (Image) | |
| outputs=gr.Textbox(label="Generated Text"), # Output component (Textbox) | |
| title="Image to Text Generator", # Title of the app | |
| description="Upload an image and get a text description generated by a Hugging Face model." # Description | |
| ) | |
| # Launch the Gradio interface | |
| if __name__ == "__main__": | |
| print("Launching Gradio interface...") | |
| interface.launch() | |
| print("Gradio interface launched.") | |
| else: | |
| print("Gradio interface not launched due to model loading error.", file=sys.stderr) | |