python实现调用科大讯飞语音听写(将音频识别成文字输出)

一、大致流程

1)申请科大讯飞账号(https://passport.xfyun.cn/register

2)创建应用(应用平台选择WebAPI)

3)查看开发文档

4)根据开发文档和示例代码进行调试

二、申请科大讯飞账号

首先我们先去科大讯飞开放平台注册一个账号:https://passport.xfyun.cn/register

三、创建应用

我们再去官网(https://www.xfyun.cn/?ch=bdpp)的产品服务中选择语音听写服务进入后点击web API抢先体验

接下来根据需求创建一个应用

创建完应用后在我的应用中就可以看见我们刚刚创建的项目了,我们点击刚创建的应用旁边的开发文档

四、查看开发文档

我们主要看两个文档:接口描述 + 语音听写

1)接口描述

一个是授权认证部分,这里主要需要两个个数据:appid、paikey(这两个数据可以到我们刚刚创建的应用处查询)

我们拿到这两个数据后主要是为了在Http Re'quest Header中配置以下参数:

参数格式说明必须
X-Appidstring讯飞开放平台注册申请应用的应用ID(appid)
X-CurTimestring当前UTC时间戳,从1970年1月1日0点0 分0 秒开始到现在的秒数
X-Paramstring相关参数JSON串经Base64编码后的字符串,见各接口详细说明
X-CheckSumstring令牌,计算方法:MD5(apiKey + curTime + param),三个值拼接的字符串,进行MD5哈希计算(32位小写),其中apiKey由讯飞提供,调用方管理。

注:

  • apiKey:接口密钥,由讯飞开放平台提供,调用方注意保管,如泄露,可联系讯飞技术人员重置;
  • checkSum 有效期:出于安全性考虑,每个 checkSum 的有效期为 5 分钟(用 curTime 计算),同时 curTime 要与标准时间同步,否则,时间相差太大,服务端会直接认为 curTime 无效;
  • BASE64 编码采用 MIME 格式,字符包括大小写字母各26个,加上10个数字,和加号 + ,斜杠 / ,一共64个字符。

2)语音听写文档

在文档开头提供了另一个参数:接口地址(http://api.xfyun.cn/v1/service/v1/iat

然后我们可以根据文档末的python代码写的调用实例来进行调用了

四、根据开发文档进行调试

说明:将脚本中 AUDIO_PATHAPI_KEYAPPID, 换成相应的音频路径,讯飞开放平台提供的 apiKey,讯飞开放平台应用的 appid 即可,运行脚本可打印相应结果。

这里需要注意一点的是:文档中采用python2.7写的,如果你想使用python3的话就看我下面的代码

#!/usr/bin/python
# -*- coding: UTF-8 -*-
#import urllib2
import time
import urllib
import json
import hashlib
import base64
import urllib.request
import urllib.parse


def main():
    f = open("你需要识别的音频的文件地址", 'rb')  #rb表示二进制格式只读打开文件
    file_content = f.read()
    # file_content 是二进制内容,bytes类型
    # 由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。
    # 如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes
    # 以Unicode表示的str通过encode()方法可以编码为指定的bytes
    base64_audio = base64.b64encode(file_content)   #base64.b64encode()参数是bytes类型,返回也是bytes类型
    body = urllib.parse.urlencode({'audio': base64_audio})

    url = 'http://api.xfyun.cn/v1/service/v1/iat'
    api_key = '你的apikey'
    param = {"engine_type": "sms16k", "aue": "raw"}

    x_appid = '你的appid'
    x_param = base64.b64encode(json.dumps(param).replace(' ', '').encode('utf-8')) #改('''')
    # 这是3.x的用法,因为3.x中字符都为unicode编码,而b64encode函数的参数为byte类型,
    # 所以必须先转码为utf-8的bytes
    x_param = str(x_param, 'utf-8')

    x_time = int(int(round(time.time() * 1000)) / 1000)
    x_checksum = hashlib.md5((api_key + str(x_time) + x_param).encode('utf-8')).hexdigest() #改
    x_header = {'X-Appid': x_appid,
                'X-CurTime': x_time,
                'X-Param': x_param,
                'X-CheckSum': x_checksum}
    # 不要忘记url = ??, data = ??, headers = ??, method = ?? 中的“ = ”,这是python3
    req = urllib.request.Request(url = url, data = body.encode('utf-8'), headers = x_header, method = 'POST')
    result = urllib.request.urlopen(req)
    result = result.read().decode('utf-8')
    print(result)
    return

if __name__ == '__main__':
    main()

只要将音频地址、appid、apikey分别替换对应的位置就行了。还要记得去你的应用处给添加你的ip白名单:只要复制你的ip地址在ip白名单中就可以了。

最后需要注意的是音频的格式,科大讯飞的语音听写对音频格式有要求,经过测试我发现打开win10自带的录音随便录一段是识别不出来的,其要求的音频格式如下:

音频参数数值
音频长度(Input Length)≤60s
采样率(Sampling Rate)支持8KHz和16KHz
采样精度(Bit Depth)16bits
声道(Channel)单声道
语音起点(begin of the speech)小于参数vad_bos
音频终点(end of the speech)小于参数vad_eos

最后这里我提供一个我录音的方法:

1)首先去goldwave官网下载goldwave应用

2)然后点击new,出现录音的格式,修改如下即可

然后再右侧点击录音,录完后保存到相应的目录,在你的代码中替换你刚录制的这个音频的地址就可以了

最后识别成功返回如下,就代表成功了(图中data即我测试的录音内容):

### 如何在 UniApp 中集科大讯飞的同声传译 API 要在 UniApp 中集科大讯飞的同声传译 API,可以通过以下方式实现。以下是详细的说明以及示例代码。 #### 1. 准备工作 首先需要注册并获取科大讯飞开放平台的相关权限和密钥。访问科大讯飞开发者官网 (https://www.xfyun.cn/) 并创建应用以获得 `APPID` 和 `Secret Key`。这些信息将在后续配置中使用[^1]。 #### 2. 添加插件支持 由于 UniApp 是基于 Vue 的跨端框架,在小程序环境下无法直接调用原生 SDK,因此需通过微信小程序插件机制来完语音文字的功能。具体操作如下: - 打开项目中的 `manifest.json` 文件,切换到 **源码视图**。 - 在 `appid` 同级目录下新增一个字段用于声明插件依赖,例如: ```json { "plugins": { "speechTranscription": { "version": "1.0.0", "provider": "wx9f7b3c4d5e6a7g8h" } } } ``` 其中 `provider` 值为实际接入的小程序插件 ID 或者由第三方提供给您的 APP 插件标识符[^3]。 #### 3. 调用插件方法 接下来编写前端逻辑部分,利用 uni-app 提供的方法加载已安装好的插件实例,并发起请求传递必要的参数如音频流数据等。 ```javascript // main.js 或 pages 下某个页面 js 文件内定义全局变量或者局部函数 export default { methods: { async startSpeechRecognition() { const plugin = requirePlugin('speechTranscription'); // 加载指定名称插件 try { let result = await new Promise((resolve, reject) => { plugin.start({ lang: 'zh_CN', // 设置语言环境,默认中文普通话 success(res) { resolve(res); }, fail(err) { reject(err); } }); }); console.log(`识别结果:${result}`); return result; } catch(error){ console.error("发生错误:", error); } } } } ``` 上述代码片段展示了如何初始化插件对象并通过其暴露出来的接口执行具体的业务流程[^2]。 #### 4. 参数设置与优化建议 如果希望进一步提升用户体验,则可以根据需求调整更多高级选项比如开启多人对话模式等功能特性。例如当面对多说话者的场景时可启用角色分离功能: ```javascript plugin.setParams({ roleSeparation:true, }); ``` 此段脚本的作用在于告知服务器端对于输入音轨尝试区分不同的发言主体以便于后期分析处理。 --- ### 注意事项 - 确保网络状况良好以免影响实时交互效率; - 测试阶段推荐选用官方提供的 demo 数据集验证准确性后再上传自有素材测试; - 对敏感信息做好加密保护措施防止泄露风险;
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值