语音识别(非实时)
1.环境
python :3.10.14
2.完整代码
import whisper #whisper
import wave # 使用wave库可读、写wav类型的音频文件
import pyaudio # 使用pyaudio库可以进行录音,播放,生成wav文件
def record(time): # 录音程序# 定义数据流块CHUNK = 1024 # 音频帧率(也就是每次读取的数据是多少,默认1024)FORMAT = pyaudio.paInt16 # 采样时生成wav文件正常格式CHANNELS = 1 # 音轨数(每条音轨定义了该条音轨的属性,如音轨的音色、音色库、通道数、输入/输出端口、音量等。可以多个音轨,不唯一)RATE = 16000 # 采样率(即每秒采样多少数据)RECORD_SECONDS = time # 录音时间WAVE_OUTPUT_FILENAME = "./output.wav" # 保存音频路径p = pyaudio.PyAudio() # 创建PyAudio对象stream = p.open(format=FORMAT, # 采样生成wav文件的正常格式channels=CHANNELS, # 音轨数rate=RATE, # 采样率input=True, # Ture代表这是一条输入流,False代表这不是输入流frames_per_buffer=CHUNK) # 每个缓冲多少帧print("* 开始录音") # 开始录音标志frames = [] # 定义frames为一个空列表for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): # 计算要读多少次,每秒的采样率/每次读多少数据*录音时间=需要读多少次data = stream.read(CHUNK) # 每次读chunk个数据frames.append(data) # 将读出的数据保存到列表中print("* 结束语音") # 结束录音标志stream.stop_stream() # 停止输入流stream.close() # 关闭输入流p.terminate() # 终止pyaudiowf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') # 以'wb‘二进制流写的方式打开一个文件wf.setnchannels(CHANNELS) # 设置音轨数wf.setsampwidth(p.get_sample_size(FORMAT)) # 设置采样点数据的格式,和FOMART保持一致wf.setframerate(RATE) # 设置采样率与RATE要一致wf.writeframes(b''.join(frames)) # 将声音数据写入文件wf.close() # 数据流保存完,关闭文件
if __name__ == '__main__':# model = whisper.load_model("medium")model = whisper.load_model("small")record(5) # 定义录音时间,单位/sresult = model.transcribe("./output.wav",language='chinese',fp16 = False)s = result["text"]print("语音转文字"+s)
3.问题
1.这里面用的是openAI的whisper模型,直接代码跑起来自动下载
2.有问题私信联系