RICHERGIRL commited on
Commit
27ec8ce
·
verified ·
1 Parent(s): 22963a9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +63 -39
app.py CHANGED
@@ -1,21 +1,30 @@
1
  import pandas as pd
2
- from sklearn.preprocessing import LabelEncoder
3
- from sklearn.ensemble import RandomForestClassifier
4
- from sklearn.model_selection import train_test_split
5
- import gradio as gr
6
-
7
- # Function to load/generate data (replace with your data loading logic)
8
- def load_data():
9
- data = {
10
- 'face_shape': ['round', 'oval', 'square', 'heart', 'oval', 'round', 'square', 'heart', 'oval', 'square'],
11
- 'skin_tone': ['fair', 'medium', 'deep', 'cool', 'warm', 'fair', 'medium', 'deep', 'cool', 'warm'],
12
- 'face_size': ['small', 'medium', 'large', 'medium', 'small', 'large', 'small', 'large', 'medium', 'small'],
13
- 'mask_style': ['glitter_cat', 'gold_venetian', 'black_minimal', 'floral_masquerade', 'gold_venetian',
14
- 'glitter_cat', 'black_minimal', 'floral_masquerade', 'gold_venetian', 'black_minimal']
15
- }
16
- return pd.DataFrame(data)
17
-
18
- # Rest of your code (preprocessing, model training, recommend_mask function)
 
 
 
 
 
 
 
 
 
19
  # Split features and target
20
  X = df[['face_shape', 'skin_tone', 'face_size']]
21
  y = df['mask_style']
@@ -25,26 +34,41 @@ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_
25
 
26
  # Train Random Forest
27
  rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
28
-
29
  rf_model.fit(X_train, y_train)
30
- df = load_data()
31
- # ... (preprocessing, model training)
32
-
33
- # ... (recommend_mask function)
34
-
35
- # ... (Get unique values for dropdown choices)
36
-
37
- # Define Gradio interface
38
- iface = gr.Interface(
39
- fn=recommend_mask,
40
- inputs=[
41
- gr.Dropdown(choices=face_shapes_labels, label="Face Shape"),
42
- gr.Dropdown(choices=skin_tones_labels, label="Skin Tone"),
43
- gr.Dropdown(choices=face_sizes_labels, label="Face Size"),
44
- ],
45
- outputs="text",
46
- title="🎭 Party Face Mask Recommender",
47
- description="Get personalized party face mask recommendations based on your facial features."
48
- )
49
-
50
- iface.launch(share=True, server_name="0.0.0.0", server_port=7860) # Updated launch for Hugging Face
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import pandas as pd
2
+ from sklearn.preprocessing import LabelEncoder
3
+ from sklearn.ensemble import RandomForestClassifier
4
+ from sklearn.model_selection import train_test_split
5
+ import gradio as gr
6
+
7
+ # Function to load/generate data
8
+ def load_data():
9
+ data = {
10
+ 'face_shape': ['round', 'oval', 'square', 'heart', 'oval', 'round', 'square', 'heart', 'oval', 'square'],
11
+ 'skin_tone': ['fair', 'medium', 'deep', 'cool', 'warm', 'fair', 'medium', 'deep', 'cool', 'warm'],
12
+ 'face_size': ['small', 'medium', 'large', 'medium', 'small', 'large', 'small', 'large', 'medium', 'small'],
13
+ 'mask_style': ['glitter_cat', 'gold_venetian', 'black_minimal', 'floral_masquerade', 'gold_venetian',
14
+ 'glitter_cat', 'black_minimal', 'floral_masquerade', 'gold_venetian', 'black_minimal']
15
+ }
16
+ return pd.DataFrame(data)
17
+
18
+ # Load data
19
+ df = load_data()
20
+
21
+ # Label encode categorical features
22
+ label_encoders = {}
23
+ for column in ['face_shape', 'skin_tone', 'face_size', 'mask_style']:
24
+ le = LabelEncoder()
25
+ df[column] = le.fit_transform(df[column])
26
+ label_encoders[column] = le
27
+
28
  # Split features and target
29
  X = df[['face_shape', 'skin_tone', 'face_size']]
30
  y = df['mask_style']
 
34
 
35
  # Train Random Forest
36
  rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
 
37
  rf_model.fit(X_train, y_train)
38
+
39
+ # Define the recommendation function
40
+ def recommend_mask(face_shape, skin_tone, face_size):
41
+ input_data = pd.DataFrame({
42
+ 'face_shape': [face_shape],
43
+ 'skin_tone': [skin_tone],
44
+ 'face_size': [face_size]
45
+ })
46
+ for col in input_data.columns:
47
+ input_data[col] = label_encoders[col].transform(input_data[col])
48
+ prediction_encoded = rf_model.predict(input_data)
49
+ predicted_label = label_encoders['mask_style'].inverse_transform(prediction_encoded)
50
+ return predicted_label[0]
51
+
52
+ # Get unique values for dropdown choices
53
+ face_shapes_labels = df['face_shape'].unique().tolist()
54
+ face_shapes_labels = label_encoders['face_shape'].inverse_transform(face_shapes_labels).tolist()
55
+ skin_tones_labels = df['skin_tone'].unique().tolist()
56
+ skin_tones_labels = label_encoders['skin_tone'].inverse_transform(skin_tones_labels).tolist()
57
+ face_sizes_labels = df['face_size'].unique().tolist()
58
+ face_sizes_labels = label_encoders['face_size'].inverse_transform(face_sizes_labels).tolist()
59
+
60
+
61
+ # Define Gradio interface
62
+ iface = gr.Interface(
63
+ fn=recommend_mask,
64
+ inputs=[
65
+ gr.Dropdown(choices=face_shapes_labels, label="Face Shape"),
66
+ gr.Dropdown(choices=skin_tones_labels, label="Skin Tone"),
67
+ gr.Dropdown(choices=face_sizes_labels, label="Face Size"),
68
+ ],
69
+ outputs="text",
70
+ title="🎭 Party Face Mask Recommender",
71
+ description="Get personalized party face mask recommendations based on your facial features."
72
+ )
73
+
74
+ iface.launch(share=True, server_name="0.0.0.0", server_port=7860)