# -*- coding: utf-8 -*- """ 百度的语音识别API. dev_pid: - 1936: 普通话远场 - 1536:普通话(支持简单的英文识别) - 1537:普通话(纯中文识别) - 1737:英语 - 1637:粤语 - 1837:四川话 要使用本模块, 首先到 yuyin.baidu.com 注册一个开发者账号, 之后创建一个新应用, 然后在应用管理的"查看key"中获得 API Key 和 Secret Key 填入 config.xml 中. ... baidu_yuyin: appid: '9670645' api_key: 'qg4haN8b2bGvFtCbBGqhrmZy' secret_key: '585d4eccb50d306c401d7df138bb02e7' ... """ from __future__ import division from ..__load__ import * from .base import Base # 需要百度SDK from aip import AipSpeech class Baidu(Base): def __init__(self): super(self.__class__, self).__init__(True) def setting(self, appid, api_key, secret_key, dev_pid=1936, voice=2, per=1, lan='zh', **args): self.engine = AipSpeech(appid, api_key, secret_key) self.dev_pid = dev_pid self.per = per self.lan = lan self.voice = voice def asr(self, fp): pcm = getPcmFromWav(fp) res = self.engine.asr(pcm, 'pcm', 16000, { 'dev_pid': self.dev_pid, }) if res['err_no'] == 0: res['result'] = ''.join(res['result']) return self.arrLog(1, res['result']) else: res['err_msg'] = ''.join(res['err_msg']) return self.arrLog(2, res['err_msg']) def tts(self, phrase): result = self.engine.synthesis(phrase, self.lan, self.voice, { 'vol': 5, 'spd': 3, 'pit': 8, 'per': self.per }); # 识别正确返回语音二进制 错误则返回dict 参照下面错误码 if not isinstance(result, dict): tmpfile = writeTempFile(result, '.mp3') return self.ttsLog(1, tmpfile) else: return self.ttsLog(2, '') #使用百度 UNIT 进行 NLU 解析 def nlu(self, query, service_id): return self.sdk.getUnit(query, service_id, self.api_key, self.secret_key) """ 提取意图 :param parsed: 解析结果 :return: 意图数组 """ def getIntent(self, parsed): return self.sdk.getIntent(parsed) """ 判断是否包含某个意图 :param parsed: UNIT 解析结果 :param intent: 意图的名称 :return: True: 包含; False: 不包含 """ def hasIntent(self, parsed, intent): return self.sdk.hasIntent(parsed, intent) """ 提取某个意图的所有词槽 :param parsed: UNIT 解析结果 :param intent: 意图的名称 :return: 词槽列表。你可以通过 name 属性筛选词槽, 再通过 normalized_word 属性取出相应的值 """ def getSlots(self, parsed, intent): return self.sdk.getSlots(parsed, intent) """ 找出命中某个词槽的内容 :param parsed: UNIT 解析结果 :param intent: 意图的名称 :param name: 词槽名 :return: 命中该词槽的值的列表。 """ def getSlotWords(self, parsed, intent, name): return self.sdk.getSlotWords(parsed, intent, name) """ 提取 UNIT 的回复文本 :param parsed: UNIT 解析结果 :param intent: 意图的名称 :return: UNIT 的回复文本 """ def getSay(self, parsed, intent): return self.sdk.getSay(parsed, intent)