现在仅有火狐浏览器可以这样操作 -- 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. ABBYY PDF Transformer+ 给你好看

    ABBYY PDF Transformer+是一个新的.全面的巧妙解决PDF文档的工具,它将泰比的光学字符识别(OCR)技术和Adobe®PDF技术完美结合,以确保实现便捷地处理任何类型的PDF文件, ...

  2. Openwrt配置小记

    手中有台Netgear WNR2000v3,一直想尝试Openwrt,于是刷机.官方最新固件的稳定版本为15.05.1,该版本自带luci,BUT,不能保存配置,上网查了很久,得出结论,是由于WNR2 ...

  3. IDEA下搭建Shiro-web环境,总是报BasicDataSource,classnotfound;问题解决

    进入报错跟踪,查看加载的classloader中没有dbcp相关jar包 猜测结果是,jar没有被加载,但是maven引用没错,而且也能找到对应的class 后来又查看IDEA配置中,相关jar也引入 ...

  4. 9. Oracle DataGuard的介绍

    一. Oracle DataGuard简介 Oracle DataGuard:简称DG.是由一个Primary Database(主库)和一个或者多个Standby Database(备库)组成.对O ...

  5. sip协议中文讲解

    https://blog.csdn.net/qiuchangyong/article/details/50748854

  6. mysql导出长数字到excel避免显示为科学记数法 解决方法

    经常遇到MYSQL导出长数字或纯数字字符串(如身份证.卡券号.条码.流水号等)到csv或excel文件,用excel打开会显示为科学记数法,甚至后几位转为0.这是由Excel的特性决定的:Excel显 ...

  7. oracle 28000错误解决方法

    ORA-28000: the account is locked-的解决办法 ORA-28000: the account is locked 第一步:使用PL/SQL,登录名为system,数据库名 ...

  8. js设计模式(三)---代理模式

    代理模式: 代理模式是为一个对象提供一个代理用品或占位符,以便控制对他的访问. 实现: 在 Web开发中,图片预加载是一种常用的技术,如果直接给某个 img 标签节点设置 src 属性,由于图片过大或 ...

  9. PrimeNG之DataTable

    --数据表显示在表格格式数据. Basic Import import {DataTableModule,SharedModule} from 'primeng/primeng'; source &l ...

  10. 指数型生成函数(EGF)学习笔记

    之前,我们学习过如何使用生成函数来做一些组合问题(比如背包问题),但是它面对排列问题(有标号)的时候就束手无策了. 究其原因,是因为排列问题的递推式有一些系数(这个待会就知道了),所以我们可以修改一下 ...