博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
人工智能 1. 语音合成,语音识别,相似度,图灵机器人,智能对话
阅读量:4542 次
发布时间:2019-06-08

本文共 9314 字,大约阅读时间需要 31 分钟。

目录

  • 一.准备工作(基于百度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 AipSpeechimport 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 osfrom 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 osfrom 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 osfrom 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.创建机器人

  

 

 

 

 

   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 requestsdata = {    "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 osfrom 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 文件中

    
我是玩具

③调用文件  app.py

import osfrom flask import Flask,render_template,jsonify,request,send_filefrom uuid import uuid4# from flask_cors import CORSfrom FAQ import audio2text, client_nlp, text2audio, goto_tlapp = 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/
")def getaudio(filename): return send_file(filename)if __name__ == '__main__': app.run("127.0.0.1",9527,debug=True)

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

import osfrom uuid import uuid4from 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 filenamedef 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

你可能感兴趣的文章
myBatis应用
查看>>
RuntimeError: DataLoader worker (pid 18255) is killed by signal: Killed.
查看>>
[PHP] 用AppServ一步到位安装PHP服务器
查看>>
mac brew install redis 报错
查看>>
Work? working!
查看>>
开源收藏
查看>>
scipy插值interpolation
查看>>
C# BackgroundWorker
查看>>
移动对meta的定义
查看>>
leetcode 76. Minimum Window Substring
查看>>
如何用Eclipse打jar包
查看>>
学习是一种投资
查看>>
banking
查看>>
Android笔记(十七) Android中的Service
查看>>
第一次作业总结
查看>>
2013年11月15日
查看>>
Android5.0Demo
查看>>
c++ UDP套接字客服端代码示范
查看>>
python中的关键字---1(基础数据类)
查看>>
《windows程序设计》文本输出(03)
查看>>