Skip to content

Module whisper

extract_whisper(audio_filename)

Extrait la transcription d'un fichier audio en utilisant le modèle Whisper.

Parameters:

Name Type Description Default
audio_filename str

Le chemin du fichier audio à transcrire.

required

Returns:

Name Type Description
str str

La transcription du fichier audio.

Source code in nbs/whisper.py
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
def extract_whisper(audio_filename: str) -> str:
    """
    Extrait la transcription d'un fichier audio en utilisant le modèle Whisper.

    Args:
        audio_filename (str): Le chemin du fichier audio à transcrire.

    Returns:
        str: La transcription du fichier audio.
    """
    device = "cuda:0" if torch.cuda.is_available() else "cpu"
    torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32

    model_id = "openai/whisper-large-v3-turbo"

    model = AutoModelForSpeechSeq2Seq.from_pretrained(
        model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True, use_safetensors=True
    )
    model.to(device)

    processor = AutoProcessor.from_pretrained(model_id)

    generate_kwargs = {
        "language": "french",
    }

    pipe = pipeline(
        "automatic-speech-recognition",
        model=model,
        tokenizer=processor.tokenizer,
        feature_extractor=processor.feature_extractor,
        torch_dtype=torch_dtype,
        device=device,
        chunk_length_s=30,
        batch_size=16,  # batch size for inference - set based on your device
        generate_kwargs=generate_kwargs,
    )

    dataset = load_dataset(
        "distil-whisper/librispeech_long", "clean", split="validation"
    )
    sample = dataset[0]["audio"]

    result = pipe(
        audio_filename,
        return_timestamps=True,
    )

    return result["text"]

list_audio_files(audio_path=AUDIO_PATH)

Liste tous les fichiers audio (MP3 et M4A) dans le répertoire spécifié.

Parameters:

Name Type Description Default
audio_path str

Le chemin du répertoire contenant les fichiers audio. Par défaut, utilise la constante AUDIO_PATH.

AUDIO_PATH

Returns:

Name Type Description
list List[str]

Une liste des chemins de fichiers audio (MP3 et M4A) trouvés.

Source code in nbs/whisper.py
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
def list_audio_files(audio_path=AUDIO_PATH) -> List[str]:
    """
    Liste tous les fichiers audio (MP3 et M4A) dans le répertoire spécifié.

    Args:
        audio_path (str): Le chemin du répertoire contenant les fichiers audio. Par défaut, utilise la constante AUDIO_PATH.

    Returns:
        list: Une liste des chemins de fichiers audio (MP3 et M4A) trouvés.
    """
    fullpath = get_audio_path(audio_path, year="")

    mp3_files = glob.glob(os.path.join(fullpath, "**/*.mp3"), recursive=True)
    m4a_files = glob.glob(os.path.join(fullpath, "**/*.m4a"), recursive=True)

    return mp3_files + m4a_files

list_mp3_files(audio_path=AUDIO_PATH)

Liste tous les fichiers MP3 dans le répertoire spécifié.

Parameters:

Name Type Description Default
audio_path str

Le chemin du répertoire contenant les fichiers audio. Par défaut, utilise la constante AUDIO_PATH.

AUDIO_PATH

Returns:

Name Type Description
list List[str]

Une liste des chemins de fichiers MP3 trouvés.

Source code in nbs/whisper.py
21
22
23
24
25
26
27
28
29
30
31
32
def list_mp3_files(audio_path=AUDIO_PATH) -> List[str]:
    """
    Liste tous les fichiers MP3 dans le répertoire spécifié.

    Args:
        audio_path (str): Le chemin du répertoire contenant les fichiers audio. Par défaut, utilise la constante AUDIO_PATH.

    Returns:
        list: Une liste des chemins de fichiers MP3 trouvés.
    """
    fullpath = get_audio_path(audio_path, year="")
    return glob.glob(os.path.join(fullpath, "**/*.mp3"), recursive=True)

store_whisper_in_db(whisper, collection, oid, force=False, verbose=False)

Stocke la transcription Whisper dans la base de données.

Parameters:

Name Type Description Default
whisper str

La transcription du fichier audio.

required
collection Collection

La collection pymongo.

required
oid str

L'identifiant de l'épisode.

required
force bool

Si True, écrase le Whisper existant. Par défaut, False.

False
verbose bool

Si True, affiche des messages détaillés. Par défaut, False.

False

Returns:

Name Type Description
bool bool

True si le Whisper a été stocké, False sinon.

Source code in nbs/whisper.py
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
def store_whisper_in_db(
    whisper: str,
    collection: pymongo.collection.Collection,
    oid: str,
    force: bool = False,
    verbose: bool = False,
) -> bool:
    """
    Stocke la transcription Whisper dans la base de données.

    Args:
        whisper (str): La transcription du fichier audio.
        collection: La collection pymongo.
        oid (str): L'identifiant de l'épisode.
        force (bool, optional): Si True, écrase le Whisper existant. Par défaut, False.
        verbose (bool, optional): Si True, affiche des messages détaillés. Par défaut, False.

    Returns:
        bool: True si le Whisper a été stocké, False sinon.
    """
    # Récupération du document
    document_entry = collection.find_one({"_id": ObjectId(oid)})

    if document_entry is None:
        if verbose:
            print(f"Document avec l'oid {oid} non trouvé")
        return False

    if "whisper" in document_entry and not force:
        if verbose:
            print(
                f"Whisper déjà stocké pour l'oid {oid}, et on ne force pas le stockage"
            )
        return False
    else:
        document_entry["whisper"] = whisper
        collection.update_one({"_id": ObjectId(oid)}, {"$set": document_entry})
        if verbose:
            print(f"Whisper stocké pour l'oid {oid}")
        return True