Este repositorio es para recibir señales, realizar transcripción de video/sonido a texto para enviarlo por elastic para realizar búsquedas de texto.
Importante: el desarrollo de este feature solo funciona correctamente para sistemas x64
- Feature
- Instalación
- ¿Cómo desarrollar este feature?
- Versión de Python
- Directorios
- Configuración
- Acerca de VOSK
- Ejemplo Actions Github
- Ejemplo Gitlab CI/CD
- En el futuro: NLP
- Extra
- Autor
En Pubsub:
- Configuración sencilla
- Te permite recibir mensajes de señales de streaming a través de Pubsub
- Filtrar los mensajes según la configuración establecida
- Configurar cantidad de procesos que se ejecutan en paralelo
- Formatear mensajes con esta estructura de mensaje
- Descarga archivos (.ts, .mp4, .mp3, .mkv, .wav) de los mensajes
Te permite correr la librería de reconocimiento de voz
- Librería ya configurada para ser corrida en Inglés y Español con modelos livianos
- Toma el archivo descargado, le corre el speech-to-text y guarda los datos necesarios
- Prepara los mensajes para ser enviados por Elastic
En Elastic:
- Configurar Host e Index
- Inicializar el Index
- Inicializar el Documento del Index
- Mandar mensajes a Elastic (Index configurado)
git clone https://github.com/shirosweets/vosk-speech-to-text.git
python3 -m venv speech_venv
(por única vez)
source speech_venv/bin/activate
sudo apt-get update -y
(por única vez)
sudo apt-get install -y libportaudio2
(por única vez)
sudo apt-get install -y portaudio19-dev
(por única vez)
pip install --upgrade pip
pip install -r requirements.txt
python3 main_run.py
git clone https://github.com/shirosweets/vosk-speech-to-text.git
python3 -m venv speech_venv
(por única vez)
source speech_venv/bin/activate
sudo apt-get update -y
(por única vez)
sudo apt-get install libportaudio2
(por única vez)
sudo apt-get install -y portaudio19-dev
(por única vez)
pip install --upgrade pip
pip install -r requirements.txt
python3 main_local_test.py
- Cada opción es una parte del desarrollo. Seleccionar qué se quiere probar en particular.
- Si se desea realizar más pruebas particular modificar el archivo con una nueva opción ingresada por input.
- En el archivo
src/test
se encuentran videos y audios para realizar pruebas (esto para reducir el tiempo de los testeos).
deactivate
El desarrollo debe realizarse mediante leer mensajes de Pubsub de la señal de streaming, filtrar y procesar esos mensajes, parsearlos y mandarlos por elastic.
- mp3
- mp4
- avi
- mkv
- ts
- wav
Recomendable y deseable: VM de GCP
Configuración necesaria: Kubernetes No recomendable: localPython 3.8.5
-
config
: archivos de configuraciónconfig.env
: archivo con las variables de entornovosk_config
: modelos de configuración de Vosk
-
images
: imágenes del README del repositorio -
files
: archivos que se van descargando para aplicarle Voskglobal_test
: chunks del canalGLOBAL TEST
-
logs
: configuración de los logsparse_logs
: logs de los parse
-
src
: códigotest
: archivos para utilizar en los testexamples
: archivos para tener en cuenta
Esto cambiará en un futuro, pero actualmente se debe hacer en el mismo repositorio:
- Se debe configurar los canales que pueden acceder a esta funcionalidad en:
config/channel_config.py
- Añadir un nuevo canal: agregarlo al diccionario
CHANNELS
. - Eliminar un nuevo canal: eliminarlo del diccionario
CHANNELS
.
- Configurar idiomas del speech en:
config/vosk_config
cada archivomodel_
es un idioma añadido y configurado. Si se desea añadir un nuevo idioma se debe establecer la lógica para detectarlo. - Cada modelo tiene una manera diferente de realizar el output del speech, por lo tanto se debe tener en cuenta esto para poder procesar los mensajes, parsearlos y mandarlos a elastic.
- Los modelos pueden ser añadidos directamente o descargados.
Elastic es la herramienta principal para poder realizar las búsquedas de texto.
Todos los mensajes enviados se encuentran en el index qque se configure en INDEX_ELASTIC
del archivo config_speech/elasticsearch_dsl_config.py
(recordar que uno debe tener ya creado el servidor en Elasticsearch para poder acceder al index y configurar el host en HOST_ELASTIC
)
{ -
"parse-speech": { -
"mappings": { -
"properties": { -
"channel_id": { -
"type": "integer"
},
"channel_name": { -
"type": "text",
"fields": { -
"raw": { -
"type": "keyword"
}
},
"analyzer": "snowball"
},
"end_time": { -
"type": "date"
},
"end_word": { -
"type": "text",
"fields": { -
"raw": { -
"type": "keyword"
}
},
"analyzer": "snowball"
},
"first_time": { -
"type": "date"
},
"first_word": { -
"type": "text",
"fields": { -
"raw": { -
"type": "keyword"
}
},
"analyzer": "snowball"
},
"sentence": { -
"type": "text",
"fields": { -
"raw": { -
"type": "keyword"
}
},
"analyzer": "snowball"
}
}
}
}
}
Esta herramienta nos sirve para poder visualizar los indexs, mapeos, cantidad de espacio utilizado, y cantidad de documentos de elastic.
La forma más sencilla de correrlo es con su propio dockerdocker run -e CEREBRO_PORT=8000 -p 8000:8000 lmenezes/cerebro
Ir al puerto levantado:
http://localhost:8000/#/connect
Luego ingresar el servidor de elastic en el Node address.
Recibe las señales de chunks en streaming por mensajes de los cuales se deben filtrar los canales que queremos y "preparar" dichos mensajes.
La configuración para esto debe realizarse ensrc/my_pubsub.py
:
class Pubsub():
def __init__(self):
PROJECT_PATH = "projects/project_name"
TOPIC_NAME = 'topic_name'
self.TOPIC_PATH = f"{PROJECT_PATH}/topics/"+TOPIC_NAME
self.SUBSCRIPTION_PATH = f"{PROJECT_PATH}/subscriptions/"+'topic_name'
self._set_google_credentials()
Configuración necesaria para GCP:
Se debe modificar/reemplazar el archivoconfig_speech/service_account.json
{
"type": "service_account",
"project_id": "name-proyect",
"private_key_id": "key",
"private_key": "key",
"client_email": "email@example.com",
"client_id": "id",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "url"
}
Ver los procesos corriendo en background:
fg
Estilo del código (PEP8):
pycodestyle . --exclude=ignore_*,config_speech/channel_config.py
Eliminar todos los modelos:
python3 clear_models.py
- type:
y
VOSK es una librería que se puede utilizar para realizar transcripciones de voz/audio a texto de manera offline. Funciona a través de modelos los cuáles uno puede definir, crear y utilizar pero existen modelos comunitarios (libres) en los cuáles ya están definidos los idiomas y esquemas a utilizar.
Documentación general de la librería
Librería en Python
Modelos de VOSK
Debido a que VOSK trabaja con modelos y estos deben ser definidos, configurados y entrenados, dependiendo el modelo es el formato del output del mismo, por lo cual depende qué tan diferentes estén definidos los formatos para realizar el parseo y posterior envío por elastic.
La identificación de cada modelo de idioma es tomado por las siglas de las normas ISO 639-1.
Este es el listado de todos los idiomas que puede expandirse este fetuare:
- English,
- Indian English,
- German,
- French,
- Spanish,
- Portuguese,
- Chinese,
- Russian,
- Turkish,
- Vietnamese,
- Italian,
- Dutch,
- Catalan,
- Arabic,
- Greek,
- Farsi,
- Filipino.
- Spanish,
- English
La idea es poder crear nuestros propios modelos de VOSK para cada idioma añadiendole redes neuronales las cuales serían entrenadas con NLP. Esto supone una enorme expansión de esta funcionalidad para el futuro.
Añadí un ejemplo básico de actions con el archivo check_codestyle.yml
con su requirements_tci.txt
- Checkea el estilo del código (PEP8)
Añadí un ejemplo básico de .gitlab-ci.yml
con su requirements_tci.txt
- Checkea el estilo del código (PEP8)
Permite mandar alertas, crear queries para visualizar en gráficos y realizar consultas.
Github: shirosweets
Email de contacto: vsv.dev.soft@gmail.comValentina Vispo ≧◠ᴥ◠≦