现在仅有火狐浏览器可以这样操作 -- Filefox

下面是项目目录 --

前端页面 -- html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>我是玩具</title>
</head>
<body> <p><audio id="player" controls autoplay ></audio></p> <!-- src -->
<button onclick="start_reco()">录音</button>
<button onclick="stop_reco()">发送语音</button>
<div id="content"></div>
</body>
<script type="text/javascript" src="/static/Recorder.js"></script>
<script type="text/javascript" src="/static/jquery-3.3.1.min.js"></script>
<script type="text/javascript">
var serv = "http://192.168.11.173:9009"; var reco = null;
var audio_context = new AudioContext(); //音频内容对象 音频DOM 对象
navigator.getUserMedia = (navigator.getUserMedia || //获取浏览器
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia); navigator.getUserMedia({audio:true}, create_stream, function (err) {
console.log(err) //success回调函数 error
}); function create_stream(user_media) {
var stream_input = audio_context.createMediaStreamSource(user_media); //创建流媒体容器
reco = new Recorder(stream_input); // 录音的js
} 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"); // str 值int 文件 随便填
// # <input type="text" name = "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.173:9009/get_file/"+data.filename;
document.getElementById("content").innerText = data.content; }
}
})
}); reco.clear(); // 清空
} </script>
</html>

项目 主 py 文件

from flask import Flask, render_template, request, jsonify, send_file
from uuid import uuid4
from other import audio2text,text2audio,my_nlp
app = Flask(__name__) @app.route("/")
def index():
return render_template("WebToy.html") @app.route("/upload",methods=["POST"])
def upload():
fi = request.files.get("reco")
fi_name = f"{uuid4()}.wav"
fi.save(fi_name) text = audio2text(fi_name)
new_text = my_nlp(text)
filename = text2audio(new_text) ret = {
"filename":filename,
"content":new_text,
"code":0
} return jsonify(ret) @app.route("/get_file/<filename>")
def get_file(filename):
return send_file(filename) if __name__ == '__main__':
app.run("0.0.0.0",9009,debug=True)

其他  py  文件

import os
from aip import AipSpeech
from aip import AipNlp
from uuid import uuid4 APP_ID = ''
API_KEY = '5GGaPeBu2I0LsONjlWhM04yL'
SECRET_KEY = 'Uo8zIi8VRZMRgqKkCQaqaGIorsQtkDlw' 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')
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]
# print(text) return text # 智能问答
import requests # 请求模块 def to_tuling(text, uid): # 问题
data = {
"reqType": 0,
"perception": {
"inputText": {
"text": "上海"
},
},
"userInfo": {
"apiKey": "29f1be0165d74f7290a8cd899a4358a8",
"userId": ""
}
}
data['perception']['inputText']['text'] = text
data['userInfo']['userId'] = uid
res = requests.post('http://openapi.tuling123.com/openapi/api/v2', json=data)
print(res) res_json = res.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.77:
A = '我叫jay吧'
return A if nlp_client.simnet(text, '你今年几岁了').get('score') >= 0.77:
A = '今年999岁'
return A
A = to_tuling(text, '')
return A def text2audio(text):
result = client.synthesis(text, 'zh', 1, {
'vol': 5,
'per': 4,
'spd': 4,
'pit': 7
})
filename = f'{uuid4()}.mp3' # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
# with open(f'{time.time()}.mp3', 'wb') as f:
with open(filename, 'wb') as f:
f.write(result)
return filename

firefox 实现web交互机器人的更多相关文章

  1. Firefox上Web开发工具库一览

    Firefox的目标之一就是尽可能地使web开发者的生活更简单高效,并通过提供工具和具有很强扩展性的浏览器使人们创造出神奇的东西.使web开发者使用Firefox的时候,浏览器可以提供大量开发工具和选 ...

  2. 10 个基于 jQuery 的 Web 交互插件推荐

    英文原文:10 jQuery for Web Interaction Plugins “用户交互”在现代的 Web 设计中占据了很大比例,这是互联网产品不可或缺的关键,对 Web 设计师也提出了更高的 ...

  3. 第一讲 从头开始做一个web qq 机器人,第一步获取smart qq二维码

    新手教程: 前言:最近在看了一下很久很久以前做的qq机器人失效了,最近也在换工作目前还在职,时间很挺宽裕的.就决定从新搞一个web qq机器人 PC的协议解析出来有点费时间以后再做. 准备工作: 编译 ...

  4. Web交互设计优化的简易check list

    Web交互设计优化的简易check list 00 | 时间: 2011-02-11 | 28,842 Views 交互设计, 用户研究   “优化已有产品的体验”,这是用户体验相关岗位职责中常见的描 ...

  5. 客户端技术的一点思考(数据存储用SQLite, XMPP通讯用Gloox, Web交互用LibCurl, 数据打包用Protocol Buffer, socket通讯用boost asio)

    今天看到CSDN上这么一篇< 彻底放弃没落的MFC,对新人的忠告!>, 作为一个一直在Windows上搞客户端开发的C++程序员,几年前也有过类似的隐忧(参见 落伍的感觉), 现在却有一些 ...

  6. .net winform程序下使用firefox作为Web浏览器

    在winform程序中,要在程序中展示一个web页面,最常用的就是.net自带的webbrowser,但是大家都知道它是IE,也知道IE是有多么强(er)大(bi).而且微软已经宣布了IE的死亡... ...

  7. Android -- 与WEB交互在同一个会话Session中通信

    Session与Cookie Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力. Session可以用Cookie来实现, ...

  8. Unity与web交互

    Unity在发布web时,重要的是Unity与Web的交互,参数的传递 1.unity调用网页js的函数:Application.ExternalCall js函数: <script langu ...

  9. Web交互增强

    刚刚google了一下这个概念,在其他的领域已经存在了这个概念,但是web方面还是没有被人提及的,所以我在这里第一次声明web方面的交互增强 交互增强 (interaction enhance) 相对 ...

随机推荐

  1. log4j Tricks (log4j 1.2)

    1. 开启 log4j 框架内部的日志输出到控制台 # 在 log4j.properties 中添加log4j.debug=true # 配置 log4j 框架内部的日志通过 System.out 输 ...

  2. 【Dubbo 源码解析】04_Dubbo 服务注册&暴露

    Dubbo 服务注册&暴露 Dubbo 服务暴露过程是通过 com.alibaba.dubbo.config.spring.ServiceBean 来实现的.Spring 容器 refresh ...

  3. Centos 下 JProfiler 9.1.1 安装 部署 及 使用

    JProfiler[1] 是一个商业授权的Java剖析工具,由EJ技术有限公司,针对的Java EE和Java SE应用程序开发的.它把CPU.执行绪和内存的剖析组合在一个强大的应用中.JProfil ...

  4. [Cassandra] Mutation of <x> bytes is too large for the maxiumum size of <y>

    [Cassandra] Mutation of bytes is too large for the maxiumum size of Q: WARN [SharedPool-Worker-4] 20 ...

  5. 【物联网】国内几大云计算厂商的物联网IOT解决方案-阿里云、腾讯、百度、华为、青云(转)

    一.前言随着万物互联时代的来临,IOT逐渐成为各大云计算厂商重点发力的方向,作为平台厂商,提供的是包含接入.存储.管理.计算.展示等多个方面的综合能力,我这里就根据它们各自的特点和能力,简单介绍下它们 ...

  6. 解决修改sources.list之后update NO_PUBKEY错误

    最近鼓捣一个新基于debian的服务器,修改sources.list之后update的时候报类似如下错误: W: GPG error: http://ftp.us.debian.org lenny-p ...

  7. CentOS 7.0关闭服务器的防火墙服务命令

    1.直接关闭防火墙systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止firewall ...

  8. 深度学习入门之Mnist

    参看Deep learning from scratch,学习到反向传播网络后,把网络调通了,但是训练后损失函数减小,准确率没有变化,和瞎猜一样,是为什么呢?只有在看看各层缺少什么,关键是我的参数和书 ...

  9. thinkphp5中使用phpmailer实现发送邮件功能(转载)

    一.开启SMTP服务(使用php发送邮件需要用到SMTP服务,这里以163邮箱的SMTP服务为例). 1.登录163邮箱,在首页上找到“设置”. 2.选择开启的服务,一般都全选,POP3/SMTP/I ...

  10. vue v-for的数组改变导致页面不渲染解决方法

    直接在数组里,改变数组来达到重新渲染页面的目的, 需要用push等数组方法, 或者$set(),或者给数组重新赋值,来改变数组引用地址 而是直接索引= <body> <div id= ...