科大讯飞新版语音唤醒Python调用

背景:

        科大讯飞旧版语音唤醒付费基础包是8000元、新版基础包是2500元。目前项目这边不需要太多装机量,只是需要利用唤醒能力,所以选择便宜的方案接入新版唤醒。其次新版唤醒的唤醒词是可以随时变更的,旧版的唤醒词和SDK绑定,更换唤醒词就需要重新下载SDK替换并重新打包。相比下新版唤醒更具“性价比”。但是网上只能找到旧版唤醒的代码。只能自己尝试实现python调用。

购买:

1、打开语音唤醒(新版)_语音唤醒接入-讯飞开放平台

2、选择免费使用并立即购买(有效期30天)


下载SDK:

 1、购买后打开控制台-讯飞开放平台

2、点击下载Windows SDK

下载后解压,目录接口如下:

①将libs下64位(或者32位)的AEE_lib.dll复制到我们自己的项目kws/new/libs/下

②将libs下64位(或者32位)的ef7d69542_v1014_aee.dll复制到我们自己的项目根目录下

③将bin/resource/ivw70下的所有文件复制到我们自己项目的kws/new/resource/下并将xbxb.txt重名名位keyword.txt

我们自己项目的目录结构如下(只需关注我圈起来的部分):

修改配置:

同样在控制台控制台-讯飞开放平台获取自己的认证信息,并将代码中的appId、apiKey、apiSecret替换即可

如果上面的动态链接库(DLL)以及资源文件没有按照我的目录放置的话,只需要修该代码中响应的配置即可

# =======定义初始化参数=========
    param = AIKIT_InitParam()
    # 离线授权类型(0或1),0-->(默认)设备级授权(DEVICE)和 1-->应用级授权(APP)
    param.authType = c_int(0)
    # 应用ID
    param.appID = b"自己的APPID"
    # 离线引擎托管平台创建应用后,生成的唯一应用标识
    param.apiKey = b"自己的APIKEY"
    # 离线引擎托管平台创建应用后,生成的唯一应用秘钥
    param.apiSecret = b"自己的APISECRET"
    # SDK工作目录,默认授权缓存、读取能力资源、写SDK日志在此路径下
    work_dir = get_resource_path("kws/work_dir").encode('utf-8')
    param.workDir = work_dir
    # 指定资源读取路径,不设置默认从workDir读取
    res_dir = get_resource_path("kws/new/resource").encode('utf-8')
    param.resDir = res_dir

    # =======设置授权时间间隔=========
    ret = dll.AIKIT_SetAuthCheckInterval(600)
    if ret != 0:
        logger.error(f"AIKIT_SetAuthCheckInterval failed: {ret}\n")
        return
    logger.info(f"AIKIT_SetAuthCheckInterval: {ret}\n")

    # =======SDK初始化=========
    ret = dll.AIKIT_Init(byref(param))
    if (ret != 0):
        logger.error(f"AIKIT_Init failed: {ret}\n")
        return
    logger.info(f"AIKIT_Init: {ret}\n")

完整代码:

kws_server_new.py

import pyaudio
import os
from ctypes import CFUNCTYPE, POINTER, Structure, addressof, byref, c_bool, c_char, c_char_p, cdll, c_int, c_int32, c_size_t, c_uint32, c_void_p, cast, create_string_buffer, windll
from loguru import logger


def get_resource_path(relative_path):
    if "NUITKA_ONEFILE_BINARY" in os.environ:
        logger.info('Running in nuitka onefile mode.')
        tmp_path = os.environ["TEMP"] or os.environ["TMP"]
        if tmp_path:
            return os.path.join(tmp_path, relative_path)
        else:
            return os.path.join(".", relative_path)
    else:
        logger.info('Running in development mode.')
        return os.path.join(os.path.abspath('.'), relative_path)


# 加载动态链接库
msc_load_library = get_resource_path('kws/new/libs/AEE_lib.dll')
dll = cdll.LoadLibrary(msc_load_library)

# 能力ID
ABILITY = b"e867a88f2"

# 定义回调函数


def on_output(handle, output):
    """输出数据回调

    Args:
        handle (AIKIT_HANDLE*): 会话hand

作者:qq_30035723

物联沃分享整理
物联沃-IOTWORD物联网 » 科大讯飞新版语音唤醒Python调用

发表回复