Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import requests | |
| import base64 | |
| from PIL import Image | |
| import io | |
| import json | |
| import os | |
| # The target URL for the API endpoint | |
| API_URL = os.environ.get('PXiVision') | |
| def process_image(input_image: Image.Image): | |
| """ | |
| Takes a PIL Image, converts it to base64, sends it to an API, | |
| and returns the JSON response. | |
| Args: | |
| input_image: A PIL Image object from the Gradio input. | |
| Returns: | |
| A dictionary (JSON) from the API response or an error message. | |
| """ | |
| if input_image is None: | |
| return {"error": "Please upload an image first."} | |
| try: | |
| # Convert PIL Image to bytes | |
| with io.BytesIO() as byte_arr: | |
| input_image.save(byte_arr, format='JPEG') # You can change format if needed (e.g., PNG) | |
| image_bytes = byte_arr.getvalue() | |
| # Encode the bytes to a base64 string | |
| base64_image = base64.b64encode(image_bytes).decode("utf-8") | |
| # Prepare the request payload | |
| payload = { | |
| "image": base64_image | |
| } | |
| # Send the POST request to the API | |
| response = requests.post(API_URL, json=payload, timeout=60) # Added a 60-second timeout | |
| # Check if the request was successful | |
| response.raise_for_status() # This will raise an exception for HTTP errors (4xx, 5xx) | |
| # Return the JSON response from the API | |
| return response.json() | |
| except requests.exceptions.RequestException as e: | |
| # Handle network-related errors | |
| return {"error": f"API request failed: {e}"} | |
| except Exception as e: | |
| # Handle other potential errors (e.g., image processing) | |
| return {"error": f"An unexpected error occurred: {e}"} | |
| # --- Create the Gradio Interface --- | |
| # Define the input and output components for the interface | |
| image_input = gr.Image(type="pil", label="Upload National ID Image") | |
| json_output = gr.JSON(label="Extracted Information") | |
| # Create a descriptive title and description for the app | |
| title = "Egyptian National ID Extractor(Front)" | |
| description = """ | |
| Upload a clear image of an Egyptian National ID card. | |
| The application will send the image to a processing service and display the extracted information, | |
| such as name, address, and National ID number. | |
| """ | |
| # Assemble the interface | |
| demo = gr.Interface( | |
| fn=process_image, | |
| inputs=image_input, | |
| outputs=json_output, | |
| title=title, | |
| description=description, | |
| allow_flagging="never", | |
| examples=[ | |
| ['d1.jpg'] # Example image path | |
| ] | |
| ) | |
| # --- Launch the App --- | |
| if __name__ == "__main__": | |
| demo.launch() |