web-dev-qa-db-fra.com

Code source ouvert pour la détection et la discrimination de la voix

J'ai 15 cassettes audio, dont l'une, je crois, contient un vieil enregistrement de ma grand-mère et de moi-même en train de parler. Une tentative rapide de trouver le bon endroit ne l’a pas changé. Je ne veux pas écouter 20 heures de cassette pour la trouver. L'emplacement peut ne pas être au début de l'une des bandes. La plupart du contenu semble appartenir à trois catégories - par ordre de longueur totale, la plus longue en premier: silence, parole radio et musique.

Je prévois de convertir toutes les cassettes au format numérique, puis de chercher à nouveau l'enregistrement. La manière évidente est de les jouer tous en arrière-plan pendant que je fais autre chose. C’est beaucoup trop simple pour moi, alors: existe-t-il des bibliothèques open source, ou un autre code, qui me permettraient de trouver, par ordre croissant de sophistication et d’utilité:

  1. Régions non silencieuses
  2. Régions contenant la parole humaine
  3. Régions contenant mon propre discours (et celui de ma grand-mère)

Ma préférence va à Python, Java ou C.

À défaut de réponses, des astuces sur les termes de recherche seraient appréciées, car je ne connais rien au domaine.

Je comprends que je pourrais facilement passer plus de 20 heures à ce sujet.

24
Croad Langshan

Ce que vous économisez probablement la plupart du temps, c'est la personnalisation du locuteur. Cela fonctionne en annotant l'enregistrement avec les ID de haut-parleur, que vous pouvez ensuite mapper manuellement à des personnes réelles avec très peu d'effort. Les taux d’erreur se situent généralement entre 10 et 15% de la longueur de l’enregistrement, ce qui semble très décevant, mais cela implique de détecter un trop grand nombre de locuteurs et d’affecter deux identifiants à la même personne, ce qui n’est pas si difficile à réparer.

Un de ces bons outils est SHoUT toolkit (C++), même s’il est un peu difficile en ce qui concerne le format d’entrée. Voir utilisation de cet outil de l'auteur . Il génère détection d'activité vocale/vocale métadonnées ET modification du locuteur , ce qui signifie que vous obtenez les premier et deuxième points (VAD/SAD) et un peu plus, car il annote quand le même locuteur est actif dans un enregistrement.

L’autre outil utile est LIUM spkdiarization (Java), qui fait essentiellement la même chose, sauf que je n’ai pas fait assez d’efforts pour déterminer comment obtenir les métadonnées VAD. Il contient un paquet prêt à l’emploi téléchargeable .

Avec un peu de compilation, cela devrait fonctionner en moins d’une heure.

14
hruske

La meilleure option serait de trouver un module open source faisant la reconnaissance vocale ou l'identification du locuteur (pas la reconnaissance vocale). L'identification du locuteur est utilisée pour identifier un locuteur particulier alors que la reconnaissance vocale convertit l'audio parlé en texte. Il peut y avoir des packages d’identification de source ouverte, vous pouvez essayer de chercher quelque chose comme SourceForge.net pour "identification du locuteur" ou "voix ET biométrie". Comme je n'en ai pas utilisé moi-même, je ne peux rien recommander.

Si vous ne trouvez rien mais que vous êtes intéressé par le roulement de votre choix, il existe de nombreuses bibliothèques FFT open source pour tous les langages populaires. La technique serait:

  • Obtenez un enregistrement typique de votre conversation normale et de celle de votre grand-mère sous forme numérique, avec le moins de bruit de fond possible
    • Prendre la FFT de chaque seconde d'audio ou plus dans les enregistrements cibles
    • Dans l’ensemble des profils FFT que vous avez créés, filtrez ceux qui se trouvent en dessous d’un certain seuil d’énergie moyenne, car ce sont probablement des parasites.
    • Construire un profil FFT maître en faisant la moyenne des instantanés FFT non filtrés
    • Ensuite, répétez la technique d'échantillonnage FFT ci-dessus sur l'audio cible numérisée (les 20 heures de données)
    • Marquez les zones des fichiers audio cibles où la capture instantanée FFT à tout moment est similaire à votre profil FFT principal pour vous et votre grand-mère qui parle. Vous devrez jouer avec le paramètre de similarité pour ne pas avoir trop de faux positifs. Notez également que vous devrez peut-être limiter la comparaison de corbeilles de fréquences FFT aux seules corbeilles de fréquences de votre profil FFT maître qui ont de l'énergie. Sinon, si le son cible de votre grand-mère et de vous-même en train de parler contient un bruit de fond important, votre fonction de similarité sera effacée.
    • Créez une liste d'indices de temps pour l'inspection manuelle

Notez que le nombre d'heures pour terminer ce projet pourrait facilement dépasser les 20 heures d'écoute manuelle des enregistrements. Mais ce sera beaucoup plus amusant que 20 heures d'audio et vous pourrez utiliser le logiciel que vous avez construit à l'avenir.

Bien sûr, si l'audio n'est pas sensible du point de vue de la confidentialité, vous pouvez externaliser la tâche d'audition audio vers quelque chose comme le fouillis mécanique d'Amazon.

5
Robert Oschler

Vous pouvez également essayer pyAudioAnalysis to:

  1. Suppression du silence:

from pyAudioAnalysis import audioBasicIO as aIOfrom pyAudioAnalysis import audioSegmentation as aS[Fs, x] = aIO.readAudioFile("data/recording1.wav")segments = aS.silenceRemoval(x, Fs, 0.020, 0.020, smoothWindow = 1.0, Weight = 0.3, plot = True)

segments contient les extrémités des segments non-silence.

  1. Classification: Discrimination parole/musique: pyAudioAnalysis inclut également les classificateurs pré-entraînés, qui peuvent être utilisés pour classer des segments inconnus en parole ou en musique. 

si vous connaissez Java, vous pouvez essayer d’alimenter les fichiers audio au minimum et de calculer des spectres FFT. Le silence pourrait être détecté en définissant un niveau minimum pour l'amplitude des échantillons (pour éliminer le bruit). Pour séparer la parole de la musique, le spectre FFT d'une fenêtre temporelle peut être utilisé. La parole utilise des bandes de fréquences très distinctes appelées formants - en particulier pour les vovels - la musique est mieux répartie dans le spectre de fréquences. 

Vous n'obtiendrez probablement pas une séparation à 100% des blocs parole/musique, mais il devrait être suffisant de baliser les fichiers et d'écouter uniquement les parties intéressantes. 

http://code.compartmental.net/tools/minim/

http://en.wikipedia.org/wiki/Formant

3
Nikolaus Gradwohl

J'ai écrit il y a un article de blog sur l'utilisation de la reconnaissance vocale Windows. J'ai un tutoriel de base sur la conversion de fichiers audio en texte en C #. Vous pouvez vérifier ici .

2
mrtsherman

Deux idées:

  • Regardez dans le champ "reconnaissance vocale", par exemple CMUSphinx
  • Audacity a un outil "Truncate silence" qui pourrait être utile.
2
Anders Lindahl
0
Kickaha