日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Python SDK

本文介紹如何使用阿里云智能語音服務提供的Python SDK,包括SDK的安裝方法及SDK代碼示例。

前提條件

在使用SDK前,請先閱讀接口說明,詳情請參見接口說明

下載安裝

說明
  • SDK僅支持Python3,暫不支持Python2。

  • 請確認已安裝Python包管理工具setuptools。如果沒有安裝,請在終端使用以下命令安裝:

    pip install setuptools
  1. 下載Python SDK。

    Github獲取Python SDK,或直接下載streamInputTts-github-python

  2. 安裝SDK依賴。

    進入SDK根目錄使用如下命令安裝SDK依賴:

    python -m pip install -r requirements.txt
  3. 安裝SDK。

    依賴安裝完成后使用如下命令安裝SDK:

    python -m pip install .
  4. 安裝完成后通過以下代碼導入SDK。

    # -*- coding: utf-8 -*-
    import nls
重要

上述命令均需要在SDK根目錄中執(zhí)行。

多線程和多并發(fā)

在CPython中,由于存在全局解釋器鎖,同一時刻只有一個線程可以執(zhí)行Python代碼(雖然某些性能導向的庫可能會去除此限制)。如果您想更好地利用多核心計算機的計算資源,推薦你使用multiprocessingconcurrent.futures.ProcessPoolExecutor。 如果你想要同時運行多個I/O密集型任務,則多線程仍然是一個合適的模型。

如果單解釋器有太多線程,將會在線程間切換造成更多消耗,有可能會導致SDK出現(xiàn)錯誤。不建議使用超過200線程,推薦使用multiprocessing技術(shù)或者手動使用腳本創(chuàng)建多個解釋器。

關(guān)鍵接口

實時語音識別對應的類為nls.NlsSpeechTranscriber,其核心方法如下:

1. 初始化(__init__)

  • 參數(shù)說明

參數(shù)

類型

參數(shù)說明

url

String

網(wǎng)關(guān)WebSocket URL地址,默認為wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1

appkey

String

Appkey,獲取方式請參見管理項目

token

String

訪問Token,詳情可參見獲取Token概述

on_start

Function

當實時語音識別就緒時的回調(diào)參數(shù)。回調(diào)參數(shù)包含以下兩種:

  • JSON形式的字符串

  • 用戶自定義參數(shù)

其中,用戶自定義參數(shù)為下方callback_args字段中返回的參數(shù)內(nèi)容。

on_sentence_begin

Function

當實時語音識別開始時的回調(diào)參數(shù)。回調(diào)參數(shù)包含以下兩種:

  • JSON形式的字符串

  • 用戶自定義參數(shù)

其中,用戶自定義參數(shù)為下方callback_args字段中返回的參數(shù)內(nèi)容。

on_sentence_end

Function

當實時語音識別結(jié)束時的回調(diào)參數(shù)。回調(diào)參數(shù)包含以下兩種:

  • JSON形式的字符串

  • 用戶自定義參數(shù)

其中,用戶自定義參數(shù)為下方callback_args字段中返回的參數(shù)內(nèi)容。

on_result_changed

Function

當實時語音識別返回中間結(jié)果時的回調(diào)參數(shù)。回調(diào)參數(shù)包含以下兩種:

  • JSON形式的字符串

  • 用戶自定義參數(shù)

其中,用戶自定義參數(shù)為下方callback_args字段中返回的參數(shù)內(nèi)容。

on_completed

Function

當實時語音識別返回最終識別結(jié)果時的回調(diào)參數(shù)。回調(diào)參數(shù)包含以下兩種:

  • JSON形式的字符串

  • 用戶自定義參數(shù)

其中,用戶自定義參數(shù)為下方callback_args字段中返回的參數(shù)內(nèi)容。

on_error

Function

當SDK或云端出現(xiàn)錯誤時的回調(diào)參數(shù)。回調(diào)參數(shù)包含以下兩種:

  • JSON形式的字符串

  • 用戶自定義參數(shù)

其中,用戶自定義參數(shù)為下方callback_args字段中返回的參數(shù)內(nèi)容。

on_close

Function

當和云端連接斷開時的回調(diào)參數(shù)。回調(diào)參數(shù)為用戶自定義參數(shù),即用戶自定義參數(shù)為下方callback_args字段中返回的參數(shù)內(nèi)容。

callback_args

List

用戶自定義參數(shù)列表,列表中的內(nèi)容會打包(pack)成List數(shù)據(jù)結(jié)構(gòu)傳遞給各個回調(diào)的最后一個參數(shù)。

  • 返回值:無

2. start

同步開始實時語音識別,該方法會阻塞當前線程直到實時語音識別就緒(on_start回調(diào)返回)。

  • 參數(shù)說明

參數(shù)

類型

參數(shù)說明

aformat

String

要識別音頻格式,支持PCM,OPUS,OPU,默認值:PCM。

SDK不會自動將PCM編碼成OPUS或OPU,如果需要使用OPUS或OPU,您可自行編碼實現(xiàn)。

sample_rate

Integer

識別音頻采樣率,默認值:16000 Hz。

ch

Integer

音頻通道數(shù),默認值:1,目前僅支持單通道。

enable_intermediate_result

Boolean

是否返回中間結(jié)果,默認值:False。

enable_punctuation_prediction

Boolean

是否進行識別結(jié)果標點預測,默認值:False。

enable_inverse_text_normalization

Boolean

ITN(逆文本inverse text normalization)中文數(shù)字轉(zhuǎn)換阿拉伯數(shù)字。設(shè)置為True時,中文數(shù)字將轉(zhuǎn)為阿拉伯數(shù)字輸出,默認值:False。

timeout

Integer

阻塞超時,默認值:10秒。

ping_interval

Integer

Ping包發(fā)送間隔,默認值:8秒。無需間隔可設(shè)置為0或None。

ping_timeout

Integer

是否檢查Ping包超時,默認值:None。None為不檢查Ping包是否超時。

ex

Dict

用戶提供的額外參數(shù),該字典內(nèi)容會以key:value形式合并進請求的payload段中,具體可參見接口說明章節(jié)中的請求數(shù)據(jù)。

  • 返回值:Boolean類型,F(xiàn)alse為失敗,True為成功。

3. stop

停止實時語音識別,并同步等待on_completed回調(diào)結(jié)束。

  • 參數(shù)說明

參數(shù)

類型

參數(shù)說明

timeout

Integer

阻塞超時,默認值:10秒。

  • 返回值:Boolean類型,F(xiàn)alse為失敗,True為成功。

4. shutdown

強行關(guān)閉當前請求,重復調(diào)用無副作用。

  • 參數(shù)說明:無

  • 返回值:無

5. send_audio

發(fā)送二進制音頻數(shù)據(jù),發(fā)送數(shù)據(jù)的格式需要和start中的aformat對應。

  • 參數(shù)說明

參數(shù)

類型

參數(shù)說明

pcm_data

Bytes

要發(fā)送的二進制音頻數(shù)據(jù),格式需要和上一次調(diào)用時start中的aformat相對應。

SDK不會自動將PCM編碼成OPUS或OPU,如果需要使用OPUS或OPU,您可自行編碼實現(xiàn)。

  • 返回值:Boolean類型,F(xiàn)alse為失敗,True為成功。

6. ctrl

發(fā)送控制命令。

  • 參數(shù)說明

參數(shù)

類型

參數(shù)說明

ex

Dict

自定義控制命令,該字典內(nèi)容會以key:value形式合并進請求的payload段中,具體可參見接口說明章節(jié)中的請求數(shù)據(jù)。

  • 返回值:Boolean類型,F(xiàn)alse為失敗,True為成功。

代碼示例

說明
  • 本示例中使用的音頻文件為16000 Hz采樣率,PCM格式,您可以使用tests文件夾下的test1.pcm,請在智能語音交互管控臺將Appkey對應項目的模型設(shè)置為通用模型,以獲取準確的識別結(jié)果;如果使用其他音頻,請設(shè)置為支持該音頻場景的模型。關(guān)于模型設(shè)置,請參見管理項目

  • 本示例中使用SDK內(nèi)置的默認外網(wǎng)訪問服務端URL,如果您使用阿里云上海地域的ECS,并需要通過內(nèi)網(wǎng)訪問服務端URL,請使用如下URL:URL="ws://nls-gateway-cn-shanghai-internal.aliyuncs.com/ws/v1"

import time
import threading
import sys

import nls


URL="wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1"
TOKEN="yourToken"  #參考http://bestwisewords.com/document_detail/450255.html獲取token
APPKEY="yourAppkey"    #獲取Appkey請前往控制臺:https://nls-portal.console.aliyun.com/applist

#以下代碼會根據(jù)音頻文件內(nèi)容反復進行實時語音識別(文件轉(zhuǎn)寫)
class TestSt:
    def __init__(self, tid, test_file):
        self.__th = threading.Thread(target=self.__test_run)
        self.__id = tid
        self.__test_file = test_file
   
    def loadfile(self, filename):
        with open(filename, "rb") as f:
            self.__data = f.read()
    
    def start(self):
        self.loadfile(self.__test_file)
        self.__th.start()

    def test_on_sentence_begin(self, message, *args):
        print("test_on_sentence_begin:{}".format(message))

    def test_on_sentence_end(self, message, *args):
        print("test_on_sentence_end:{}".format(message))

    def test_on_start(self, message, *args):
        print("test_on_start:{}".format(message))

    def test_on_error(self, message, *args):
        print("on_error args=>{}".format(args))

    def test_on_close(self, *args):
        print("on_close: args=>{}".format(args))

    def test_on_result_chg(self, message, *args):
        print("test_on_chg:{}".format(message))

    def test_on_completed(self, message, *args):
        print("on_completed:args=>{} message=>{}".format(args, message))


    def __test_run(self):
        print("thread:{} start..".format(self.__id))
        sr = nls.NlsSpeechTranscriber(
                    url=URL,
                    token=TOKEN,
                    appkey=APPKEY,
                    on_sentence_begin=self.test_on_sentence_begin,
                    on_sentence_end=self.test_on_sentence_end,
                    on_start=self.test_on_start,
                    on_result_changed=self.test_on_result_chg,
                    on_completed=self.test_on_completed,
                    on_error=self.test_on_error,
                    on_close=self.test_on_close,
                    callback_args=[self.__id]
                )

		print("{}: session start".format(self.__id))
		r = sr.start(aformat="pcm",
			enable_intermediate_result=True,
			enable_punctuation_prediction=True,
			enable_inverse_text_normalization=True)

		self.__slices = zip(*(iter(self.__data),) * 640)
		for i in self.__slices:
			sr.send_audio(bytes(i))
			time.sleep(0.01)

		sr.ctrl(ex={"test":"tttt"})
		time.sleep(1)

		r = sr.stop()
		print("{}: sr stopped:{}".format(self.__id, r))
		time.sleep(1)

def multiruntest(num=500):
    for i in range(0, num):
        name = "thread" + str(i)
        t = TestSt(name, "tests/test1.pcm")
        t.start()

nls.enableTrace(False)
multiruntest(1)