科大迅飞语音听写(流式版)WebAPI,Web前端、H5调用 语音识别,语音搜索,语音听写

🏡前言

由于公司有个Web项目需要用到语音搜索功能,找了一些第三方库都不太理想,要么语音识别速度很慢,要么不能精确识别等等,最后选择了迅飞语音(迅飞语音听写(流式版)WebAPI)。迅飞语音相对来说做得还是比较成熟了,不过是收费的(是按照调用API次数来收费),但是有试用次数,每天有500次调用次数(不定期会有活动,推荐购买正式版)。

讯飞语音相关的产品还是比较全面的,根据项目需要这次用的是迅飞语音听写(流式版)WebAPI,官网有不同平台的Demo和SDK,由于我们是之前的老Web项目(没有进度前后端分离),而官网下载下来的Demo需要调用很多第3方库,而且还要经过打包编译,感觉过于复杂。

所以我进行了二次封装,去除了很多不必要的插件和代码,可以直接在Web前端PC端、移动H5中引入使用(在HTML文件中引入JS文件,或 在Npm包管理库中下载)即可,使用起来很方便,不用去打包编译等,在这里记录一下,方便以后再次用到。

📚语音听写功能简介:

  • 把语音(≤60秒)转换成对应的文字信息,让机器能够“听懂”人类语言,相当于给机器安装上“耳朵”,使其具备“能听”的功能。
  • 语音听写流式接口,用于1分钟内的即时语音转文字技术,支持实时返回识别结果,达到一边上传音频一边获得识别文本的效果。
  • 该语音能力是通过Websocket API的方式给开发者提供一个通用的接口。
  • Websocket API具备流式传输能力,适用于需要流式数据传输的AI服务场景,比如边说话边识别。
  • 相较于SDK,WebAPI具有轻量、跨语言的特点;相较于HTTP API,Websocket API协议有原生支持跨域的优势。
  • 语音听写流式WebAPI 服务,热词使用方式:登陆开放平台https://www.xfyun.cn/后,找到控制台--我的应用---语音听写---个性化热词,上传热词。

📊实例效果:

🔍实例地址:

https://muguilin.github.io/VoiceDictation/icon-default.png?t=O83Ahttps://muguilin.github.io/VoiceDictation/

🍀下载安装:

# Npm安装

npm i @muguilin/xf-voice-dictation


# Yarn安装

yarn add @muguilin/xf-voice-dictation

🚀实例代码:

import { XfVoiceDictation } from '@muguilin/xf-voice-dictation';

let times = null;

// 实例化迅飞语音听写(流式版)WebAPI

const xfVoice = new XfVoiceDictation({
    APPID: 'xxx',
    APISecret: 'xxx',
    APIKey: 'xxx',
    
    // webSocket请求地址 非必传参数,默认为:wss://iat-api.xfyun.cn/v2/iat
    // url: '',

    // 监听录音状态变化回调
    onWillStatusChange: function (oldStatus, newStatus) {
        // 可以在这里进行页面中一些交互逻辑处理:如:倒计时(语音听写只有60s),录音的动画,按钮交互等!
        console.log('识别状态:', oldStatus, newStatus);
    },

    // 监听识别结果的变化回调
    onTextChange: function (text) {
        // 可以在这里进行页面中一些交互逻辑处理:如将文本显示在页面中
        console.log('识别内容:',text)

        // 如果3秒钟内没有说话,就自动关闭(60s后也会自动关闭)
        if (text) {
            clearTimeout(times);
            times = setTimeout(() => xfVoice.stop(), 3000);
        };
    },

    // 监听识别错误回调
    onError: function(error){
        console.log('错误信息:', error)
    },
});


// 给Dom元素加添事件,来调用开始语音识别!
// xfVoice.start();


// 给Dom元素加添事件,来调用关闭语音识别!
// xfVoice.stop();

⛺源码地址:

📢Npm:

https://www.npmjs.com/package/@muguilin/xf-voice-dictationicon-default.png?t=O83Ahttps://www.npmjs.com/package/@muguilin/xf-voice-dictation

📢GitHub:

https://github.com/MuGuiLin/VoiceDictationicon-default.png?t=O83Ahttps://github.com/MuGuiLin/VoiceDictation

📗使用说明:

📚使用前提条件:

  1. 需要有APPID,APISecret,APIKey 这3个参数(可以去迅飞开放平台注册账户,然后登录到控制台,创建应用 -> 语音识别 -> 语音听写(流式版)后,在右边的 服务接口认证信息处得到这3个参数),并且还要有实时用量次数(每天500次试用)。
  2. 要有硬件设备(麦克风)并且 需要用户允许受权API调用麦克风的权限。
  3. 使用要在服务环境下运行如(WAMP、XAMPP、Phpstudy、http-server、WebServer)。注:获取浏览器录音功能,因安全性问题,需要在localhost 或 127.0.0.1 或 https 服务环境下才能获取权限!

📚识别运行过程:

  1. websocket连接:判断浏览器是否兼容,生成带鉴权参数的websocket url地址。
  2. 获取浏览器录音权限:判断浏览器是否兼容,获取浏览器录音权限(需要用户同意)。
  3. 获取录音数据。
  4. 将录音数据处理为文档要求的数据格式:采样率16k或8K、位长16bit、单声道;该操作属于纯数据处理,使用webWork多线程计算处理。
  5. 根据要求(采用base64编码,每次发送音频间隔40ms,每次发送音频字节数1280B)将处理后的数据通过websocket传给服务器。
  6. 服务器实时通过websocket返回识别后的文件数据后,前端进行展示等处理。

### 调用科大讯飞Web API的方法 #### Python中调用科大讯飞Web API进行语音合成 为了成功调用科大讯飞Web API,在Python环境中完成文字语音功能,需遵循一系列特定步骤[^1]。 首先确保已注册并登录到科大讯飞开放平台账号,并通过实名验证来获得API访问权限。接着创建应用以获取AppID、API Key以及API Secret等必要参数用于后续请求鉴权过程。 对于具体的编程实现部分,可以利用`requests`库发送HTTP POST请求给定目标URL携带所需数据包体。下面给出一段简单的代码片段展示如何构建这样的网络交互逻辑: ```python import requests import base64 import json from hashlib import md5 def get_token(api_key, secret_key): url = "https://openapi.xfyun.cn/v2/aiui" data = { 'grant_type': 'client_credentials', 'client_id': api_key, 'client_secret': secret_key } response = requests.post(url=url, data=data) result = json.loads(response.text) if 'access_token' in result: return result['access_token'] else: raise Exception('Failed to obtain access token') def text_to_speech(text, appid, token): url = f"https://ltp-api.xfyun.cn/v1/synthesis?token={token}&auf=audio/L16;rate=16000&aue=raw&voice_name=xiaoyan&speed=50&volume=50&pitch=50&engine=standard&auf=audio/L16;rate=16000&text={text}" headers = {"Content-Type": "application/json", "X-Param": json.dumps({"app_id": appid})} res = requests.get(url=url, headers=headers) with open("output.pcm", "wb") as file: file.write(res.content) if __name__ == "__main__": APP_ID = "<Your App ID>" API_KEY = "<Your Api Key>" SECRET_KEY = "<Your Secret Key>" ACCESS_TOKEN = get_token(API_KEY, SECRET_KEY) TEXT_TO_CONVERT = "你好世界" try: text_to_speech(TEXT_TO_CONVERT, APP_ID, ACCESS_TOKEN) print("换成功") # 将PCM文件化为WAV格式以便于播放 from scipy.io.wavfile import write sample_rate = 16000 pcm_data = np.memmap('output.pcm', dtype='h', mode='r') wav_filename = "converted_output.wav" write(wav_filename, sample_rate, pcm_data.astype(np.int16)) print(f"WAV 文件 {wav_filename} 已保存") except Exception as e: print(e) ``` 上述脚本展示了从获取授权令牌到最后执行TTS(Text To Speech)操作的整体流程。值得注意的是,实际开发过程中还需要处理更多细节问题比如错误捕获机制优化、性能提升等方面的工作[^3]。
评论 59
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值