| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | # -*- 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 divisionfrom ..__load__ import *from .base import Base# 需要百度SDKfrom aip import AipSpeechclass 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)
 |