如何将RTSP流音频传入PyAudio进行语音识别处理?
可以处理RTSP流音频,但需要修改现有代码
你的现有代码是通过PyAudio读取本地麦克风的音频输入,要处理RTSP流的音频,需要替换音频输入的来源——从网络RTSP流中提取并转换音频数据,再喂给Vosk的识别器。
修改思路
- 放弃PyAudio读取麦克风的逻辑,改用FFmpeg(或其Python绑定库
ffmpeg-python)拉取RTSP流,解封装出音频流,并转换成Vosk要求的格式(16位单声道PCM,采样率128000,和你现有代码的参数匹配)。 - 把转换后的音频数据流直接传给
KaldiRecognizer.AcceptWaveform()做识别。
修改后的代码示例
import json from vosk import Model, KaldiRecognizer import ffmpeg from Analysis import Voice_tag class RTSPVoiceRecognizer(): def __init__(self, rtsp_url): # 初始化Vosk模型,保持原采样率参数 model = Model("model1") self.rec = KaldiRecognizer(model, 128000) # 用FFmpeg拉取RTSP流,提取音频并转换格式 self.process = ( ffmpeg .input(rtsp_url) .output('pipe:', format='s16le', acodec='pcm_s16le', ac=1, ar=128000) .run_async(pipe_stdout=True) ) # 启动识别循环 self.start_recognition() def start_recognition(self): print('RTSP音频识别已启动') while True: # 从FFmpeg的输出管道读取音频数据 data = self.process.stdout.read(32000) if not data: break # 喂给Vosk识别器 if self.rec.AcceptWaveform(data): out = json.loads(self.rec.Result()) if out['text']: print(f"识别结果: {out['text']}") # 调用原有的Voice_tag处理逻辑 Voice_tag(out['text']) print(" ") # 替换成你的RTSP流地址 rtsp_url = "rtsp://your-rtsp-stream-url" recognizer = RTSPVoiceRecognizer(rtsp_url)
注意事项
- 先安装依赖:
pip install ffmpeg-python,同时确保系统已经安装了FFmpeg(可以通过ffmpeg -version验证)。 - 确保RTSP流的音频编码可以被FFmpeg解码,如果流的参数和代码中指定的
ar=128000(采样率)、ac=1(单声道)不匹配,FFmpeg会自动转换,但如果差异过大可能影响识别效果。 - 原代码中未定义的
CamVoise()方法已被整合到识别循环逻辑中,可根据自身需求调整结构。
内容的提问来源于stack exchange,提问作者Genry
相关产品推荐
相关产品推荐

