Speech_Recognition с помощью Python на компьютерных динамиках - OSError: [Errno -9998] Недопустимое количество каналов

Я пытаюсь использовать модуль Speech_Recognition в python (я использую python 3.7.0) для обнаружения речи, исходящей из динамиков моего компьютера (например, для обнаружения того, что кто-то говорит в звонке по скайпу)

import speech_recognition as sr


def get_speakers_index(list_microphone_names):
    list_index = []
    for i in range(len(list_microphone_names)):
        if "speakers" in list_microphone_names[i].lower():
            list_index.append(i)
    return list_index


def main():
    r = sr.Recognizer()
    list_speakers_index = get_speakers_index(sr.Microphone.list_microphone_names())
    for speakers_index in list_speakers_index:

        mic = sr.Microphone(device_index=speakers_index)

        with mic as source:
            print("listening")
            audio = r.listen(source)
            text = ""

            try:
                text = r.recognize_google(audio)
            except Exception as e:
                print("Exception " + str(e))


if __name__ == '__main__':
    main()

Но на каждом из вариантов динамиков я получаю эту ошибку:

Traceback (most recent call last):
  File "C:/Users/User/Desktop/Project/mic.py", line 35, in <module>
    main()
  File "C:/Users/User/Desktop/Project/mic.py", line 21, in main
    with mic as source:
  File "C:\Python37\lib\site-packages\speech_recognition\__init__.py", line 141, in __enter__
    input=True,  # stream is an input stream
  File "C:\Python37\lib\site-packages\pyaudio.py", line 750, in open
    stream = Stream(self, *args, **kwargs)
  File "C:\Python37\lib\site-packages\pyaudio.py", line 441, in __init__
    self._stream = pa.open(**arguments)
OSError: [Errno -9998] Invalid number of channels

Я также пытался вводить индексы докладчиков один за другим, чтобы не создавать несколько Microphone() экземпляров, но это не помогло.

заранее спасибо

1 ответ

Вместо этого попробуйте использовать только микрофон в качестве входа, который микрофон принимает от динамиков. Он упрощает и понятен. Вроде как вот эта программа...

def takeCommand():
    r = sr.Recognizer()

    with sr.Microphone() as source:

        print("Listening...")
        r.pause_threshold = 1
        audio = r.listen(source)

    try:
        print("Recognizing...")
        query = r.recognize_google(audio, language='en-us')
        print("User said: {query}\n")

    except Exception as e:
        print(e)
        print("I can't hear you sir.")
        return "None"

    return query
Другие вопросы по тегам