我制作了一个程序,可以让我说出来并将其转换为文本。我停止讲话后,它会转换我的声音。我想做的是在讲话时将语音转换为文本。
https://www.youtube.com/watch?v=96AO6L9qp2U&t=2s&ab_channel=StormHack,最低2:31。
请注意Tony显示器的右上角。它可以在通话时将他的声音转换为文本。我想做同样的事情。能做到吗?
这是我的整个程序:
import speech_recognition as sr
import pyaudio
r = sr.Recognizer()
with sr.Microphone() as source:
print("Listening...")
audio = r.listen(source)
try:
text = r.recognize_google(audio)
print("You said : {}".format(text))
except:
print("Sorry could not recognize what you said")
解决方案,技巧,提示或其他任何东西,将不胜感激,在此先感谢您。
答案 0 :(得分:0)
要执行此操作,您必须执行所谓的VAD:语音音频检测,一种简单的方法是从音频中获取一组样本并获取其强度,如果它们超过特定阈值,则您一旦强度在给定时间段内降至某个阈值以下,您就应该开始记录,然后结束记录并将其发送给服务。您可以找到此here的示例。
更复杂的系统使用更好的试探法来确定用户是否在讲话,例如频率以及应用诸如降噪之类的功能,其他系统也可以在用户讲话时像DeepSpeech一样对文本执行实时语音2。
答案 1 :(得分:0)
要做你想做的事,你不需要听一个完整的句子,而只需要听几个词。然后您必须处理音频数据并最终打印结果。这是它的一个非常基本的实现:
import speech_recognition as sr
import threading
import time
from queue import Queue
listen_recognizer = sr.Recognizer()
process_recognizer = sr.Recognizer()
audios_to_process = Queue()
def callback(recognizer, audio_data):
if audio_data:
audios_to_process.put(audio_data)
def listen():
source = sr.Microphone()
stop_listening = listen_recognizer.listen_in_background(source, callback, 3)
return stop_listening
def process_thread_func():
while True:
if audios_to_process.empty():
time.sleep(2)
continue
audio = audios_to_process.get()
if audio:
try:
text = process_recognizer.recognize_google(audio)
except:
pass
else:
print(text)
stop_listening = listen()
process_thread = threading.Thread(target=process_thread_func)
process_thread.start()
input()
stop_listening()
如您所见,我使用了 2 个识别器,因此一个将始终收听,另一个将处理音频数据。 第一个侦听数据,然后将音频数据添加到队列并再次侦听。同时,另一个识别器正在检查是否有音频数据需要处理成一些文本然后打印出来。