Es posible usar Python
para generar una primera versión de la
transcripción de un audio, como una entrevista. Para ello es
necesario:
-
Generar un repositorio de audios (una carpeta) en formato WAV.
-
Instalar una serie de librerías en
Python
-
Cargar las librerías
-
Transcribir
-
Revisar las transcripciones manualmente
1. Repositorio de audios
En una carpeta en su disco duro, guarde los audios que quiere transcribir.
En Google Colab suba el primer audio.
Genere la carpeta para las transcripciones, llamada por ejemplo transcr
# Nombre del archivo de audio, en este caso es una entrevista
audio_file = "ElsyBarreraESAP.wav"
# Carpeta de transcripciones, anteriormente la había generado
transcription_folder_path = "./transcr/"
2. Instalar las librerías
En Google Colab
:
!pip install -U openai-whisper
!pip install pyannote.audio
Esto se hace una única vez por sesión.
3. Cargar las librerías
import whisper
import os
from os.path import join
import time
import datetime
import subprocess
import torch
import pyannote.audio
from pyannote.audio.pipelines.speaker_verification import PretrainedSpeakerEmbedding
embedding_model = PretrainedSpeakerEmbedding(
"speechbrain/spkrec-ecapa-voxceleb",
device=torch.device("cpu"))
from pyannote.audio import Audio
from pyannote.core import Segment
import wave
import contextlib
from sklearn.cluster import AgglomerativeClustering
import numpy as np
from os.path import join
4. Transcribir
Inicialmente genera el modelo:
model = whisper.load_model("turbo")
Ahora si se hace la transcripción
result = model.transcribe(audio_file, verbose = False)
La transcripción estará guardada en el objeto result
. Para
escribirlo a archivos de texto en la carpeta
transcription_folder_path
, se hace lo siguiente:
# Recuperar el nombre del archivo de audio (sin la extensión)
audio_filename = os.path.splitext(os.path.basename(audio_file))[0]
# Crear el nombre del archivo de texto
transcription_file_path = os.path.join(transcription_folder_path, audio_filename + ".txt")
# Abrir el archivo de texto
f = open(transcription_file_path, "w", encoding= 'UTF-8')
# Guardar cada segmento de la traducción en un archivo aparte:
for (i, segment) in enumerate(segments):
if i == 0 or segments[i - 1]["speaker"] != segment["speaker"]:
f.write("\n" + segment["speaker"] + ' ' + str(time(segment["start"])) + '\n')
f.write(segment["text"][1:] + ' ')
f.close()
print(f"\033[1m--- Finished writing to {transcription_file_path} ---")
result
es un diccionario, se puede explorar con las estrategias que
tenemos para este tipo de estructuras.