def chunks_process(chunks, pos, folder_name, whole_text):
r = sr.Recognizer()
for i in range(pos, len(chunks)):
chunk_filename = os.path.join(folder_name, f"chunk{i}.wav")
chunks[i].export(chunk_filename, format="wav")
with sr.AudioFile(chunk_filename) as source:
audio_listened = r.record(source)
try:
text = r.recognize_google(audio_listened, language='vi-VN')
except:
chunks_process(chunks, i, folder_name, whole_text)
else:
text = f"{text.capitalize()}. "
print(chunk_filename, ":", text)
whole_text += text
return whole_text
每當r.recognize_google()api調用在特定位置失敗時,我想回調chunks_process()函數。
我有一個問題,它在完成數組(塊)的結束索引后重復for循環。
我不知道如何解決這個問題。
這是因為從遞歸調用返回時沒有停止。調用方的
i
不會被遞歸執行的i
更新。解決方案是當您從遞歸返回時立即返回,因為在這一點上,所有的數據都被處理了。所以在這里加上
return
:附帶說明:對于遞歸調用,您似乎希望重試一個操作。我不會為此使用遞歸,而是編寫一個額外的循環,只要需要重試,它就會不斷迭代。