人工智能 1. 语音合成,语音识别,相似度,图灵机器人,智能对话

目录

  • 一.准备工作(基于百度ai)
  • 二.语音合成
  • 三.语音识别
  • 四.相似度
  • 五.图灵机器人
  • 六. 识别+合成+图灵
  • 七.智能对话

一.准备工作(基于百度ai)

  1.创建应用

  2.用python时,下载模块  baidu-aip

二.语音合成

  将 文本 转换成 音频

  1.基本框架

from aip import AipSpeech

""" 你的 APPID AK SK """    # 接口信息
APP_ID = ‘16027159‘
API_KEY = ‘AZoiGc2udGqk9psiylinOZrU‘
SECRET_KEY = ‘9pa87qO9kkLiCxFjp2vCp9MRvM5LUPgV‘

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

result  = client.synthesis(‘人的一切痛苦,本质都是对自己无能的愤怒‘, ‘zh‘, 1, {
    ‘vol‘: 8,
    "spd": 4,
    "pit": 6,
    "per": 3
})

# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
    with open(‘auido.mp3‘, ‘wb‘) as f:    # 将合成数据放入 auido.mp3 文件中
        f.write(result)

 2.参数

  3.错误时

三.语音识别

  将音频  转换成  文本

  1.基本框架

from aip import AipSpeech

import os
""" 你的 APPID AK SK """
APP_ID = ‘16027159‘
API_KEY = ‘AZoiGc2udGqk9psiylinOZrU‘
SECRET_KEY = ‘9pa87qO9kkLiCxFjp2vCp9MRvM5LUPgV‘

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

# 读取文件
def get_file_content(filePath):
    with open(filePath, ‘rb‘) as fp:
        return fp.read()

# 识别本地文件
res = client.asr(get_file_content(‘name.pcm‘), ‘pcm‘, 16000, {
    ‘dev_pid‘: 1536,
})

print(res.get("result")[0])

 2.需要转换格式时

  ①安装ffmpeg

  ②配置环境变量

  ③基本结构

import os

from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = ‘16027154‘
API_KEY = ‘5a8u0aLf2SxRGRMX3jbZ2VH0‘
SECRET_KEY = ‘UAaqS13z6DjD9Qbjd065dAh0HjbqPrzV‘

client = AipSpeech(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()

res = client.asr(get_file_content(‘name.wav‘), ‘pcm‘, 16000, {    #pcm格式进行识别率高
    ‘dev_pid‘: 1536,
})

print(res.get("result")[0])

3.先识别,再合成

import os

from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = ‘16027159‘

API_KEY = ‘AZoiGc2udGqk9psiylinOZrU‘
SECRET_KEY = ‘9pa87qO9kkLiCxFjp2vCp9MRvM5LUPgV‘

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

def text2audio(text):        #⑥
    result  = client.synthesis(text, ‘zh‘, 1, {
        ‘vol‘: 8,
        "spd": 4,
        "pit": 6,
        "per": 3
    })

    # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
    if not isinstance(result, dict):
        with open(‘auido.mp3‘, ‘wb‘) as f:
            f.write(result)

    return "auido.mp3"

def audio2text(filepath):        #②
    res = client.asr(get_file_content(‘name.wav‘), ‘pcm‘, 16000, {
        ‘dev_pid‘: 1536,
    })

    return res.get("result")[0]

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()

text= audio2text(‘name.wav‘)          # ①

if text == "你叫什么":            #④
    filname = text2audio("我的名字是张三")    #⑤
    os.system(filname)      #⑦

四.相似度

import os

from aip import AipSpeech,AipNlp    #导入模块

""" 你的 APPID AK SK """
APP_ID = ‘16027159‘

API_KEY = ‘AZoiGc2udGqk9psiylinOZrU‘
SECRET_KEY = ‘9pa87qO9kkLiCxFjp2vCp9MRvM5LUPgV‘

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
client_nlp = AipNlp(APP_ID, API_KEY, SECRET_KEY)  #定义新对象

def text2audio(text):
    result  = client.synthesis(text, ‘zh‘, 1, {
        ‘vol‘: 8,
        "spd": 4,
        "pit": 6,
        "per": 3
    })

    # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
    if not isinstance(result, dict):
        with open(‘auido.mp3‘, ‘wb‘) as f:
            f.write(result)

    return "auido.mp3"

def audio2text(filepath):
    res = client.asr(get_file_content(‘name.wav‘), ‘pcm‘, 16000, {
        ‘dev_pid‘: 1536,
    })

    return res.get("result")[0]

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()

text= audio2text(‘name.wav‘)
score = client_nlp.simnet("你的名字是什么",text).get(‘score‘)   # 比较俩个对象,获取相似度
print(score)
if score >= 0.58:        #  0.58  是分界线(是不是一个意思)
    filname = text2audio("我的名字是张三")
    os.system(filname)

else:
    print(‘结束‘)

五.图灵机器人

  1.创建机器人

  http://www.turingapi.com/

  2.请求示例

{
    "reqType":0,
    "perception": {
        "inputText": {
            "text": "附近的酒店"
        },
        "inputImage": {
            "url": "imageUrl"
        },
        "selfInfo": {
            "location": {
                "city": "北京",
                "province": "北京",
                "street": "信息路"
            }
        }
    },
    "userInfo": {
        "apiKey": "",
        "userId": ""
    }
}

 3.参数说明

①必填

②至少有一个

③  可不写

④ 必填

  4.示例

URL = "http://openapi.tuling123.com/openapi/api/v2"
import requests

data = {
    "perception": {
        "inputText": {
            "text": "你叫什么"
        }
    },
    "userInfo": {
        "apiKey": "2acbb36ddfcc41b5ae0deb65428eea84",
        "userId": "123"
    }
}

res = requests.post("http://openapi.tuling123.com/openapi/api/v2",json=data)

# print(res.content)
# print(res.text)
print(res.json())

六. 识别+合成+图灵

import os

from aip import AipSpeech,AipNlp

""" 你的 APPID AK SK """
APP_ID = ‘16027159‘

API_KEY = ‘AZoiGc2udGqk9psiylinOZrU‘
SECRET_KEY = ‘9pa87qO9kkLiCxFjp2vCp9MRvM5LUPgV‘

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
client_nlp = AipNlp(APP_ID, API_KEY, SECRET_KEY)

def text2audio(text):
    result  = client.synthesis(text, ‘zh‘, 1, {
        ‘vol‘: 8,
        "spd": 4,
        "pit": 6,
        "per": 3
    })

    # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
    if not isinstance(result, dict):
        with open(‘auido.mp3‘, ‘wb‘) as f:
            f.write(result)

    return "auido.mp3"

def audio2text(filepath):
    res = client.asr(get_file_content(‘name.wav‘), ‘pcm‘, 16000, {
        ‘dev_pid‘: 1536,
    })

    return res.get("result")[0]

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 goto_tl(text,uid):
    URL = "http://openapi.tuling123.com/openapi/api/v2"
    import requests
    data = {
        "perception": {
            "inputText": {
                "text": "天气怎样"
            }
        },
        "userInfo": {
            "apiKey": "2acbb36ddfcc41b5ae0deb65428eea84",
            "userId": "123"
        }
    }

    data["perception"]["inputText"]["text"] = text    # 替换请求信息
    data["userInfo"]["userId"] = uid      # 替换标识
    res = requests.post(URL, json=data)

    # print(res.content)
    # print(res.text)
    print(res.json())
    return res.json().get("results")[0].get("values").get("text")

text= audio2text(‘name.wav‘)
score = client_nlp.simnet("今天天气怎样",text).get(‘score‘)
print(score)
if score >= 0.58:
    filname = text2audio("我的名字是张三")
    os.system(filname)

answer = goto_tl(text,"qiaoxiaoqiang")  # 相似度小于0.58 时走图灵机器人
filename = text2audio(answer)
os.system(filename)

七.智能对话

  ①导入三个文件

  ② webtoy.html 文件中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是玩具</title>
</head>
<body>
<audio controls id="player" autoplay></audio>
<p></p>
<button onclick="start_reco()">录音</button>
<button onclick="stop_reco()">发送录音</button>

</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://127.0.0.1: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) { // audio 麦克风和扬声器
        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); // Blob 对象
            var formdata = new FormData(); // form 表单 {key:value}
            formdata.append("reco",wav_file); // form - input type="file" name="reco"
            formdata.append("username","Alexander.DSB.Li");
            // form input type="text / password 编辑框" name="username" value = "Alexander.DSB.Li"
            $.ajax({
            url: serv + "/uploader",
            type: ‘post‘,
            processData: false,
            contentType: false,
            data: formdata,
            dataType: ‘json‘,
            success: function (data) {
                console.log(data);
                document.getElementById("player").src = serv + "/getaudio/" +data.filename;
            }
            })
        });//异步

        reco.clear();
    }

</script>
</html>

③调用文件  app.py

import os

from flask import Flask,render_template,jsonify,request,send_file
from uuid import uuid4
# from flask_cors import CORS
from FAQ import audio2text, client_nlp, text2audio, goto_tl

app = Flask(__name__)
# CORS(app)

@app.route("/")
def webtoy():
    return render_template("WebToy.html")

@app.route("/uploader",methods=["POST","GET"])
def uploader():
    filename = f"{uuid4()}.wav"
    file = request.files.get("reco")
    file.save(filename)

    text = audio2text(filename)
    # 自然语言处理 LowB
    score = client_nlp.simnet("你叫什么名字", text).get("score")
    print(score)
    if score >= 0.75:
        filename = text2audio("我的名字叫银角大王八")
    else:
        answer = goto_tl(text, "qiaoxiaoqiang")
        filename = text2audio(answer)

    return jsonify({"code":0,"msg":"文件上传成功","filename":filename})

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

if __name__ == ‘__main__‘:
    app.run("127.0.0.1",9527,debug=True)

④ 调用文件用到的函数存在 FAQ.py文件中

import os
from uuid import uuid4

from aip import AipSpeech,AipNlp

""" 你的 APPID AK SK """
APP_ID = ‘16027154‘
API_KEY = ‘5a8u0aLf2SxRGRMX3jbZ2VH0‘
SECRET_KEY = ‘UAaqS13z6DjD9Qbjd065dAh0HjbqPrzV‘

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
client_nlp = AipNlp(APP_ID, API_KEY, SECRET_KEY)

# res = client_nlp.simnet("你叫什么名字","你的名字是什么")
# print(res)

def text2audio(text):
    filename = f"{uuid4()}.mp3"
    result = client.synthesis(text, ‘zh‘, 1, {
        "spd": 4,
        ‘vol‘: 5,
        "pit": 8,
        "per": 4
    })
    # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
    if not isinstance(result, dict):
        with open(filename, ‘wb‘) as f:
            f.write(result)

    return filename

def audio2text(filepath):
    res = client.asr(get_file_content(filepath), ‘pcm‘, 16000, {
        ‘dev_pid‘: 1536,
    })
    print(res)
    return res.get("result")[0]

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 goto_tl(text,uid):
    URL = "http://openapi.tuling123.com/openapi/api/v2"
    import requests
    data = {
        "perception": {
            "inputText": {
                "text": "你叫什么名字"
            }
        },
        "userInfo": {
            "apiKey": "be41cf8596a24aec95b0e86be895cfa9",
            "userId": "123"
        }
    }

    data["perception"]["inputText"]["text"] = text
    data["userInfo"]["userId"] = uid
    res = requests.post(URL, json=data)

    # print(res.content)
    # print(res.text)
    print(res.json())
    return res.json().get("results")[0].get("values").get("text")

原文地址:https://www.cnblogs.com/lw1095950124/p/10986658.html

时间: 2024-10-01 21:43:14

人工智能 1. 语音合成,语音识别,相似度,图灵机器人,智能对话的相关文章

人工智能初体验(一):使用图灵机器人智能获取问题回答

前言:目前只写了一个简单的Demo,图形界面还未写 一 简单介绍以及apikey获取 就我个人而言,目前有两个API是比较不错的,一个是百度的接口,另一个是图灵机器人(http://www.tuling123.com/)的接口.前者调用简单,而且没有使用次数限制(PS:据说还是有限制?):后者需要进行一系列身份认证,而且每天次数限制是5000(PS:貌似可以免费增加次数),但是它的优势是可以进行个性化设置,这点比较好. 在这里为了方便演示,我使用百度的接口进行测试,申请地址是:http://ap

图灵机器人来了,你准备好了吗?

无论是打开微信朋友圈还是科技新闻,但凡是“人工智能”相关动态总能毫无悬念的独占行业老大位置,默认的头版头条永远属于它,它的出现也总能成为大家评头论足的对象.大家凑热闹的同时更多的则是观望态度,以一种拭目以待的目光期待更好的智能产品出现.暂且不说当前市场上的智能产品好坏本身亦或只是一个噱头出现在大众面前,但市场趋势的大背景下已经很好的推动着整个行业的发展.2015年势必会上演一场智能大战,还是那句话:让我们拭目以待吧!       众观历史,一次变革甚至是一项新技术的出现必将引领整个社会的发展,从

Python “图灵机器人”对话交互

1.创建图灵机器人账户 注册图灵机器人账号并创建一个机器人服务: http://www.tuling123.com/ 2.添加微信授权公众号,微信扫描生成的二维码: 3.微信关注图灵机器人公众号: 根据提供的API接入的apikey,就可以通过Python来关联微信与图灵机器人, 进行人机交互了: 4.完成下面程序,并执行再扫码登录微信,此时你的微信就可以自动回复所有消息: demo1:图灵机器人,自动回复所有微信好友和群消息 注:wxpy一个根据网页版微信的接口封装的库,如果没有库,可直接pi

图灵机器人:到基层去,做人工智能的开放平台

你有多久没和小冰聊天了? 这个由微软在今年端午节时所推出的"16岁萌妹子"曾在刚开始受到了相当多的关注,无论是迅速入驻各微信聊天群,还是后来在新浪微博等平台的复活,这个背着"聊天"外壳的虚拟机器人更多地被人看做是微软在人工智能领域的尝试.根据之前的媒体报道,小冰其实是微软Windows Phone 在推出 Cortana 语音助手(中文名小娜)之前的预热产品,和类似于苹果 Siri 女秘书形象的小娜不同,小冰扮演的是个没太多实际功用的角色,即在被调戏与调戏之间陪用户

【Python + Flask + Web录音 + baidu-aip + 图灵机器人 = 人机对话】 &#106514;

原文: http://blog.gqylpy.com/gqy/351 安装baidu-aip:pip install baidu-aip 百度云网址:https://login.bce.baidu.com 百度语音合成文档:https://ai.baidu.com/docs#/TTS-Online-Python-SDK/top 百度语音识别文档:https://ai.baidu.com/docs#/ASR-Online-Python-SDK/top 百度自然语言处理基础技术文档:https://

图灵机器人平台已超30000合作伙伴入驻

2014年11月7日,国内第一家智能机器人开放平台于3W咖啡馆正式对外发布,截止目前,图灵机器人开放平台吸引超30000名合作伙伴入驻,目前平均每日图灵机器人平台需响应请求量超100万次,已成为当前国内最大的智能机器人引擎服务平台. 注册开发者超30000,图灵机器人“高智能度”是主因 图灵机器人是由北京光年无限科技有限公司旗下的智能机器人引擎服务平台,而在正式对外发布图灵机器人之前,光年无限团队已深耕人工智能领域多年,并于2012年发布第一款人工智能产品虫洞语音助手,目前已有超4000万用户通

图灵机器人,web录音实现自动化交互问答

一.图灵机器人 介绍 图灵机器人是以语义技术为核心驱动的人工智能公司,致力于"让机器理解世界",产品服务包括机器人开放平台.机器人os和场景方案.\ 官方地址为: http://www.tuling123.com/ 使用 首先得注册一个账号,或者使用第3方登录,都可以. 登录之后,点击创建机器人 机器人名称,可以是自己定义的名字 选择网站->教育学习->其他 输入简介 创建成功之后,点击终端设置,拉到最后. 可以看到api接入,下面有一个apikey,待会会用到 右侧有一个

图灵机器人—让微信保持高活跃度的利器

微信公众号的核心是互动和粉丝活跃度,而非粉丝数量,那如何让微信号保持较高的活跃度呢?这个问题是一直以来都是众多微信开发者痛点! 很多开发者选择通过策划活动或者游戏的方式,这种方式在一定程度上很有效果.首先,微信提供了大量的接口,这给游戏或者活动开发提供了可能;其次,用户对于游戏或者活动的兴趣度远比其他推广方式要高很多;第三,游戏或者活动嵌入广告的方式很多且自然,不会因为太生硬的广告影响用户体验; 但是这种方式带有一定的风险,并且很难产生持续的效果.因为活动或者游戏开发需要大量资源的投入,并且不一

图灵机器人安卓SDK开始内测了!!

安卓开发的小伙伴们有福了,图灵机器人Android SDK于12月1日正式开启内测! 图灵机器人SDK Android 版(以下简称 TLClient)是运行在 Android 平台的一体化语音识别和语义理解解决方案,以 JAR 包 + 动态链接库的形式发布.基于该方案,开发者可以轻松的构建功能完备.交互性强的语音识别和语义理解应用程序.同时,该SDK支持用户单独使用语义理解引擎. http://bbs.tuling123.com/forum.php?mod=viewthread&tid=835