File size: 2,309 Bytes
7cfa064
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# -*- coding: utf-8 -*-
"""app.py

Automatically generated by Colab.

Original file is located at
    https://colab.research.google.com/drive/1J1hXUB5eoxFBDoclJh3sO2ehEIFKr3Pw
"""

import gradio as gr
import tensorflow as tf
import numpy as np
from PIL import Image

# ขนาดภาพที่ใช้ในโมเดล
IMG_SIZE = (224, 224)

# สร้าง Dictionary ที่เก็บชื่อโมเดลและ path ไฟล์ .h5
model_paths = {
    "Custom CNN": "Custom_CNN_model.h5",
    "VGG16": "VGG16_model.h5",
    "ResNet50": "ResNet50_model.h5"
}

# ฟังก์ชันเตรียมข้อมูลภาพ
def preprocess_image(image):
    image = image.resize(IMG_SIZE)  # Resize
    image = np.array(image) / 255.0  # Normalize
    image = np.expand_dims(image, axis=0)  # เพิ่ม batch dimension
    return image

# ฟังก์ชันทำนาย โดยเลือกโมเดล
def predict_with_model(image, model_name):
    # โหลดโมเดลที่เลือก
    model = tf.keras.models.load_model(model_paths[model_name])

    # เตรียมภาพ
    processed_image = preprocess_image(image)

    # ทำนายผล
    prediction = model.predict(processed_image)[0][0]  # ได้ค่าความน่าจะเป็น
    class_name = "Stroke" if prediction > 0.5 else "Non-Stroke"
    confidence = round(float(prediction if prediction > 0.5 else 1 - prediction) * 100, 2)

    # คืนผลลัพธ์
    return f"\n\n🧠 Prediction Result\n---------------------------\nClass: {class_name}\nConfidence: {confidence}%"

# Gradio Interface
interface = gr.Interface(
    fn=predict_with_model,
    inputs=[
        gr.Image(type="pil", label="🖼️ Upload Face Image"),
        gr.Dropdown(choices=["Custom CNN", "VGG16", "ResNet50"], label="📊 Select Model to Classify")
    ],
    outputs=gr.Textbox(label="📝 Prediction Output", lines=5),  # ช่อง Output ใหญ่ขึ้น
    title="🧠 Stroke Face Classification",
    description="Upload a face image to predict whether the person has stroke or not. Select model to classify. The output will show the prediction result clearly."
)

# Run app
if __name__ == "__main__":
    interface.launch()