问题描述
我正在尝试使用 for 循环从音频文件中获取内容以遍历文件的内容,但我得到的是文本的最后一行。我确定问题出在 main.py 的主代码中,我无法弄清楚可能会出现什么问题。这是一些代码:
from flask import Flask,render_template,request,redirect
from google.cloud import speech
import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'PATH'
app = Flask(__name__)
@app.route("/",methods=["GET","POST"])
def index():
if request.method == "POST":
if "file" not in request.files:
return redirect(request.url)
file = request.files["file"]
if file.filename == "":
return redirect(request.url)
if file:
client = speech.SpeechClient()
config = speech.RecognitionConfig(
encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,sample_rate_hertz=8000,language_code="en-US",)
content = request.files['file'].read()
audio = speech.RecognitionAudio(content=content)
response = client.recognize(config=config,audio=audio)
for result in response.results:
text = result.alternatives[0].transcript
return render_template('index.html',text=text)
if __name__ == "__main__":
app.run(debug=True)
解决方法
问题出在这一行:
for result in response.results:
text = result.alternatives[0].transcript
文本总是最后一个。您可以做的是将文本附加到列表中并像这样返回列表
lines = []
for result in response.results:
text = result.alternatives[0].transcript
lines.append(text)
并将返回更改为
return render_template('index.html',text=lines)
并且不要忘记在您的 jinja 模板中添加一个 for 循环来处理返回的列表。