2024-07-09 16:47:45 +08:00

74 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from flask import Flask, request, jsonify, send_file, Response, stream_with_context
from flask_cors import CORS
import io
import requests
import uuid
from datetime import datetime
import os
app = Flask(__name__)
CORS(app, supports_credentials=True)
def transcribe_audio(audio, language):
"""调用WeNet API用户提问转文字"""
url = "http://127.0.0.1:9991/transcribe"
files = {'audio': open(audio, 'rb')}
data = {'language': language}
response = requests.post(url, files=files, data=data)
if response.status_code == 200:
return response.json()['text']
else:
raise Exception("Error transcribing audio")
def generate_response_audio(transcription, language, audio):
"""调用生成回答音频API"""
url = "http://127.0.0.1:9992/tts"
data = {
"text": transcription,
'language': language
}
files = {'audio': open(audio, 'rb')}
response_audio = requests.post(url, data=data, files=files)
if response_audio.status_code == 200:
return io.BytesIO(response_audio.content)
else:
raise Exception("Error generating response audio")
@app.route('/process_audio', methods=['POST'])
def process_audio():
# 检查语言表单项
if 'audio' not in request.files or 'language' not in request.form:
return jsonify({"error": "Audio file and language must be provided"}), 400
# 从请求中获取语言设置和音频
request_audio = request.files['audio']
language = request.form['language']
if language not in ['chinese', 'english']:
return jsonify({"error": "Unsupported language"}), 400
unique_id = str(uuid.uuid4())
timestamp = datetime.now().strftime('%Y%m%d%H%M%S')
os.makedirs('temp', exist_ok=True)
input_audio_filename = f"input_{timestamp}_{unique_id}.wav"
input_audio_path = os.path.join('temp', input_audio_filename)
request_audio.save(input_audio_path)
try:
# 使用WeNet音频转文本
transcription = transcribe_audio(input_audio_path, language)
# 生成回答音频
response_audio = generate_response_audio(transcription, language, input_audio_path)
# 返回生成的音频文件
return send_file(response_audio, as_attachment=True, download_name='response.wav', mimetype='audio/wav')
except Exception as e:
return jsonify({"error": str(e)}), 500
finally:
if os.path.exists(input_audio_path):
os.remove(input_audio_path)
if __name__ == '__main__':
app.run()