# Informe de prestacion de servicios
## Diseño, desarrollo y análisis de flujos de procesamiento de datos de audio generados a partir de la implementación en campo del proyecto Sitios Permanentes de Calibración y Monitoreo de la Biodiversidad (SiPeCaM)
**Presentado por:** Sebastián Cadavid Sánchez para la Comisión Nacional para el Conocimiento y Uso de la Biodiversidad [(CONABIO)](https://www.gob.mx/conabio)
Fecha: 15 de Diciembre de 2020
### Descripción del contrato
Consultoría para la asesoría en el uso, despliegue, diseño e implementación de un sistema de procesamiento de datos generados a partir de la implementación en campo del proyecto Sitios Permanentes de Calibración y Monitoreo de la Biodiversidad (SiPeCaM). Asesoría en el uso de herramientas para la recolección, administración y visualización de datos del proyecto SiPeCaM.
### Objetivo general
Usar, desplegar, diseñar e implementar un sistema de procesamiento de datos generados a partir de la implementación en campo del proyecto Sitios Permanentes de Calibración y Monitoreo de la Biodiversidad (SiPeCaM). Usar herramientas para la recolección, administración y visualización de datos del proyecto SiPeCaM.
### Objetivos particulares
- Diseño, desarrollo y construcción de datos de audio.
- Diseño, desarrollo y construcción de flujos de procesamiento de datos de audio con la insfraestructura de Kube SiPeCaM y otas.
- Uso de métodos de Matemáticas, Estadística y Aprendizaje de máquina y en general de procesamiento de señales para analizar datos de audio.
- Colaboración con equipos internos en la DGPI para construcción de flujos de procesamiento de datos.
### Productos Generados
- Informe con el repositorio en _github_ por "LA CONABIO" con la documentación para análisis de datos de audio. La documentación abarca las herramientas de desarrollo de _software_ que se hayan constuido para el correcto análisis, procesamiento y generación de resultados de datos de audio en el proyecto SiPeCaM.
**Entregable:**
Para lograr el objetivo de generar herramientas de análisis de audio por medio de desarrollo de software, realizaron documentos de trabajo [_jupyter notebooks_](https://jupyter.org/) en lenguaje `python` y `bash`, que documentan los procedimientos implementados y el yuso de herramientas de _software_. Todos los repositoriosde _github_ que contienen los documentos de trabajo mencionados son hacen parte de la organizacion de la [CONABIO]([CONABIO](https://github.com/CONABIO)) en _github_ y se listan a continuación:
- https://github.com/CONABIO/sipecam-models-audio:
Implementaciones de _pipelines_ para procesamiento y/o análisis de bases de datos de audio provistas por la CONABIO (SiPeCamp, SNMB, o el Instituto Humboldt). En la siguiente parte del presente informe se detallan los _pipelines_ desarrollados y sus productos asociados.
- https://github.com/CONABIO/development-team-general-DGPI/tree/main/sebastian:
- La carpeta [`notebook/acoustic-monitoring-putumayo`](https://github.com/CONABIO/development-team-general-DGPI/tree/main/sebastian/notebooks/acoustic-monitoring-putumayo) incluye el desarrollo realizado para el procesamiento de las bases de datos de Audio de la Región Amazónica del Putumayo (Colombia) desde el 7 de Julio de 2019, hasta el 09 de agosto de 2019, y fue recolectada en una frecuencia de 24 horas, a una tasa de muestreo de 96 KHz. Esta base de datos fue provista por el [Instituto Humboldt](http://www.humboldt.org.co/es/).
- La carpeta [`notebook/acoustic-monitoring-putumayo`](https://github.com/CONABIO/development-team-general-DGPI/tree/main/sebastian/notebooks/upload-data-S3-humboldt) incluye los procedimientos realizados para realizar la migración de los archivos de las colecciones de audio mencionadas desde los servidores de la CONABIO hacia el servicio de almacenamiento de _Amazon Web Services_, `S3`.
- Informe final con los _notebooks_ que documenten los _pipelines_ de procesamiento de datos de audio en el proyecto SiPeCaM. Tales _notebooks_ se colocarán en un repositorio organizado por "LA CONABIO".
**Entregable:**
En la siguiente sección de este informe se describen los _notebooks_ implementados, así como la descripción de sus productos, implementación, y referencias al repositorio de _github_ que los aloja, citado a continuación:
[https://github.com/CONABIO/sipecam-models-audio](https://github.com/CONABIO/sipecam-models-audio)
Todos los _pipelines_ implementados se construyeron utilizando la librería para análisis y procesamiento de audio, [`yuntu`](https://github.com/CONABIO/yuntu-private/tree/stable/src), desarrollada en la CONABIO, y simultáneamente, sus implementaciones permitieron realizar varias anotaciones para su robustecimiento.
## _Pipelines_ de procesamiento de datos de audio en el proyectio SiPeCaM
### 1.1 Implementación: Objetivos
Con el objetivo de diseñar, implementar, y desplegar sistemas de procesamiento para el uso de datos de audio del proyecto Sitios Permanentes de Calibración y Monitoreo de la Biodiversidad (SiPeCaM), se realizaron cinco (4) _notebooks_ que cumplen diferentes objetivos en el procesamiento de datos acústicos. A continuación, se listan dichos cuadernos de trabajo y se menciona brevemente su objetivo general. En la siguientes subsecciones se explican a detalle cada uno de ellos.
- _Soundscapes_: Generar paisajes acústicos utilizando indicadores de energía con datos del área del Putumayo (Colombia) con el fin de entender los comportamientos ciclicos referentes a la acústica de esta región.
- Detección de murciélagos (_Chiroptera_): Generar predicciones de presencia o ausencia de animales del género _Chiroptera_ en determinados horizontes temporales.
- Ejercicio no supervisado para detección de _clusters_ de fauna: Ejercicio no supervisado para detectar la presencia o ausencia de fauna en distintas ventanas temporales utilizando un modelo de aprendizaje profundo (_Haar embedding_).
- Creación de datos artificiales para detección de primates: Creación de un conjunto de datos artificiales que simula la presencia de primátes(_Alouatta_ y _Ateles_) en el área del Putumayo (Colombia).
### 1.2 Implementación: Cronograma de desarrollo de actividades
En el siguiente Calendario se muestra la evolución en el flujo de actividades durante el desarrollo del contrato que permitieron crear la implementación de los _pipelines_ implementados.
```mermaid
gantt
title Figura 1: Desarrollo cronológico de actividades
section Etapa 1
A1:2021-10-20, 15d
A2: 2021-10-25, 5d
section Etapa 2
A3:2021-11-01 , 5d
A4:2021-11-06 , 4d
A5:2021-11-07 , 7d
A6:2021-11-10 , 7d
section Etapa 3
A7:2021-11-18 , 10d
A8:2021-11-22 , 10d
A9:2021-12-02 , 5d
A10:2021-12-08 , 3d
```
Los grupos de actividades (A) del calendario se describen a continuación:
- A1: Familiarización con librerías de procesamiento de audio (`yuntu`) y literatura de procesamiento de señales
- A2: Creación de tutorial de [_pipeline_](https://github.com/CONABIO/yuntu-private/blob/pipelines/pipelines/pipeline-training-localDB.ipynb) de entrenamiento en `yuntu`
- A3: Trabajo e implementación de _pipeline_ de entrenamiento no supervisado (_Haar embedding_) con datos del SNMB
- A4: Creación y procesamiento de colecciones de audio de los datos del Putumayo provistos por el Instituto Humboldt
- A5: Trabajo en implementación de ejercicios de paisajes acústicos (_soundscapes_) con datos del Putumayo
- A6: Creación de _pipeline_ para generación de paisajes acústicos en el Putumayo
- A7: Trabajo en implementación y exploración de ejercicios de predicción de detección de quirópteros. Estudio de arquitecturas [`BirdNet`](https://www.google.com/search?channel=trow5&client=firefox-b-d&q=birdnet) y [`BatDetector`](https://github.com/macaodha/batdetect)
- A8: Creación de _pipeline_ de predicción de detección de quirópteros (fase exploratoria, no funcional)
- A9: Trabajo en implementación de ejercicios de creación de audio artificiales con base de datos de primates de _Cornell_
- A10: Creación de _pipeline_ de datos artificiales de primates en el Putumayo.
### 1.3 Implementación: Arquitectura
La ejecución de todos los _pipelines_ presentados en este informe se realizaron utilizando el servicio de Amazon web Services (_AWS_), Amazon Elastic Compute Cloud (_EC2_), con una instancia con las siguientes características:
```bash
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 79
Model name: Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
Stepping: 1
CPU MHz: 2699.815
CPU max MHz: 3000.0000
CPU min MHz: 1200.0000
BogoMIPS: 4600.00
Hypervisor vendor: Xen
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 46080K
NUMA node0 CPU(s): 0-3
```
En cuanto al manejo de _sofware_, la instancia utiliza las imagenes de [_docker_](https://www.docker.com) disponiblse en la siguiente liga: https://github.com/CONABIO/yuntu-private/tree/stable/dockerfiles/tensorflow-yuntu-dask-gpu. Desta imagen fue desarrolladas por el equipo de desarrollo de la CONABIO.
Adicionalmente, la instancia tiene instalados y configurados los servicios de [Kubeflow](https://github.com/kubeflow/kubeflow) y [Kale](https://github.com/kubeflow-kale/kale) para el orquestamiento y lanzamiento de _pipelines_.
## 2. Notebooks
### 2.1 Paisajes Acústicos (_Soundscapes_)
#### 2.1.1 Descripción
El objetivo de este _notebook_ es generar un paisaje acústico utilizando índices sonoros de intensidad, y un índice de complejidad, con el fin de brindar una visión general de la presencia de fauna para diferentes horizontes temporales utilizando datos de sonido. La base de datos utilizada fue provista por el [Instituto Humboldt](http://www.humboldt.org.co/es/) para la Región Amazónica del Putumayo (Colombia) desde el 7 de Julio de 2019, hasta el 09 de agosto de 2019, y fue recolectada en una frecuencia de 24 horas, a una tasa de muestreo de 96 KHz.
El conjunto de datos fue descargado en el servicio `S3` de _AWS_ e el _bucket_: `s3://datos_humboldt/13-04-2020-2-monitoreo-acustico-putumayo-G02`. El proceso de carga de la base de datos del servidor de la CONABIO al _bucket_ se describe en el _notebook_ asociado a [este](https://github.com/CONABIO/development-team-general-DGPI/blob/main/sebastian/notebooks/upload-data-S3-humboldt/upload-data2S3-monitoreo-acustico-putumayo.ipynb) enlace.
Posteriormente, a partir de la base de datos almacenada en `S3` se generó una base de datos de audio relacional de `PostgreSQL` utilizando el servicio `RD` de `AWS` y la librería `yuntu`. El procedimiento realizado se puede consutlar en el siguiente [notebook](https://github.com/CONABIO/development-team-general-DGPI/blob/main/sebastian/notebooks/acoustic-monitoring-putumayo/acoustic-monitoring-putumayo-postgresql-collection.ipynb).
El _jupyter notebook_ de esta implementación se encuentra publicado en el repositorio [`sipecam-models-audio/putumayo-acoustic-monitoring`](https://github.com/CONABIO/sipecam-models-audio/putumayo-acoustic-monitoring/) de la organización [CONABIO](https://github.com/CONABIO) en _github_.
#### 2.1.2 Implementación del _pipeline_
El diagrama de flujo del _pipeline_ implementado se presenta en la Figura 2.1.1. La ejecución tomó un tiempo de aproximadamente 6 horas.
```graphviz
digraph hierarchy {
nodesep=2
node [color=green, fontname=Courier, shape=box]
edge [color=Black]
parametros->
imports->
funciones->
conexion_db->
crear_coleccion_yuntu->
crear_audio_df_yuntu->
crear_yuntu_pipeline_procesamiento->graficar_pipeline
crear_yuntu_pipeline_procesamiento->
{configurar_hasher configurar_slicing}->
configurar_feed->
computar_soundscape->
visualizacion_soundscape->
{guardar_visualizacion_soundscape_seq
guardar_visualizacion_soundscape_mean
guardar_visualizacion_soundscape_std}
crear_localCluster_dask->
configurar_feed
edge[style=invis]
}
```
_**Figura 2.1.1** _Pipeline_ para la producción de paisajes acústicos_
Los pasos del _pipeline_ de la Figura 2.1.1 se describen a continuación:
- `parametros`: Se crean las variables globales necesarias para la ejecución de la totalidad del _pipeline_
- `imports`: Se importan las dependencias de `python`
- `funciones`: Se crean funciones adicionales para el análisis
- `conexion_db`: Se genera una conexión a la base de datos de `PostgreSQL` con las credenciales requeridas.
- `crear_coleccion_yuntu`: A partir de la base de datos se genera una colección de audio en `yuntu`
- `crear_audio_df_yuntu`: A partir de la colección de audio se genera un `dataframe` en `pandas` con toda la informacion de la colección de audio.
- `crear_yuntu_pipeline_procesamiento`: Usando yuntu de define un _pipeline_ de procesamiento construido con [`dask`](https://dask.org/) para realizar el procesamiento en paralelo del _dataframe_ de audio.
- `graficar_pipeline`: Se realiza una visualizacion del grafo dirigido de _pipeline_ de `dask`
- `configurar_hasher`: Se configura el _hasher_ para cada grabación de la colección
- `configurar_slicing`: Se configura la forma de analizar ventanas de audio (_audio-windows_) en las grabaciones
- `crear_localCluster_dask`: Se crea un cluster local de procesos en `Dask`
- `configurar_feed`: utilizando las anteriores configurares se termina de configurar el _pipeline_ de `dask`
- `computar_soundscape`: Se ejecuta el procesamiento en paralelo de las grabaciones de audio
- `visualizacion_soundscape`: Se grafica en dos dimensiones el resultado del paisaje acústico
- `guardar_visualizacion_soundscape_seq`: Se guarda la visualización del paisaje acústico en forma secuencial para todo el horizonte temporal provisto en formato `PNG`.
- `guardar_visualizacion_soundscape_mean`: Se guarda la visualización del paisaje acústico para el promedio de los índices analizados en las horas comprendidas en el horizonte temporal provisto. La imagen se guarda en formato `PNG`
- `guardar_visualizacion_soundscape_std`: Se guarda la visualización del paisaje acústico para la desviación estándar de los índices analizados en las horas comprendidas en el horizonte temporal provisto. La imagen se guarduea en formato `PNG`
#### 2.1.3 Producto y visualizaciones
A continuación se presenta un ejemplo para cada uno de los tipos de visualizaciones producidas por el _pipeline_ mencionado. En particular, para las gráficas que denotan el nivel o el promedio de los índices, los tonos azules oscuros denotean la ausencia ausencia de energía acústica, que a su vez podría indicar la no presencia de fauna para las diferentes franjas de frecuencia, mientras que los tonos de otros colores indican lo opuesto. Esto sucede porque cada canal indica un color para los diferentes índices analizados.
<img align="center" width="" src="https://i.imgur.com/qTxK5Qb.png">
_**Figura 2.1.2** Paisaje acústico secuencial para los indicadores de complejidad e intesidad por días y horas_
Por ejemplo, la Figura 2.1.2 puede denotar la presencia promedio de murciélagos (_Chiroptera_) en franjas de horario entre las 19:00 y las 06:00 horas, dado que se presentan tonos verdes para dichas franjas de horario para frecuencias ultrasónicas (mayores a 20 KHz).
<img align="center" width="500" src="https://i.imgur.com/mNep5jV.png">
_**Figura 2.1.3** Paisaje acústico para el promedio de los indicadores de complejidad e intesidad por horas_
La interpretación de la gráfica 2.1.4 que presenta la desviación estándar de los índices análizados se resume a continuación: La ausencia de color (zonas negras) indícan que ninguno de los índices analizados tiene variación con respecto a la media, y por lo tanto las regiones donde predomina dicho tono son altamente consistentes con los niveles promedio de dichos índices. Por otro lado, las zonas con coloración consistente indican que no hay variación con respecto a determinado índice.
Por ejemplo, en la gráfica 2.1.3 las banda consistentemente morada entre las 00:00 y las 06:00 en niveles ligeramente superiores a los 19.2 KHz de frecuencia indica la presencia consistente de familias como la _Gryllidae_ (grillos). Si se analiza este ocmportamiento en términos de la desviación estándar, observamos que para la misma área de la gráfica se observa una franja con ausencia de color.
<img align="center" width="500" src="https://i.imgur.com/zygmUfO.png">
_**Figura 2.1.4** Paisaje acústico para la desviación estándar de los indicadores de complejidad e intesidad por horas._
#### 2.1.4 Reutilización y despliege
Este _pipeline_ puede ser adaptado para el uso de bases de datos diferentes a la analizada. El único requerimiento adicional es realizar la carga de los datos a una base a una colección de `yuntu`, la cual puede ser almacenada localmente o en una base de datos relacional. En este caso se utilizó una base de datos en `PostgreSQL` a partir de grabaciones obtenidas en formato `WAV`. como se menciona en la sección 2.1.1.
En particular, las iamgenes generadas en el lanzamiento realizado se pueden encontrar en la siguiente liga:
[https://github.com/CONABIO/sipecam-models-audio/tree/main/soundscapes/putumayo-acoustic-monitoring/imgs](https://github.com/CONABIO/sipecam-models-audio/tree/main/soundscapes/putumayo-acoustic-monitoring/imgs)
### 2.2 Detección de murciélagos: Generar predicciones de presencia o ausencia de murciélagos (_Chiroptera_) en el área del Putumayo (Colombia).
#### 2.2.1 Descripción
El objetivo de este notebook es implementar un _pipeline_ para la detección de presencia o ausencia de quirópteros en ventanas temporales de archivos de audio. En particular, las predicciones son anotaciones en espectrogramas donde se detecta alta probabilidad (mayor o igual a 0.5) de la presencia de murciélagos. Este ejercicio se realizó, utilizando la misma base de datos mencionada en la sección 2.1, provista por el Instituto Humboldt para la Región Amazónica del Putumayo (Colombia) desde el 7 de Julio de 2019, hasta el 09 de agosto de 2019, y recolectada en una frecuencia de 24 horas, a una tasa de muestreo de 96 KHz.
Es importante mencionar que el modelo utilizado en este _pipeline_ fue previamente entrenado por el equipo de Ciencias y Ecología de la CONABIO con datos de varias especies de quirópteros para distintos territorios de México.
En las siguientes secciones se explica el flujo del procesamiento y se dan ejemplos de las visualizaciones generadas para el análisis de los archivos de audio.
#### 2.2.2 Implementación del _pipeline_
El diagrama de flujo del _pipeline_ implementado se presenta en la Figura 2.2.1. La ejecución tomó un tiempo de computo de aproximadamente 6 horas.
```graphviz
digraph hierarchy {
nodesep=1
node [color=blue, fontname=Courier, shape=box]
edge [color=Black]
parametros->
imports->
funciones->
conexion_db->
crear_coleccion->
crear_audio_df->
referenciar_tiempo->
muestra_df->
cortar_audio->
ajustar_sample_rate->
crear_espectrogramas->
visualizacion_predicciones->
guardar_visualizaciones
descargar_modelo->
crear_modelo_dl->
prediccion_probe->
transformar_prediccion->
visualizacion_predicciones
edge[style=invis]
}
```
_**Figura 2.2.1** _Pipeline_ para la producción de murciélagos_
Los pasos del _pipeline_ de la Figura 2.1.1 se describen a continuación:
- `parametros`: Se crean las variables globales necesarias para la ejecución de la totalidad del _pipeline_
- `imports`: Se importan las dependencias de `python`
- `funciones`: Se crean funciones adicionales para el análisis
- `conexion_db`: Se genera una conexión a la base de datos de `PostgreSQL` con las credenciales requeridas.
- `crear_coleccion_yuntu`: A partir de la base de datos se genera una colección de audio en `yuntu`
- `crear_audio_df`: A partir de la colección de audio se genera un `dataframe` en `pandas` utilizando `yuntu` con toda la informacion de la colección de audio.
- `referenciar_tiempo`: Se ajusta el _dataframe_ para tener como referencia en cuanto a temporalidad el ciclo circadiano más común de los quirópteros.
- `muestra_df`: Se toman muestras del total de observaciones para realizar la implementación.
- `cortar_audio`: Dada la alta carga computacional en el procesamiento de la totalidad de las grabaciones, se cortan fragmentos de las mismas para la implementación de este ejemplo.
- `ajustar_sample_rate`: Se hace un "re-muestreo" de la frecuencia de las observaciones para que sean compatible con el modelo entrenado (_probe_).
- `crear_espectrogramas`: terminado el procesamiento de las observaciones se generan los espectrogramas asociados a las mismas.
- `descargar_modelo`: Se descargan del servicio de `S3` los archivos necesarios para compilar el modelo entrenado (_probe_).
- `crear_modelo_dl`: Se compila el modelo entrenado en `tensorflow`
- `prediccion_probe`: Se utiliza el modelo para realizar predicciones de detección de muerciélagos.
- `transformar_prediccion`: Se transforman las predicciones del modelo para poder realizar su visualización en dos dimensiones
- `visualizacion_predicciones`: Se generan visualizaciones de las predicciones del modelo en tres componentes.
- `guardar_visualizaciones`: Se guardan las visualizaciones localmente en formato `PNG`
#### 2.2.3 Producto y visualizaciones
A continuación se presenta un ejemplo de las visualizaciones producidas por este _pipeline_. para cada grabación de audio (después de aplicar el pre-procesamiento) se produce una imagen como la presentada en la Figura 2.2.2.
<img align="center" src="https://i.imgur.com/vJPHFHz.png">
_**Figura 2.2.2** Predicciones de detección de quirópteros._
El primer panel de la Figura 2.2.1 presenta la probabilidad predicha por el modelo utilizado para cada microsegundo de la grabación analizada. Las franjas coloreadas verticales son los periodos en las cuales la probabilidad es mayor o igual a 0.5, y por lo tanto se pronostica presencia de quirópteros.
El segundo panel de la Figura 2.2.1 muestra el espectrograma (utilizando decibelios) asociado a la grabación de audio analizada. Adicionalmente, las anotaciones en líneas punteadas agrupan periodos para los cuales se predice la detección de muerciélagos. La visualización del espectrograma asociado al audio permite realizar ejercicios de validación visual a ecólogos y expertos en el dominio de eco-acústica.
Por último, el tercer panel de la Figura 2.2.1 presenta la penúltima capa del modelo de aprendizaje profundo (_deep learning_), utilizado para realizar predicción. En particular, esta visualización sirve para realizar ejercicios de validación sobre la arquitectura de modelación utilizada, con el fin de realizar ajustes sobre la misma, de ser necesario.
Es importante anotar que dado que las grabaciones fueron recolectadas a una tasa de muestreo de 96 kHz, frecuencias superiores a dichos nivel son de color negro en los páneles 2 y 3 (de arriba hacia abajo) de la Figura 2.2.1. De igual forma, no tener frecuencias hasta los 200 Khz imposibilita la detección de varias especies de murciélafos cuyos llamados caen dentro de dicho espectro.
#### 2.1.4 Reutilización y despliege
Este _pipeline_ puede ser adaptado para el uso de bases de datos diferentes a la analizada. El único requerimiento adicional es realizar la carga de los datos a una base a una colección de `yuntu`, la cual puede ser almacenada localmente o en una base de datos relacional. En este caso se utilizó una base de datos en `PostgreSQL` a partir de grabaciones obtenidas en formato `WAV`. como se menciona en la sección 2.1.1.
Los resultados de las imagenes preoducidas para la muestra analizada se encuentra en el [repositorio](https://github.com/CONABIO/sipecam-models-audio/tree/main/bats-detection/putumayo-acoustic-monitoring) asociado a este ejercicio.
### 2.3 Clasificación no-supervisada para la detección de grupos de fauna
#### 2.3.1 Descripción
El objetivo de este notebook es implementar un _pipeline_ para la implementación de un ejercicio de aprendizaje profundo no supervisado para clasificación de grupos de fauna utilizando datos de audio. En particular, el producto de este _pipeline_ son imágenes en dos dimesiones de espectrogramas con ventanas temporales con _clusters_ que indican la presencia de grupos de fauna se diferencian por colores.
El conjunto de datos utilizado es la base de datos del Sist4ema Nacional de Monitoreo de la biodiversidad (SNMB).
El jupyter notebook de esta implementación se encuentra publicado en el repositorio sipecam-models-audio/fauna-clustering/SNMB de la organización CONABIO en github:
https://github.com/CONABIO/sipecam-models-audio/tree/main/fauna-clustering/SNMB
#### 2.3.2 Implementación del _pipeline_
El diagrama de flujo del _pipeline_ implementado se muestra en la Figura 2.3.1.
```graphviz
digraph hierarchy {
nodesep=1
node [color=orange, fontname=Courier, shape=box]
edge [color=Black]
parametros->
imports->
funciones->
descargar_audios_primates_S3->
crear_storage_primates->
crear_df_audio_primates-> preprocesar_audio_primates
descargar_audios_putumayo_S3->
crear_storage_putumayo->
crear_df_audio_putumayo->preprocesar_audio_putumayo
preprocesar_audio_primates->crear_listas_Audio
preprocesar_audio_putumayo->crear_listas_Audio
crear_listas_Audio->crear_audio_generativo
crear_listas_Audio->crear_espectrogramas
parametros_adicionales->visualizar_guardar_productos
{crear_audio_generativo crear_listas_Audio crear_espectrogramas}->
visualizar_guardar_productos
edge[style=invis]
}
```
_**Figura 2.3.1** _Pipeline_ para la detección no-supervisada de grupos de fauna_
Los pasos del _pipeline_ de la Figura 2.3.1 se describen a continuación:
- `parametros`: Se crean las variables globales necesarias para la ejecución de la totalidad del _pipeline_
- `imports`: Se importan las dependencias de `python`
- `funciones`: Se crean funciones adicionales para el análisis
- `conexion_db`: Se genera una conexión a la base de datos de `PostgreSQL` con las credenciales requeridas
- `crear_coleccion_yuntu`: A partir de la base de datos se genera una colección de audio en `yuntu`
- `crear_audio_df_yuntu`: A partir de la colección de audio se genera un `dataframe` en `pandas` con toda la informacion de la colección de audio
- `computa_contexto_embedding`: Se calcula el el contexto para la generación
- `dim_haar_embedding`: Se calculan las dimensiones del _embedding_
- `transf_input`: Transfomar conjunto de datos para su lectura en `tensorflow`
- `crear_haar_embedder`: Crear generador de _Haar embedding_ en `tensorflow`
- `computar_embedder`: Crear modelo para calcular _haar embedding_ de las grabaciones de audio
- `resumir_modelo`: Mostrar resumen del modelo
- `compilar_modelo`: Compilar modelo en `tensorflow`
- `entrenar_modelo`: Entrenar modelo generador de _haar embedding_
- `submuestra_df`: Calcular muestra del `dataframe` para generar visualización
- `calcular_embedding`: Calcular predicción del modelo para los registros seleccionados
- `redimensionar_dimension`: Redimensionar _embedding_ generado por el modelo
- `norm_embedding`: Normalizar _embedding_ para visualización
- `visualizacion_embedding`: Visualizar _embedding_
- `guardar_visualizacion`: Guardar visualizacion en formato `PNG`
#### 2.3.3 Producto y visualizaciones - Reutilización y despliege
El producto de este _pipeline_ requiere varias horas de computo, y será subido en la siguiente carpeta: [https://github.com/CONABIO/sipecam-models-audio/tree/main/fauna-clustering/SNMB](https://github.com/CONABIO/sipecam-models-audio/tree/main/fauna-clustering/SNMB). En particular, se generan espectrogramas en formato `PNG` para ventanas de tiempo definidas, con anotaciones geométricas que identifican la presencia de distrintos animales (agrupados).
El computo de este _pipeline_ es tiene un alto costo computacional en términos de procesadores, razón por la cual es sugerido realizar su ejecución en el Servidor de la CONABIO, o con una maquina con un alto número de CPUs.
### 2.4 Creación de datos no orgánicos para detección de primates
#### 2.4.1 Descripción
El objetivo de este _notebook_ es implementar un _pipeline_ para la creación de de datos no orgánicos de primates en la selva del Putumayo. En particular, los datos de los llamados de primates del género _Alouatta_ son usados a partir de la base de datos de primates de Cornell, en formato `WAV`. Por otro lado, los archivos de audio de la selva del Putumayo son extraídos de las grabaciones provistas por el Instituto Humboldt. El producto de este _pipeline_ es una visualización de los espectrogramas y ondeletas (_wavelets_) de los audios originales, y el producto de su mezcla, además de guardar los archivos de audio generados en formato `WAV`.
En particular, los datos generados artificialmente serán usados como datos de entrenamiento de modelos de aprendizaje profundo para resolver problemas supervisados.
El código asociado al desarrolo del _pipeline_ se encuentra en la siguiente referencia:
https://github.com/CONABIO/sipecam-models-audio/tree/main/generative-audio/primates
#### 2.4.2 Implementación del _pipeline_
El diagrama de flujo del _pipeline_ implementado se muestra en la Figura 2.4.1.
```graphviz
digraph hierarchy {
nodesep=1
node [color=orange, fontname=Courier, shape=box]
edge [color=Black]
parametros->
imports->
funciones->
descargar_audios_primates_S3->
crear_storage_primates->
crear_df_audio_primates-> preprocesar_audio_primates
descargar_audios_putumayo_S3->
crear_storage_putumayo->
crear_df_audio_putumayo->preprocesar_audio_putumayo
preprocesar_audio_primates->crear_listas_Audio
preprocesar_audio_putumayo->crear_listas_Audio
crear_listas_Audio->crear_audio_generativo
crear_listas_Audio->crear_espectrogramas
parametros_adicionales->visualizar_guardar_productos
{crear_audio_generativo crear_listas_Audio crear_espectrogramas}->
visualizar_guardar_productos
edge[style=invis]
}
```
_**Figura 2.4.1** _Pipeline_ para la generación artificial de llamados de primates en el Putumayo_
Los pasos del _pipeline_ de la Figura 2.4.1 se describen a continuación. Es importante denotar que en este flujo de trabajo no se utilizan "colecciones" de audio de `yuntu`, sino `Storages`, lo que permite trabajar de forma más eficientes si los datos de audio se encuentran almacenados de forma local, como ene ste caso.
- `parametros`: Se crean las variables globales necesarias para la ejecución de la totalidad del _pipeline_
- `imports`: Se importan las dependencias de _python_
- `funciones`: Se crean funciones adicionales para el análisis
- `descargar_audios_primates_S3`: Descargar datos de primates-cornell en formato `WAV` de S3
- `crear_storage_primates`: Crear `storage` de `yuntu` para la lectura de todas las grabaciones de audio de primates
- `crear_df_audio_primates`: A partir del `storage` de audio se genera un _dataframe_ en pandas con toda la informacion de la colección de audio de Primates-Cornell
- `descargar_audios_putumayo_S3`: Descargar datos de putumayo-humboldt en formato `WAV` de S3
- `crear_storage_putumayo`: Crear `storage` de `yuntu` para la lectura de todas las grabaciones de audio de selva amazónica del Putumayo.
- `crear_df_audio_putumayo`: A partir del `storage` de audio se genera un dataframe en pandas con toda la informacion de la colección de audio del Putumayo.
- `preprocesar_audio_primates`: Ajstar tasa de muestreo de los datos de primates a un nivel en común
- `preprocesar_audio_putumayo`: Ajustar tasa de muestreo de los datos de selva a un nivel en común
- `crear_listas_Audio`: Crear listas de `Python` con objetos de `Audio` para datos de primates y de selva con el fin de optimizar su procesamiento
- `crear_audio_generativo`: Combinar audio de selva y primates
- `crear_espectrogramas`: Crear espectogramas asociados a objetos de `Audio` originales y generados
- `parametros_adicionales`: Parámetros para la visualización de los objetos de `Audio`
- `visualizar_guardar_productos`: Visualizar y guardar (formato `PNG`) visuaziones de _wavelets_ y espectrogramas de objetos de `Audio` originales y generados artificialmente. Adicionalemente, se guardan en formato `WAV` los archivos de audio generados artificialmente.
#### 2.4.3 Producto y visualizaciones
A continuación se presenta un ejemplo de las visualizaciones producidas por este _pipeline_. para cada grabación de audio (después de aplicar el pre-procesamiento) se produce una imagen como la presentada en las Figura 2.4.2. y 2.4.3.
<img align="center" src="https://i.imgur.com/QskLmlj.png">
_**Figura 2.4.2** Primer ejemplo de visualización de audios originales y audios generados artificialmente._
<img align="center" src="https://i.imgur.com/O5aRe2W.png">
_**Figura 2.4.3** Segundo ejemplo de visualización de audios originales y audios generados artificialmente._
El panel izquierdo de la primera fila de las Figuras 2.4.2 y 2.4.3 muestra el espectrograma en decibelios de una grabación audio proveniente de la base de datos de primates de Cornell, luego de haberse realizado un proceso de preprocesamiento. Por otro lado, el segundo panel (derecha) presenta las ondas asociadas al mismo audio (su representación como arreglo numérico de ondeletas). En la misma dirección, el análisis es correspondiente para los páneles de la segunda fila de las gráficas, sin embargo, en ellos se analizan los datos de audio de la selva amazónica del Putumayo. Por último, en la tercera filal se presenta el mismo análisis para la composición de los audios de primates con los de selva, los cuales fueron generados artificialmente.
#### 2.4.4 Reutilización y despliege
Este pipeline puede ser adaptado para el uso de bases de datos diferentes a la analizada. Se requiere que los archivos de audio a utilizar se encuentren almacenados de manera local en formato `WAV`.
El audio generado en la tercera fila de las gráficas de las figuras mencionadas se almacena localmente en formato `WAV`. Los resultados son almacenados en el repositorio mencionado en la sección 2.4.1, en la sección de [`/audio`](https://github.com/CONABIO/sipecam-models-audio/tree/main/generative-audio/primates/audio), mientras que las imágenes se almacenan en la sección [`/imgs`](https://github.com/CONABIO/sipecam-models-audio/tree/main/generative-audio/primates/imgs).