ScienceForChange / SoundCollect_backend

0 stars 0 forks source link

Guardar observación con segmentos #55

Closed OtariOboladzeSfC closed 1 week ago

OtariOboladzeSfC commented 3 weeks ago

Cuando se guarda la observación, también se tiene que guardar los segmentos.

También hay 3 nuevos parámetros que se incluirán en cada segmento: 'freq_3', 'spec_3' y 'spec_3_dB' @CarlosMillanSfC

CarlosMillanSfC commented 3 weeks ago

@OtariOboladzeSfC

No entiendo la tabla segments, tiene una referencia al id de la observación pero repite un montón de columnas que ya están en esa table, me puedes explicar por favor el propósito y qué tiene que guardar exactamente?

OtariOboladzeSfC commented 3 weeks ago

Al principio la observacion tenia estructura de un punto con lon-lat y parámetros L10, Laeq, Lmax...

Luego se modificó la estructura y lon-lat se modifico en un array de lon-lat en cada 10 segundos, pero L10, Laeq, Lmax.. se quedo igual y se aplicaba a la observación, no a los elementos de array.

Ahora lo que nos piden es: cada array elemento de array de lon-lat en cada 10 segundos tiene que tener su L10, Laeq, Lmax.., pero tambien tiene que existir un promedio L10, Laeq, Lmax.. de todos los segmentos.

CarlosMillanSfC commented 3 weeks ago

@OtariOboladzeSfC

y el campo overall de la tabla observaciones para qué sirve?

OtariOboladzeSfC commented 3 weeks ago

hay 2 tipos de parametros: acusticos y psico-acusticos.

Leq, LAeqT, LAmax, LAmin, L90, L10, sharpness_S, loudness_N, roughtness_R, fluctuation_strength_F son parametros acusticos que antes se aplicaban a la observación y ahora se van a aplicar a los segmentos.

quiet, cleanliness, accessibility, safety, influence, landmark, protection son parametros psico-acusticos que se aplican a la observacion

pleasant, chaotic, vibrant, uneventful,calm, annoying, eventfull, monotonous, overall tambien son parametros psico-acusticos que se aplican a las obsrvaciones para un usuario experto

OtariOboladzeSfC commented 3 weeks ago

hay 2 tipos de parametros: acusticos y psico-acusticos.

Leq, LAeqT, LAmax, LAmin, L90, L10, sharpness_S, loudness_N, roughtness_R, fluctuation_strength_F son parametros acusticos que antes se aplicaban a la observación y ahora se van a aplicar a los segmentos.

quiet, cleanliness, accessibility, safety, influence, landmark, protection son parametros psico-acusticos que se aplican a la observacion

pleasant, chaotic, vibrant, uneventful,calm, annoying, eventfull, monotonous, overall tambien son parametros psico-acusticos que se aplican a las obsrvaciones para un usuario experto

CORRECCIÓN:

Leq, LAeqT, LAmax, LAmin, L90, L10, sharpness_S, loudness_N, roughtness_R, fluctuation_strength_F son parámetros acusticos pero solo Leq, LAeqT, LAmax, LAmin, L90, L10, parámetros aplican a los segmento y sharpness_S, loudness_N, roughtness_R, fluctuation_strength_F se aplican a la observacion

CarlosMillanSfC commented 3 weeks ago

@OtariOboladzeSfC

pero no entiendo, un ejemplo de overall que hay ahora en la base de datos es: [{"start": {"lat": 41,98867,"lon": 2,81922},"end": {"lat": 41,9890835142055,"lon": 2,81951508865649},"parameters": {"L90": 100,46,"L10": 115,32,"Laeq": 118,88,"Lamin": 99,14}},{"start": {"lat": 41,9888920115878,"lon": 2,8200745728552},"end": {"lat": 41

Entiendo que no se guardó entero pero está bien eso? Ese tipo de cosas tiene que tener?

OtariOboladzeSfC commented 3 weeks ago

para dejar todo un poco mas limpio:

Parámetros acústicos son parámetros que se generan basado al audio (python audio-to-parameters función): Leq, LAeqT, LAmax, LAmin, L90, L10, sharpness_S, loudness_N, roughtness_R, fluctuation_strength_F

de lo cual estos se aplican a los segmentos: Leq, LAeqT, LAmax, LAmin, L90, L10

y estos aplican a las observaciones: sharpness_S, loudness_N, roughtness_R, fluctuation_strength_F

y tambien se calcula el promedio de Leq, LAeqT, LAmax, LAmin, L90, L10 y se aplican a las observaciones: Leq, LAeqT, LAmax, LAmin, L90, L10

parametros psico-acusticos se aplican a todas las observaciones basado las preguntas multiple-choise en la app: quiet, cleanliness, accessibility, safety, influence, landmark, protection

y usuarios avanzado tienen mas preguntas: pleasant, chaotic, vibrant, uneventful,calm, annoying, eventfull, monotonous, overall

OtariOboladzeSfC commented 3 weeks ago

@OtariOboladzeSfC

pero no entiendo, un ejemplo de overall que hay ahora en la base de datos es: [{"start": {"lat": 41,98867,"lon": 2,81922},"end": {"lat": 41,9890835142055,"lon": 2,81951508865649},"parameters": {"L90": 100,46,"L10": 115,32,"Laeq": 118,88,"Lamin": 99,14}},{"start": {"lat": 41,9888920115878,"lon": 2,8200745728552},"end": {"lat": 41

Entiendo que no se guardó entero pero está bien eso? Ese tipo de cosas tiene que tener?

es un error, se puede vaciar esta columna de momento

OtariOboladzeSfC commented 3 weeks ago

Ninguno de los parámetros pleasant, chaotic, vibrant, uneventful,calm, annoying, eventfull, monotonous, overall se usa de momento, la app todavía no envía respuestas de "usuario experto", ya he vaciado la columna 'overall'

CarlosMillanSfC commented 3 weeks ago

@OtariOboladzeSfC

La columna path en la base de datos se está usando para algo?

OtariOboladzeSfC commented 3 weeks ago

@OtariOboladzeSfC

La columna path en la base de datos se está usando para algo?

sí, ahora mismo la app todavía usa "path", pero una vez se usará "segmentos" luego podemos quitarla

CarlosMillanSfC commented 3 weeks ago

@OtariOboladzeSfC Con este mensaje:

Al principio la observacion tenia estructura de un punto con lon-lat y parámetros L10, Laeq, Lmax...

Luego se modificó la estructura y lon-lat se modifico en un array de lon-lat en cada 10 segundos, pero L10, Laeq, Lmax.. se quedo igual y se aplicaba a la observación, no a los elementos de array.

Ahora lo que nos piden es: cada array elemento de array de lon-lat en cada 10 segundos tiene que tener su L10, Laeq, Lmax.., pero tambien tiene que existir un promedio L10, Laeq, Lmax.. de todos los segmentos.

Entiendo entonces que una observación será:

start_punto -(10 segundos)-> punto1 -(10 segundos)-> punto2 -(10 segundos, o menos)-> end_punto

por lo que cada punto, start_punto, punto1, punto2 y end_punto tienen que tener el cálculo de sus valores L10, Laeq, Lmax.. lo que me da la siguiente pregunta: Está la aplicación preparada para enviar los audios por esos tramos? porque entiendo que para calcular esto deberá ser estilo: primer trozo: start_punto - punto1 (10 segundos de audio) punto1 - punto2 (10segundos de audio) -- o start_punto - punto2 (20 segundos de audio) punto2 - end_punto (10segundos de audio o menos) -- o start_punto - end_punto (30 segundos de audio o menos)

Y aquí pueden haber pausas? Cómo sería el comportamiento para saber qué tengo que guardar o no? Un ejemplo de lo que tiene que hacer la aplicación y qué se quiere conseguir me sería de ayuda.

Y después está la duda de a qué se refiere con promedio? Entiendo que sumar y dividir los datos por los segmentos analizados pero pregunto por si acaso.

OtariOboladzeSfC commented 3 weeks ago

los datos que vendrán desde la app tendrán esta estructura:

datos de la observacion : sharpness_S, loudness_N, roughtness_R, fluctuation_strength_F, quiet, cleanliness, accessibility, safety, influence, landmark, protection, pleasant, chaotic, vibrant, uneventful, calm, annoying, eventfull, monotonous, overall

datos de los segmentos: [segmento 1 -> start_latitude, start_longitude, end_latitude, end_longitude, L90, L10, LAmax, LAmin, LAeq, LAeqT, freq_3, spec_3, spec_3_dB segmento 2 -> start_latitude, start_longitude, end_latitude, end_longitude, L90, L10, LAmax, LAmin, LAeq, LAeqT, freq_3, spec_3, spec_3_dB segmento 3 -> start_latitude, start_longitude, end_latitude, end_longitude, L90, L10, LAmax, LAmin, LAeq, LAeqT, freq_3, spec_3, spec_3_dB]...

en el momento de crear la observación hay dos pasos mas:

  1. llamar a la api de meteo e insertar en temperature, pressure, humidity, wind_speed en la tabla de observaciones
  2. calcular promedios de los variables de segmentos (por ejemplo: promedio de todos los valores de L90 sera juntar todos los L90 y dividir por cuantidad de segmentos y asi para L10, Lmax.. ) e insertar en Leq, LAeqT, LAmax, LAmin, L90, L10 en la tabla de observaciones
OtariOboladzeSfC commented 3 weeks ago

"Y aquí pueden haber pausas? Cómo sería el comportamiento para saber qué tengo que guardar o no? Un ejemplo de lo que tiene que hacer la aplicación y qué se quiere conseguir me sería de ayuda."

Nos han dicho desde Management de Qualud que la librería de crear el audio es capaz pausar y reanudar la grabación y así podemos evitar las pausas en los segmentos, pero todavía no me ha confirmado el desarrollador front de Qualud que sera asi, en todos modos esta estructura que tenemos ahora mismo funcionará con o sin pausas, no te preocupes por las pausas de momento

OtariOboladzeSfC commented 3 weeks ago

@CarlosMillanSfC

entonces todavia no voy a pedir a Qualud que nos envien esta estructura nueva de la "observacion":

datos de la observacion : sharpness_S, loudness_N, roughtness_R, fluctuation_strength_F, quiet, cleanliness, accessibility, safety, influence, landmark, protection, pleasant, chaotic, vibrant, uneventful, calm, annoying, eventfull, monotonous, overall

datos de los segmentos: [segmento 1 -> start_latitude, start_longitude, end_latitude, end_longitude, L90, L10, LAmax, LAmin, LAeq, LAeqT, freq_3, spec_3, spec_3_dB segmento 2 -> start_latitude, start_longitude, end_latitude, end_longitude, L90, L10, LAmax, LAmin, LAeq, LAeqT, freq_3, spec_3, spec_3_dB segmento 3 -> start_latitude, start_longitude, end_latitude, end_longitude, L90, L10, LAmax, LAmin, LAeq, LAeqT, freq_3, spec_3, spec_3_dB]...

Quedamos que vas a ver cuál será mejor manera para reestructurar base de datos y usar la librería de Laravel y hablamos lunes 08.07.24 para ver como será la estrucura nueva

CarlosMillanSfC commented 2 weeks ago

Hola @OtariOboladzeSfC , como te digo en el chat no voy a poder tener hoy una respuesta clara y segura sobre como nos viene mejor recibir los datos de los segmentos para guardarlos. A última hora de la tarde actualizaré con algo seguro y probado pero confío en mañana poder tener la respuesta. Sigo trabajando en ello pero confirmo que hoy no habrá una respuesta.

CarlosMillanSfC commented 2 weeks ago

@OtariOboladzeSfC

De momento lo más que puedo decir es que se envíen los datos así referente a los segmentos:

    "coordinates": {
        "type": "MultiLineString", 
        "coordinates": [
            [
                [-93.644346, 32.831718], 
                [-132.701578, -79.916542], 
                [74.115335, -20.866482], 
                [-79.272251, -27.737648], 
                [73.539323, 12.806696], 
                [54.706111, -51.355516], 
                [-165.771653, -74.537204],
                [150.356346, 85.163403], 
                [81.45228, -82.394628], 
                [-151.595094, 62.69771]
            ]
        ]
    }

No es definitivo ya que aún me faltan conceptos que combinar como las llamadas por tramos a la api de flask, la lógica de agrupación, asegurarme el orden, etc. La idea es que se guarden varias líneas y utilizando https://geojson.io/#map=2/0/20 se puedan agregar datos extras en una propiedad que se llama "properties" pero no estoy siendo capaz de utilizarla bien ni adaptarla para el guardado en bbdd, admito que no estoy bien y me cuesta concentrarme pero espero mañana estar mejor.

CarlosMillanSfC commented 2 weeks ago

Bueno, Subo una foto de las especificaciones de lo que se me pidió: WhatsApp Image 2024-07-10 at 14 40 09

Ya está hecho. Ahora cuando se sube una observación se rellena la tabla segments con los datos de la tabla segments (siempre que se envíen, si no se envían, o se envían a medias se crea lo que se puede) y esta está relacionada con cada observación. Una relación 1:N de toda la vida.

Dejo aquí la estructura que espera el servidor (básicamente la que he utilizado haciendo llamas con postman):

{
    "Leq": 139,
    "LAeqT": [52, 126, 113, 76, 129],
    "LAmax": 40,
    "LAmin": 102,
    "L90": 94,
    "L10": 98,
    "sharpness_S": 100,
    "loudness_N": 112,
    "roughtness_R": 20,
    "fluctuation_strength_F": 34,
    "latitude": "41.37765",
    "longitude": "2.15134",
    "sound_types": [4, 3, 2, 1],
    "quiet": 0,
    "cleanliness": 0,
    "accessibility": 0,
    "safety": 0,
    "influence": 0,
    "landmark": 0,
    "protection": 0,
    "segments": [
    {
        "position": 0,
        "start_latitude": 41.98867,
        "start_longitude": 2.81922,
        "end_latitude": 41.98867,
        "end_longitude": 2.91922,
        "L90": 94,
        "L10": 98,
        "LAmax": 40,
        "LAmin": 102,
        "LAeq": 139,
        "LAeqT": [52, 126, 113, 76, 129],
        "freq_3": [4, 8, 15, 16, 23, 42],
        "spec_3": [4, 8, 15, 16, 23, 42],
        "spec_3_dB": [4, 8, 15, 16, 23, 42]
    }
    ],
    "path": "test"
}

Como se puede ver en la key "segments" aquí debe enviar siempre un array (ya sea de 1 solo elemento o vacío) y sobre restricciones de tipos keys obligatorias que enviar no hay nada, solo las propias de los tipos de la base de datos

Tabla Observations image

Tabla Segments image

Dejo un JSON de respuesta a obtener todas las observaciones que hice haciendo la prueba de guardar las 3 formas diferentes que se me ocurrieron: con 3 segmentos, con 1 y vacío.

{"status":"success","data":[{"type":"observation","id":"9c7d2fcd-0a97-4d91-b885-30c5b70eec81","attributes":{"Leq":"139","LAeqT":[52,126,113,76,129],"LAmax":"40","LAmin":"102","L90":"94","L10":"98","sharpness_S":"N/A","loudness_N":"N/A","roughtness_R":"N/A","fluctuation_strength_F":"N/A","images":null,"latitude":"41.37765","longitude":"2.15134","quiet":"0","cleanliness":"0","accessibility":"0","safety":"0","influence":"0","landmark":"0","protection":"0","wind_speed":"5.14","humidity":62,"temperature":"28.97","pressure":1016,"pleasant":"N/A","chaotic":"N/A","vibrant":"N/A","uneventful":"N/A","calm":"N/A","annoying":"N/A","eventfull":"N/A","monotonous":"N/A","overall":null,"user_id":"9bd685aa-62f6-461a-8b39-8ddacc6e6fbe","created_at":"2024-07-10 12:34:28","updated_at":"2024-07-10 12:34:28","path":"test"},"relationships":{"user":{"type":"citizen","id":"9bd685aa-62f6-461a-8b39-8ddacc6e6fbe","attributes":{"avatar_id":"1","profile":{"gender":"male","birthYear":1993},"is_expert":true,"calibration_method_id":null,"created_at":"2024-04-18 16:11:18","updated_at":"2024-07-09 08:36:07"},"relationships":[]},"types":[{"id":4,"name":"Altres sorolls","description":"Sirenes, construcció, indústria, càrrega de mercaderies"},{"id":3,"name":"Soroll del trànsit","description":"Cotxes, autobusos, trens, avions"},{"id":2,"name":"Éssers humans","description":"Converses, riures, nens/as, jugant, trepitjades"},{"id":1,"name":"Sons naturals","description":"Cant dels ocells, seguiment de l'aigua, vent en la vegetació"}],"segments":[{"position":0,"start_latitude":"41.98867","start_longitude":"2.81922","end_latitude":"41.98867","end_longitude":"2.91922","L90":94,"L10":98,"LAmax":40,"LAmin":102,"LAeq":139,"LAeqT":[52,126,113,76,129],"freq_3":[4,8,15,16,23,42],"spec_3":[4,8,15,16,23,42],"spec_3_dB":[4,8,15,16,23,42]},{"position":1,"start_latitude":"41.98867","start_longitude":"2.81922","end_latitude":"41.98867","end_longitude":"2.91922","L90":94,"L10":98,"LAmax":40,"LAmin":102,"LAeq":139,"LAeqT":[52,126,113,76,129],"freq_3":[4,8,15,16,23,42],"spec_3":[4,8,15,16,23,42],"spec_3_dB":[4,8,15,16,23,42]},{"position":2,"start_latitude":"41.98867","start_longitude":"2.81922","end_latitude":"41.98867","end_longitude":"2.91922","L90":94,"L10":98,"LAmax":40,"LAmin":102,"LAeq":139,"LAeqT":[52,126,113,76,129],"freq_3":[4,8,15,16,23,42],"spec_3":[4,8,15,16,23,42],"spec_3_dB":[4,8,15,16,23,42]}]}},{"type":"observation","id":"9c7d30be-21cf-468f-84fd-1124061f617c","attributes":{"Leq":"139","LAeqT":[52,126,113,76,129],"LAmax":"40","LAmin":"102","L90":"94","L10":"98","sharpness_S":"N/A","loudness_N":"N/A","roughtness_R":"N/A","fluctuation_strength_F":"N/A","images":null,"latitude":"41.37765","longitude":"2.15134","quiet":"0","cleanliness":"0","accessibility":"0","safety":"0","influence":"0","landmark":"0","protection":"0","wind_speed":"5.14","humidity":62,"temperature":"28.97","pressure":1016,"pleasant":"N/A","chaotic":"N/A","vibrant":"N/A","uneventful":"N/A","calm":"N/A","annoying":"N/A","eventfull":"N/A","monotonous":"N/A","overall":null,"user_id":"9bd685aa-62f6-461a-8b39-8ddacc6e6fbe","created_at":"2024-07-10 12:37:06","updated_at":"2024-07-10 12:37:06","path":"test"},"relationships":{"user":{"type":"citizen","id":"9bd685aa-62f6-461a-8b39-8ddacc6e6fbe","attributes":{"avatar_id":"1","profile":{"gender":"male","birthYear":1993},"is_expert":true,"calibration_method_id":null,"created_at":"2024-04-18 16:11:18","updated_at":"2024-07-09 08:36:07"},"relationships":[]},"types":[{"id":4,"name":"Altres sorolls","description":"Sirenes, construcció, indústria, càrrega de mercaderies"},{"id":3,"name":"Soroll del trànsit","description":"Cotxes, autobusos, trens, avions"},{"id":2,"name":"Éssers humans","description":"Converses, riures, nens/as, jugant, trepitjades"},{"id":1,"name":"Sons naturals","description":"Cant dels ocells, seguiment de l'aigua, vent en la vegetació"}],"segments":[]}},{"type":"observation","id":"9c7d30f3-5fe1-4281-92a1-2a6e0fe41a0e","attributes":{"Leq":"139","LAeqT":[52,126,113,76,129],"LAmax":"40","LAmin":"102","L90":"94","L10":"98","sharpness_S":"N/A","loudness_N":"N/A","roughtness_R":"N/A","fluctuation_strength_F":"N/A","images":null,"latitude":"41.37765","longitude":"2.15134","quiet":"0","cleanliness":"0","accessibility":"0","safety":"0","influence":"0","landmark":"0","protection":"0","wind_speed":"5.14","humidity":62,"temperature":"28.97","pressure":1016,"pleasant":"N/A","chaotic":"N/A","vibrant":"N/A","uneventful":"N/A","calm":"N/A","annoying":"N/A","eventfull":"N/A","monotonous":"N/A","overall":null,"user_id":"9bd685aa-62f6-461a-8b39-8ddacc6e6fbe","created_at":"2024-07-10 12:37:41","updated_at":"2024-07-10 12:37:41","path":"test"},"relationships":{"user":{"type":"citizen","id":"9bd685aa-62f6-461a-8b39-8ddacc6e6fbe","attributes":{"avatar_id":"1","profile":{"gender":"male","birthYear":1993},"is_expert":true,"calibration_method_id":null,"created_at":"2024-04-18 16:11:18","updated_at":"2024-07-09 08:36:07"},"relationships":[]},"types":[{"id":4,"name":"Altres sorolls","description":"Sirenes, construcció, indústria, càrrega de mercaderies"},{"id":3,"name":"Soroll del trànsit","description":"Cotxes, autobusos, trens, avions"},{"id":2,"name":"Éssers humans","description":"Converses, riures, nens/as, jugant, trepitjades"},{"id":1,"name":"Sons naturals","description":"Cant dels ocells, seguiment de l'aigua, vent en la vegetació"}],"segments":[{"position":0,"start_latitude":"41.98867","start_longitude":"2.81922","end_latitude":"41.98867","end_longitude":"2.91922","L90":94,"L10":98,"LAmax":40,"LAmin":102,"LAeq":139,"LAeqT":[52,126,113,76,129],"freq_3":[4,8,15,16,23,42],"spec_3":[4,8,15,16,23,42],"spec_3_dB":[4,8,15,16,23,42]}]}}]}

CarlosMillanSfC commented 2 weeks ago

Entonces todo bien con esto? Si es así cierrala o me dices y la cierro @OtariOboladzeSfC