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()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)