#python #performance #speech-recognition #pocketsphinx
#python #Производительность #распознавание речи #pocketsphinx
Вопрос:
Я создаю простую программу распознавания речи, которая позволит мне управлять моим роботом с помощью голосовых команд. Я только хочу, чтобы программа искала определенные слова и была относительно быстрой. Мой проект основан на «Я сделал робота, который светит лазером мне в глаз» Майкла Ривза, и я пытаюсь создать что-то похожее на голосовые команды, которые можно увидеть в его видео.
Проблема, с которой я сталкиваюсь, заключается в том, что sphinx работает быстро, но (РЕДАКТИРОВАТЬ: НЕТОЧНО). Кроме того, когда я включаю ключевые слова, выход становится странным. Если я скажу завершение работы команды, результат будет :
"three nine one four five eight two one eight nine three four two six zero eight nine two one six four eight seven one three four nine five eight two eight
four five nine three one two eight six nine three five seven two zero one nine five eight two four four nine one five eight three two six four two zero seven one nine three four five eight two five one three four eight two six eight zero one three four five two seven eight eight three nine five two four eight one two eight two eight two eight command shutdown command eight one four three eight two two eight "
Я не уверен, что смогу это исправить, и я попытался выполнить recognise_google, но это было намного точнее, но очень медленно, и я хочу, чтобы ключевые слова были включены, чтобы он только проверял, сказал ли a набор слов, а затем печатал его на экране, если я это сделал.
Другая проблема, с которой я сталкиваюсь, связана с функцией listen_in_background(). Кажется, я не могу заставить его работать должным образом.
Вот мой код:
import speech_recognition as sr
import pocketsphinx
keywords = [
("command", 1),
("one", 0),
("two", 0),
("three", 0),
("four", 0),
("five", 0),
("six", 0),
("seven", 0),
("eight", 0),
("nine", 0),
("zero", 0),
("command x axis add", 0),
("command y axis add", 0),
("command x axis subtract", 0),
("command y axis subtract", 0),
("command clear shift string", 0),
("command shutdown", 0),
("command flip tracking", 0),
("command pause", 0),
("command detect face", 0),
("command detect body", 0)
]
def speech2text():
r = sr.Recognizer()
with sr.Microphone() as source:
r.adjust_for_ambient_noise(source)
audio = r.listen(source) #this is were i want to listen in the background to run it at the same
#time as other code
try:
data = r.recognize_sphinx(audio, keyword_entries = keywords)
return data
except:
return "Error..."
while True:
print(speech2text())
Комментарии:
1. github.com/Uberi/speech_recognition/issues/305 это отчет об ошибке для этого модуля, сообщающий об очень похожей проблеме ( все ключевые слова были распознаны в случайном порядке), опубликованный в 2017 году, без ответа от кого-либо. Не похоже, что модуль активно поддерживается.
Ответ №1:
У меня была такая же проблема. Я пробовал разные значения чувствительности от 0 до 1 и обнаружил, что если все ключевые слова имеют чувствительность более 0,9, они распознаются одинаково и достаточно точно и не спамят случайно выводимую фразу. Если значение меньше, чем это, оно выдает слишком много ключевых слов, чем разумно.
Я также получил UnknownValueError, когда ЛЮБОЕ слово, которое не было ключевым словом. Если вы ищете способ обнаруживать только эти ключевые слова, я бы определенно попробовал установить для всех их чувствительности значение 1 и посмотреть, к чему это приведет. Я думаю, что единственным недостатком может быть то, что если слова в списке ключевых слов похожи, вы можете получить разные хиты, чем ожидали.