我制作了一个程序,当视频与一个人所说的单词匹配时播放视频,如果匹配,视频会显示在 tkinter 标签中。我的问题是当它匹配多个单词时,因为该程序会播放所有视频立即匹配。这个想法是,一个视频播放、停止,然后播放下一个视频。我使用 tkinter 和 tkvideo 。希望你能帮我解决这个问题。
dir = 'C:\\Users\\Usuario\\Desktop\\Prototipo\\palabras'
listaVid = []
with os.scandir(dir) as ficheros:
for fichero in ficheros:
listaVid.append(fichero.name.replace('.mp4',''))
def audioTexto():
listener = sr.Recognizer()
with sr.Microphone(device_index=0) as source:
print("Escuchando...")
audio = listener.listen(source)
rec = listener.recognize_whisper(audio, language="spanish")
trans_tab = dict.fromkeys(map(ord, u'\u0301\u0308'), None)
rec = normalize('NFKC', normalize('NFKD', rec).translate(trans_tab))
rec = re.sub(r'[.]', '', rec)
palabras = rec.split(',')
try:
for palabra in palabras:
for vid in listaVid:
if vid in palabra:
player = tkvideo.tkvideo('C:\\Users\\Usuario\\Desktop\\Reconocimiento de voz\\palabras\\'+vid+'.mp4', lblVid,loop=0, size = (640,360))
player.play()
except sr.UnknownValueError:
print("No se entiende")
except sr.RequestError as e:
print("error")
root =Tk()
btnHablar = Button(root,text='Hablar..',command= audioTexto)
btnHablar.grid(column=0, row=0 , padx=5 ,pady=5)
lblVid = Label(root)
lblVid.grid(column=0,row=2,columnspan=2)
root.mainloop()
下面将立即播放每个匹配视频的视频。只需将
play
从循环中移除即可。
for palabra in palabras:
for vid in listaVid:
if vid in palabra:
player = tkvideo.tkvideo('C:\\Users\\Usuario\\Desktop\\Reconocimiento de voz\\palabras\\'+vid+'.mp4', lblVid, loop=0, size = (640,360))
player.play()
做这样的事情:
VIDEO_PATH = 'C:\\Users\\Usuario\\Desktop\\Reconocimiento de voz\\palabras\\{}.mp4'
queue = [VIDEO_PATH.format(vid) for palabra in palabras for vid in listaVid if vid in palabra]
video = queue[0] # or queue.pop(0)
player = tkvideo.tkvideo(video, lblVid, loop=0, size = (640,360))
player.play()