sunil18p31a0101 commited on
Commit
313728a
·
verified ·
1 Parent(s): 7667c39

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +81 -49
app.py CHANGED
@@ -1,66 +1,98 @@
1
- import gradio as gr
2
  import joblib
3
  import numpy as np
4
  import pandas as pd
5
  import cv2
6
- from sklearn.preprocessing import MinMaxScaler, LabelEncoder
7
- from PIL import Image
 
8
 
9
- # Load SVR model and other pickled files
10
- svr_model = joblib.load('svr_model.pkl')
11
- scaler = joblib.load('minmax_scaler.pkl')
12
- label_encoder = joblib.load('label_encoder.pkl')
13
-
14
- # Feature extraction function
15
- def extract_features(image):
16
- image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)
17
  image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
18
-
19
  # Extract RGB means
20
- meanr = np.mean(image[:, :, 0])
21
- meang = np.mean(image[:, :, 1])
22
- meanb = np.mean(image[:, :, 2])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
 
24
- # Additional feature extraction logic here...
 
25
 
 
 
 
 
 
 
 
 
26
  return {
27
  "meanr": meanr,
28
  "meang": meang,
29
  "meanb": meanb,
30
- # Add more extracted features...
 
 
 
 
 
 
 
31
  }
32
 
33
- # Prediction function
34
- def predict(image, gender, age):
35
- try:
36
- # Extract image features
37
- features = extract_features(image)
38
- features["gender"] = label_encoder.transform([gender])[0] # Transform gender label
39
- features["age"] = age
40
-
41
- # Normalize features using MinMaxScaler
42
- features_df = pd.DataFrame([features])
43
- scaled_features = scaler.transform(features_df)
44
-
45
- # Make prediction using the SVR model
46
- prediction = svr_model.predict(scaled_features)
47
- return prediction[0]
48
-
49
- except Exception as e:
50
- return f"Error: {str(e)}"
51
 
52
- # Gradio Interface
53
- interface = gr.Interface(
54
- fn=predict,
55
- inputs=[
56
- gr.Image(label="Upload Image"),
57
- gr.Dropdown(choices=["Male", "Female"], label="Gender"),
58
- gr.Slider(0, 100, step=1, label="Age"),
59
- ],
60
- outputs="label",
61
- title="Image-based Prediction App",
62
- description="Upload an image, enter your gender and age, and get predictions using the pre-trained model."
63
- )
64
 
65
- # Launch the app
66
- interface.launch(share=True)
 
 
1
  import joblib
2
  import numpy as np
3
  import pandas as pd
4
  import cv2
5
+ from skimage.color import rgb2hsv
6
+ from skimage.measure import shannon_entropy
7
+ from scipy.ndimage import generic_filter
8
 
9
+ # Extract features from the image (same as your previous code)
10
+ def extract_features(image_path):
11
+ image = cv2.imread(image_path)
 
 
 
 
 
12
  image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
13
+
14
  # Extract RGB means
15
+ meanr = np.mean(image[:, :, 0]) # Red channel
16
+ meang = np.mean(image[:, :, 1]) # Green channel
17
+ meanb = np.mean(image[:, :, 2]) # Blue channel
18
+
19
+ # Convert to HSI and compute HHR
20
+ hsv_image = rgb2hsv(image)
21
+ hue = hsv_image[:, :, 0]
22
+ high_hue_pixels = np.sum(hue > 0.95)
23
+ total_pixels = hue.size
24
+ HHR = high_hue_pixels / total_pixels
25
+
26
+ # Convert to Grayscale
27
+ gray_image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
28
+
29
+ # Compute Entropy
30
+ Ent = shannon_entropy(gray_image)
31
+
32
+ # Compute Brightness
33
+ B = np.mean(gray_image)
34
+
35
+ # Sliding window for gray-level features
36
+ def g1_filter(window):
37
+ return window[4] - np.min(window)
38
+
39
+ def g2_filter(window):
40
+ return np.max(window) - window[4]
41
+
42
+ def g3_filter(window):
43
+ return window[4] - np.mean(window)
44
+
45
+ def g4_filter(window):
46
+ return np.std(window)
47
 
48
+ def g5_filter(window):
49
+ return window[4]
50
 
51
+ # Apply filters with 3x3 window
52
+ g1 = generic_filter(gray_image, g1_filter, size=3).mean()
53
+ g2 = generic_filter(gray_image, g2_filter, size=3).mean()
54
+ g3 = generic_filter(gray_image, g3_filter, size=3).mean()
55
+ g4 = generic_filter(gray_image, g4_filter, size=3).mean()
56
+ g5 = generic_filter(gray_image, g5_filter, size=3).mean()
57
+
58
+ # Return features
59
  return {
60
  "meanr": meanr,
61
  "meang": meang,
62
  "meanb": meanb,
63
+ "HHR": HHR,
64
+ "Ent": Ent,
65
+ "B": B,
66
+ "g1": g1,
67
+ "g2": g2,
68
+ "g3": g3,
69
+ "g4": g4,
70
+ "g5": g5,
71
  }
72
 
73
+ # Function to make predictions
74
+ def predict_hemoglobin(age, gender, image_path):
75
+ # Extract features from the image
76
+ features = extract_features(image_path)
77
+
78
+ # Add age and gender to the features
79
+ features['age'] = age
80
+ features['gender'] = 1 if gender.lower() == 'male' else 0
81
+
82
+ # Convert features to DataFrame
83
+ features_df = pd.DataFrame([features])
84
+
85
+ # Load the pre-trained models
86
+ svr_model = joblib.load('svr_model.pkl') # SVR model
87
+ scaler = joblib.load('minmax_scaler.pkl') # MinMaxScaler
88
+ label_encoder = joblib.load('label_encoder.pkl') # LabelEncoder
 
 
89
 
90
+ # Apply MinMaxScaler and LabelEncoder transformations
91
+ # For age and gender, you can scale them or leave them as-is, depending on your training procedure
92
+ features_df_scaled = scaler.transform(features_df)
93
+
94
+ # Make the prediction
95
+ hemoglobin = svr_model.predict(features_df_scaled)[0]
96
+
97
+ return hemoglobin
 
 
 
 
98