使用Python实现从麦克风获取音频并识别

 更新时间:2025年02月28日 08:30:38   作者:凤枭香  
这篇文章主要为大家详细介绍了如何使用Python实现从麦克风获取音频并识别功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

python麦克风获取音频并识别

麦克风获取

# 打开麦克风流
stream = audio.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)

设置参数

# 录音参数
FORMAT = pyaudio.paInt16  # 16-bit resolution
CHANNELS = 1              # 单声道
RATE = 16000              # 采样率 16kHz
CHUNK = 1024              # 数据块大小
RECORD_SECONDS = 5        # 录制时长 (秒)
WAVE_OUTPUT_FILENAME = "output.wav"

读取数据块

# 循环读取数据块
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    frames.append(data)

阿里语音识别模型加载

paraformer_path = "./iic/speech_paraformer-large-vad-punc-spk_asr_nat-zh-cn"
fsmn_path = "./iic/speech_fsmn_vad_zh-cn-16k-common-pytorch"
ct_punc_path = "./iic/punc_ct-transformer_cn-en-common-vocab471067-large"
cam_path = "./iic/speech_campplus_sv_zh-cn_16k-common"

model = AutoModel(model=paraformer_path, model_revision="v2.0.4",
                  vad_model=fsmn_path, vad_model_revision="v2.0.4",
                  punc_model=ct_punc_path, punc_model_revision="v2.0.4",
                  spk_model=cam_path, spk_model_revision="v2.0.2",
                  device="cpu"
                  )

阿里语音识别

res = model.generate(input=WAVE_OUTPUT_FILENAME,
                     batch_size_s=16000,
                     hotword='魔搭')

整体代码

import pyaudio
import wave
import threading
import keyboard
from funasr import AutoModel

# 录音参数
FORMAT = pyaudio.paInt16  # 16-bit resolution
CHANNELS = 1  # 单声道
RATE = 16000  # 采样率 16kHz
CHUNK = 1024  # 数据块大小
WAVE_OUTPUT_FILENAME = "./wav_data/output.wav"

# 初始化 PyAudio
audio = pyaudio.PyAudio()

frames = []
stream = None
recording = False

paraformer_path = "./iic/speech_paraformer-large-vad-punc-spk_asr_nat-zh-cn"
fsmn_path = "./iic/speech_fsmn_vad_zh-cn-16k-common-pytorch"
ct_punc_path = "./iic/punc_ct-transformer_cn-en-common-vocab471067-large"
cam_path = "./iic/speech_campplus_sv_zh-cn_16k-common"

model = AutoModel(model=paraformer_path, model_revision="v2.0.4",
                  vad_model=fsmn_path, vad_model_revision="v2.0.4",
                  punc_model=ct_punc_path, punc_model_revision="v2.0.4",
                  spk_model=cam_path, spk_model_revision="v2.0.2",
                  device="cpu"
                  )

print("加载模型完成!!!")


def start_recording():
    """
    开始录音
    """
    global stream, recording
    if not recording:
        print("开始录音...")
        recording = True
        stream = audio.open(format=FORMAT,
                            channels=CHANNELS,
                            rate=RATE,
                            input=True,
                            frames_per_buffer=CHUNK)
        record_thread = threading.Thread(target=record_audio)
        record_thread.start()


def stop_recording():
    """
    停止录音并进行识别
    """
    global stream, recording
    if recording:
        print("录音结束.")
        recording = False
        stream.stop_stream()
        stream.close()
        save_audio()
        audio.terminate()
        print("开始识别!!!")
        res = model.generate(input=WAVE_OUTPUT_FILENAME,
                             batch_size_s=16000,
                             hotword='魔搭')
        print("识别结束!!!")
        print("识别结果:", res)


def record_audio():
    """
    录音功能实现
    """
    while recording:
        data = stream.read(CHUNK)
        frames.append(data)


def save_audio():
    """
    保存录音文件
    """
    wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(audio.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    wf.writeframes(b''.join(frames))
    wf.close()


# 监听 Ctrl 键开始录音
keyboard.add_hotkey('ctrl', start_recording)

# 监听 Alt 键结束录音
keyboard.add_hotkey('alt', stop_recording)

print("按 Ctrl 开始录音,按 Alt 结束录音")
keyboard.wait()  # 保持程序运行

到此这篇关于使用Python实现从麦克风获取音频并识别的文章就介绍到这了,更多相关Python麦克风获取音频内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中类似于jquery的pyquery库用法分析

    Python中类似于jquery的pyquery库用法分析

    这篇文章主要介绍了Python中类似于jquery的pyquery库用法,结合实例形式分析了pyquery库的概念、原理、使用方法及操作技巧,需要的朋友可以参考下
    2019-12-12
  • 使用Python操作Excel中图片的基础示例(插入、替换、提取、删除)

    使用Python操作Excel中图片的基础示例(插入、替换、提取、删除)

    Excel是主要用于处理表格和数据的工具,我们也能在其中插入、编辑或管理图片,为工作表增添视觉效果,提升报告的吸引力,本文将详细介绍如何使用Python操作Excel中的图片,文中有详细代码示例供大家参考,需要的朋友可以参考下
    2024-07-07
  • pandas交换行的具体实现

    pandas交换行的具体实现

    Pandas 是专注于表格数据处理的 Python 第三方库,能帮助我们完成各种各样的表格数据操作,本文主要介绍了pandas交换行的具体实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • 利用pyinstaller将py文件打包为exe的方法

    利用pyinstaller将py文件打包为exe的方法

    本篇文章主要介绍了利用pyinstaller将py文件打包为exe的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • python批量读取文件名并写入txt文件中

    python批量读取文件名并写入txt文件中

    这篇文章主要为大家详细介绍了python批量读取文件名并写入txt文件中,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • 深入了解Django View(视图系统)

    深入了解Django View(视图系统)

    这篇文章主要介绍了简单了解Django View(视图系统),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 利用Python写一个爬妹子的爬虫

    利用Python写一个爬妹子的爬虫

    这篇文章主要给大家介绍了关于利用Python写一个爬妹子爬虫的相关资料,文中通过实例代码将实现的方法一步步介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • pip安装python库时报错的问题解决

    pip安装python库时报错的问题解决

    本文主要介绍了在Windows系统上解决pip命令找不到的问题的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • Matplotlib绘制条形图的方法你知道吗

    Matplotlib绘制条形图的方法你知道吗

    这篇文章主要为大家详细介绍了Matplotlib绘制条形图的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助<BR>
    2022-03-03
  • 详解Python是如何处理不同时区的

    详解Python是如何处理不同时区的

    时区是指在地球上不同地方的时间差异,地球分为 24 个时区,每个时区都相对于格林威治标准时间或协调世界时(UTC)有所偏移。本文主要和大家来聊聊Python是如何处理不同时区的,希望对大家有所帮助
    2023-02-02

最新评论