You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Flask中上传的文件传输至Deepgram AI进行处理?

如何将Flask中上传的文件直接传递给Deepgram AI

你可以直接利用Flask请求中获取的文件流作为Deepgram的数据源,无需将文件保存到本地目录再读取。下面是修改后的完整代码,核心是直接使用上传文件的stream属性传递给Deepgram接口:

from deepgram import Deepgram
import json
from flask import Flask, render_template_string, request

# 初始化Deepgram客户端
dg_key = '6a5db8f6e43c35769ddce7a3523c792179b69f5c'
dg = Deepgram(dg_key)

# 允许的音频文件扩展名和对应MIME类型
ALLOWED_EXTENSIONS = {'mp3', 'wav'}
MIME_TYPES = {
    'mp3': 'audio/mp3',
    'wav': 'audio/wav'
}

# 转录配置选项
transcription_options = {
    "punctuate": True,
    "diarize": True,
    "model": 'general',
    "tier": 'nova'
}

# 初始化Flask应用
app = Flask(__name__)

# 内嵌上传表单模板
UPLOAD_FORM = """
<!doctype html>
<title>上传音频文件</title>
<h1>上传音频文件(MP3/WAV)</h1>
<form method=post enctype=multipart/form-data>
  <input type=file name=file accept=".mp3,.wav">
  <input type=submit value=上传>
</form>
"""

def allowed_file(filename):
    """检查文件扩展名是否合法"""
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route('/', methods=['GET', 'POST'])
def upload_and_transcribe():
    if request.method == 'POST':
        # 获取上传的文件对象
        file = request.files.get('file')
        if not file or file.filename == '':
            return "请选择一个文件上传"
        
        if allowed_file(file.filename):
            # 根据扩展名获取正确的MIME类型
            file_ext = file.filename.rsplit('.', 1)[1].lower()
            mimetype = MIME_TYPES[file_ext]
            
            # 直接用文件流作为Deepgram的数据源,无需落地存储
            source = {
                "buffer": file.stream,
                "mimetype": mimetype
            }
            
            # 调用Deepgram同步转录接口
            try:
                transcription_result = dg.transcription.sync_prerecorded(source, transcription_options)
                
                # 将转录结果保存为JSON文件(可选,也可以直接返回给前端)
                result_filename = f"{file.filename.rsplit('.', 1)[0]}.json"
                with open(result_filename, "w") as f:
                    json.dump(transcription_result, f, indent=4)
                
                return f"转录完成!结果已保存为 {result_filename}"
            except Exception as e:
                return f"转录出错:{str(e)}"
        else:
            return "只允许上传MP3或WAV格式的音频文件"
    
    # GET请求返回上传表单
    return render_template_string(UPLOAD_FORM)

if __name__ == '__main__':
    app.run(debug=True)

关键改动说明:

  • 移除了原代码中遍历本地目录的逻辑,改为直接处理Flask上传的文件对象
  • 用request.files.get('file')获取上传文件,通过file.stream直接传递文件流给Deepgram,无需保存到本地
  • 修复了原代码中MIME类型拼接错误的问题,根据文件扩展名匹配正确的音频MIME类型
  • 添加了文件格式校验,确保只处理MP3/WAV文件
  • 内嵌了简单的上传表单,无需额外模板文件

内容的提问来源于stack exchange,提问作者daphney thokoana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 08:08:18