【问题标题】:Stop speech recognition on keypress在按键上停止语音识别
【发布时间】:2020-10-03 07:17:45
【问题描述】:

我可以在键盘按下时停止收听音频吗? 我尝试像这样更改记录函数(在 init.py 中):

    def record(self, source, duration=None, offset=None):
        """
        Records up to ``duration`` seconds of audio from ``source`` (an ``AudioSource`` instance) starting at ``offset`` (or at the beginning if not specified) into an ``AudioData`` instance, which it returns.

        If ``duration`` is not specified, then it will record until there is no more audio input.
        """
        assert isinstance(source, AudioSource), "Source must be an audio source"
        assert source.stream is not None, "Audio source must be entered before recording, see documentation for ``AudioSource``; are you using ``source`` outside of a ``with`` statement?"

        frames = io.BytesIO()
        seconds_per_buffer = (source.CHUNK + 0.0) / source.SAMPLE_RATE
        elapsed_time = 0
        offset_time = 0
        offset_reached = False
        while True:  # loop for the total number of chunks needed
            if offset and not offset_reached:
                offset_time += seconds_per_buffer
                if offset_time > offset:
                    offset_reached = True

            buffer = source.stream.read(source.CHUNK)
            if len(buffer) == 0: break

            if offset_reached or not offset:
                elapsed_time += seconds_per_buffer
                if keyboard.read_key() == "p":
                    print("\nYou pressed p")
                    break

                frames.write(buffer)

        frame_data = frames.getvalue()
        frames.close()
        return AudioData(frame_data, source.SAMPLE_RATE, source.SAMPLE_WIDTH)

并像这样从我的主脚本中调用它:

def Main():
r = sr.Recognizer()
try:
    with sr.Microphone() as source:
        print("Listening....")
        audio = r.record(source)
        print("Recognizing....")
        r.adjust_for_ambient_noise(source)
    text = r.recognize_google(audio)
    print(text.lower())
    if "lock computer" in text.lower():
        ctypes.windll.user32.LockWorkStation()
    elif "joke" in text.lower():
        joke = pyjokes.get_joke()
        speak(joke)
except Exception as e:
    print(e)
    Main()

这会收听音频,当我按 p 时停止收听,但无法识别它

【问题讨论】:

    标签: python speech-recognition


    【解决方案1】:

    我想通了,我保存了输入文件,发现里面没有音频,所以谷歌无法识别它。 错误出现在此块中:

                    if keyboard.read_key() == "p":
                        print("\nYou pressed p")
                        break
    

    我把它改成了:

                    if keyboard.read_key() == "p":
                        print("\nYou pressed p")
                        pressed = True
                        break
    

    并复制listen函数并复制,改名为listen1 现在,当我按 P 时,它会停止收听并且识别也在起作用。 像魅力一样工作?。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多