speech.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. # -*- coding: utf-8 -*-
  2. """
  3. Speech
  4. """
  5. from .base import AipBase
  6. from .base import base64
  7. from .base import hashlib
  8. from .base import json
  9. class AipSpeech(AipBase):
  10. """
  11. Aip Speech
  12. """
  13. __asrUrl = 'http://vop.baidu.com/server_api'
  14. __ttsUrl = 'http://tsn.baidu.com/text2audio'
  15. def _isPermission(self, authObj):
  16. """
  17. check whether permission
  18. """
  19. return True
  20. def _proccessRequest(self, url, params, data, headers):
  21. """
  22. 参数处理
  23. """
  24. token = params.get('access_token', '')
  25. if not data.get('cuid', ''):
  26. data['cuid'] = hashlib.md5(token.encode()).hexdigest()
  27. if url == self.__asrUrl:
  28. data['token'] = token
  29. data = json.dumps(data)
  30. else:
  31. data['tok'] = token
  32. if 'access_token' in params:
  33. del params['access_token']
  34. return data
  35. def _proccessResult(self, content):
  36. """
  37. formate result
  38. """
  39. try:
  40. return super(AipSpeech, self)._proccessResult(content)
  41. except Exception as e:
  42. return {
  43. '__json_decode_error': content,
  44. }
  45. def asr(self, speech=None, format='pcm', rate=16000, options=None):
  46. """
  47. 语音识别
  48. """
  49. data = {}
  50. if speech:
  51. data['speech'] = base64.b64encode(speech).decode()
  52. data['len'] = len(speech)
  53. data['channel'] = 1
  54. data['format'] = format
  55. data['rate'] = rate
  56. data = dict(data, **(options or {}))
  57. return self._request(self.__asrUrl, data)
  58. def synthesis(self, text, lang='zh', ctp=1, options=None):
  59. """
  60. 语音合成
  61. """
  62. data ={}
  63. data['tex'] = text
  64. data['lan'] = lang
  65. data['ctp'] = ctp
  66. data = dict(data, **(options or {}))
  67. result = self._request(self.__ttsUrl, data)
  68. if '__json_decode_error' in result:
  69. return result['__json_decode_error']
  70. return result