Распознавание речи на Python — Sphinx

#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 и посмотреть, к чему это приведет. Я думаю, что единственным недостатком может быть то, что если слова в списке ключевых слов похожи, вы можете получить разные хиты, чем ожидали.