app文件

from flask import Flask, request, render_template, jsonify, send_file
from uuid import uuid4
import os
import asr_test app = Flask(__name__)
app.debug = True @app.route('/')
def index():
return render_template('index.html') @app.route('/uploader', methods=['POST'])
def uploader():
file = request.files.get('reco')
file_name = os.path.join('audio', f'{uuid4()}.wav')
file.save(file_name)
ret_filename = asr_test.my_ai(file_name)
print(ret_filename)
return jsonify({'filename': ret_filename}) @app.route('/get_audio/<filename>')
def get_audio(filename):
file = os.path.join('audio', filename)
return send_file(file) if __name__ == '__main__':
app.run('0.0.0.0', 5000)

调用百度语音识别与语音合成接口,把传来的语言识别成文字,并调用下面的相似度接口,返回回答的文字,然后利用语音合成返回回答

from aip import AipSpeech
import os
from my_npl import get_score
from uuid import uuid4 """ 你的 APPID AK SK """
APP_ID = '******'
API_KEY = '******'
SECRET_KEY = '******' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) # 读取文件
def get_file_content(filePath):
any2pcm_str = f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm"
os.system(any2pcm_str)
with open(f"{filePath}.pcm", 'rb') as fp:
return fp.read() # 识别本地文件
def my_ai(file):
res = client.asr(get_file_content(file), 'pcm', 16000, {
'dev_pid': 1536,
}) print(res.get('result'))
print(res)
question = res.get('result')[0]
req = get_score(question) req = client.synthesis(req, 'zh', 1, {
'vol': 5,
'pit': 5,
'spd': 4,
"per": 4
}) # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(req, dict):
ret_filename = f'{uuid4()}.mp3'
new_filename = os.path.join("audio", ret_filename)
with open(new_filename, 'wb') as f:
f.write(req)
return ret_filename

调用百度ai自然语言中的短文本相似度接口,使相似的问题得到相同的答案

from aip import AipNlp
from mytuling import to_tuling """ 你的 APPID AK SK """
APP_ID = '***'
API_KEY = '***'
SECRET_KEY = '***' client = AipNlp(APP_ID, API_KEY, SECRET_KEY) def get_score(Q):
if client.simnet(Q, '你叫什么名字').get('score') > 0.7:
return '我是大名鼎鼎的小王吧'
elif client.simnet(Q, '你今年几岁呀').get('score') > 0.7:
return '我今年已经1112岁啦'
else:
return to_tuling(Q)

调用图灵接口完成未设定问答的

import requests

tuling_url = 'http://openapi.tuling123.com/openapi/api/v2'

data = {"reqType": 0,
"perception": {
"inputText": {
"text": ""
}
}
,
"userInfo": {
"apiKey": "***",
"userId": "***"
}
} def to_tuling(Q):
data["perception"]["inputText"]['text'] = Q
a = requests.post(url=tuling_url, json=data)
res = a.json()
print(res)
return res.get("results")[0].get("values").get("text")

简单前端页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<audio src="" autoplay controls id="player"></audio>
<p>
<button onclick="start_reco()">开始录音</button>
</p>
<p>
<button onclick="stop_reco()">停止录音</button>
</p> </body>
<script src="/static/Recorder.js"></script>
<script src="/static/jQuery3.1.1.js"></script>
<script type="text/javascript">
var serv = "http://127.0.0.1:5000";
var audio_serv = serv + "/get_audio/";
var audio_context = new AudioContext();
navigator.getUserMedia = (navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia); navigator.getUserMedia({audio: true}, create_stream, function (err) {
console.log(err)
}); function create_stream(user_media) {
var stream_input = audio_context.createMediaStreamSource(user_media);
reco = new Recorder(stream_input);
} function start_reco() {
reco.record();
} function stop_reco() {
reco.stop();
get_audio();
reco.clear();
} function get_audio() {
reco.exportWAV(function (wav_file) {
// wav_file 音频文件 Blob("wav","context")
console.log(wav_file);
var formdata = new FormData();
formdata.append("reco", wav_file);
$.ajax({
url: serv + "/uploader",
type: 'post',
processData: false,
contentType: false,
data: formdata,
dataType: 'json',
success: function (data) {
document.getElementById("player").src = audio_serv + data.filename;
}
}
);
})
}
</script>
</html>

前端页面

使用百度ai接口加图灵机器人完成简单web版语音对话的更多相关文章

  1. 人工智能-调百度AI接口+图灵机器人

    1.登陆百度AI的官网 1.注册:没有账号注册 2.创建应用 3.创建应用 4.查看应用的ID 5.Python代码 from aip import AipSpeech APP_ID = " ...

  2. 基于百度ai,图灵机器人,Flask 实现的网站语音智能问答

    准备以下模块中的函数 from aip import AipSpeech import time import os import requests APP_ID = '15420654' API_K ...

  3. [初识]使用百度AI接口,图灵机器人实现简单语音对话

    一.准备 1.百度ai开放平台提供了优质的接口资源https://ai.baidu.com/  (基本免费) 2.在语音识别的接口中, 对中文来说, 讯飞的接口是很好的选择https://www.xf ...

  4. 百度ai 接口调用

    1.百度智能云 2.右上角 管理控制台 3.左上角产品服务 选择应用 4.创建应用 5.应用详情下面的查看文档 6.选择pythonSDK  查看下面快速入门文档  和  接口说明文档. 7.按步骤写 ...

  5. 基于flask和百度AI接口实现前后端的语音交互

    话不多说,直接怼代码,有不懂的,可以留言 简单的实现,前后端的语音交互. import os from uuid import uuid4 from aip import AipSpeech from ...

  6. django--调用百度AI接口实现人脸注册登录

    面部识别----考勤打卡.注册登录.面部支付等等...感觉很高大上,又很方便,下面用python中的框架--django完成一个注册登录的功能,调用百度AI的接口,面部识别在网上也有好多教程,可以自己 ...

  7. 2019-02-15 python接口图灵机器人(简单好玩)

    import requests import json def Run(text): url = "http://openapi.tuling123.com/openapi/api/v2&q ...

  8. WebApiClientCore简约调用百度AI接口

    WebApiClientCore WebApiClient.JIT/AOT的netcore版本,集高性能高可扩展性于一体的声明式http客户端库,特别适用于微服务的restful资源请求,也适用于各种 ...

  9. Python人工智能-基于百度AI接口

    参考百度AI官网:http://ai.baidu.com/ 准备工作: 支持Python版本:2.7.+ ,3.+ 安装使用Python SDK有如下方式 >如果已经安装了pip,执行 pip ...

随机推荐

  1. vue登录/查看/结束端口号

    下班时间到啦! --下班都是他们的,而我,还是什么都没有. vue登录(未登录情况下不允许进入) 在路由里加上登录的权限 meta: { requireAuth: true, title: 'Logi ...

  2. Mac 10.9x下安装配置phonegap3.0开发环境 (涉及android sdk配置)

    最近突然想弄一下phonegap,之前一直是听说,没亲自配置开发过.结果配置过程非常艰难啊.特别是android平台的配置,那叫一个麻烦,网上搜了半天都没找到非常好的资料.文章也都是抄来抄去,最烦的就 ...

  3. IIS7.5 配置应用程序初始化功能

    IIS进程回收后,第一次访问会超级慢,这对于用户是不能接受的,怎么解决这个问题? 我们不能设置IIS不回收进程,因为这样可能会导致IIS内存泄漏.有效的方法时,尽量在业务空闲时间回收进程,回收后立刻预 ...

  4. SQLite3数据库的操作

    数据库的操作 我们在这个项目中使用的是SQLITE3数据库软件. 通过使用SQLITE3进行创建数据库,创建表,插入记录,查询记录,更新记录,关闭数据库等操作来实现将相应的数据存入数据库中. 打开数据 ...

  5. python操作上级子文件

    . └── folder ├── data │ └── data.txt └── test1 └── test2 └── test.py import os '***获取当前目录***'print o ...

  6. Python 根据地址获取经纬度及求距离

    方法一: 使用Geopy包 : https://github.com/geopy/geopy   (仅能精确到城镇,具体街道无结果返回) from geopy.geocoders import Nom ...

  7. linux和windows下TIME_WAIT过多的解决办法

    http://www.51testing.com/html/48/202848-249774.html linux和windows下TIME_WAIT过多的解决办法 http://m.sohu.com ...

  8. 转:google测试分享-问题和挑战

    原文: http://blog.sina.com.cn/s/blog_6cf812be0102vxer.html 前言:这个系列分享的内容大部分都是出自于<google是如何测试的>的书, ...

  9. rmdir命令

    rmdir命令用来删除空目录.当目录不再被使用时,或者磁盘空间已到达使用限定值,就需要删除失去使用价值的目录.利用rmdir命令可以从一个目录中删除一个或多个空的子目录.该命令从一个目录中删除一个或多 ...

  10. 几个python one-liner

    生成斐波那契数列的前10个数,从1开始.若生成前n个,改为range(n-2).代码很简单: List = reduce(lambda x, y: x + [x[-1] + x[-2]], range ...