如何正确使用 for 循环以便从 Flask 中转录的 .wav 文件中获取全文

问题描述

我正在尝试使用 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 循环来处理返回的列表。