You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js如何将multer上传的wav音频传递给Python脚本实现语音识别

实现方案

你可以直接将multer存储的音频文件路径传递给Python脚本,配合你现有代码的stdin读取逻辑即可完成调用,具体实现如下:

Node.js 端核心代码

你需要在上传路由中通过child_process.spawn启动Python子进程,将文件路径序列化后传入stdin:

const { spawn } = require('child_process');
const path = require('path');
// 其他express、multer的配置保持你现有逻辑不变

app.post('/upload', upload.single('file'), (req, res) => {
  // 转换为绝对路径,避免Python读取相对路径失败
  const audioFilePath = path.resolve(__dirname, req.file.path);
  
  // 启动Python子进程,注意本地Python命令如果是python3需对应修改
  const pyProcess = spawn('python', ['你的ASR脚本文件路径.py']);

  // 向Python stdin写入序列化后的路径
  pyProcess.stdin.write(JSON.stringify(audioFilePath));
  pyProcess.stdin.end();

  let asrResult = '';
  let errLog = '';

  // 接收Python输出的识别结果
  pyProcess.stdout.on('data', data => {
    asrResult += data.toString();
  });

  // 接收Python错误输出
  pyProcess.stderr.on('data', data => {
    errLog += data.toString();
  });

  // 子进程退出后返回结果给前端
  pyProcess.on('close', code => {
    if (code !== 0) {
      return res.status(500).json({ success: false, error: errLog || '识别进程异常' });
    }
    res.json({ success: true, result: asrResult.trim() });
  });
});

Python 脚本调整

你现有脚本缺少执行入口,需要在末尾添加启动逻辑,修改后完整代码如下:

import speech_recognition as sr
import sys, json

def read_in():
  lines = sys.stdin.readlines()
  return json.loads(lines[0])

def main():
  audio_path = read_in()
  r = sr.Recognizer()
  with sr.AudioFile(audio_path) as source:
    audio_text = r.listen(source)
    try:
        text = r.recognize_google(audio_text)
        print(text)
    except Exception as e:
        print(f'Error Occurred: {str(e)}')

# 新增执行入口
if __name__ == "__main__":
    main()

注意事项

  • 确保运行环境已安装Python依赖:执行pip install SpeechRecognition pyaudio即可,Windows环境如果安装pyaudio失败可下载对应版本的whl包本地安装
  • 识别完成后如果不需要保留音频文件,可新增逻辑删除public目录下的临时文件,避免占用磁盘空间
  • 如果是Linux/macOS环境,Python命令默认是python3,需把spawn的第一个参数对应改为python3

内容的提问来源于stack exchange,提问作者Shivam Raina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:27:03