python系列&deep_study系列:使用python操作麦克风录制讲话,实时语音识别转换为文字

使用python操作麦克风录制讲话,实时语音识别转换为文字




使用python操作麦克风录制讲话,实时语音识别转换为文字

在这个项目中,我们将建立一个系统,它可以使用麦克风录制现场讲话,然后通过语音识别进行转录。这可用于自动记录和转录会议、讲座和其他活动,能过自动记录演讲内容。

我们将编写代码,来开始和停止录音,让语音被自动录制和转录。

项目步骤

使用 pyaudio 录制麦克风音频

使用 vosk 创建语音识别系统

  • 可选 使用 recasepunc 为文本记录添加标点符号

请在本地安装以下软件:

Python 3.8+
Python 软件包
# pip install vosk
# pip install pydub
# pip install transformers
# pip install torch -f https://download.pytorch.org/whl/torch_stable.html
# pip install pyaudio
# pip install ipywidgets

Vosk

下载语音识别模型 ,可以使用下面代码进行下载,也可以自己下载并解压到当前文件夹,建议手动下载 ,地址VOSK Models

from vosk import Model
# 自动下载
model = Model(model_name="vosk-model-cn-0.22")
# 手动下载并指定
model = Model(model_path="./vosk-model-cn-0.22")

Pyaudio

Pyaudio 的安装可能有点麻烦,因为它依赖于系统软件包。请查看PyAudio: Cross-platform audio I/O for Python, with PortAudio,了解各操作系统的具体说明。

您还需要找出正确的录音设备。运行这段代码来查找麦克风的索引信息,需要确定机器能用的设备id:

# Find audio device index
import pyaudio
p = pyaudio.PyAudio()
for i in range(p.get_device_count()):
    print(p.get_device_info_by_index(i))

完整代码

# -*- coding: utf-8 -*-
# @author: cc
# @time: 2024/4/22
# microphone.py
# pip install vosk
# pip install pydub
# pip install transformers
# pip install torch -f https://download.pytorch.org/whl/torch_stable.html
# pip install pyaudio
# pip install ipywidgets
import ipywidgets as widgets
from IPython.display import display
from queue import Queue
import wave
from threading import Thread
import pyaudio
import json
from vosk import Model, KaldiRecognizer
import time



p = pyaudio.PyAudio()
messages = Queue()
recordings = Queue()


CHANNELS = 1
FRAME_RATE = 16000
RECORD_SECONDS = 2
AUDIO_FORMAT = pyaudio.paInt16
SAMPLE_SIZE = 2

def record_microphone(chunk=1024):
    p = pyaudio.PyAudio()

    stream = p.open(format=AUDIO_FORMAT,
                    channels=CHANNELS,
                    rate=FRAME_RATE,
                    input=True,
                    input_device_index=0,   # 这是麦克风的索引id
                    frames_per_buffer=chunk)

    frames = []

    while not messages.empty():
        data = stream.read(chunk)
        print(">>添加语音数据")
        frames.append(data)
        if len(frames) >= (FRAME_RATE * RECORD_SECONDS) / chunk:
            recordings.put(frames.copy())
            frames = []
    # for i in range(0, int(FRAME_RATE / chunk * RECORD_SECONDS)):
    #     data = stream.read(chunk)
    #     frames.append(data)

    stream.stop_stream()
    stream.close()
    p.terminate()


    wf = wave.open('output.wav', 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(AUDIO_FORMAT))
    wf.setframerate(FRAME_RATE)
    wf.writeframes(b''.join(frames))
    wf.close()


model = Model(model_path="./vosk-model-cn-0.22")
rec = KaldiRecognizer(model, FRAME_RATE)
rec.SetWords(True)
def speech_recognition():
    while not messages.empty():
        print("识别语音")
        frames = recordings.get()

        rec.AcceptWaveform(b''.join(frames))
        result = rec.Result()
        text = json.loads(result)["text"]
        print("识别的文字",text)
        # cased = subprocess.check_output('python recasepunc/recasepunc.py predict recasepunc/checkpoint', shell=True,
        #                                 text=True, input=text)
        # output.append_stdout(cased)
        time.sleep(1)


record_microphone()



def start_recording():
    messages.put(True)

    display("Starting...")
    record = Thread(target=record_microphone)
    record.start()
    transcribe = Thread(target=speech_recognition)
    transcribe.start()

# for i in range(p.get_device_count()):
#     print(p.get_device_info_by_index(i))
#
# p.terminate()
start_recording()







iyh木易

使用python操作麦克风录制讲话,实时语音识别转换为文字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坦笑&&life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值