shree2216 commited on
Commit
9ba3b80
·
verified ·
1 Parent(s): b2562c8

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +71 -0
app.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import numpy as np
3
+ import joblib
4
+ from sklearn.ensemble import RandomForestClassifier
5
+ from sklearn.preprocessing import LabelEncoder
6
+ from sklearn.model_selection import train_test_split
7
+
8
+ # Load dataset
9
+ df = pd.read_excel("mask_dataset.xlsx")
10
+
11
+ # Encode categorical features
12
+ label_encoder_tone = LabelEncoder()
13
+ df["skin_tone"] = label_encoder_tone.fit_transform(df["skin_tone"])
14
+
15
+ label_encoder_shape = LabelEncoder()
16
+ df["face_shape"] = label_encoder_shape.fit_transform(df["face_shape"])
17
+
18
+ label_encoder_mask = LabelEncoder()
19
+ df["recommended_mask"] = label_encoder_mask.fit_transform(df["recommended_mask"])
20
+
21
+ # Prepare data for training
22
+ X = df[["skin_tone", "face_shape"]].values
23
+ y = df["recommended_mask"].values
24
+
25
+ # Split into training and testing sets
26
+ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
27
+
28
+ # Train model
29
+ model = RandomForestClassifier(n_estimators=100)
30
+ model.fit(X_train, y_train)
31
+
32
+ # Save the trained model
33
+ joblib.dump(model, "mask_recommender.pkl")
34
+ joblib.dump(label_encoder_mask, "label_encoder_mask.pkl")
35
+
36
+ print("✅ Model trained & saved!")
37
+ import joblib
38
+
39
+ # Load trained model
40
+ model = joblib.load("mask_recommender.pkl")
41
+ label_encoder_mask = joblib.load("label_encoder_mask.pkl")
42
+
43
+ def recommend_mask(face_image):
44
+ """Predict the best mask for the uploaded face."""
45
+ skin_tone = detect_skin_tone(face_image)
46
+ face_shape = detect_face_shape(face_image)
47
+
48
+ # Encode features
49
+ tone_encoded = label_encoder_tone.transform([skin_tone])[0]
50
+ shape_encoded = label_encoder_shape.transform([face_shape])[0]
51
+
52
+ # Predict mask
53
+ predicted_mask = model.predict([[tone_encoded, shape_encoded]])[0]
54
+ recommended_mask = label_encoder_mask.inverse_transform([predicted_mask])[0]
55
+
56
+ return recommended_mask
57
+ def apply_ai_mask(person_img, seed, randomize_seed):
58
+ """Predicts & applies AI-recommended mask to a face image."""
59
+ recommended_mask = recommend_mask(person_img)
60
+
61
+ mask_path = f"masks/{recommended_mask}.png"
62
+ mask_img = Image.open(mask_path)
63
+
64
+ return apply_mask(person_img, mask_img, seed, randomize_seed)
65
+ gr.Interface(
66
+ fn=apply_ai_mask,
67
+ inputs=gr.Image(type="pil", label="Upload Your Face"),
68
+ outputs=[gr.Image(label="Masked Result"), gr.Textbox(label="Recommended Mask")],
69
+ title="AI Mask Suggestion",
70
+ description="Upload your face and let AI suggest the perfect party mask!"
71
+ ).launch()