HTML - Consulta para integrar una funcion en python con una pag web

 
Vista:
sin imagen de perfil

Consulta para integrar una funcion en python con una pag web

Publicado por Geraldina roark (1 intervención) el 13/09/2023 20:28:40
[code]Estoy haciendo un pequeño ejemplo para integrar una funcion de python con una pagina web... en este caso la clasificación de un numero como primo o no primo y la activacion y desactivacion de la camara web de la compu incrustada en la pagina... solo a modo de prueba inicial para luego aplicarla a cosas mas complejas... pero no logro que funcione la camara... si me pueden ayudar sera un placer... soy un poco novata en esto...
Codigo html:
<!DOCTYPE html>
<html>
<head>
<title>Verificar si un numero es primo</title>
<style>
/* Estilo para la vista de la cámara */
#camera_view {
display: none; /* Inicialmente oculto */
width: 640px; /* Ancho deseado de la vista de la cámara */
height: 480px; /* Altura deseada de la vista de la cámara */
margin: 0 auto; /* Centrar horizontalmente */
text-align: center; /* Centrar contenido de la cámara */
}
</style>
</head>
<body>
<h1 style="color: blue; text-align: center;">Verificar si un numero es primo</h1>
<form method="POST" action="/verificar">
<label for="numero">Ingresa un numero entero positivo:</label>
<input type="number" name="numero" required>
<input type="submit" value="Verificar">
</form>

<div id="resultado" style="font-size: 24px; text-align: center;"></div>
<video id="camera_view" autoplay></video>

<button id="activar_camara">Activar Cámara</button>
<button id="desactivar_camara" style="display: none;">Desactivar Camara</button>

<button id="nuevo_numero" style="display: none;">Ingresar Nuevo Numero</button>

<script src="{{ url_for('static', filename='script.js') }}"></script>
</body>
</html>

Codigo Javasrip:
<script>
// Función para verificar si un número es primo
function esPrimo(numero) {
if (numero <= 1) {
return false;
}
if (numero <= 3) {
return true;
}
if (numero % 2 === 0 || numero % 3 === 0) {
return false;
}
let i = 5;
while (i * i <= numero) {
if (numero % i === 0 || numero % (i + 2) === 0) {
return false;
}
i += 6;
}
return true;
}

document.querySelector('form').addEventListener('submit', function (e) {
e.preventDefault();
const numero = document.querySelector('input[name="numero"]').value;
fetch('/verificar', { method: 'POST', body: new URLSearchParams({ numero }) })
.then(response => response.json())
.then(data => {
document.getElementById('resultado').innerText = data.resultado;
document.getElementById('resultado').style.fontSize = '72px';
document.getElementById('resultado').style.display = 'block';
document.getElementById('nuevo_numero').style.display = 'block';
document.getElementById('camera_view').style.display = 'none';
});
});

document.getElementById('nuevo_numero').addEventListener('click', function () {
document.getElementById('resultado').style.display = 'none';
document.getElementById('nuevo_numero').style.display = 'none';
document.getElementById('activar_camara').style.display = 'block';
});



codigo python conector con html:


from flask import Flask, render_template, request, jsonify
import cv2

app = Flask(__name__)

# Variables globales para controlar la cámara y la clasificación
camera_active = False
cap = None
camera_thread = None

# Función para verificar si un número es primo (la función anterior sigue igual)
def es_primo(numero):
if numero <= 1:
return False
if numero <= 3:
return True
if numero % 2 == 0 or numero % 3 == 0:
return False
i = 5
while i * i <= numero:
if numero % i == 0 or numero % (i + 2) == 0:
return False
i += 6
return True

@app.route('/')
def index():
return render_template('index.html')

@app.route('/verificar', methods=['POST'])
def verificar():
numero = request.form['numero']
try:
numero = int(numero)
if numero <= 0:
return jsonify({'resultado': 'Debes ingresar un número entero positivo.'})
elif es_primo(numero):
resultado = f"{numero} es un número primo."
else:
resultado = f"{numero} no es un número primo."
return jsonify({'resultado': resultado})
except ValueError:
return jsonify({'resultado': 'Debes ingresar un número entero positivo.'})

@app.route('/activar_camara', methods=['POST'])
def activar_camara():
global camera_active, cap, camera_thread
if not camera_active:
try:
cap = cv2.VideoCapture(0)
camera_active = True
# ... Iniciar el hilo de la cámara ...
print('Cámara activada')
return jsonify({'mensaje': 'Cámara activada.'})
except Exception as e:
print(f'Error al acceder a la cámara: {str(e)}')
return jsonify({'error': f'Error al acceder a la cámara: {str(e)}'})
else:
return jsonify({'mensaje': 'La cámara ya está activada.'})



@app.route('/desactivar_camara', methods=['POST'])
def desactivar_camara():
global camera_active, cap, camera_thread
if camera_active:
camera_active = False
if cap is not None:
cap.release()
if camera_thread is not None:
camera_thread.join()
cv2.destroyAllWindows()
return jsonify({'mensaje': 'Cámara desactivada.'}), 200, {'Content-Type': 'application/json'}
else:
return jsonify({'mensaje': 'La cámara ya está desactivada.'}), 200, {'Content-Type': 'application/json'}

if __name__ == '__main__':
app.run(debug=True)



codigo python de la funcion de clasificacion de num:
def es_primo(numero):
if numero <= 1:
return False
if numero <= 3:
return True
if numero % 2 == 0 or numero % 3 == 0:
return False
i = 5
while i * i <= numero:
if numero % i == 0 or numero % (i + 2) == 0:
return False
i += 6
return True
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder