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

  1.创建应用

人工智能 01. 语音合成,语音识别,相似度,图灵机器人 随笔 第1张

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 

 人工智能 01. 语音合成,语音识别,相似度,图灵机器人 随笔 第2张

 

③ 

人工智能 01. 语音合成,语音识别,相似度,图灵机器人 随笔 第3张

 

人工智能 01. 语音合成,语音识别,相似度,图灵机器人 随笔 第4张

 

 

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

 人工智能 01. 语音合成,语音识别,相似度,图灵机器人 随笔 第5张

 

 

 二.语音合成

  将 文本 转换成 音频

   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.参数

 人工智能 01. 语音合成,语音识别,相似度,图灵机器人 随笔 第6张

 

  3.错误时

人工智能 01. 语音合成,语音识别,相似度,图灵机器人 随笔 第7张

 

 三.语音识别

  将音频  转换成  文本

  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

人工智能 01. 语音合成,语音识别,相似度,图灵机器人 随笔 第8张

 

  ②配置环境变量

人工智能 01. 语音合成,语音识别,相似度,图灵机器人 随笔 第9张

 

  ③基本结构

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/

人工智能 01. 语音合成,语音识别,相似度,图灵机器人 随笔 第10张

 

 

 人工智能 01. 语音合成,语音识别,相似度,图灵机器人 随笔 第11张

人工智能 01. 语音合成,语音识别,相似度,图灵机器人 随笔 第12张

 

   2.请求示例

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

 

   3.参数说明

①必填

人工智能 01. 语音合成,语音识别,相似度,图灵机器人 随笔 第13张

 

 ②至少有一个

人工智能 01. 语音合成,语音识别,相似度,图灵机器人 随笔 第14张

③  可不写

人工智能 01. 语音合成,语音识别,相似度,图灵机器人 随笔 第15张

 

④ 必填

人工智能 01. 语音合成,语音识别,相似度,图灵机器人 随笔 第16张

 

   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)

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄