Spaces:
Sleeping
Sleeping
| import os | |
| import gradio as gr | |
| import numpy as np | |
| from io import BytesIO | |
| from PIL import Image | |
| from dotenv import load_dotenv | |
| from src.utils.stac_client import download_sentinel_image | |
| # Load environment variables | |
| load_dotenv() | |
| USERNAME = os.environ.get("DESTINE_USERNAME") | |
| PASSWORD = os.environ.get("DESTINE_PASSWORD") | |
| def fetch_sentinel_image(date_from, date_to): | |
| """Fetch a Sentinel image based on criteria.""" | |
| # Validate date format | |
| # Download the image | |
| content, metadata = download_sentinel_image( | |
| username=USERNAME, | |
| password=PASSWORD, | |
| start_date=date_from, | |
| end_date= date_to | |
| ) | |
| # Handle error case | |
| if isinstance(content, str): | |
| return None, content | |
| # Convert to PIL Image | |
| try: | |
| img = Image.open(BytesIO(content)) | |
| # Create metadata string | |
| metadata_str = "\n".join([ | |
| f"**Date:** {metadata.get('datetime', 'Unknown')}", | |
| # f"**Cloud Cover:** {metadata.get('cloud_cover', 'Unknown')}%", | |
| f"**Filename:** {metadata.get('filename', 'Unknown')}" | |
| ]) | |
| return img, metadata_str | |
| except Exception as e: | |
| return None, f"Error processing image: {str(e)}" | |
| # Create Gradio interface | |
| with gr.Blocks(title="Sentinel Image Viewer") as demo: | |
| gr.Markdown("# Sentinel-2 Image Viewer") | |
| gr.Markdown("Browse and view Sentinel-2 satellite imagery") | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| date_from = gr.Textbox(label="Date From (YYYY-MM-DD)", value="2024-12-15") | |
| date_to = gr.Textbox(label="Date To (YYYY-MM-DD)", value="2024-12-30") | |
| fetch_btn = gr.Button("Fetch Image") | |
| with gr.Column(scale=2): | |
| image_output = gr.Image(type="pil", label="Sentinel-2 Image") | |
| metadata_output = gr.Markdown(label="Image Metadata") | |
| fetch_btn.click( | |
| fn=fetch_sentinel_image, | |
| inputs=[date_from, date_to], | |
| outputs=[image_output, metadata_output] | |
| ) | |
| gr.Markdown("## About") | |
| gr.Markdown(""" | |
| This application allows you to browse and view Sentinel-2 satellite imagery using the DESTINE API. | |
| - **TCI Images**: The images shown are true color (RGB) composites at 60m resolution. | |
| - **Date Range**: Specify the date range to search for images. | |
| """) | |
| if __name__ == "__main__": | |
| demo.launch(share=True) | |