全部产品
云市场

Python SDK 2.0

更新时间:2019-10-11 14:17:21

提示:

下载安装

说明:

  • SDK仅支持Python3,版本要求为3.4及以上,暂不支持Python2。
  • 请确认已安装Python包管理工具setuptools,如果没有安装,请使用以下命令安装:
    1. pip install setuptools
  1. 下载 Python SDK链接
  2. 安装,在SDK目录执行以下命令:
    1. # 打包
    2. python setup.py bdist_egg
    3. # 安装
    4. python setup.py install

注意:以上的pippython命令是对应的Python3。

关键接口

  1. NlsClient:语音处理client,相当于所有语音相关处理类的factory,全局创建一个实例即可。线程安全。
  2. SpeechTranscriber:实时语音识别类,设置请求参数,发送请求及语音数据。非线程安全。
    • start方法:建立与服务端的连接。默认参数ping_interval表示自动发送ping命令的间隔,ping_timeout表示等待ping命令响应的pong消息的超时时间,需要满足ping_interval 大于 ping_timeout。
    • send方法:发送语音数据到服务端。
    • stop方法:结束识别并关闭与服务端的连接。
    • close方法:关闭与服务端的网络链接。
  3. SpeechTranscriberCallback:回调事件函数集合的类,语音结果、异常等回调的统一入口。
    • on_started方法:客户端与服务端建立连接成功的回调。
    • on_result_changed方法:客户端接收到中间识别结果的回调。
    • on_sentence_begin方法:客户端接收到一句话开始的回调。
    • on_sentence_end方法:客户端接收到一句话结束的回调。
    • on_completed方法:客户端接收到识别结束的回调。
    • on_task_failed方法:客户端接收到异常错误的回调。
    • on_channel_closed方法:客户端接收到断开网络链接成功的回调。

SDK调用注意事项

  1. NlsClient对象创建一次可以重复使用。
  2. SpeechTranscriber对象不能重复使用,一个识别任务对应一个SpeechTranscriber对象。例如有N个音频文件,则要进行N次识别任务,创建N个SpeechTranscriber对象。
  3. 实现的SpeechTranscriberCallback对象和SpeechTranscriber对象是一一对应的,不能将一个实现的SpeechTranscriberCallback对象设置到多个SpeechTranscriber对象中,否则不能区分是哪个识别任务。

示例代码

说明1: Demo中使用的音频文件为16000Hz采样率,请在控制台中将appkey对应项目的模型设置为通用模型,以获取正确的识别结果;如果使用其他音频,请设置为支持该音频场景的模型,模型设置请阅读管理项目一节。

nls-sample-16k.wav

说明2: Demo中使用了SDK内置的默认一句话识别服务的外网访问URL,如果您使用上海阿里云ECS并想使用内网访问URL,则在创建NlsClient对象时,设置内网访问的URL:

  1. transcriber = client.create_transcriber(callback, "ws://nls-gateway.cn-shanghai-internal.aliyuncs.com/ws/v1")

示例:

  1. # -*- coding: utf-8 -*-
  2. import os
  3. import time
  4. import threading
  5. import ali_speech
  6. from ali_speech.callbacks import SpeechTranscriberCallback
  7. from ali_speech.constant import ASRFormat
  8. from ali_speech.constant import ASRSampleRate
  9. class MyCallback(SpeechTranscriberCallback):
  10. """
  11. 构造函数的参数没有要求,可根据需要设置添加
  12. 示例中的name参数可作为待识别的音频文件名,用于在多线程中进行区分
  13. """
  14. def __init__(self, name='default'):
  15. self._name = name
  16. def on_started(self, message):
  17. print('MyCallback.OnRecognitionStarted: %s' % message)
  18. def on_result_changed(self, message):
  19. print('MyCallback.OnRecognitionResultChanged: file: %s, task_id: %s, result: %s' % (
  20. self._name, message['header']['task_id'], message['payload']['result']))
  21. def on_sentence_begin(self, message):
  22. print('MyCallback.on_sentence_begin: file: %s, task_id: %s, sentence_id: %s, time: %s' % (
  23. self._name, message['header']['task_id'], message['payload']['index'], message['payload']['time']))
  24. def on_sentence_end(self, message):
  25. print('MyCallback.on_sentence_end: file: %s, task_id: %s, sentence_id: %s, time: %s, result: %s' % (
  26. self._name,
  27. message['header']['task_id'], message['payload']['index'],
  28. message['payload']['time'], message['payload']['result']))
  29. def on_completed(self, message):
  30. print('MyCallback.OnRecognitionCompleted: %s' % message)
  31. def on_task_failed(self, message):
  32. print('MyCallback.OnRecognitionTaskFailed-task_id:%s, status_text:%s' % (
  33. message['header']['task_id'], message['header']['status_text']))
  34. def on_channel_closed(self):
  35. print('MyCallback.OnRecognitionChannelClosed')
  36. def process(client, appkey, token):
  37. audio_name = 'nls-sample-16k.wav'
  38. callback = MyCallback(audio_name)
  39. transcriber = client.create_transcriber(callback)
  40. transcriber.set_appkey(appkey)
  41. transcriber.set_token(token)
  42. transcriber.set_format(ASRFormat.PCM)
  43. transcriber.set_sample_rate(ASRSampleRate.SAMPLE_RATE_16K)
  44. transcriber.set_enable_intermediate_result(False)
  45. transcriber.set_enable_punctuation_prediction(True)
  46. transcriber.set_enable_inverse_text_normalization(True)
  47. try:
  48. ret = transcriber.start()
  49. if ret < 0:
  50. return ret
  51. print('sending audio...')
  52. with open(audio_name, 'rb') as f:
  53. audio = f.read(3200)
  54. while audio:
  55. ret = transcriber.send(audio)
  56. if ret < 0:
  57. break
  58. time.sleep(0.1)
  59. audio = f.read(3200)
  60. transcriber.stop()
  61. except Exception as e:
  62. print(e)
  63. finally:
  64. transcriber.close()
  65. def process_multithread(client, appkey, token, number):
  66. thread_list = []
  67. for i in range(0, number):
  68. thread = threading.Thread(target=process, args=(client, appkey, token))
  69. thread_list.append(thread)
  70. thread.start()
  71. for thread in thread_list:
  72. thread.join()
  73. if __name__ == "__main__":
  74. client = ali_speech.NlsClient()
  75. # 设置输出日志信息的级别:DEBUG、INFO、WARNING、ERROR
  76. client.set_log_level('INFO')
  77. appkey = '您的appkey'
  78. token = '您的Token'
  79. process(client, appkey, token)
  80. # 多线程示例
  81. # process_multithread(client, appkey, token, 2)