udayjawheri commited on
Commit
504a590
β€’
1 Parent(s): 236cd71

Upload 9 files

Browse files
Files changed (4) hide show
  1. age.png +0 -0
  2. app.py +81 -20
  3. gender.png +0 -0
  4. matrix.png +0 -0
age.png ADDED
app.py CHANGED
@@ -1,24 +1,27 @@
1
  import gradio as gr
2
  import tensorflow as tf
3
- from PIL import Image
4
  import numpy as np
5
  import os
6
  import pandas as pd
7
 
8
-
9
  model_gender = tf.keras.models.load_model('model_gender.h5')
10
  model_age = tf.keras.models.load_model('model_age.h5')
11
 
12
  actual_data = {
13
- "000000.png": {"img": 1,"age": 85.0, "gender": "female"},
14
- "000001.png": {"img": 2,"age": 72.0, "gender": "female"},
15
- "000002.png": {"img": 3,"age": 45.0, "gender": "male"},
16
- "000003.png": {"img": 4,"age": 59.0, "gender": "male"},
17
- "000004.png": {"img": 5,"age": 37.0, "gender": "male"}
18
  }
19
 
20
  df = pd.DataFrame(actual_data).T
21
 
 
 
 
 
 
22
  def preprocess_image(image):
23
  # Assuming image is a PIL Image object from Gradio
24
  img = image.convert('L') # Convert to grayscale
@@ -31,7 +34,7 @@ def predict(image):
31
  preprocessed_image = preprocess_image(image)
32
  gender_pred = model_gender.predict(preprocessed_image)[0][0]
33
  age_pred = model_age.predict(preprocessed_image)[0][0]
34
- gender = "Male" if gender_pred > 0.7 else "Female"
35
  list = "{:.2f}".format(age_pred),gender,df
36
  return list
37
 
@@ -41,15 +44,73 @@ def predict(image):
41
  text_age = gr.components.Textbox(label="Predicted Age")
42
  text_gender = gr.components.Textbox(label="Predicted Gender")
43
 
44
- interface = gr.Interface(predict, gr.components.Image(height=440,width=1000,label="Upload Image", type="pil"),
45
- outputs=[text_age, text_gender, gr.DataFrame(value=df)],
46
- examples=[
47
- os.path.join(os.path.dirname(__file__),"00000.png"),
48
- os.path.join(os.path.dirname(__file__),"00001.png"),
49
- os.path.join(os.path.dirname(__file__),"00002.png"),
50
- os.path.join(os.path.dirname(__file__),"00003.png"),
51
- os.path.join(os.path.dirname(__file__),"00004.png")],
52
-
53
- allow_flagging='never',
54
- theme=gr.themes.Soft(),
55
- title="Age and Gender Prediction").launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
  import tensorflow as tf
 
3
  import numpy as np
4
  import os
5
  import pandas as pd
6
 
 
7
  model_gender = tf.keras.models.load_model('model_gender.h5')
8
  model_age = tf.keras.models.load_model('model_age.h5')
9
 
10
  actual_data = {
11
+ "000000.png": {"Image": 1,"age": 61.0, "gender": "Female"},
12
+ "000001.png": {"Image": 2,"age": 63.0, "gender": "Male"},
13
+ "000002.png": {"Image": 3,"age": 45.0, "gender": "Male"},
14
+ "000003.png": {"Image": 4,"age": 59.0, "gender": "Female"},
15
+ "000004.png": {"Image": 5,"age": 37.0, "gender": "Female"}
16
  }
17
 
18
  df = pd.DataFrame(actual_data).T
19
 
20
+ data = {'Name': ['Accuracy', 'Precision', 'Recall', 'F1-score'],
21
+ 'Value': [96.11 , 0.9368, 0.9731, 0.9546]}
22
+
23
+ df1 = pd.DataFrame(data)
24
+
25
  def preprocess_image(image):
26
  # Assuming image is a PIL Image object from Gradio
27
  img = image.convert('L') # Convert to grayscale
 
34
  preprocessed_image = preprocess_image(image)
35
  gender_pred = model_gender.predict(preprocessed_image)[0][0]
36
  age_pred = model_age.predict(preprocessed_image)[0][0]
37
+ gender = "Male" if gender_pred > 0.68 else "Female"
38
  list = "{:.2f}".format(age_pred),gender,df
39
  return list
40
 
 
44
  text_age = gr.components.Textbox(label="Predicted Age")
45
  text_gender = gr.components.Textbox(label="Predicted Gender")
46
 
47
+ def predictor_tab():
48
+ interface = gr.Interface(predict, gr.components.Image(height=440,width=1000,label="Upload Image", type="pil"),
49
+ outputs=[text_age, text_gender, gr.DataFrame(value=df)],
50
+ examples=[
51
+ os.path.join(os.path.dirname(__file__),"00000.png"),
52
+ os.path.join(os.path.dirname(__file__),"00001.png"),
53
+ os.path.join(os.path.dirname(__file__),"00002.png"),
54
+ os.path.join(os.path.dirname(__file__),"00003.png"),
55
+ os.path.join(os.path.dirname(__file__),"00004.png")],
56
+
57
+ allow_flagging='never')
58
+
59
+ return interface
60
+
61
+ def about_tab():
62
+ with gr.Blocks() as about:
63
+ # Title and Introduction
64
+ gr.Markdown("# Age and Gender Prediction with Deep Learning!")
65
+ gr.Markdown("This awesome app uses deep learning magic ✨ to predict someone's age and gender based on a x-ray image! Just upload a photo, and our clever models will do their best detective work to unveil the mystery.")
66
+
67
+ # Dataset Section
68
+ with gr.Row():
69
+ with gr.Column():
70
+ gr.Markdown("**DATASET πŸ—ƒ**")
71
+ gr.Markdown(
72
+ """
73
+ The lung scans used in this project come from a publicly available dataset.
74
+ It contains approximately 10,700 scans for training and 11,700 scans for testing.
75
+ This dataset was part of a competition held by The Radiology and Diagnostic Imaging Society of SΓ£o Paulo (SPR) with Amazon Web Services.
76
+ """
77
+ )
78
+ gr.Text("https://www.kaggle.com/datasets/felipekitamura/spr-x-ray-age-and-gender-dataset",label="link")
79
+
80
+ # Model Performance Section
81
+ gr.Markdown("**Model Performance πŸ’‘**")
82
+ table = gr.DataFrame(value=df1)
83
+ gr.Markdown("⚜ **Model Accuracy for Genders**")
84
+ gender_img = 'gender.png'
85
+ gr.Image(value=gender_img, width=500, height=450)
86
+ gr.Markdown("⚜ **Model Accuracy for Age**")
87
+ age_img = 'age.png'
88
+ gr.Image(value=age_img, width=500, height=450)
89
+ gr.Markdown("⚜ **Confusion matrix**")
90
+ matrix_img = 'matrix.png'
91
+ gr.Image(value=matrix_img, width=500, height=450)
92
+
93
+
94
+
95
+ # Wrap the table in a Block for better formatting
96
+ # Creator Information Section
97
+ with gr.Row():
98
+ with gr.Column():
99
+ gr.Markdown("**Created by πŸ€“**")
100
+ gr.Markdown("Uday Jawheri")
101
+ with gr.Row():
102
+ gr.Text("https://www.linkedin.com/in/uday-jawheri/", label="LinkedIn")
103
+ gr.Text("https://xudayx.github.io/Portfolio/", label="Website")
104
+
105
+ return about
106
+
107
+
108
+ with gr.Blocks(theme=gr.themes.Soft(), title="Age and Gender Prediction") as app: # Consistent variable name 'app'
109
+ with gr.Tab("Predictor"):
110
+ predictor_tab()
111
+
112
+ with gr.Tab("About"):
113
+ about_tab()
114
+
115
+ # Launch the Gradio app
116
+ app.launch()
gender.png ADDED
matrix.png ADDED