实现对话机器人主要有个步骤 :

  一.前端收集语音传入后端

  二.后端基于百度AI接口进行语音识别,转换成文字

  三.对文字进行自定义验证或通过图灵端口进行处理,生成回复内容

  四.将文字通过百度AI接口合成音频传入前端

一.前端收集语音传入后端

    先调用浏览器的多媒体对象(代码中的 || 表示针对不同的浏览器),创建一个流媒体容器承载音频内容,这里注意在音频转换成文件后要调用clear方法清空容器,否则会不断叠加,直到溢出内存.

     var serv = "http://192.168.11.129:9527";

     var reco = null;
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(); //停止录音 reco.exportWAV(function (wav_file) {
console.log(wav_file);
var formdata = new FormData(); // form 表单 {key:value}
formdata.append("reco", wav_file); // form input type="file"
formdata.append("key", "value");
$.ajax({
url: serv + "/upload",
type: 'post',
processData: false,
contentType: false,
data: formdata,
dataType: 'json',
success: function (data) {
console.log(data);
if (data.code == 0) {
document.getElementById("player").src = "http://192.168.11.129:9527/get_file/" + data.filename;
document.getElementById("content").innerText = data.content; }
}
})
});
reco.clear(); //音频转换成文件以后清空容器
}

二.后端基于百度AI接口进行语音识别,转换成文字

    首先登录ai.baidu.com创建自己的接口(网页中有详细的使用说明),注意将录制的文件转换成.pcm格式,网上有多种方法,我这里使用ffmpeg,audio2text函数将转换后的音频转成文字并返回.

""" 你的 APPID AK SK """
APP_ID = '158***' #调用百度AI语音识别接口
API_KEY = '*********************'
SECRET_KEY = '********0ITAFKv****************' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
nlp_client = AipNlp(APP_ID, API_KEY, SECRET_KEY) def get_file_content(filePath):
os.system(f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm") #将音频转换成.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,
}) text = res.get("result")[0] return text

三.对文字进行自定义验证或通过图灵端口进行处理,生成回复内容

    登录tuling123.com创建自己的机器人并对机器人根据自己的喜好进行设置,将上一步中转换的内容替换到data中,data是机器人可识别的数据格式,最后将取出的内容进行提取,返回有用信息.

import requests
def to_tuling(text): #机器人可识别的数据格式(必须按规定写)
data = {
"perception": {
"inputText": {
"text": "北京"
}
},
"userInfo": {
"apiKey": "0f9368bdbf***********bb1dd79",
"userId": ""
}
}
data["perception"]["inputText"]["text"] = text #将上一步中转换的文字传入机器人可识别的数据格式中
res = requests.post("http://openapi.tuling123.com/openapi/api/v2", json=data) #接入图灵机器人,并把数据data传入
res_json = res.json() #把机器人返回的内容进行json处理
text = res_json.get("results")[0].get("values").get("text") #取出需要的内容 return text

    在接入机器人之前可以自定义回复,如果信息与自定义的话相似度很高,就返回自定义的结果,反之才向机器人发送信息.

 def my_nlp(text):
if nlp_client.simnet(text, '今天天气真好呀').get('score') > 0.85:
A = '你今天也很精神'
return A
A = to_tuling(text)
return A

四.将文字通过百度AI接口合成音频传入前端

    第一段的代码中已经有接收后端信息的代码.

注意! 最好在火狐浏览器中运行.

  

基于Flask和百度AI实现与机器人对话的更多相关文章

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

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

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

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

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

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

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

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

  5. 基于C# 调用百度AI 人脸识别

    一.设置 登录百度云控制台,添加应用-添加人脸识别,查找,对比等. 记住API Key和Secret Key 二.创建Demo程序 1.使用Nuget安装 Baidu.AI 和 Newtonsoft. ...

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

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

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

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

  8. 使用百度ai接口加图灵机器人完成简单web版语音对话

    app文件 from flask import Flask, request, render_template, jsonify, send_file from uuid import uuid4 i ...

  9. 百度ai 基于node 语音识别 音频文件类型转换

    百度ai 基于node 语音识别 音频文件类型转换 项目简介 源代码移步:https://github.com/xuess/ai-baidu-node 本项目主要功能为,本地音频语音识别和文件类型转换 ...

随机推荐

  1. 说一说Unsafe魔法类

    这篇算是对 Unsafe 的一个总体概况,由于内容实在太多,后续会分开几篇文章对里面内容展开细讲 前言 Unsafe可以说是java的后门,类似西游记中的如来佛祖法力无边,Unsafe主要提供一些用于 ...

  2. (JavaScript) 百度地图与腾讯地图坐标转换

    /** * 坐标转换,百度地图坐标转换成腾讯地图坐标 * lng 腾讯经度(pointy) * lat 腾讯纬度(pointx) * 经度>纬度 */ function bMapToQQMap( ...

  3. 顺序表添加与删除元素以及 php实现顺序表实例

    对顺序表的操作,添加与删除元素. 增加元素 如下图所示  对顺序列表 Li [1328,693,2529,254]  添加一个元素 111 ,有三种方式: a)尾部端插入元素,时间复杂度O(1);  ...

  4. python之RabbitMQ队列

    一.介绍 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(MQ)是一 ...

  5. ORACLE 的前后台进程

    关于oracle用户进程,服务进程,后台进程 用户进程(User Process) 是一个需要与Oracle Server交互的程序 运行于客户端 当用户运行某个工具或应用程序(如SQL*Plus)时 ...

  6. TZOJ数据结构实验:左叶子之和

    int sumOfLeftLeaves(struct TreeNode* root) { if (root == NULL) { ; }//递归结束条件 if (root->left & ...

  7. c++学习---vector

    vector存放类型不同,{}有些区别-: vector的size的返回类型: push_back的使用: 要防止缓冲区溢出,使用范围for语句:

  8. Python+Appium启动手机APP或者浏览器

    一.设备信息配置 脚本如下: from appium import webdriver class my_app(): def __init__(self): desired_caps = {} # ...

  9. css 小图标 & iconfont 字体图标

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! iconfont 字体图标 我们的需求中,很多时候会看到一些小的图形,或者叫图标,比如天猫网站中:     ...

  10. 面试经典算法:优先队列,最大堆,堆排序,左偏树Golang实现

    堆排序 使用优先队列-最小/最大堆可实现. 优先队列 优先队列是一种能完成以下任务的队列:插入一个数值,取出最小的数值(获取数值,并且删除).优先队列可以用二叉树来实现,我们称这种为二叉堆. 最小堆 ...