2 votes

Comment faire un traitement de texte de base tout en exécutant la reconnaissance vocale en continu en python ?

J'utilise actuellement Microsoft Azure pour obtenir du texte transcrit à partir de la reconnaissance vocale en direct. Avec ce texte transcrit, je le mets dans un TextRank pour extraire les mots-clés de ce flux de parole. Cependant, lorsque je l'exécute, je perds beaucoup de reconnaissance vocale pendant l'exécution du code TextRank. Existe-t-il un moyen d'exécuter la reconnaissance vocale en continu tout en transmettant les résultats transcrits au processus suivant, tout en traitant l'extraction de mots-clés de TextRank, de manière à ne pas perdre de parole et à extraire des mots-clés ?

def from_mic():
    speech_config = speechsdk.SpeechConfig(subscription="", region="")
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)

    # print("Speak into your microphone.")
    result = speech_recognizer.recognize_once_async().get()
    print(result.text)
    return result.text

for i in range(1,10):
    transcript = from_mic()
    summa_keywords = summa_keyword_extractor.keywords(transcript, ratio=1.0)
    print(summa_keywords)

1voto

Serial Lazer Points 1584

Vous devez mettre en place deux processus parallèles mais reliés entre eux par une file d'attente de tâches.

Cela est dû au fait que vous avez une dépendance d'extraction sur le processus d'enregistrement.

Voici une tentative d'y parvenir (évidemment, elle n'est pas parfaite et peut encore être améliorée) :

def recorder_process(recorder_queue, extractor_queue):
  speech_config = speechsdk.SpeechConfig(subscription="", region="")
  speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)

  while True:
    request = recorder_queue.get()
    result = speech_recognizer.recognize_once_async().get()
    extractor_queue.put(result.text)

def extractor_process(extractor_queue, results_queue):
  while True:
    transcript = extractor_queue.get()
    summa_keywords = summa_keyword_extractor.keywords(transcript, ratio=1.0)
    results_queue.put({'transcript': transcript, 'keywords': summa_keywords})

if __name__ == "__main__":
    # Connect to remote host over TCP
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect((HOST,PORT))

    # Set up a Queue to pass data to the update process, and another one
    # for the two children to communicate
    recorder_queue = Queue()
    extractor_queue = Queue()
    results_queue = Queue()

    # Create two child processes, pass a reference to the Queue to each
    recorder = Process(target=recorder_process, args=(recorder_queue, extractor_queue))
    extractor = Process(target=extractor_process, args=(extractor_queue, results_queue))

    recorder.start()
    extractor.start()

    index = 0
    while True:
      recorder_queue.put(index)
      index += 1
      sleep(1)

    recorder.join()
    extractor.join()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X