Saltar a contenido

Capturando audios

Una vez que hemos analizado las diferentes líneas de actuación comentadas en la sesión anterior, en esta sesión nos vamos a centrar en conocer la aplicación de captura de audios y trasladar las propuestas al código de la aplicación.

Captura

La aplicación de captura de audios está disponible en https://captura.piafplara.es/.

Login de la aplicación de Captura
Login de la aplicación de Captura

La aplicación Captura está implementada mediante las siguiente tecnologías:

  • Flask 2.2.2: framework web ligero
  • MongoDB 6.0.4: base de datos documental donde guardamos la información de los usuarios, textos, audios grabados, etc..
  • AWS S3: almacén de objetos con redundancia para los audios.

Más Flask

Si quieres profundizar más en Flask, además de la documentación oficial en el blog de 2jlogo tienes un tutorial de Flask en español.

Datos

En MongoDB, los datos se almacenan con redundancia de éstos en diversas colecciones:

  • audios: información del audio almacenado y referencia a S3
  • clicks: para analítica
  • frases: frases creadas por los propios usuarios cliente (el propio usuario graba y teclea el texto)
  • sylabus: frases predefinidas creadas por los técnicos
  • usuarios: para el login y atributos personales
audios.json
{
    "_id": {
        "$oid": "642f2c644ef2efddc64ed6b0"
    },
    "aws_object_id": "64257d027bfa0b4d0894f3f2_1680813156.wav", // nombre del recurso en S3
    "usuario": { // datos básicos del usuario - referencia extendida
        "id": {
            "$oid": "64257d027bfa0b4d0894f3f2"
        },
        "mail": "abc@def.com",
        "nombre": "Uno Dos Tres",
        "parent": "tecnico@ies.com"
    },
    "fecha": {
        "$date": "2023-04-06T22:32:36.404Z"
    },
    "texto": { // datos básicos del texto - referencia extendida
        "id": {
            "$oid": "640cb6abbd72df924a9f6293"
        },
        "texto": "Me gustan los bombones de nata montada.",
        "tag": "11n3",
        "tipo": "syllabus"
    },
    "duracion": 3 // en segundos
}
clicks.json
{
    "_id": {
        "$oid": "645e036cf2c8c7ded8fb413e"
    },
    "class": "audios", // clase de Python
    "method": "client_record", // método con la operación realizada
    "tag": "8l3", // etiqueta del syllabus
    "usuario": "abc@def.com",
    "timestamp": {
        "$date": "2023-05-12T11:14:20.756Z"
    }
}
frases.json
{
    "_id": {
        "$oid": "646f3c4f54f44f9262d178d4"
    },
    "texto": "Esta es una frase", // texto de la frase grabada
    "tag": "asdf@ghjk.org",
    "creador": {
        "id": {
            "$oid": "646f3c4f54f44f9262d178d3"
        },
        "mail": "asdf@gfdd.org",
        "nombre": "Uno Dos"
    }
}
sylabus.json
{
    "_id": {
        "$oid": "640cb6abbd72df924a9f6198"
    },
    "texto": "Me bañé en la bañera", // frase a grabar
    "tags": [ "syllabus", "1b1" ], // categorías
    "creador": {
        "id": {
            "$oid": "639b4085a39c11c0c5121368" },
        "nombre": "Aitor",
        "rol": "admin"
    },
    "fecha_creacion": {
        "$date": "2023-03-11T18:13:15.001Z"
    }
}
{
    "_id": {
        "$oid": "641de4a041886e8397a76861"
    },
    "nombre": "Prueba",
    "mail": "prueba@asdf.com",
    "rol": "cliente",
    "password": "sha256$m23Qasdf...",
    "fecha_nacimiento": {
        "$date": "2006-11-15T00:00:00.000Z"
    },
    "ultima_conexion": {
        "$date": "2023-03-24T19:00:43.268Z"
    },
    "sexo": "H",
    "provincia": "Alicante",
    "enfermedades": [ "Ictus" ],
    "dis": [ "Disfonia 2" ],
    "parent": "vicent@vk.com"
}

Funcionalidades

El código fuente de la aplicación de Captura se encuentra disponible en https://github.com/PIALARA/pia-lara así como las instrucciones para ponerlo en marcha. El primer paso es realizar un fork para luego enviar pull requests con las modificaciones propuestas.

Git

Recuerda que, tras hacer el fork, debes clonar el repositorio en local y antes de hacer cualquier modificación, crear una nueva rama:

git checkout -b "funcionalidadXXX"

Tras añadir los cambios y hacer commit, necesitamos hacer un push:

git push origin funcionalidadXXX

Y finalmente, en GitHub ya podemos contribuir con dicha rama para realizar el pull request

Para esta sesión, de momento no vamos a interactuar con AWS, con lo que sólo habrá que configurar la base de datos con la URL de vuestro cluster de MongoAtlas, así como cargar en el clúster una copia de los datos que tenéis disponible en Aules.

Para entender cómo funcionar el código de Flask y PyMongo, se recomienda revisar la sesión sobre PyMongo, donde además de la librería para acceder desde Python a MongoDB, se muestra la arquitectura de la aplicación Captura y fragmentos de código con Flask.

Las posibles funcionalidades a desarrollar son:

Listados de usuarios

En el perfil de Administrador y en el perfil de Técnico, al listar los usuarios aparecen todos los usuarios "mezclados". Sería conveniente ofrecer algún mecanismo a nivel de interfaz para distinguirlos. Además, en el caso de usuario de tipo cliente, necesitamos obtener una vista más completa con todas las categorías que ha grabado así como cuantos audios.

Asignado al equipo: Lara Usuarios (Javi, Hugo, Fernando M, Paco)

Listados de textos

En el listado de textos sería conveniente poder filtrar los textos por categoría, uso de un buscador avanzado, así como paginar los resultados y/o mostrar estadísticas de la cantidad de audios de cada texto.

Asignado al equipo: Lara Textos (Giorgi, Dani, Guille)

Usabilidad

Por un lado, en el tema de la reproducción de los audios, en ciertos terminales móviles, a la hora de reproducir el audio grabado, bien no se escucha, bien la velocidad de grabación es muy alta.

Por el otro, hemos debatido que sería conveniente mejorar la accesibilidad permitiendo cambiar el tamaño de la fuente así como modificar la escala de colores.

Asignado al equipo: Lara Usabilidad (Ismael, Carlos, Alan)

Estadísticas de categorías

Para los técnicos y los clientes, poder ver cuantos audios se han grabado de cada categoría. Además, cada 100 audios grabados, por ejemplo, crear un budget/medalla con el logro conseguido.

Asignado al equipo: Lara Categorías (Vicente, Fernando, Alberto)

Elementos evaluables por equipos

  • Documento memoria que detalle la funcionalidad a corregir/ampliar, explicando los elementos modificados y el proceso de implementación realizado.
  • Código fuente.
  • Exposición por equipos de las diferentes soluciones implementadas (3-5 minutos).

Plazo de entrega

  • Código fuente y memoria de los cambios realizados - Viernes 17 Noviembre - 17:00h