Python中如何实现从QQ或微信提取音频并进行语音识别?

想用 qq 或者微信做一个小的语音命令服务器的东西, 比如别人给我发送一个语音命令, 然后我语音识别这个语音然后做出判断。或者有什么其他的办法可以实现这个功能, 主要是考虑到 qq 或者微信各个平台上都有比较方便。


Python中如何实现从QQ或微信提取音频并进行语音识别?
6 回复

语音识别各家都有 API 了,比如 ai.qq.com
但是怎么抓取 qq 和微信的语音呢?


这个需求涉及几个关键步骤:获取音频文件、转换格式、调用语音识别API。直接读取QQ/微信的聊天文件比较困难,因为它们通常加密存储。更实际的做法是:

  1. 获取音频文件:手动将QQ/微信中的音频消息导出到本地(通常通过“另存为”或转发到文件传输助手)
  2. 格式转换:QQ/微信的音频可能是amr、silk等特殊格式,需要转换为通用格式(如wav)
  3. 语音识别:使用SpeechRecognition等库处理

这里有个完整示例,假设你已经把音频文件保存为audio.amr

import speech_recognition as sr
from pydub import AudioSegment
import os

def convert_audio(input_path, output_path="converted.wav"):
    """转换音频格式为wav"""
    audio = AudioSegment.from_file(input_path)
    audio.export(output_path, format="wav")
    return output_path

def recognize_speech(audio_path):
    """识别音频中的语音"""
    r = sr.Recognizer()
    
    with sr.AudioFile(audio_path) as source:
        audio_data = r.record(source)
        
        try:
            # 使用百度API(需要申请免费key)
            text = r.recognize_baidu(audio_data, 
                                   app_key='你的APP_KEY',
                                   secret_key='你的SECRET_KEY',
                                   language='zh')
            return text
        except sr.UnknownValueError:
            return "无法识别音频"
        except sr.RequestError:
            return "API请求失败"

# 使用示例
if __name__ == "__main__":
    # 1. 转换格式(如果是amr/silk格式)
    wav_file = convert_audio("audio.amr")
    
    # 2. 语音识别
    result = recognize_speech(wav_file)
    print(f"识别结果:{result}")
    
    # 清理临时文件
    os.remove(wav_file)

需要注意的几点

  • 如果音频是silk格式(微信语音),需要先用silk-v3-decoder转换
  • 百度语音识别API有免费额度,需要去百度AI平台申请
  • 也可以使用其他引擎,比如Google、科大讯飞

简单建议:先手动导出音频文件,然后用上述流程处理。

xposed 插件,有没有现成的不知道。但是自己写应该是可以满足需求的。

去找找 QQ 微信 机器人

参考微信机器人,github 上一堆轮子

公众号有这个接口啊

回到顶部