Questa utility sfrutta il modello AI Whisper per trascrivere file audio direttamente online, senza la necessità di installare Python e le relative librerie. Data l'intensa richiesta di risorse, questa utility opera utilizzando il modello di riconoscimento 'medio' di Whisper. Inoltre, è possibile eseguire fino a tre operazioni contemporanee sul server per file che non superano un Megabyte ciascuno. Il modello “medium” di Whisper offre un equilibrio ottimale tra accuratezza della trascrizione e consumo di risorse, garantendo un'efficienza adeguata nelle operazioni di trascrizione lato server.
Data la significativa quantità di risorse richieste per la trascrizione, ho deciso di rendere questo script accessibile a tutti. Il processo di trascrizione, infatti, richiede un notevole impiego di risorse, che può risultare insostenibile su server con capacità limitate. Pertanto, su questa pagina troverete lo script Python, completo di commenti, disponibile per essere copiato e utilizzato localmente. Questa soluzione permette una gestione più personalizzata delle prestazioni, evitando il rischio di sovraccaricare i sistemi. Inoltre, utilizzando lo script localmente, si ha la possibilità di impiegare il modello 'large' di Whisper, che offre una maggiore accuratezza ma richiede un intensivo utilizzo di CPU e RAM.
Pur fornendo trascrizioni dettagliate, lo script non è in grado di distinguere tra diversi relatori, ovvero non effettua la diarizzazione. Nonostante questa limitazione, la soluzione è particolarmente adatta a giornalisti, studenti e professionisti che richiedono trascrizioni precise e tempestive di interviste, conferenze e altri eventi. Utilizzando questo script direttamente sul proprio dispositivo, è possibile utilizzare il modello “large”.
Whisper è un modello di intelligenza artificiale sviluppato da OpenAI specializzato nella trascrizione automatica dell'audio in vari linguaggi. Può riconoscere e trascrivere il parlato da file audio e video, ma non supporta la diarizzazione, ovvero la capacità di distinguere tra diversi relatori. Whisper è disponibile in diverse versioni che vanno dal modello "tiny" al modello "large", ognuno dei quali offre un equilibrio tra velocità di esecuzione e accuratezza della trascrizione, adattandosi a diverse esigenze e risorse hardware.
La diarizzazione è un processo avanzato che consiste nell'identificare e distinguere tra i diversi relatori presenti in una registrazione audio. Questo processo permette di assegnare le varie porzioni di audio ai rispettivi parlanti, facilitando la comprensione del flusso del dialogo e la chiarezza della trascrizione. La diarizzazione è tecnicamente complessa per vari motivi: richiede l'analisi delle caratteristiche vocali uniche di ciascun parlante, come tono, ritmo e accenti, e deve poter gestire le sovrapposizioni di voci e i cambiamenti di ambiente acustico che possono alterare la qualità del suono. Inoltre, deve essere efficace in contesti rumorosi o con molteplici interlocutori che parlano simultaneamente, il che aumenta significativamente la difficoltà di isolare e identificare le voci individuali. A causa di queste sfide, non tutti gli strumenti di trascrizione sono equipaggiati per effettuare la diarizzazione, specialmente quelli che operano con risorse limitate o che sono progettati per essere utilizzati su dispositivi individuali con capacità di elaborazione ridotte.
Questo è lo script Python da copiare ed incollare in un file con estensione .py
import whisper
import os
import uuid
import argparse
import subprocess
import json
def converti_mp3_a_wav(input_path, output_path):
cmd = ['ffmpeg', '-i', input_path, '-acodec', 'pcm_s16le', '-ac', '1', '-ar', '16000', output_path]
subprocess.run(cmd, check=True)
parser = argparse.ArgumentParser(description='Trascrivi un file audio utilizzando Whisper.')
parser.add_argument('file_path', type=str, help='Il percorso del file audio da trascrivere.')
args = parser.parse_args()
model = whisper.load_model("large") # i modelli disponibili li trovi qui: https://github.com/openai/whisper
def trascrivi_file(file_path, model):
temp_folder = os.path.join(os.path.dirname(__file__), 'temp')
os.makedirs(temp_folder, exist_ok=True)
uuid_name = str(uuid.uuid4())
temp_path_wav = os.path.join(temp_folder, uuid_name + '.wav')
if file_path.endswith(".mp3"):
converti_mp3_a_wav(file_path, temp_path_wav)
file_path = temp_path_wav
audio = whisper.load_audio(file_path)
result = model.transcribe(audio)
relatori = {}
for segmento in result['segments']:
speaker = segmento.get('speaker', 'Sconosciuto')
if speaker not in relatori:
relatori[speaker] = []
relatori[speaker].append(segmento['text'])
trascrizione_differenziata = ""
indice_segmento = 1
for relatore, segmenti in relatori.items():
for segmento in segmenti:
trascrizione_differenziata += f"Frase {indice_segmento}: {segmento}\n"
indice_segmento += 1
transcription_folder = os.path.join(os.path.dirname(__file__), 'trascrizioni')
os.makedirs(transcription_folder, exist_ok=True)
transcription_file_path = os.path.join(transcription_folder, uuid_name + '.txt')
with open(transcription_file_path, "w") as file:
file.write(trascrizione_differenziata)
if os.path.exists(temp_path_wav):
os.remove(temp_path_wav)
# Output json (non necessario per utilizzo locale)
# transcription_json = json.dumps({"transcription": trascrizione_differenziata}, ensure_ascii=False, indent=2)
# print(transcription_json)
return transcription_file_path
if __name__ == '__main__':
transcription_path = trascrivi_file(args.file_path, model)
print("Trascrizione salvata in:", transcription_path)
python --version
o python3 --version
nel terminale. Se non hai ancora installato questa versione, ti consigliamo di farlo prima di avviare lo script per garantire una esecuzione fluida e senza errori.
FFmpeg è essenziale per la conversione di file audio. Segui le istruzioni specifiche per il tuo sistema operativo.
C:\FFmpeg
.C:\FFmpeg\bin
al tuo PATH:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install ffmpeg
sudo apt update && sudo apt install ffmpeg
Usare un ambiente virtuale per eseguire lo script Python aiuta a gestire le dipendenze.
virtualenv
se non è già installato:
pip3 install virtualenv
virtualenv nome_ambiente
nome_ambiente\Scripts\activate
source nome_ambiente/bin/activate
git clone https://github.com/openai/whisper.git
deactivate
python3 nome_script.py nome_file.mp3