首页 > Web开发 > 详细

firefox 实现web交互机器人

时间:2019-03-26 21:22:28      阅读:200      评论:0      收藏:0      [点我收藏+]

现在仅有火狐浏览器可以这样操作 -- 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 = 15845079
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(fffmpeg -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": "123"
        }
    }
    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, 007)
    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交互机器人

原文:https://www.cnblogs.com/zhangchen-sx/p/10603476.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!