Empreintes de locuteur

Extrayez des vecteurs de locuteur de 256 dimensions normalisés L2 avec WeSpeaker ResNet34-LM. Ces empreintes capturent les caractéristiques vocales uniques d'un locuteur et peuvent être utilisées pour l'identification, la vérification et la recherche vocale.

Architecture

WeSpeaker ResNet34-LM est un réseau résiduel profond entraîné pour l'apprentissage de représentations de locuteurs.

ÉtapeDétails
EntréeConv2d (1 vers 32 canaux)
ResNet34Blocs résiduels [3, 4, 6, 3]
Stats PoolingMoyenne + écart-type dans le temps
ProjectionLinéaire (5120 vers 256)
SortieEmbedding 256 dim normalisé L2

Taille du modèle : ~6,6M paramètres, ~25 Mo sur disque.

Caractéristiques mel

Le modèle utilise des caractéristiques mel-fréquence à 80 dimensions calculées avec une fenêtre de Hamming. La mise à l'échelle logarithmique utilise une simple formule log(max(mel, 1e-10)) sans normalisation supplémentaire. La batch normalization est fusionnée dans les couches Conv2d au moment de la conversion pour l'efficacité d'inférence.

Utilisation en CLI

# Extraire l'empreinte de locuteur
.build/release/audio embed-speaker voice.wav

# Sortie JSON (inclut le vecteur 256 dim)
.build/release/audio embed-speaker voice.wav --json

# Choisir le moteur d'inférence
.build/release/audio embed-speaker voice.wav --engine coreml

Options

OptionDescription
--engineMoteur d'inférence : mlx ou coreml
--jsonFormat de sortie JSON avec vecteur d'embedding complet

Cas d'usage

Vérification de locuteur

Comparez deux échantillons audio pour déterminer s'ils proviennent du même locuteur. Extrayez les empreintes des deux et calculez la similarité cosinus. Un score de similarité plus élevé indique une probabilité plus élevée du même locuteur.

import SpeechVAD

let model = try await WeSpeaker.loadFromHub()
let embedding1 = try await model.embed(audioFile: "sample1.wav")
let embedding2 = try await model.embed(audioFile: "sample2.wav")

let similarity = cosineSimilarity(embedding1, embedding2)
print("Similarity: \(similarity)")  // > 0,7 typiquement même locuteur

Identification de locuteur

Appariez un échantillon audio inconnu à une base de données d'empreintes de locuteurs enrôlés. Le locuteur enrôlé avec la plus haute similarité cosinus est l'identité prédite.

Recherche vocale

Indexez une collection d'enregistrements audio par empreinte de locuteur, puis interrogez avec un nouvel échantillon audio pour trouver tous les enregistrements du même locuteur.

Important

Les empreintes de locuteur fonctionnent mieux avec une parole propre d'au moins 2 à 3 secondes. Les clips très courts ou les enregistrements bruités peuvent produire des empreintes moins fiables. Envisagez d'appliquer d'abord une amélioration de la parole pour l'audio bruité.

Téléchargements des modèles

ModèleBackendTailleHuggingFace
WeSpeaker-ResNet34-LMMLX~25 Moaufklarer/WeSpeaker-ResNet34-LM-MLX
WeSpeaker-ResNet34-LMCoreML~25 Moaufklarer/WeSpeaker-ResNet34-LM-CoreML

API Swift

import SpeechVAD

let model = try await WeSpeaker.loadFromHub()

// Extraire l'empreinte depuis un fichier
let embedding = try await model.embed(audioFile: "voice.wav")
print("Embedding dimensions: \(embedding.count)")  // 256

// Extraire l'empreinte depuis des échantillons audio
let samples: [Float] = loadAudio("voice.wav")
let embedding = try await model.embed(samples: samples, sampleRate: 16000)