shivakumar4147's picture
Upload 3 files
a00518a verified
Raw History Blame Contribute Delete
2.44 kB
import gradio as gr
import tensorflow as tf
import numpy as np
from PIL import Image
import os
import google.generativeai as genai # ✅ Gemini API
# ---------------- Load model ----------------
MODEL_PATH = "final_model.h5"
if not os.path.exists(MODEL_PATH):
raise FileNotFoundError(f"{MODEL_PATH} not found. Place your trained model in the project folder.")
model = tf.keras.models.load_model(MODEL_PATH)
# ---------------- Gemini API ----------------
# 1. Go to https://aistudio.google.com/app/apikey to create a FREE API key
# 2. Replace below with your API key
GEMINI_API_KEY = "AIzaSyC6LKYAB5F1B_j3BOBVFB9xt1-rPbZIMF0"
genai.configure(api_key=GEMINI_API_KEY)
gemini_model = genai.GenerativeModel("gemini-1.5-flash") # ✅ Free, fast model
# ---------------- Prediction + Explanation ----------------
def predict_and_explain(image):
# Preprocess image
img = image.resize((224, 224)) # Adjust if your model uses a different size
img_array = np.array(img) / 255.0
img_array = np.expand_dims(img_array, axis=0)
# Predict
prediction = model.predict(img_array)[0][0]
if prediction > 0.5:
result = f"🟥 Malignant (Cancer Detected) with {prediction*100:.2f}% confidence"
prompt = "Explain in simple terms to a patient what it means that this skin lesion is Malignant."
else:
result = f"🟩 Benign (No Cancer) with {(1-prediction)*100:.2f}% confidence"
prompt = "Explain in simple terms to a patient what it means that this skin lesion is Benign."
# Generate explanation using Gemini
explanation = "Explanation not available."
try:
response = gemini_model.generate_content(prompt)
explanation = response.text
except Exception as e:
explanation = f"AI explanation failed: {e}"
return result, explanation
# ---------------- Gradio UI ----------------
demo = gr.Interface(
fn=predict_and_explain,
inputs=gr.Image(type="pil", label="Upload Skin Lesion Image"),
outputs=[gr.Textbox(label="Prediction"), gr.Textbox(label="Explanation")],
title="🧬 Skin Cancer Detection with AI Explanation (Gemini)",
description="Upload a skin lesion image. The model predicts if it is Malignant or Benign and explains the result in simple terms."
)
# ---------------- Launch ----------------
if __name__ == "__main__":
demo.launch()