基于百度ai,图灵机器人,Flask 实现的网站语音智能问答
准备以下模块中的函数
from aip import AipSpeech
import time
import os
import requests
APP_ID = '15420654'
API_KEY = 'lHlfGfZyH3pDXqKxQnjZtyBl'
SECRET_KEY = 'CLWhR7yoALWV8dFHNWaKGbuyH1cRgQpq'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
def get_file_content(filePath):
# 将文件转换为百度ai接口需要的pcm格式, 使用ffmpeg格式工厂
os.system(f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm")
with open(f"{filePath}.pcm", 'rb') as fp:
return fp.read()
def audio2text(filePath):
# 识别本地文件
res = client.asr(get_file_content(filePath), 'pcm', 16000, {
'dev_pid':1536,
})
return res.get('result')[0]
def text2audio(text):
# 将文本语音合成音频
filename = f"{time.time()}.mp3"
result = client.synthesis(text, 'zh', 1, {
'vol': 5,
'spd': 3,
'pit': 7,
'per': 4
})
if not isinstance(result, dict):
with open(filename, 'wb') as f:
f.write(result)
return filename
def to_tuling(text):
# 向图灵机器人接口发送转换好的文本
url = 'http://openapi.tuling123.com/openapi/api/v2'
data = {
"reqType": 0,
"perception": {
"inputText": {
"text": text
},
},
"userInfo": {
"apiKey": "8931057699874d7994145e6d8b0bab1a",
"userId": "1"
}
}
res = requests.post(url, json=data)
text = res.json().get('results')[0].get('values').get('text')
return text
Flask app############################################################
from flask import Flask, render_template, request, send_file, jsonify
import ai4
from uuid import uuid4
app = Flask(name)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/ai', methods=['POST'])
def ai():
# 接收前端传送的二进制流
audio = request.files.get('record')
filename = f"{uuid4()}.wav"
audio.save(filename)
# 将二进制流音频文件,转换为text
q_text = ai4.audio2text(filename)
# 将q_text发送给图灵机器人进行回答
a_text = ai4.to_tuling(q_text)
# 将a_text答案发送给百度合成音频文件
a_file = ai4.text2audio(a_text)
return jsonify({'filename': a_file})
@app.route('/get_audio/')
def send_audio(filename):
return send_file(filename)
if name == 'main':
app.run(host='0.0.0.0', port=9527, debug=True)
最新文章
- [译]:Xamarin.Android开发入门——Hello,Android Multiscreen快速上手
- 机器学习实战笔记(Python实现)-00-readme
- bootstrap源码分析之form、navbar
- tar等
- C#操作XML(读XML,写XML,更新,删除节点,与dataset结合等)【转载】
- Python文件格式化写入
- unity, sprite atlas
- iOS 通过代码关闭应用程序
- android中选择控件与选择界面自然过度效果的实现--一种新的交互设计
- 大数据分析神兽麒麟(Apache Kylin)
- 高效实现 std::string split() API
- hdu1301 Jungle Roads (Prim)
- eclipse for mac 快捷键
- Redis MSET的极限在哪里
- 基于hi-nginx的web开发(python篇)——使用jinja2模板引擎
- treeview调用数据库成树
- Python-web应用 +HTTP协议 +web框架
- Kali学习笔记25:Arachni使用(实现分布式扫描)
- Lodop控件NewPage();测试输出空白页
- zookeeper的作用
热门文章
- js中的DOM对象 和 jQuery对象 比较
- Python——用socket和线程实现全双工收发数据
- s5pv210移植Minigui3.0.12
- cocos2d 3.3 安装教程
- CF912D Fishes 期望
- java.sql.Date/ java.util.Date/ java.util.Calendar 用法与区别
- HashMap的容量大小增长原理(JDK1.6/1.7/1.8)
- C语言使用指针表示数组的注意事项
- Visible Ops
- tomcat使用不同的jdk版本 liunx 装两个jdk