46行代码实现免费语音识别,用过的人当场拍桌子大叫一声“好”!

1.在做一些语音项目的时候,每次都要调用API,百度的或者是科大讯飞的,要钱贵不说,识别效果还差的要命,此事苦其久也。
在这里插入图片描述
2.使用python3.8及以上的编译器。
在这里插入图片描述
3.安装pyaudio库包,该库包是用来进行实时语音录制和保存的。使用以下命令:

pip install pyaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述
4.安装whisper库包,该库包是用来进行语音转文字识别。使用以下命令:

pip install openai-whisper -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述
5.安装和配置ffmpeg软件,后面配合录音使用,安装配置好后检测如下。
在这里插入图片描述

6.新建一个.py文件,比如"语音识别.py"文件。
在这里插入图片描述
7.准备编写代码,首先导入以下四个库包。

import whisper
import zhconv
import wave  # 使用wave库可读、写wav类型的音频文件
import pyaudio  # 使用pyaudio库可以进行录音,播放,生成wav文件

在这里插入图片描述
8.定义一个录音函数,同时在录音函数中定义数据流块。

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("* recording")  # 开始录音标志
    frames = []  # 定义frames为一个空列表

在这里插入图片描述
9.计算声音数据,准备保存实时声音数据到列表。

    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):  # 计算要读多少次,每秒的采样率/每次读多少数据*录音时间=需要读多少次
        data = stream.read(CHUNK)  # 每次读chunk个数据
        frames.append(data)  # 将读出的数据保存到列表中
    print("* done recording")  # 结束录音标志

    stream.stop_stream()  # 停止输入流
    stream.close()  # 关闭输入流
    p.terminate()  # 终止pyaudio

在这里插入图片描述
10.将保存在列表中的声音数据以二进制的形式保存在一个wav声音文件中。

wf = 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()  # 数据流保存完,关闭文件

在这里插入图片描述
11.继续定义一个main函数,该函数的功能是加载base语音模型(提示:该语音模型会自动下载),将实时语音以中文形式翻译成文字输出。

def main():
    model = whisper.load_model("base")
    record(5)  # 定义录音时间,单位/s
    result = model.transcribe("output.wav", language='Chinese', fp16=False)
    s = result["text"]
    s1 = zhconv.convert(s, 'zh-cn')
    print(s1)

在这里插入图片描述
12.最后,写一个运行入口,运行main函数。

if __name__ == '__main__':
    main()

在这里插入图片描述

13.运行“语音识别.py”文件,
在这里插入图片描述

14.运行后,说出“晚上睡不着怎么办”,查看效果。
在这里插入图片描述
15.完整代码展示

import whisper
import zhconv
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("* recording")  # 开始录音标志
    frames = []  # 定义frames为一个空列表
    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):  # 计算要读多少次,每秒的采样率/每次读多少数据*录音时间=需要读多少次
        data = stream.read(CHUNK)  # 每次读chunk个数据
        frames.append(data)  # 将读出的数据保存到列表中
    print("* done recording")  # 结束录音标志

    stream.stop_stream()  # 停止输入流
    stream.close()  # 关闭输入流
    p.terminate()  # 终止pyaudio

    wf = 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()  # 数据流保存完,关闭文件
def main():
    model = whisper.load_model("base")
    record(5)  # 定义录音时间,单位/s
    result = model.transcribe("output.wav", language='Chinese', fp16=False)
    s = result["text"]
    s1 = zhconv.convert(s, 'zh-cn')
    print(s1)

if __name__ == '__main__':
    main()

在这里插入图片描述
16.最后,运行成功的同学记得一键三连!有问题评论区见!
在这里插入图片描述

  • 10
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
实现中文语音识别,我们可以使用百度AI平台的语音识别API。以下是使用Python编写的示例代码: ```python import requests import json # 百度AI平台的API Key和Secret Key API_KEY = 'your_api_key' SECRET_KEY = 'your_secret_key' # 需要识别的音频文件路径 AUDIO_FILE = 'path/to/audio/file' # 构造请求头 headers = { 'Content-Type': 'audio/wav;rate=16000', 'Content-Length': str(os.path.getsize(AUDIO_FILE)), } # 构造请求参数 params = { 'format': 'wav', 'dev_pid': 1536, # 中文普通话 'token': '', 'cuid': 'baidu_speech_demo', 'len': os.path.getsize(AUDIO_FILE), 'speech': base64.b64encode(open(AUDIO_FILE, 'rb').read()).decode('utf-8'), } # 获取Access Token def get_access_token(api_key, secret_key): url = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={api_key}&client_secret={secret_key}' response = requests.post(url) access_token = json.loads(response.text)['access_token'] return access_token access_token = get_access_token(API_KEY, SECRET_KEY) params['token'] = access_token # 发送请求 url = 'https://vop.baidu.com/server_api' response = requests.post(url, headers=headers, params=params) # 解析响应结果 if response.status_code == 200: result = json.loads(response.text) if 'result' in result: print(result['result']) else: print(result['err_msg']) else: print('识别失败') ``` 在这个示例中,我们使用了requests库发送HTTP请求,并使用json库解析响应结果。我们需要先获取Access Token,然后才能调用语音识别API。最后,解析响应结果,获取识别到的文字信息。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

萧鼎

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

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

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

打赏作者

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

抵扣说明:

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

余额充值