Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import requests | |
| from PIL import Image | |
| from io import BytesIO | |
| # Roboflow config | |
| API_URL = "https://detect.roboflow.com" | |
| API_KEY = "dxkgGGHSZ3DI8XzVn29U" | |
| WORKSPACE = "naveen-kumar-hnmil" | |
| WORKFLOW = "detect-count-and-visualize-10" | |
| def detect_image_with_log(image): | |
| try: | |
| print("π Converting image to JPEG bytes") | |
| buffered = BytesIO() | |
| image.save(buffered, format="JPEG") | |
| image_bytes = buffered.getvalue() | |
| endpoint = f"{API_URL}/{WORKSPACE}/{WORKFLOW}?api_key={API_KEY}" | |
| print(f"π‘ Sending POST request to: {endpoint}") | |
| response = requests.post( | |
| endpoint, | |
| files={"file": image_bytes}, | |
| data={"confidence": "0.4", "overlap": "0.3"} | |
| ) | |
| print(f"π₯ Roboflow response: {response.status_code}") | |
| if response.status_code != 200: | |
| return None, f"β API error: {response.status_code}\n{response.text}" | |
| result_json = response.json() | |
| print(f"π Parsed response JSON: {result_json}") | |
| annotated_url = result_json.get("image", {}).get("url") | |
| if not annotated_url: | |
| return None, f"β No 'image.url' found in response.\nFull Response: {result_json}" | |
| print(f"π Fetching annotated image from: {annotated_url}") | |
| image_response = requests.get(annotated_url) | |
| if image_response.status_code != 200: | |
| return None, f"β Failed to load annotated image.\nURL: {annotated_url}" | |
| result_image = Image.open(BytesIO(image_response.content)) | |
| return result_image, "β Detection successful." | |
| except Exception as e: | |
| return None, f"β Exception: {str(e)}" | |
| # Gradio app | |
| interface = gr.Interface( | |
| fn=detect_image_with_log, | |
| inputs=gr.Image(type="pil", label="Upload a Solar Panel Image"), | |
| outputs=[ | |
| gr.Image(label="Annotated Output"), | |
| gr.Textbox(label="Detection Log") | |
| ], | |
| title="Solar Panel Fault Detection", | |
| description="Upload an image to detect cracks, dents, and faults using a Roboflow-trained YOLOv8 model.", | |
| allow_flagging="never" | |
| ) | |
| if __name__ == "__main__": | |
| interface.launch() | |