web-dev-qa-db-fra.com

Premiers pas avec la reconnaissance vocale et python

J'aimerais savoir par où commencer la reconnaissance vocale. Pas avec une bibliothèque ou quoi que ce soit qui soit assez "Black Box'ed" Mais à la place, je veux savoir où je peux réellement faire un simple script de reconnaissance vocale. J'ai fait quelques recherches et trouvé, pas grand-chose, mais ce que j'ai vu, c'est qu'il existe des dictionnaires de "sons" ou de syllabes qui peuvent être assemblés pour former du texte. Donc, fondamentalement, ma question est de savoir par où commencer.

De plus, comme c'est un peu optimiste, je serais également d'accord avec une bibliothèque (pour l'instant) à utiliser dans mon programme. J'ai vu que certains discours aux bibliothèques de texte et aux API ne crachaient qu'un seul résultat. Ce n'est pas grave, mais ce ne serait pas réalisable. Mon programme actuel vérifie déjà la grammaire et tout le texte entré, de sorte que si je devais dire, les dix premiers résultats du logiciel de synthèse vocale, il pourrait vérifier chacun et exclure ceux qui n'ont pas de sens .

23
bs7280

MISE À JOUR: cela ne fonctionne plus

parce que google a fermé sa plateforme

-

vous pouvez utiliser https://pypi.python.org/pypi/pygsr

$> pip install pygsr

exemple d'utilisation:

from pygsr import Pygsr
speech = Pygsr()
# duration in seconds
speech.record(3)
# select the language
phrase, complete_response = speech.speech_to_text('en_US')

print phrase
7
dr. Neox

Si vous voulez vraiment comprendre la reconnaissance vocale à partir de zéro, recherchez un bon package de traitement du signal pour python puis lisez sur la reconnaissance vocale indépendamment du logiciel.

Mais la reconnaissance vocale est un problème extrêmement complexe (essentiellement parce que les sons interagissent de toutes sortes de manières lorsque nous parlons). Même si vous commencez avec la meilleure bibliothèque de reconnaissance vocale sur laquelle vous pouvez mettre la main, vous ne vous retrouverez en aucun cas avec plus rien à faire.

8
alexis

Pocketsphinx est également une bonne alternative. Il existe des liaisons Python fournies via SWIG qui facilitent l'intégration dans un script.

Par exemple:

from os import environ, path
from itertools import izip

from pocketsphinx import *
from sphinxbase import *

MODELDIR = "../../../model"
DATADIR = "../../../test/data"

# Create a decoder with certain model
config = Decoder.default_config()
config.set_string('-hmm', path.join(MODELDIR, 'hmm/en_US/hub4wsj_sc_8k'))
config.set_string('-lm', path.join(MODELDIR, 'lm/en_US/hub4.5000.DMP'))
config.set_string('-dict', path.join(MODELDIR, 'lm/en_US/hub4.5000.dic'))
decoder = Decoder(config)

# Decode static file.
decoder.decode_raw(open(path.join(DATADIR, 'goforward.raw'), 'rb'))

# Retrieve hypothesis.
hypothesis = decoder.hyp()
print 'Best hypothesis: ', hypothesis.best_score, hypothesis.hypstr

print 'Best hypothesis segments: ', [seg.Word for seg in decoder.seg()]

# Access N best decodings.
print 'Best 10 hypothesis: '
for best, i in izip(decoder.nbest(), range(10)):
    print best.hyp().best_score, best.hyp().hypstr

# Decode streaming data.
decoder = Decoder(config)
decoder.start_utt('goforward')
stream = open(path.join(DATADIR, 'goforward.raw'), 'rb')
while True:
    buf = stream.read(1024)
    if buf:
        decoder.process_raw(buf, False, False)
    else:
        break
decoder.end_utt()
print 'Stream decoding result:', decoder.hyp().hypstr
6
toine

Pour ceux qui veulent approfondir le sujet de la reconnaissance vocale en Python, voici quelques liens:

6
anatoly techtonik

Je sais que la question est ancienne mais juste pour les gens à l'avenir:

Je utilise le speech_recognition- Module et je l'adore. La seule chose est, il nécessite Internet car il utilise Google pour reconnaître le discours. Mais cela ne devrait pas être un problème dans la plupart des cas. La reconnaissance fonctionne presque parfaitement.

MODIFIER:

Le speech_recognition le package peut utiliser plus que google pour traduire, y compris CMUsphinx (qui permet la reconnaissance hors ligne), entre autres. La seule différence est un changement subtil dans la commande de reconnaissance:

https://pypi.python.org/pypi/SpeechRecognition/

Voici un petit exemple de code:

import speech_recognition as sr

r = sr.Recognizer()
with sr.Microphone() as source:                # use the default microphone as the audio source
    audio = r.listen(source)                   # listen for the first phrase and extract it into audio data

try:
    print("You said " + r.recognize_google(audio))    # recognize speech using Google Speech Recognition - ONLINE
    print("You said " + r.recognize_sphinx(audio))    # recognize speech using CMUsphinx Speech Recognition - OFFLINE
except LookupError:                            # speech is unintelligible
    print("Could not understand audio")

Il y a juste une chose qui ne fonctionne pas bien pour moi: écouter dans une boucle infinie. Après quelques minutes, il raccroche. (Il ne plante pas, il ne répond tout simplement pas.)

EDIT: Si vous souhaitez utiliser le microphone sans la boucle infinie, vous devez spécifier la durée d'enregistrement. Exemple de code:

import speech_recognition as sr

r = sr.Recognizer()
with sr.Microphone() as source:
    print("Speak:")
    audio = r.listen(source, None, "time_to_record")  # recording
4
Noah Krasser

Dragonfly fournit un cadre propre pour la reconnaissance vocale sous Windows. Vérifiez leur Documentation pour un exemple d'utilisation. Étant donné que vous ne recherchez pas la grande échelle de fonctionnalités fournies par Dragonfly, vous pouvez jeter un œil à la bibliothèque PySpeech qui n'est plus maintenue.

Leur code source semble facile à comprendre et c'est peut-être ce que vous voulez regarder en premier

4
tehmisvh