文档首页 > > SDK参考> Python SDK> 使用实时语音转写

使用实时语音转写

分享
更新时间: 2019/12/04 GMT+08:00

前提条件

  • 确保已按照配置Python环境配置完毕,Python SDK仅支持Python3。
  • 确保已存在待识别的音频文件。如果需要请在下载的SDK压缩包中获取示例音频。

初始化Client

初始化RasrClient详见表 RasrClient初始化参数

表1 RasrClient初始化参数

参数名称

是否必选

参数类型

描述

user_name

String

登录华为云的用户名。

password

String

登录华为云的密码。

domain_name

String

账户名,一般等同用户名。

region

String

区域,如:cn-north-4。具体请参考终端节点

project_id

String

项目ID,同region一一对应,参考获取项目ID

callback

Object

回调类RasrCallBack,用于监听Websocket连接、响应、断开、错误等。参考代码示例

service_endpoint

String

终端节点,一般使用默认即可。

token_url

String

请求token的url,一般使用默认即可。

retry_time

Integer

当Websocket建立连接失败时,重试的间隔时间。一般使用默认即可。

请求参数

请求类为RasrRequest,详见表 RasrRequest数据结构

表2 RasrRequest数据结构

参数名称

是否必选

参数类型

描述

audio_format

String

音频格式,支持pcm,alaw,ulaw等,如pcm8k16bit,参见《API参考》中开始识别章节。

model_property

String

属性字符串,language_sampleRate_domain, 如chinese_8k_common,参见《API参考》中开始识别章节。

add_punc

String

是否添加标点,yes 或 no,默认no。

vad_head

Integer

头部最大静音时间,[0, 60000],默认10000ms。

vad_tail

Integer

尾部最大静音时间,[0, 3000],默认500ms。

max_seconds

Integer

音频最长持续时间, [0, 60],默认30s。

interim_results

String

是否显示中间结果,yes 或 no,默认no。

vocabulary_id

String

热词表id,若没有则不填。

响应参数

Python SDK响应结果为Json格式,详见表 响应结果数据结构

表3 响应结果数据结构

参数名称

是否必选

参数类型

描述

resp_type

String

参数值为RESULT,表示识别结果响应。

trace_id

String

服务内部的令牌,可用于在日志中追溯具体流程。

segments

Array of objects

多句结果。详见表 segment 数据结构

表4 segment 数据结构

参数名称

是否必选

参数类型

描述

start_time

Integer

一句的起始时间戳,单位为ms。

end_time

Integer

一句的结束时间戳,单位为ms。

is_final

Boolen

true表示是最终结果, false表示为中间临时结果。

result

Object

调用成功表示识别结果,详见表 result数据结构

表5 result数据结构

参数名称

是否必选

参数类型

描述

text

String

识别结果。

score

Float

识别结果的置信度(0-1之间)。此值仅会在最终结果时被赋值,在中间结果时统一置为“0.0”

代码示例

# -*- coding: utf-8 -*-

from huaweicloud_sis.client.rasr_client import RasrClient
from huaweicloud_sis.bean.rasr_request import RasrRequest
from huaweicloud_sis.exception.exceptions import ClientException
from huaweicloud_sis.exception.exceptions import ServerException
from huaweicloud_sis.bean.callback import RasrCallBack
import json

# 鉴权信息
user_name = ''      # 用户登录华为云用户名
password = ''       # 用户登录华为云密码
domain_name = ''    # 账户名,一般等同用户名
region = ''         # region,如cn-north-4
project_id = ''     # 同region一一对应,参考https://support.huaweicloud.com/api-sis/sis_03_0008.html

# 实时语音转写参数
path = ''           # 需要发送音频路径,同时sdk也支持byte流发送数据。
audio_format = ''   # 音频支持格式,详见api文档
property = ''       # 属性字符串,language_sampleRate_domain, 详见api文档


class MyCallback(RasrCallBack):
    """ 回调类,用户需要在对应方法中实现自己的逻辑,其中on_response必须重写 """
    def on_open(self):
        """ websocket连接成功会回调此函数 """
        print('websocket connect success')

    def on_start(self, trace_id):
        """
            websocket 开始识别回调此函数
        :param trace_id: 用与日志回溯,可忽略
        :return: -
        """
        print('webscoket start to recognize, trace_id is %s' % trace_id)

    def on_response(self, message):
        """
            websockert返回响应结果会回调此函数
        :param message: json格式
        :return: -
        """
        print(json.dumps(message, indent=2, ensure_ascii=False))

    def on_end(self, trace_id):
        """
            websocket 结束识别回调此函数
        :param trace_id: 用与日志回溯,可忽略
        :return: -
        """
        print('websocket is ended, trace_id is %s' % trace_id)

    def on_close(self):
        """ websocket关闭会回调此函数 """
        print('websocket is closed')

    def on_error(self, error):
        """
            websocket出错回调此函数
        :param error: 错误信息
        :return: -
        """
        print('websocket meets error, the error is %s' % error)


def rasr_example():
    """ 实时语音转写demo """
    # step1 初始化RasrClient, 暂不支持使用代理
    my_callback = MyCallback()
    rasr_client = RasrClient(user_name, password, domain_name, region, project_id, my_callback)

    # step2 构造请求
    request = RasrRequest(audio_format, property)
    # 所有参数均可不设置,使用默认值
    request.set_add_punc('yes')         # 设置是否添加标点, yes or no, 默认no
    request.set_vad_head(10000)         # 设置有效头部, [0, 60000], 默认10000
    request.set_vad_tail(500)           # 设置有效尾部,[0, 3000], 默认500
    request.set_max_seconds(30)         # 设置一句话最大长度,[0, 60], 默认30
    request.set_interim_results('no')   # 设置是否返回中间结果,yes or no,默认no
    # request.set_vocabulary_id('')     # 设置热词表id,若不存在则不填写,否则会报错

    # step3 选择连接模式
    # rasr_client.short_stream_connect(request)       # 流式一句话模式
    # rasr_client.sentence_stream_connect(request)    # 实时语音转写单句模式
    rasr_client.continue_stream_connect(request)    # 实时语音转写连续模式

    # step4 发送音频
    rasr_client.send_start()
    # 连续模式下,可多次发送音频,发送格式为byte数组
    with open(path, 'rb') as f:
        data = f.read()
        rasr_client.send_audio(data)    # 可选byte_len和sleep_time参数,建议使用默认值
    rasr_client.send_end()

    # step5 关闭客户端,使用完毕后一定要关闭,否则服务端20s内没收到数据会报错并主动断开。
    rasr_client.close()


if __name__ == '__main__':
    try:
        rasr_example()
    except ClientException as e:
        print(e)
    except ServerException as e:
        print(e)

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区