如何使用语音识别来获取用户的语音输入?


enter code here
sr = s.Recognizer()
print(''' listening...
speak the first card''')
with s.Microphone() as m:
audio = sr.listen(m)
query = sr.recognize_google(audio, language='eng-in')
first_card = input("Enter the first card: ")
second_card = input("Enter the second card: ")
third_card = input("Enter the third card: ")
fourth_card = input("Enter the fourth card: ")
print("the upnext cards are", fourth_card, third_card, second_card, first_card)

我希望用户语音输入第一张卡片,第二张卡片等等,而不是用键盘输入它们。

如果您将以下内容放入while循环中(请参阅答案的末尾以获取完整代码),则可以通过将每次语音输入附加到列表中来获得所需次数的用户语音输入。

with s.Microphone() as m:
audio = sr.listen(m)
query = sr.recognize_google(audio)
cards.append(query) #where cards is the list of user inputted cards

注意,有时会有一个无法识别的输入,这就是为什么下面的例子使用了一个计数器,当我们成功识别语音输入时,计数器会增加(如果我们到达"尝试"部分的末尾,我们知道输入已经被识别)。

显然,有时这将不能准确地识别语音输入,你可以向用户显示"查询"是什么,让他们确认这是正确的/允许他们重试(尽管在我的测试中,语音输入几乎一直都是准确的)。

import speech_recognition as s
cards = []
numberOfCards = 4
validInputs = 0
while validInputs < numberOfCards: 
sr = s.Recognizer()
with s.Microphone() as m:
print("Speak for card", (validInputs + 1), ":")
audio = sr.listen(m)
try:
query = sr.recognize_google(audio)
print("card", (calidInputs + 1), ":", query)
cards.append(query)
validInputs += 1
except s.UnknownValueError:
print("unknown input, please try again")
except s.RequestError as e:
print("couldn't get results from Google Speech Recognition service; {0}".format(e))
print("the upnext cards are", cards[3], cards[2], cards[1], cards[0])

运行此命令将输出:

Speak for card 1:
card 1: red
Speak for card 2:
card 2: green
Speak for card 3:
card 3: blue
Speak for card 4:
card 4: yellow
the upnext cards are yellow blue green red
>>> 

我相信这就是你想要达到的目标:)

你可以试试:

import speech_recognition as s
cards = 0
while cards < 4:  # Change this number value as many speech input you like
sr = s.Recognizer()
with s.Microphone() as m:
print(f"Speak the #{cards + 1} card nListening... ")
audio = sr.listen(m)
try:
query = sr.recognize_google(audio, language='eng-in')
cards += 1
except s.RequestError:
print("API unavailable")
except s.UnknownValueError:
print("Unable to recognize speech. Try again.")
if cards == 1:
first_card = query
continue
if cards == 2:
second_card = query
continue
if cards == 3:
third_card = query
continue
if cards == 4:
fourth_card = query
break
# Add more as many value referred by number in the beginning of 'while' block
print(f"the upnext cards are {fourth_card}, {third_card}, {second_card}, {first_card}")

它将分配query字符串匹配您的名称变量。

输出:

Speak the #1 card 
Listening... 
Speak the #2 card 
Listening... 
Unable to recognize speech. Try again. 
Speak the #2 card 
Listening... 
Speak the #3 card 
Listening... 
Speak the #4 card 
Listening... 
Unable to recognize speech. Try again.
Speak the #4 card 
Listening... 
the upnext cards are four, three, two, one
Process finished with exit code 0