失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python实现调用科大讯飞语音听写(将音频识别成文字输出)

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

时间:2019-06-28 07:43:21

相关推荐

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

一、大致流程

1)申请科大讯飞账号(/register)

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

3)查看开发文档

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

二、申请科大讯飞账号

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

三、创建应用

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

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

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

四、查看开发文档

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

1)接口描述

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

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

参数 格式 说明 必须

X-Appid string 讯飞开放平台注册申请应用的应用ID(appid) 是

X-CurTime string 当前UTC时间戳,从1970年1月1日0点0 分0 秒开始到现在的秒数 是

X-Param string 相关参数JSON串经Base64编码后的字符串,见各接口详细说明 是

X-CheckSum string 令牌,计算方法:MD5(apiKey + curTime + param),三个值拼接的字符串,进行MD5哈希计算(32位小写),其中apiKey由讯飞提供,调用方管理。 是

注:

apiKey:接口密钥,由讯飞开放平台提供,调用方注意保管,如泄露,可联系讯飞技术人员重置;

checkSum 有效期:出于安全性考虑,每个 checkSum 的有效期为 5 分钟(用 curTime 计算),同时 curTime 要与标准时间同步,否则,时间相差太大,服务端会直接认为 curTime 无效;

BASE64 编码采用 MIME 格式,字符包括大小写字母各26个,加上10个数字,和加号 + ,斜杠 / ,一共64个字符。

2)语音听写文档

在文档开头提供了另一个参数:接口地址(/v1/service/v1/iat)

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

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

说明:将脚本中AUDIO_PATH,API_KEY,APPID, 换成相应的音频路径,讯飞开放平台提供的 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 = "/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即我测试的录音内容):

如果觉得《python实现调用科大讯飞语音听写(将音频识别成文字输出)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。