本文引用了2个js文件,这里提供下CDN资源,!

<script type="application/javascript" src="https://cdn.bootcss.com/recorderjs/0.1.0/recorder.js"></script>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>

功能介绍:

1.点击页面上的''录制语音指令'',然后开始说话,不要超过60秒;

2.说完,点击页面上的''发送语音指令'',系统会重复一遍你说的话(合成后的声音,不在是你原来声音)

前段代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"> </head>
<body>
<audio controls autoplay id="player"></audio>
<p><button onclick="start_reco()" style="background-color: yellow">录制语音指令</button></p>
<p><button onclick="stop_reco_audio()" style="background-color: blue">发送语音指令</button></p>
</body>
<script type="text/javascript" src='{{ url_for('static',filename='js/jquery.js') }}'></script>
<script type="text/javascript" src='{{ url_for('static',filename='js/recorder.js') }}'></script> <script type="text/javascript">
var reco = null;
var audio_context = new AudioContext();
var base_url = 'http://192.168.13.21:5400'; 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_audio() {
reco.stop();
send_audio();
reco.clear();
} function send_audio() {
reco.exportWAV(function (wav_file) {
var formdata = new FormData();
formdata.append("record", wav_file);
console.log(formdata);
$.ajax({
url: base_url+"/ai",
type: 'post',
processData: false,
contentType: false,
data: formdata,
dataType: 'json',
// 自动播放语音
success: function (data) {
document.getElementById("player").src =base_url+"/get_audio/" + data.filename
}
}); })
} </script>
</html>

后端代码:

app.py

from flask import Flask,render_template,request,jsonify,send_file
from uuid import uuid4
import s4_5 app = Flask(__name__,static_folder='static') @app.route("/")
def index():
return render_template("index.html") @app.route("/ai",methods=["POST"])
def ai():
# 1.保存录音文件
audio = request.files.get("record")
filename = f"{uuid4()}.wav"
audio.save(filename) #2.将录音文件转换为PCM发送给百度进行语音识别
q_text = s4_5.audio2text(filename) #3.将识别的问题交给图灵或自主处理获取答案
a_text = s4_5.to_tuling(q_text) #4.将答案发送给百度语音合成,合成音频文件
a_file = s4_5.text2audio(a_text) #5.将音频文件发送给前端播放
return jsonify({"filename":a_file}) @app.route("/get_audio/<filename>")
def get_audio(filename):
return send_file(filename) if __name__ == '__main__':
# 注意前后端保持一致o!
app.run("0.0.0.0",5400,debug=True)

s4_5.py

from aip import AipSpeech,AipNlp
import time,os APP_ID = ''
APP_KEY = 'DhXGtWHYMujMVZZGRI3a7rzb'
SECRET_KEY = 'PbyUvTL31fImGthOOIP5ZbbtEOGwGOoT' # 与百度进行一次加密校验,认证你是合法用户合法的应用
# AipSpeech是百度语音的客户端,认证成功之后,客户端将被开启,这里的client就是已经开启的百度语音的客户端了
client = AipSpeech(APP_ID, APP_KEY, SECRET_KEY)
# 自然语言处理
nlp = AipNlp(APP_ID, APP_KEY, SECRET_KEY) # 1.将wma格式文件转为pcm格式文件
def get_file_content(filePath):
# 执行cmd命令os.system()
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() # 2.将音频转成文字
def audio2text(filepath):
# 识别本地文件
res = client.asr(get_file_content(filepath), 'pcm', 16000, {
# 不填写lan参数生效,都不填写,默认1537(普通话 输入法模型),dev_pid参数见本节开头的表格
'dev_pid': 1536,
})
# res.get("result")[0])
# 将录音转成文字,然后返回
return res.get("result")[0] # 3.将文字转成音频
def text2audio(text):
# 给合成的音频命名
filename = f"{time.time()}.mp3"
# 合成语音结果
result = client.synthesis(text, 'zh', 1, {
'vol': 5,
"spd": 3,
"pit": 7,
"per": 4
})
# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
with open(filename, 'wb') as f:
f.write(result)
return filename #4.图灵机器人
def to_tuling(text):
# 导入模块requests,发post请求
import requests
args = {
"reqType": 0,
"perception": {
"inputText": {
"text": text
}
},
"userInfo": {
"apiKey": "eaf3daedeb374564bfe9db10044bc20b",
"userId": ""
}
}
# 图灵机器人API接口
url = "http://openapi.tuling123.com/openapi/api/v2"
# 向图灵发起请求
res = requests.post(url, json=args)
# 将结果赋值给text
text = res.json().get("results")[0].get("values").get("text")
# 将test返回
return text

人工智能-基于百度baidu-ai和图灵机器人实现学说话机器人的更多相关文章

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

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

  2. python预课06 基于百度大脑AI的人工智能,百度颜值检测,语音合成与识别

    百度大脑: 如下图,百度开放了许多人工智能接口可以使用,先注册一个百度大脑账户 点击创建应用,选择需要的功能,如人脸识别,语音识别等 点击查看文档,可以查看功能对应语言的方法,参数.首先在CMD命令下 ...

  3. Flask&&人工智能AI -- 6 人工智能初识,百度AI,图灵机器人

    一.人工智能初识,百度AI的创建与应用 参考连接:https://www.cnblogs.com/xiao987334176/p/9620113.html 1. 百度ai开放平台 2. AipSpee ...

  4. 人工智能初识(百度ai)

    目前的人工智能做了什么? 语音识别:小米的小爱同学,苹果的siri,微软的Cortana语音合成:小米的小爱同学,苹果的siri,微软的Cortana图像识别:交通摄像头拍违章,刷脸解锁手机等视频识别 ...

  5. python 全栈开发,Day122(人工智能初识,百度AI)

    一.人工智能初识 什么是智能? 我们通常把人成为智慧生物,那么”智慧生物的能力”就是所谓的”智能”我们有什么能力?听,说,看,理解,思考,情感等等 什么是人工智能? 顾名思义就是由人创造的”智慧能力” ...

  6. 基于百度AI开放平台的人脸识别及语音合成

    基于百度AI的人脸识别及语音合成课题 课题需求 (1)人脸识别 在Web界面上传人的照片,后台使用Java技术接收图片,然后对图片进行解码,调用云平台接口识别人脸特征,接收平台返回的人员年龄.性别.颜 ...

  7. python基于百度AI开发文字识别

    很多场景都会用到文字识别,比如app或者网站里都会上传身份证等证件以及财务系统识别报销证件等等 第一步,你需要去百度AI里去注册一个账号,然后新建一个文字识别的应用 然后你将得到一个API Key 和 ...

  8. 百度ai和图灵123实现简单的语音对话

    百度ai和图灵123实现简单的语音对话

  9. 基于百度AI实现 车牌识别

    前言 目前百度的AI接口相对完善,对于文字识别类的操作还需要开发者一一去尝试,去评估这效果到底是怎么的. 文字识别的接口相对简单,官方提供的SDK也集成很好,笔者只是在这上面做了一些前期性的功能数据校 ...

随机推荐

  1. grep和map计算两个集合交集、并集、补集

    #!/usr/bin/perl use strict; ######################################## 用grep 和map 获取两个列表的交集并集.补集###### ...

  2. dedecms上传图片相对路径改成绝对路径方法

    很多朋友使用dedecms的时候都用了二级域名的功能,所以造成很多文章中图片不显示的问题. 解决方案如下: 1. 进入dede后台"系统"-"系统基本参数"-& ...

  3. ASP.NET MVC4空MVC项目添加脚本压缩和合并

    本文介绍的是 建立的空MVC项目如何添加该功能 1.选中MVC项目,右键>"管理解决反感的NuGet程序包" 2.在"联机"中在线搜索搜索"Op ...

  4. MySql(一):linux 安装mysql数据库——yum安装法

    mysql数据库有多种安装方式,本文只介绍在Linux服务器上最实用.最快捷的mysql server安装方法.一.Linux服务器yum安装(CentOS6.3 64位)所有在服务器上执行的命令,都 ...

  5. Atitit.编程语言的基础句型and汉语英文比较

    Atitit.编程语言的基础句型and汉语英文比较 1. 编程语言常见的句型1 1.1. Verb(obj)1 1.2. If  then else1 1.3. For1 2. 英语中的五种基本句型结 ...

  6. 448. Find All Numbers Disappeared in an Array【easy】

    448. Find All Numbers Disappeared in an Array[easy] Given an array of integers where 1 ≤ a[i] ≤ n (n ...

  7. oracle如何将数据导入到另一个表空间

    某个用户的数据在USER表空间里,如果多个用户的数据都在USERS表空间内,将严重影响系统性能,一般在系统迁移的时候,在新的系统里希望导入 一个独立的用户表空间,但是经常无法导入用户指定的缺省表空间, ...

  8. flume 中的 hdfs sink round 和roll

    http://blog.csdn.net/kntao/article/details/49278239 http://flume.apache.org/FlumeUserGuide.html#exec ...

  9. zookeeper安装笔记

    安装zookeeper,将zookeeper上传到三个服务器,保存在/usr/local/zookeeper目录下,解压tar包 tar -xzvf zookeeper-3.4.6.tar.gz 进入 ...

  10. ToString(string format)输出格式简述

    ToString说明 ToString 是 .NET Framework 中主要的格式化方法.它将对象转换为其字符串表现形式,使它适合于显示.(有关对 .NET Framework 中的格式设置支持的 ...