Skip to content

Commit

Permalink
adjusts in the backend
Browse files Browse the repository at this point in the history
  • Loading branch information
Joao Felipe Rodrigues-FELIPERL committed Sep 4, 2024
1 parent e6c1ca7 commit 7e69778
Show file tree
Hide file tree
Showing 6 changed files with 201 additions and 96 deletions.
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.pth filter=lfs diff=lfs merge=lfs -text
9 changes: 6 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,17 @@ python --version
Clone o repositório do projeto para o seu ambiente local:

```bash
git clone https://github.com/seu-usuario/seu-repositorio.git
cd seu-repositorio
git clone https://github.com/joaofeliperl/IA-testing.git
cd ia-testing
```

### 2. **Crie um ambiente virtual [opcional, mas recomendado]**

python -m venv venv
source venv/bin/activate # No Windows use `venv\Scripts\activate`
# No linux use
source venv/bin/activate
# No Windows use
`venv\Scripts\activate`


### 3. **Execute o script de setup:**
Expand Down
88 changes: 47 additions & 41 deletions app.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
from flask_migrate import Migrate
import pymysql
from utils.image_preprocessing import extract_text_from_image, detect_objects
import torch

# Importar funções da IA
from ai_processing import process_image, generate_test_cases
from utils.model_utils import load_custom_model
import os
from functools import wraps

import warnings
warnings.filterwarnings("ignore", category=UserWarning, module="torch")

# Configuração do logging
logging.basicConfig(level=logging.DEBUG)
Expand All @@ -28,23 +30,34 @@
connection.close()

app = Flask(__name__)
app.secret_key = 'supersecretkey' # Necessário para usar sessões
app.secret_key = 'supersecretkey'
app.config['SQLALCHEMY_DATABASE_URI'] = f'mysql+pymysql://{db_user}:{db_password}@{db_host}/{db_name}'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)
migrate = Migrate(app, db)

model_path = 'utils/model_utils.py'
num_classes = 2
# Corrigir caminho do checkpoint do modelo
model_path = 'checkpoints/checkpoint_batch_70.pth.tar'
num_classes = 2
model = load_custom_model(model_path, num_classes)

# Função para verificar se o usuário está logado
def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if 'user_id' not in session:
return redirect(url_for('index'))
return f(*args, **kwargs)
return decorated_function

# Modelos
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(150), nullable=False)
email = db.Column(db.String(150), unique=True, nullable=False)
role = db.Column(db.String(50), nullable=False)
password_hash = db.Column(db.String(255), nullable=False)
password_hash = db.Column(db.String(255), nullable=False)

def set_password(self, password):
self.password_hash = generate_password_hash(password)
Expand Down Expand Up @@ -100,7 +113,7 @@ def signup():
def login():
email = request.form.get('email')
password = request.form.get('pass')

user = User.query.filter_by(email=email).first()

if user and user.check_password(password):
Expand All @@ -114,31 +127,25 @@ def login():

@app.route('/logout')
def logout():
# Remove o ID do usuário da sessão
session.pop('user_id', None)
flash('You have been logged out.')
return redirect(url_for('index'))

@app.route('/home')
@login_required
def home():
if 'user_id' not in session:
return redirect(url_for('index'))
return render_template('home.html')

@app.route('/projects')
@login_required
def projects():
if 'user_id' not in session:
return redirect(url_for('index'))

user_id = session['user_id']
projects = Project.query.filter_by(user_id=user_id).limit(10).all()
return render_template('projects.html', projects=projects)

@app.route('/save_project', methods=['POST'])
@login_required
def save_project():
if 'user_id' not in session:
return redirect(url_for('index'))

project_name = request.form.get('name')
if not project_name:
return jsonify({"error": "Project name is required"}), 400
Expand All @@ -150,23 +157,18 @@ def save_project():

return redirect(url_for('projects'))


@app.route('/view_project/<int:project_id>')
@login_required
def view_project(project_id):
if 'user_id' not in session:
return redirect(url_for('index'))

project = Project.query.get(project_id)
if project is None or project.user_id != session['user_id']:
return jsonify({"error": "Project not found or unauthorized access"}), 404

return render_template('home.html', project=project)

@app.route('/delete_project/<int:project_id>', methods=['POST'])
@login_required
def delete_project(project_id):
if 'user_id' not in session:
return redirect(url_for('index'))

project = Project.query.get(project_id)
if project is None or project.user_id != session['user_id']:
return jsonify({"error": "Project not found or unauthorized access"}), 404
Expand All @@ -176,51 +178,55 @@ def delete_project(project_id):

return jsonify({'message': 'Project deleted successfully!'})



@app.route('/formtests')
@login_required
def formtests():
if 'user_id' not in session:
return redirect(url_for('index'))
return render_template('form-tests.html')


@app.route('/create_tables')
def create_tables():
db.create_all()
return "Tables created!"



@app.route('/generate', methods=['POST'])
@login_required
def generate():
if 'user_id' not in session:
return redirect(url_for('index'))

if 'screenshot' not in request.files or 'description' not in request.form:
return jsonify({"error": "Missing screenshot or description"}), 400
flash("Missing screenshot or description", "danger")
return redirect(url_for('formtests'))

screenshot = request.files['screenshot']
description = request.form['description']

# Processar a imagem
image_path = save_image(screenshot) # Função para salvar a imagem temporariamente
image_path = save_image(screenshot)
text = extract_text_from_image(image_path)
boxes, labels, scores = detect_objects(image_path)

# Gerar casos de teste baseados na imagem processada e descrição
processed_image = text # Ou use `boxes`, `labels`, `scores` conforme necessário
test_cases = generate_test_cases(processed_image, description)

return jsonify({"test_cases": test_cases})
return render_template('test_results.html', test_cases=test_cases)

# Ajustar o caminho para a pasta 'uploads'
UPLOAD_FOLDER = 'uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

def save_image(file):
image_path = f"/tmp/{file.filename}"
if not os.path.exists(app.config['UPLOAD_FOLDER']):
os.makedirs(app.config['UPLOAD_FOLDER'])

image_path = os.path.join(app.config['UPLOAD_FOLDER'], file.filename)
file.save(image_path)
return image_path




if __name__ == '__main__':
# Verificar se o modelo foi carregado corretamente
if model:
print("Modelo carregado com sucesso!")
else:
print("Erro ao carregar o modelo.")

# Iniciar a aplicação Flask
app.run(debug=True)
Loading

0 comments on commit 7e69778

Please sign in to comment.