RICHERGIRL commited on
Commit
1782b9a
·
verified ·
1 Parent(s): 428e89e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -70
app.py CHANGED
@@ -1,74 +1,33 @@
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']
31
-
32
- # Split into train and test sets
33
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=42, stratify=y)
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)
 
 
 
 
 
1
  import gradio as gr
2
+ import cv2
3
+ import numpy as np
4
+ import joblib
5
+ from utils import extract_features # Your feature extraction logic
6
+
7
+ # Load model and encoders
8
+ model = joblib.load("model/random_forest.pkl")
9
+ label_encoders = joblib.load("model/label_encoders.pkl")
10
+
11
+ def recommend_mask(image):
12
+ # Extract face shape, skin tone, face size from image
13
+ face_shape, skin_tone, face_size = extract_features(image)
14
+
15
+ # Label encode features
16
+ face_encoded = label_encoders["face_shape"].transform([face_shape])[0]
17
+ skin_encoded = label_encoders["skin_tone"].transform([skin_tone])[0]
18
+ size_encoded = label_encoders["face_size"].transform([face_size])[0]
19
+
20
+ # Predict mask style
21
+ prediction = model.predict([[face_encoded, skin_encoded, size_encoded]])[0]
22
+ return prediction
23
+
24
+ # Gradio Interface
25
+ demo = gr.Interface(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  fn=recommend_mask,
27
+ inputs=gr.Image(label="Upload Your Face", type="filepath"),
28
+ outputs=gr.Textbox(label="Recommended Mask Style"),
29
+ title="🎭 AI Party Mask Recommender",
30
+ description="Upload a photo to get a personalized mask recommendation!",
 
 
 
 
31
  )
32
 
33
+ demo.launch()