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

j'ai 15 bandes audio, dont l'une Contient, je crois, un vieil enregistrement de ma grand-mère et moi-même parlant. Une rapide tentative pour trouver le bon endroit, n'en a pas. Je ne veux pas écouter 20 heures de bande pour le trouver. L'emplacement ne peut pas être au départ de l'une des bandes. La plupart du contenu semble tomber dans trois catégories -- par ordre de longueur totale, la plus longue d'abord: le silence, la radio de parole, et la musique.

je prévois de convertir toutes les bandes en numérique formater, puis rechercher à nouveau l'enregistrement. La façon évidente est de les jouer tous en arrière-plan pendant que je fais d'autres choses. C'est beaucoup trop simple pour moi, donc: y a-t-il des bibliothèques open source, ou d'autres codes, qui me permettraient de trouver, par ordre de sophistication et d'utilité croissantes:

  1. Non silencieuse régions
  2. Régions contenant de la parole humaine
  3. Régions contenant mon propre discours (et celle de mon grand-mère)

Ma préférence est pour Python, Java, ou C.

A défaut de réponse, des conseils sur les termes de recherche seraient appréciés car je ne connais rien du domaine.

je comprends que je pourrais facilement passer plus de 20 heures.

24
demandé sur Croad Langshan 2011-04-22 22:07:19

8 réponses

ce que vous économisez probablement la plupart du temps est la diarisation du haut-parleur. Cela fonctionne en annotant l'enregistrement avec des identificateurs de haut-parleur, que vous pouvez alors mapper manuellement à des personnes réelles avec très peu d'effort. Le taux d'erreurs est généralement d'environ 10 à 15% de la longueur des enregistrements, ce qui semble terrible, mais cela inclut la détection d'un trop grand nombre de haut-parleurs et la mise en correspondance de deux identifiants avec la même personne, ce qui n'est pas si difficile à réparer.

un de ces bons outils est Crier toolkit (C++), même si c'est un peu pointilleux sur le format d'entrée. Voir la section utilisation de cet outil de l'auteur. C'sorties détection des activités vocales et de la parole métadonnées et diarisation du haut-parleur, ce qui signifie que vous obtenez le 1er et le 2e point (VAD/SAD) et un peu plus, puisqu'il annote quand est le même haut-parleur 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 encore mis assez d'efforts pour comprendre comment obtenez des métadonnées VAD. Il dispose d'un agréable prêt à utiliser package downloadable.

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

14
répondu hruske 2017-05-23 12:17:24

la meilleure option serait de trouver un module open source qui effectue la reconnaissance vocale ou l'identification des locuteurs (pas la reconnaissance vocale). L'identification du locuteur est utilisée pour identifier un locuteur en particulier, tandis que la reconnaissance vocale convertit l'audio parlé en texte. Il peut y avoir des paquets d'identification de haut-parleurs open source, vous pouvez essayer de chercher quelque chose comme SourceForge.net pour "identification du locuteur"ou" voix et biométrie". Comme je ne l'ai pas utilisé moi-même, Je ne peux pas recommander quoi.

si vous ne trouvez rien mais que vous êtes intéressé à faire rouler l'une des vôtres, alors il y a beaucoup de bibliothèques FFT open source pour n'importe quelle langue populaire. La technique serait:

  • obtenez un enregistrement typique de vous parlant normalement et de votre grand-mère parlant normalement sous forme numérique, quelque chose avec le moins de bruit de fond possible
    • prendre le FFT de chaque seconde d'audio ou ainsi dans les enregistrements cible
    • à Partir de la tableau des profils FFT que vous avez créés, filtrez tous en dessous d'un certain seuil d'énergie moyenne car ils sont très probablement du bruit
    • construisez un profil FFT maître en faisant la moyenne des snapshots FFT non filtrés
    • puis répétez la technique d'échantillonnage FFT ci-dessus sur l'audio cible numérisé (les 20 heures de stuff)
    • signalez toutes les zones dans les fichiers audio cibles où le snapshot FFT à tout moment est similaire à votre profil FFT maître pour vous et votre grand-mère en train de parler. Vous aurez besoin de jouer avec le réglage de similarité de sorte que vous ne recevez pas trop de faux positifs. Notez également que vous devrez peut-être limiter votre comparaison de la série de fréquences FFT aux seules séries de fréquences de votre profil FFT maître qui ont de l'énergie. Sinon, si l'audio cible de vous et votre grand-mère parlant contient un bruit de fond important, il va jeter votre fonction de similarité.
    • faire une liste des indices de temps pour le manuel inspection

Remarque, le nombre d'heures pour achever ce projet pourrait facilement dépasser les 20 heures d'écoute des enregistrements manuellement. Mais il sera beaucoup plus amusant que de broyage par 20 heures d'audio et vous pouvez utiliser le logiciel, vous de construire à nouveau dans 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 à quelque chose comme le turc mécanique D'Amazon.

5
répondu Robert Oschler 2011-04-22 18:40:11

Vous pouvez également essayer pyaudianalyse à:

  1. Suppression Du Silence:

from pyAudioAnalysis import audioBasicIO as aIO from 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 paramètres des segments non-silencieux.

  1. Classification: Discours vs musique la discrimination: pyaudianalyse comprend également des classificateurs pré-formés, qui peuvent être utilisés pour classer des segments inconnus à la parole ou à la musique.
4
répondu Theodore Giannakopoulos 2015-04-22 16:31:11

si vous êtes familier avec java, vous pouvez essayer d'alimenter les fichiers audio à travers minim et calculer quelques FFT-spectrums. Le Silence peut être détecté en définissant un niveau minimum pour l'amplitude des échantillons (pour exclure le bruit). Pour séparer la parole de la musique le spectre FFT d'une fenêtre de temps peut être utilisé. Discours utilise certains très distinctes frequencybands appelés formants - spécialement pour les vovels-la musique est répartie de manière plus égale dans le spectre de fréquences.

vous ne le ferez probablement pas obtenir une séparation de 100% des blocs de parole/musique mais il devrait être bon enought pour marquer les fichiers et écouter seulement les parties intéressantes.

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

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

3
répondu Nikolaus Gradwohl 2011-04-22 18:39:30

Deux idées:

  • regardez dans le champ" reconnaissance de la parole", par exemple CMUSphinx
  • Audacity a un outil de "silence tronqué" qui pourrait être utile.
2
répondu Anders Lindahl 2011-04-22 18:25:35

j'ai écrit un article de blog il y a à propos de 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 consulter ici.

2
répondu mrtsherman 2011-04-22 18:42:20
0
répondu Kickaha 2017-11-15 09:10:25

Essayer audacity + affichage de la piste en tant que spectrogramme(logf) + de former vos yeux(!) pour reconnaître la parole. Vous aurez besoin d'accorder échelle de temps et fenêtre FFT.

-2
répondu visitor 2013-02-18 21:34:35