• 智能聊天骚操作


    准备阶段:

    1.FFmpeg:  #J将音频格式转化为pcm格式
    
    链接:https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg
    
    密码:w6hk

    2.baidu-aip:

    
    

    pip install baidu-aip

    3.图灵机器人

    http://www.tuling123.com/

    终于进入主题了,此篇是人工智能应用的重点,只用现成的技术不做底层算法,也是让初级程序员快速进入人工智能行业的捷径

    目前市面上主流的AI技术提供公司有很多,比如百度,阿里,腾讯,主做语音的科大讯飞,做只能问答的图灵机器人等等

    这些公司投入了很大一部分财力物力人力将底层封装,提供应用接口给我们,尤其是百度,完全免费的接口

    既然百度这么仗义,咱们就不要浪费掉怎么好的资源,从百度AI入手,开启人工智能之旅

    开启人工智能技术的大门 : http://ai.baidu.com/

    看看我大百度的AI大法,这些技术全部都是封装好的接口,看着就爽

    接下来咱们就一步一步的操作一下

    首先进入控制台,注册一个百度的账号(百度账号通用)

    开通一下我们百度AI开放平台的授权

    然后找到已开通服务中的百度语音

    走到这里,想必已经知道咱们要从语音入手了,语音识别和语音合成

    打开百度语音,进入语音应用管理界面,创建一个新的应用 

    创建语音应用App

    就可以创建应用了,回到应用列表我们可以看到已创建的应用了

    这里面有三个值 AppID , API Key , Secret Key 记住可以从这里面看到 , 在之后的学习中我们会用到

    好了 百度语音的应用已经创建完成了 接下来 我会用Python 代码作为实例进行应用及讲解

    一.安装百度的人工智能SDK:

    首先咱们要 pip install baidu-aip 安装一个百度人工智能开放平台的Python SDK实在是太方便了,这也是为什么我们选择百度人工智能的最大原因

    安装完成之后就来测试一下:

    在工程目录下,就可以看到 s1.mp3 这个文件了,来听一听

    上面咱们测试了一个语音合成的例子,那么就从语音合成开始入手

    2.语音合成:

    技术上,代码上任何的疑惑,都可以从官方文档中得到答案

    baidu-aip Python SDK 语音合成技术文档 : https://ai.baidu.com/docs#/TTS-Online-Python-SDK/top

    刚才我们做了一个语音合成的例子,就用这个例子来展开说明

    先来看第一段代码

    这是与百度进行一次加密校验 , 认证你是合法用户 合法的应用

    AipSpeech 是百度语音的客户端 认证成功之后,客户端将被开启,这里的client 就是已经开启的百度语音的客户端了

    再来看第二段代码:

    用百度语音客户端中的synthesis方法,并提供相关参数

    成功可以得到音频文件,失败则返回一段错误信息

    重点看一下 synthesis 这个方法 , 从 https://ai.baidu.com/docs#/TTS-Online-Python-SDK/top 来获得答案吧

    从参数入手分析:

    按照这些参数,从新发起一个语音合成

    这次声音是不是与一点点萝莉了呢?

    这都是语音语调的作用 0 - 9 其实就是 御姐音 - 萝莉音

    这就是人工智能中的语音合成技术,调用百度的SDK,只用了5分钟,完成了1年的开发量,哈哈哈哈

    3.语音识别:

    哎,每次到这里,我都默默无语泪两行,声音这个东西格式太多样化了,如果要想让百度的SDK识别咱们的音频文件,就要想办法转变成百度SDK可以识别的格式PCM

    目前DragonFire已知可以实现自动化转换格式并且屡试不爽的工具 : FFmpeg 这个工具的下载地址是 : 链接:https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg 密码:w6hk

    FFmpeg 环境变量配置:

    首先你要解压缩,然后找到bin目录,我的目录是 C:ffmpegin

    然后 以 windows 10 为例,配置环境变量

    如果没搞明白的话,我也没有办法了,这么清晰这么明白

    尝试一下,是否配置成功

    看到这个界面就算配置成功了,配置成功有什么用呢, 这个工具可以将wav wma mp3 等音频文件转换为 pcm 无压缩音频文件

    做一个测试,首先要打开windows的录音机,录制一段音频(说普通话)

    现在假设录制的音频文件的名字为 audio.wav 放置在 D:DragonFireAudio

    然后我们用命令行对这个 audio.wav 进行pcm格式的转换然后得到 audio.pcm

    命令是 : ffmpeg -y  -i audio.wav  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 audio.pcm

    然后打开目录就可以看到pcm文件了

    pcm文件已经得到了,赶紧进入正题吧

    百度语音识别SDK的应用:

    前提是你的audio.pcm 要与你当前的文件在同一个目录,还是分段看一下代码

    读取文件的内容,file_context 是 audio.pcm 文件打开的二进制流

    asr函数需要四个参数,第四个参数可以忽略,自有默认值,参照一下这些参数是做什么的

    第一个参数: speech 音频文件流 建立包含语音内容的Buffer对象, 语音文件的格式,pcm 或者 wav 或者 amr。(虽说支持这么多格式,但是只有pcm的支持是最好的)

    第二个参数: format 文件的格式,包括pcm(不压缩)、wav、amr (虽说支持这么多格式,但是只有pcm的支持是最好的)

    第三个参数: rate 音频文件采样率 如果使用刚刚的FFmpeg的命令转换的,你的pcm文件就是16000

    第四个参数: dev_pid 音频文件语言id 默认1537(普通话 输入法模型)

    再来看下一段代码,打印返回结果:

    成功的dict中 result 就是我们要的识别文本

    失败的dict中 err_no 就是我们要的错误编码,错误编码代表什么呢?

    如果err_no不是0的话,就参照一下错误码表

    4.图灵机器人

      1.注册完成之后,创建图灵机器人

      2.创建机器人

      3.根据个人的爱好,配置机器人

      4.看文档,开始操作啦

          

    利用flask来实现智能聊天工具

    视图代码:

    from flask import Flask,render_template,request,jsonify,send_file
    from uuid import uuid4
    import s3
    app = Flask(__name__)
    
    @app.route("/")
    def index():
        return render_template("index.html")
    
    @app.route("/ai",methods=["POST"])
    def ai():
        audio = request.files.get("record")
        filename = f"{uuid4()}.wav"
        audio.save(filename)
    
        q_text = s3.audio2text(filename)
    
        a_text = s3.to_tuling(q_text)
    
        a_file = s3.text2audio(a_text)
    
        return jsonify({"filename":a_file})
    
    @app.route("/get_audio/<filename>")
    def get_audio(filename):
        return send_file(filename)
    
    if __name__ == '__main__':
        app.run("0.0.0.0",9527,debug=True)
    视图代码

    封装的方法:s3.py

    from aip import AipSpeech,AipNlp
    import time
    import os
    """ 你的 APPID AK SK """
    APP_ID = '15425824'
    API_KEY = 'RehZ5e87dXwhaXZFLGGc3kuK'
    SECRET_KEY = 'xSrsYgF3GFaMvAGsq1YBeTzfP7gTULQ8 '
    
    nlp =  AipNlp(APP_ID, API_KEY, SECRET_KEY)
    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    
    # 读取文件
    #经录音格式转换为pcm格式
    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,
        })
        print(res.get("result")[0])
        return res.get("result")[0]
    
    
    def text2audio(text):
        filename = f"{time.time()}.mp3"
        result = client.synthesis(text, 'zh', 1, {
            'vol': 5,
            'per': 4,
        })
    
        # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
        if not isinstance(result, dict):
            with open(filename, 'wb') as f:
                f.write(result)
    
        return filename
    
    
    def to_tuling(text):
        import requests
        args = {
            "reqType": 0,
            "perception": {
                "inputText": {
                    "text": text
                },
            },
            "userInfo": {
                "apiKey": "eaccea98ef1a4fd2bc5e0cff6d0972c7",
                "userId": "111"
            }
        }
        url = "http://openapi.tuling123.com/openapi/api/v2"
        res = requests.post(url, json=args)
        text = res.json().get("results")[0].get("values").get("text")
        return text
    封装的方法

     前端代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <audio controls autoplay id="player"></audio>
    <p>
        <button onclick="start_reco()" style="background-color: yellow">录制语音指令</button>
    </p>
    <p>
        <button onclick="stop_reco_audio()" style="background-color: blue">发送语音指令</button>
    </p>
    </body>
    <!--<script type="application/javascript" src="/static/Recorder.js"></script>-->
    <script type="application/javascript" src="https://cdn.bootcss.com/recorderjs/0.1.0/recorder.js"></script>
    <script type="text/javascript" src="/static/jQuery3.1.1.js"></script>
    
    <script type="text/javascript">
        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_audio() {
            reco.stop();
            send_audio();
            reco.clear();
        }
    
    
        function send_audio() {
            reco.exportWAV(function (wav_file) {
                var formdata = new FormData();
                formdata.append("record", wav_file);
                console.log(formdata);
                $.ajax({
                    url: "http://192.168.13.32:9527/ai",
                    type: 'post',
                    processData: false,
                    contentType: false,
                    data: formdata,
                    dataType: 'json',
                    success: function (data) {
                        document.getElementById("player").src ="http://192.168.13.32:9527/get_audio/" + data.filename
                    }
                });
    
            })
        }
    
    
    
    </script>
    </html>
    前端代码

     大功告成!

  • 相关阅读:
    samtools获取uniq reads
    NSDate的比较
    UIViewAlertForUnsatisfiableConstraints布局问题
    如何将网页保存为pdf
    使用Carthage管理iOS依赖库
    输出格式
    解决问题思路
    重:将好用的控件,上次github,
    解决CocoaPods慢的小技巧
    swift开发笔记28 CoreML
  • 原文地址:https://www.cnblogs.com/wqzn/p/10274633.html
Copyright © 2020-2023  润新知