#python #multiprocessing #speech-recognition #speech-to-text #textrank
#python #многопроцессорная обработка #распознавание речи #преобразование речи в текст #textrank
Вопрос:
В настоящее время я использую Microsoft Azure для получения расшифрованного текста из распознавания речи в реальном времени. С этим расшифрованным текстом я помещаю его в TextRank для извлечения ключевых слов из этого речевого потока. Однако, когда я запускаю это, я теряю много распознавания речи при запуске кода TextRank. Есть ли способ непрерывно запускать распознавание речи, передавая расшифрованные результаты следующему процессу, одновременно обрабатывая извлечение ключевого слова TextRank, чтобы я не терял речь и не извлекал ключевые слова?
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)
Комментарии:
1. Кажется, что для выполнения 2 процедур и параллельной работы необходимы многопоточность или
speech_recognizer
keyword_extractor
многопроцессорность.
Ответ №1:
Вам необходимо настроить два параллельных процесса, но связанных с очередью задач.
Это связано с тем, что у вас есть зависимость извлечения от процесса записи.
Вот попытка одного из способов добиться этого (очевидно, что он не отполирован и может быть улучшен в дальнейшем):
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()
Комментарии:
1. Спасибо за ваш комментарий. Есть ли у вас какие-либо предложения на веб-сайте или в книге, чтобы я мог изучить этот метод шаг за шагом?
2. По какой причине вы использовали сокет? в чем причина подключения к удаленному хосту по протоколу TCP?