人工智能 - 基于火狐浏览器的语音识别,语音自动回复

目录

  • 人工智能 - 基于火狐浏览器的语音识别,语音自动回复

    • 一. 需求工具
    • 二. 不废话,上代码
      • 1. index.HTML
      • 2. adiou.py(封装的 百度AI, 图灵机器人 函数)
      • 3. app.py(路由视图, 逻辑)****
      • 4. mongodb.py
      • 5. run.py(Flask启动)

人工智能 - 基于火狐浏览器的语音识别,语音自动回复

一. 需求工具

  1. 下载安装火狐浏览器

    因为火狐浏览器自带麦克风

  2. 安装Recorer.js

    一个易于使用的录音机,以Matt Diamond的 录音机为核心

    http://www.chengfeilong.com/recorderjs-info

  3. 百度AI
  4. 图灵机器人
  5. mongoDB(数据库) - pymongo

    可以选择其他数据库

  6. jQuery
  7. Flask框架

二. 不废话,上代码

1. index.HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是玩具</title>
</head>
<body>

<p><audio id="player" controls autoplay ></audio></p>
<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.206: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");
            // # <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.206:9527/get_file/"+data.filename;
                    document.getElementById("content").innerText = data.content;

                }
            }
            })
        });

        reco.clear();
    }

</script>
</html>

2. adiou.py(封装的 百度AI, 图灵机器人 函数)

from aip import AipSpeech
from aip import AipNlp
import os
from uuid import uuid4

""" 你的 APPID AK SK """
APP_ID = '15837844'
API_KEY = '411VNGbuZVbDNZU78LqTzfsV'
SECRET_KEY = '84AnwR2NARGMqnC6WFnzqQL9WWdWh5bW'

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 = {
        "perception": {
            "inputText": {
                "text": "北京"
            }
        },
        "userInfo": {
            "apiKey": "a4c4a668c9f94d0c928544f95a3c44fb",
            "userId": "123"
        }
    }
    data["perception"]["inputText"]["text"] = text
    data["userInfo"]["userId"] = uid
    res = requests.post("http://openapi.tuling123.com/openapi/api/v2", json=data)
    # print(res.content)
    res_json = res.json()

    text = res_json.get("results")[0].get("values").get("text")
    print(text)
    return text

def my_nlp(text):
    if nlp_client.simnet(text,"你叫什么名字").get("score") >= 0.75:
        A = "我叫银王八"
        return A

    if nlp_client.simnet(text,"你今年几岁了").get("score") >= 0.75:
        A = "我今年999岁了"
        return A

    A = to_tuling(text,"open123")
    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):
        # print(result)
        with open(filename, 'wb') as f:
            f.write(result)

    return filename

3. app.py(路由视图, 逻辑)****

    from flask import Flask, render_template, request, jsonify, send_file
    from uuid import uuid4
    from adiou import audio2text, text2audio, my_nlp
    from mongodb import MONGODB
    from flask_cors import CORS

    app = Flask(__name__)
    CORS(app,  resources={r"/*": {"origins": "*"}})
    CORS(app, supports_credentials=True)

    @app.route('/')
    def hello_world():
        print('////')
        return render_template("index.html")

    @app.route("/upload", methods=["POST"])
    def upload():
        print("111")
        fi = request.files.get("reco")
        print("2222", fi)
        fi_name = f"{uuid4()}.wav"
        print(fi_name, "3333")
        fi.save(fi_name)

        text = audio2text(fi_name)
        print(text, "text")
        text1 = {"kong": text}
        res1 = MONGODB.users.insert_one(text1)
        print(res1)

        new_text = my_nlp(text)
        print(new_text, "new_text")
        text2 = {"机器人": new_text}
        res2 = MONGODB.users.insert_one(text2)
        print(res2)

        filename = text2audio(new_text)
        print(filename, "filename")

        ret = {
            "filename":filename,
            "content":new_text,
            "code":0
        }

        return jsonify(ret)

    @app.route("/get_file/<filename>")
    def get_file(filename):
        return send_file(filename)

4. mongodb.py

from pymongo import MongoClient

conn = MongoClient("127.0.0.1", 27017)
MONGODB = conn["db3"]

5. run.py(Flask启动)

from app import app

if __name__ == '__main__':

    app.run("0.0.0.0", 9527, debug=True)

原文地址:https://www.cnblogs.com/konghui/p/10667235.html

时间: 2024-12-11 21:51:44

人工智能 - 基于火狐浏览器的语音识别,语音自动回复的相关文章

Web自动化测试环境搭建1(基于firefox火狐浏览器)

自动化测试是时代趋势,因此很多测试人员开始研究自动化测试,web自动化测试化测试并不难,但是很多人都是被挡在了环境搭建这一步,后面学习激情全无,这里,韬哥手把手教大家搭建火狐浏览器下的自动化测试环境(基于java). 为什么搭建自动化测试环境难呢,因为环境要求高,selenium版本,驱动文件版本,浏览器版本这中间有适配问题,如果没注意这些版本信息,就可能导致web自动化程序就跑不起来. 下面将为大家演示selenium 3.x下的火狐自动化自动化环境搭建: 1.准备selenium 3.5.1

教你使用火狐浏览器(Linux)保护隐私

基于这些目的选择浏览器的时候,火狐或许是你的最佳选择.谷歌 Chrome 不能信任.它是属于谷歌的,一个众所周知的数据收集公司,而且它是闭源的. Chromium 或许还可以,但并不能保证.只有火狐保持了一定程度的用户权利承诺. 火狐设置 火狐里有几个你能设定的设置,能更好地保护你的隐私.这些设置唾手可得,能帮你控制那些在你浏览的时候分享的数据. 健康报告 你首先可以设置的是对火狐健康报告发送的限制,以限制数据发送量.当然,这些数据只是被发送到 Mozilla,但这也是传输数据. 打开火狐的菜单

我是如何将Bandwagonhost VPS安装VNC实现远程链接打开FireFox火狐浏览器

我们选择和使用便宜VPS主机并不都是用来搭建网站WEB环境建站使用的,在很多时候我们可以将Linux系统安装模拟Windows桌面实现需要 在Windows系统中才能执行的任务项目.但是,由于Windows服务器较少而且成本高,所以我们会依托Linux VPS主机实现.看到不少的网友在群里讨论如何将Linux VPS安装远程桌面的技术,这里我考虑到可以安装VNC.部署Window系统. 一般而言,搭建VNC远程桌面链接还是比较简单的,如果是要直接安装Windows系统得需要服务器支持,至少是要K

Firefox火狐浏览器的高效使用

Firefox火狐浏览器的高效使用 在统一的地址栏搜索一切 页面操作菜单:书签.截图.保存或分享 同步 账户 跨平台的使用 附加组件 我用的组件 如何下载与安装 如何看使用说明书 油猴脚本的详细 tampermonkey 脚本的下载 我用的脚本 如何选用脚本 插件与脚本如何选择 如何判断脚本质量:使用人数与评价星级 扩展:拥抱开发者社区 如何看懂脚本文件 贡献自己的脚本 如何用自己的脚本赚钱 学习与探寻高效软件的秘诀 特别鸣谢:王顶老师 Firefox火狐浏览器的高效使用 注意:总体功能同样适用

小菜鸡deepin系统手动更新火狐浏览器

前言 Deepin 是个好系统,让我看到国产系统的希望,也让我看到Linux桌面化和大众化的可能(如果你想抬杠:Deepin只是Linux魔改没什么好显摆的.那--你开心就好 ^ _ ^ ).虽然有一些小瑕疵,但瑕不掩瑜,而且它还在不断进步,请给做事团队一点时间,相信它会越来越好!而且,传言华为已开始在中国大陆地区销售的MateBook 13,MateBook 14和MateBook X Pro笔记本中,预装运行Linux操作系统,选用的正是Deepin,这真是一个扬眉吐气.大快人心的好消息.

谷歌、火狐浏览器下实现JS跨域iframe高度自适应的完美解决方法,跨域调用JS不再是难题!

谷歌.火狐浏览器下实现JS跨域iframe高度自适应的解决方法 导读:今天开发的时候遇到个iframe自适应高度的问题,相信大家对这个不陌生,但是一般我们都是在同一个项目使用iframe嵌套页面,这个ifame高度自适应网上一搜一大把,今天要讲的如何在不同的网站下进行相互的调用跟在同一个网站下是一个效果:例如我在自己的项目里面Iframe  了第一博客的页面  http://www.diyibk.com/   当第一博客的页面高度变化了怎么通知父页面呢? 这个时候在谷歌下肯定是拿不到 ifram

centos火狐浏览器安装flash player

无论是360还是百度的云盘,都没有linux的客户端,只能使用网页版,而使用网页版文件上传时提示需要安装flash player. 优酷看视频也需要安装flash player,总之,现在网络应用,很多是采用的flash player. 直接安装或火狐搜索插件安装均未能安装成功.只能自己下载安装. 安装文件我的网盘有备份:http://yunpan.cn/QNhzXVYAEjJAR (提取码:4b85) 下载后解压文件(tar -zxvf  *.tar.gz) 解压后有一个.so文件,还有一个u

提问!同一ajax请求获取的图片路劲,在谷歌浏览器能正确展示图片,在火狐浏览器则显示路径undefined

今天的工作学习之路遇见一个奇葩的问题,作为初级攻城狮的小生实在不知如何解决,都已经壁咚度娘一整天了,都未能解决问题,实属无奈,一开始认为是浏览器兼容的问题,但左看右看,也不是,也尝试过是不是页面加载与请求后没对应上,发现也不是,检查返回的结果,居然是undefined,可是在谷歌浏览器没有任何问题能正常展示图片,在火狐浏览器却是这样,来,看图说话: 首先此<img>标签为js动态拼接页面,因为获取的是会员等级,通过请求接口在另一个系统后台抓取图片路径,此拼接在循环中,每循环一次存入便存入数组中

火狐浏览器Firefox上DownThemAll插件

DownThemAll插件支持断点续传.多线程下载,可以大幅度提高下载速度. 在Windows平台上,要下载大量的文件,迅雷自然是首选:但在非Windows平台上,只要安装一个火狐浏览器,再安装DownThemAll这个插件,就能提高下载速度,虽然在Mac上也有迅雷,在Linux上也有一些BT下载工具,但是发现效果并不好,所有向大家推荐DownThemAll这个插件,其适合所有的平台,在Windows上也大有用武之地,下面是使用这个插件的方法. 一.安装: 1.点击浏览器右侧“三横”图标,点击附