Mình vừa test thử thấy cái hàm listen này nó dở dở kiểu gì ấy , kiểu nó tự động nhận diện khi nào có giọng nói khi nào không => trường hợp của bạn chắc là nó không nhận diện được khi nào bạn nói/ngừng nói => không qua được dòng listen.
Giải pháp là dùng record kết hợp với parameter duration, nó lập tức thu âm thanh của bạn trong bao nhiêu giây xong rồi dừng, như vậy sẽ đảm bảo là qua được đoạn record âm thanh.
À mà ở đây api google là đang dùng api default, nghĩa là chỉ dùng nghịch chơi chơi thôi, còn muốn dùng lâu dài thì nên thuê api xịn mà dùng, chứ hàng free thì kiểu gì cũng bị giới hạn thôi, cái này hình như là 50 request 1 ngày thì phải.
Chi tiết xin liên hệ:
https://github.com/Uberi/speech_recognition
https://github.com/Uberi/speech_recognition/blob/master/reference/library-reference.rst
https://github.com/Uberi/speech_recognition/blob/master/examples/microphone_recognition.py#L27
GIF
In [73]: import speech_recognition as sr
...:
...: r = sr.Recognizer()
...: with sr.Microphone() as source:
...: print("Say something!")
...: audio = r.record(source, duration=4)
...: print("You said: " + r.recognize_google(audio, language='vi-VN')
...:
Say something!
You said: Dạy Nhau Học
In [74]: XD gg ezezeze
File "<ipython-input-74-0983e12d1575>", line 1
XD gg ezezeze
^
SyntaxError: invalid syntax