Melanoma-3 / app.py
Suphawan's picture
Upload app.py
62f75a9 verified
import gradio as gr
import tensorflow as tf
from tensorflow.keras.applications.inception_v3 import preprocess_input
from tensorflow.keras.preprocessing import image
import numpy as np
from prometheus_client import start_http_server, Summary, Gauge
import time
# โหลดโมเดล InceptionV3
model = tf.keras.models.load_model("Inception_V3.h5")
# สมมติว่ามีชื่อคลาสแบบกำหนดเอง
class_names = ["Benign", "Malignant"] # ปรับชื่อคลาสตามที่คุณฝึกโมเดล
# สร้าง Metrics
REQUEST_TIME = Summary('request_processing_seconds', 'Time spent processing request')
INFERENCE_COUNT = Gauge('inference_count', 'Number of inferences processed')
# ฟังก์ชันสำหรับการพยากรณ์
@REQUEST_TIME.time()
def predict(img):
INFERENCE_COUNT.inc()
img = img.resize((224, 224)) # ปรับขนาดรูปภาพ
img_array = image.img_to_array(img) # แปลงรูปภาพเป็นอาร์เรย์
img_array = np.expand_dims(img_array, axis=0) # เพิ่มมิติแบทช์
img_array = preprocess_input(img_array) # เตรียมรูปภาพให้สอดคล้องกับความต้องการของโมเดล
predictions = model.predict(img_array)
predictions = predictions[0] # เอาค่าผลลัพธ์ของ batch เดียว
confidence_dict = {class_names[i]: float(predictions[i]) for i in range(len(class_names))}
return confidence_dict
# สร้าง Gradio Interface
interface = gr.Interface(
fn=predict,
inputs=gr.Image(type="pil", label="Upload an Image"),
outputs=gr.Label(num_top_classes=2, label="Predicted Class"),
title="Melanoma Classification with InceptionV3",
description="Upload an image to classify it into one of the classes."
)
# เริ่มเซิร์ฟเวอร์ metrics
def start_metrics_server():
start_http_server(8000)
if __name__ == "__main__":
# เริ่มเซิร์ฟเวอร์ metrics
start_metrics_server()
# เริ่ม Gradio App
interface.launch()