在 Flask 应用中调用讯飞语音识别接口(以 RESTful API 为例),需要完成以下步骤:

1. 注册讯飞开放平台账号

  • 访问 讯飞开放平台 注册账号
  • 创建应用,获取 APPIDAPI KeyAPI Secret

2. 安装依赖库

pip install requests

3. Flask 应用代码示例

import base64
import hashlib
import hmac
import time
import requests
from flask import Flask, request, jsonify

app = Flask(__name__)

# 讯飞开放平台配置
APPID = 'your_appid'
API_KEY = 'your_api_key'
API_SECRET = 'your_api_secret'
URL = 'https://api.xfyun.cn/v1/service/v1/iat'

@app.route('/speech-recognition', methods=['POST'])
def speech_recognition():
    # 获取上传的音频文件(需为 WAV 格式,16kHz 采样率,单声道)
    audio_file = request.files.get('audio')
    if not audio_file:
        return jsonify({'error': '未上传音频文件'}), 400

    # 读取音频文件并进行 Base64 编码
    audio_data = audio_file.read()
    audio_base64 = base64.b64encode(audio_data).decode('utf-8')

    # 生成鉴权参数
    cur_time = str(int(time.time()))
    param = {
        "engine_type": "iat",  # 语音转写引擎类型
        "aue": "raw",           # 音频编码格式(raw 表示原始数据)
        "audio_format": "wav",   # 音频格式
        "sample_rate": 16000,   # 采样率
        "scene": "main"         # 使用场景
    }
    param_json = json.dumps(param).replace(' ', '')
    param_base64 = base64.b64encode(param_json.encode('utf-8')).decode('utf-8')

    # 计算鉴权字符串
    sign_str = f"{API_KEY}\n{param_base64}\n{cur_time}"
    sign = hmac.new(API_SECRET.encode('utf-8'), sign_str.encode('utf-8'), hashlib.sha256).hexdigest()

    # 构造请求头
    headers = {
        'Content-Type': 'application/json',
        'X-Param': param_base64,
        'X-CurTime': cur_time,
        'X-Appid': APPID,
        'X-CheckSum': sign
    }

    # 构造请求体
    body = {
        "data": audio_base64
    }

    try:
        response = requests.post(URL, headers=headers, json=body)
        result = response.json()
        if result.get('code') == 0:
            return jsonify({'text': result['data']})
        else:
            return jsonify({'error': result.get('message') or '识别失败'}), 400
    except Exception as e:
        return jsonify({'error': str(e)}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

4. 核心步骤解释

步骤 1:上传音频文件
  • 客户端需通过 POST 请求上传 WAV 格式的音频文件(参数名 audio)。
步骤 2:生成鉴权参数
  • param 对象:定义识别引擎类型、音频格式等参数。
  • X-Param:将 param 转为 JSON 并 Base64 编码。
  • X-CheckSum:通过 HMAC-SHA256 计算签名,确保请求合法性。
步骤 3:构造请求
  • 请求头:包含鉴权参数和应用信息。
  • 请求体:音频数据的 Base64 编码。
步骤 4:处理响应
  • 成功响应示例:
    {
      "code": 0,
      "data": "识别的文本内容"
    }
    

5. 使用说明

  1. 前端示例(HTML + JavaScript):

    <input type="file" id="audio-file" accept=".wav">
    <button onclick="recognize()">识别</button>
    
    <script>
    function recognize() {
      const file = document.getElementById('audio-file').files[0];
      const formData = new FormData();
      formData.append('audio', file);
    
      fetch('/speech-recognition', {
        method: 'POST',
        body: formData
      })
      .then(res => res.json())
      .then(data => console.log(data.text));
    }
    </script>
    
  2. 音频要求

    • 格式:WAV
    • 采样率:16kHz
    • 编码:单声道,原始音频数据(非压缩)

6. 新疆地区注意事项

  • 网络优化:建议使用 CDN 或本地服务器缓存接口响应。
  • 超时处理:增加请求超时时间(如 requests.post(..., timeout=10))。

常见问题

  1. 鉴权失败:检查 API_KEYAPI_SECRET 是否正确,确保时间戳与服务器时间同步。
  2. 音频格式错误:使用工具(如 ffmpeg)转换音频格式:
    ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav
    

通过以上步骤,即可在 Flask 应用中实现讯飞语音识别功能。

在这里插入图片描述

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐