1. 客户端RPC调用模块

1.1 asrt_sdk.get_speech_recognizer

获取一个ASRT语音识别服务调用接口类实例对象

  • 参数列表
参数 类型 说明
host str 主机域名或IP
port str 主机端口号
protocol str 网络协议类型

其中 protocol 支持以下几种协议:

协议 说明
http 普通的未加密的http协议
https 基于ssl/tls加密的安全类型http协议
grpc 普通的未加密的grpc协议
grpcs 基于ssl/tls加密的传输安全类型grpc协议

1.2 asrt_sdk.HttpSpeechRecognizer

基于http协议的语音识别接口调用类,支持http和https

  • 参数列表
成员 类型 参数 返回类型 说明
__init__ 构造函数 host:文本类型,指定ASRT语音识别服务主机的域名或IP ASRT语音识别类的实例化对象。 实例化对象。
recognite 成员函数 wav_data: WAVE格式音频样本点二进制数据。
frame_rate: WAVE格式音频采样率。
channels: WAVE格式音频通道数。
byte_width: WAVE格式音频样本点字节宽度。
AsrtApiResponse 执行对指定音频序列数据进行RPC调用的过程,返回识别后的文本
recognite_speech 成员函数 wav_data: WAVE格式音频样本点二进制数据。
frame_rate: WAVE格式音频采样率。
channels: WAVE格式音频通道数。
byte_width: WAVE格式音频样本点字节宽度。
AsrtApiResponse 执行对指定音频序列数据进行声学模型RPC调用的过程,返回识别后的拼音序列
recognite_language 成员函数 sequence_pinyin: 拼音序列列表 AsrtApiResponse 执行对指定拼音序列数据进行语言模型RPC调用的过程,返回最终识别后的文本
recognite_long 成员函数 wav_data: WAVE格式音频样本点二进制数据。
frame_rate: WAVE格式音频采样率。
channels: WAVE格式音频通道数。
byte_width: WAVE格式音频样本点字节宽度。
AsrtApiResponse 执行对指定的长语音音频序列数据进行RPC调用的过程,会自动分段,返回分段识别后的识别文本数组
recognite_file 成员函数 filename: 要语音识别的文件名 AsrtApiResponse 执行对指定音频序列数据进行RPC调用的过程,返回识别后的文本
sub_path 成员属性,str类型 返回或设置http协议API接口资源的子路径,默认为''

1.3 asrt_sdk.read_wav_data

读取WAVE格式音频文件数据,可用于后续调用ASRT语音识别接口

  • 参数列表
参数 类型 说明
filename str WAVE格式文件名
  • 返回值: WaveData类型
属性字段 类型 说明
wav_data: WAVE格式音频样本点二进制数据。 二进制序列 WAVE样本点数据
frame_rate: WAVE格式音频采样率。 int 采样率
channels: WAVE格式音频通道数。 int 通道数
byte_width: WAVE格式音频样本点字节宽度。 int 样本点字节宽度

1.4 asrt_sdk.GrpcSpeechRecognizer

基于grpc协议的语音识别接口调用类,支持非安全传输和安全传输方式。

  • 参数列表
成员 类型 参数 返回类型 说明
__init__ 构造函数 host:文本类型,指定ASRT语音识别服务主机的域名或IP ASRT语音识别类的实例化对象。 实例化对象。
recognite 成员函数 wav_data: WAVE格式音频样本点二进制数据。
frame_rate: WAVE格式音频采样率。
channels: WAVE格式音频通道数。
byte_width: WAVE格式音频样本点字节宽度。
AsrtApiResponse 执行对指定音频序列数据进行RPC调用的过程,返回识别后的文本
recognite_speech 成员函数 wav_data: WAVE格式音频样本点二进制数据。
frame_rate: WAVE格式音频采样率。
channels: WAVE格式音频通道数。
byte_width: WAVE格式音频样本点字节宽度。
AsrtApiResponse 执行对指定音频序列数据进行声学模型RPC调用的过程,返回识别后的拼音序列
recognite_language 成员函数 sequence_pinyin: 拼音序列列表 AsrtApiResponse 执行对指定拼音序列数据进行语言模型RPC调用的过程,返回最终识别后的文本
recognite_long 成员函数 wav_data: WAVE格式音频样本点二进制数据。
frame_rate: WAVE格式音频采样率。
channels: WAVE格式音频通道数。
byte_width: WAVE格式音频样本点字节宽度。
AsrtApiResponse 执行对指定的长语音音频序列数据进行RPC调用的过程,会自动分段,返回分段识别后的识别文本数组
recognite_file 成员函数 filename: 要语音识别的文件名 AsrtApiResponse 执行对指定音频序列数据进行RPC调用的过程,返回识别后的文本
recognite_stream 成员函数 wav_data_generator:传入的一个数据生成器
duration:静默周期(单位: 秒),每个音频片段的录制需要等待的时间。若使用录音文件可设为0(秒)。
callback_function: 接收识别文本的回调函数,需要且仅需要一个参数,接收的对象类型为TextResponse, 定义见下。
None 进行流式RPC调用,通过python生成器不断传入wave音频片段,通过回调方式接收识别后的文本

protobufTextResponse类型定义:

message TextResponse {
    int32 status_code = 1; 
    string status_message = 2; 
    string text_result = 3;
}

1.5 示例代码

1.5.1 HTTP协议接口调用示例

import asrt_sdk

HOST = '127.0.0.1'
PORT = '20001'
PROTOCOL = 'http'
SUB_PATH = ''
speech_recognizer = asrt_sdk.get_speech_recognizer(HOST, PORT, PROTOCOL)
speech_recognizer.sub_path = SUB_PATH

FILENAME = 'A11_0.wav'
result = speech_recognizer.recognite_file(FILENAME)
print(result)
for index in range(0, len(result)):
    item = result[index]
    print("第", index, "段:", item.result)


wave_data = asrt_sdk.read_wav_datas(FILENAME)
result = speech_recognizer.recognite_speech(wave_data.str_data,
                                            wave_data.sample_rate,
                                            wave_data.channels,
                                            wave_data.byte_width)
print(result)
print(result.result)

result = speech_recognizer.recognite_language(result.result)
print(result)
print(result.result)

AI柠檬提供的测试API配置可将对应处改为:

HOST = 'api.ailemon.net'
PORT = '443'
PROTOCOL = 'https'
SUB_PATH = '/asrt/v2/http'

1.5.2 GRPC协议接口调用示例

import asrt_sdk

HOST = '127.0.0.1'
PORT = '20002'
PROTOCOL = 'grpc'
speech_recognizer = asrt_sdk.get_speech_recognizer(HOST, PORT, PROTOCOL)
FILENAME = 'A11_0.wav'
result = speech_recognizer.recognite_file(FILENAME)
print("wav文件识别结果:", result)

wave_data = asrt_sdk.read_wav_datas(FILENAME)
result = speech_recognizer.recognite_speech(wave_data.str_data,
                                            wave_data.sample_rate,
                                            wave_data.channels,
                                            wave_data.byte_width)
print("wav声学识别响应:", result)
print("wav声学识别结果:", result.result_data)

result = speech_recognizer.recognite_language(result.result_data)
print("语言模型识别响应:", result)
print("语言模型识别结果:", result.text_result)

result = speech_recognizer.recognite(wave_data.str_data,
                                            wave_data.sample_rate,
                                            wave_data.channels,
                                            wave_data.byte_width)
print("wav完整识别响应:", result)
print("wav完整识别结果:", result.text_result)

def make_wav_generator():
    for _ in range(2):
        yield wave_data.str_data, wave_data.sample_rate, wave_data.channels, wave_data.byte_width

stream_asr_text = ""
stream_buffer_text = ""

def callback_func(ret):
    global stream_asr_text
    global stream_buffer_text
    print("流式识别响应:", ret)
    print("流式识别结果:", ret.status_code, ret.text_result)
    if ret.status_code == 200000:
        stream_asr_text += ret.text_result
        stream_buffer_text = ""
    elif ret.status_code == 206000:
        stream_buffer_text = ret.text_result
    else:
        print("流式语音识别出错!", ret.status_code, ret.status_message)

    print("当前语音识别内容:", stream_asr_text+stream_buffer_text)

speech_recognizer.recognite_stream(make_wav_generator, 1, callback_func)
文档更新时间: 2022-06-11 00:25   作者:AI柠檬