Spaces:
Sleeping
Sleeping
File size: 3,705 Bytes
57b4d6e 1d782a2 9643386 57b4d6e 313728a 93e8de0 57b4d6e 313728a 9643386 313728a 9643386 313728a 9643386 313728a 9643386 313728a 57b4d6e 9643386 313728a 9643386 57b4d6e 7660b5c 313728a 57b4d6e 313728a 57b4d6e 313728a 57b4d6e 313728a 9643386 7660b5c 313728a 57b4d6e 313728a 7660b5c 57b4d6e 7660b5c 57b4d6e 9643386 57b4d6e 7660b5c 57b4d6e |
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
import gradio as gr
import joblib
import numpy as np
import pandas as pd
import cv2
from skimage.color import rgb2hsv
from skimage.measure import shannon_entropy
from scipy.ndimage import generic_filter
# Extract features from the image (same as your previous code)
def extract_features(image_path):
image = cv2.imread(image_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# Extract RGB means
meanr = np.mean(image[:, :, 0]) # Red channel
meang = np.mean(image[:, :, 1]) # Green channel
meanb = np.mean(image[:, :, 2]) # Blue channel
# Convert to HSI and compute HHR
hsv_image = rgb2hsv(image)
hue = hsv_image[:, :, 0]
high_hue_pixels = np.sum(hue > 0.95)
total_pixels = hue.size
HHR = high_hue_pixels / total_pixels
# Convert to Grayscale
gray_image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
# Compute Entropy
Ent = shannon_entropy(gray_image)
# Compute Brightness
B = np.mean(gray_image)
# Sliding window for gray-level features
def g1_filter(window):
return window[4] - np.min(window)
def g2_filter(window):
return np.max(window) - window[4]
def g3_filter(window):
return window[4] - np.mean(window)
def g4_filter(window):
return np.std(window)
def g5_filter(window):
return window[4]
# Apply filters with 3x3 window
g1 = generic_filter(gray_image, g1_filter, size=3).mean()
g2 = generic_filter(gray_image, g2_filter, size=3).mean()
g3 = generic_filter(gray_image, g3_filter, size=3).mean()
g4 = generic_filter(gray_image, g4_filter, size=3).mean()
g5 = generic_filter(gray_image, g5_filter, size=3).mean()
# Return features
return {
"meanr": meanr,
"meang": meang,
"meanb": meanb,
"HHR": HHR,
"Ent": Ent,
"B": B,
"g1": g1,
"g2": g2,
"g3": g3,
"g4": g4,
"g5": g5,
}
# Function to make predictions
def predict_hemoglobin(age, gender, image):
# Extract features from the image
features = extract_features(image) # Use the file path directly
# Add age and gender to the features
features['age'] = age
features['gender'] = 1 if gender.lower() == 'male' else 0
# Convert features to DataFrame
features_df = pd.DataFrame([features])
# Load the pre-trained models
svr_model = joblib.load('svr_model.pkl') # SVR model
scaler = joblib.load('scaler.pkl') # MinMaxScaler
label_encoder = joblib.load('label_encoder.pkl') # LabelEncoder
# Apply MinMaxScaler transformation
features_df_scaled = scaler.transform(features_df)
# Make the prediction
hemoglobin = svr_model.predict(features_df_scaled)[0]
return f"Predicted Hemoglobin Value: {hemoglobin:.2f}"
# Gradio Interface
def gradio_interface():
with gr.Blocks() as demo:
gr.Markdown("## Hemoglobin Prediction from Image Features")
with gr.Row():
age = gr.Number(label="Age", value=25)
gender = gr.Dropdown(choices=["Male", "Female"], label="Gender", value="Male")
image_input = gr.Image(type="filepath", label="Upload Image (Path to Image)", interactive=True)
output = gr.Textbox(label="Predicted Hemoglobin Value")
# Prediction button
predict_btn = gr.Button("Predict Hemoglobin")
predict_btn.click(fn=predict_hemoglobin, inputs=[age, gender, image_input], outputs=output)
return demo
# Launch the app
if __name__ == "__main__":
gradio_interface().launch(share=True) # Set `share=True` to create a public link
|