dfernandezl12 commited on
Commit
4da0347
·
verified ·
1 Parent(s): 2f0fd3c

Delete main.py

Browse files
Files changed (1) hide show
  1. main.py +0 -112
main.py DELETED
@@ -1,112 +0,0 @@
1
- import os
2
- import numpy as np
3
- import tensorflow as tf
4
- from tensorflow.keras import layers, models
5
- from flask import Flask, request, jsonify, render_template
6
- from PIL import Image
7
- import io
8
- from datasets import load_dataset
9
-
10
- # ------------------------------
11
- # Configuración
12
- # ------------------------------
13
- MODEL_PATH = "modelo_sexo.keras" # Cambiado para evitar conflictos con el viejo
14
- IMG_SIZE = (64, 64)
15
-
16
- def build_model():
17
- model = models.Sequential([
18
- layers.Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 3)),
19
- layers.MaxPooling2D((2, 2)),
20
- layers.Conv2D(64, (3, 3), activation='relu'),
21
- layers.Flatten(),
22
- layers.Dense(64, activation='relu'),
23
- layers.Dense(1, activation='sigmoid') # 1 = mujer, 0 = hombre
24
- ])
25
- model.compile(optimizer='adam',
26
- loss='binary_crossentropy',
27
- metrics=['accuracy'])
28
- return model
29
-
30
- def train_and_save_model():
31
- print("Cargando dataset FairFace...")
32
- ds = load_dataset("HuggingFaceM4/FairFace", "0.25")
33
-
34
- # Usamos todo el dataset de entrenamiento disponible
35
- ds_train = ds['train']
36
-
37
- images = []
38
- labels = []
39
- print("Procesando imágenes para clasificación de género...")
40
- for item in ds_train:
41
- img = item['image'].convert('RGB').resize(IMG_SIZE)
42
- images.append(np.array(img) / 255.0)
43
- # En FairFace: 0 corresponde a 'Male' (Hombre) y 1 a 'Female' (Mujer)
44
- labels.append(1.0 if item['gender'] == 1 else 0.0)
45
-
46
- X = np.array(images)
47
- y = np.array(labels)
48
-
49
- print(f"Datos cargados: {len(X)} imágenes (mujeres: {sum(y)}, hombres: {len(y)-sum(y)})")
50
-
51
- # Entrenar modelo
52
- model = build_model()
53
- print("Entrenando clasificador de género...")
54
- model.fit(X, y, epochs=3, batch_size=64, validation_split=0.2, verbose=1)
55
-
56
- # Guardar el nuevo modelo
57
- model.save(MODEL_PATH)
58
- print(f"Modelo guardado como {MODEL_PATH}")
59
- return model
60
-
61
- # Cargar modelo o entrenar si no existe
62
- def load_or_train_model():
63
- if os.path.exists(MODEL_PATH):
64
- try:
65
- model = tf.keras.models.load_model(MODEL_PATH)
66
- print("✅ Modelo de género cargado desde disco correctamente")
67
- return model
68
- except Exception as e:
69
- print(f"⚠️ Error al cargar el modelo: {e}")
70
- print("Entrenando uno nuevo...")
71
- return train_and_save_model()
72
- else:
73
- print("Modelo no encontrado. Entrenando desde cero...")
74
- return train_and_save_model()
75
-
76
- # Inicializar el modelo global
77
- model = load_or_train_model()
78
-
79
- # ------------------------------
80
- # Aplicación Flask
81
- # ------------------------------
82
- app = Flask(__name__)
83
-
84
- def predecir_sexo(imagen_bytes):
85
- img = Image.open(io.BytesIO(imagen_bytes)).convert('RGB')
86
- img = img.resize(IMG_SIZE)
87
- img_array = np.array(img) / 255.0
88
- img_array = np.expand_dims(img_array, axis=0)
89
- prediccion = model.predict(img_array, verbose=0)[0][0]
90
- return "mujer" if prediccion >= 0.5 else "hombre"
91
-
92
- @app.route('/')
93
- def index():
94
- return render_template('index.html')
95
-
96
- @app.route('/predict', methods=['POST'])
97
- def predict():
98
- if 'image' not in request.files:
99
- return jsonify({'error': 'No se encontró ninguna imagen'}), 400
100
- file = request.files['image']
101
- if file.filename == '':
102
- return jsonify({'error': 'Nombre de archivo vacío'}), 400
103
- try:
104
- imagen_bytes = file.read()
105
- sexo = predecir_sexo(imagen_bytes)
106
- return jsonify({'sexo': sexo})
107
- except Exception as e:
108
- return jsonify({'error': str(e)}), 500
109
-
110
- if __name__ == '__main__':
111
- port = int(os.environ.get("PORT", 7860))
112
- app.run(host='0.0.0.0', port=port)