Python基于百度API和ffmpeg音频格式转化实现实时语音识别
环境配置ffmpeg运行环境Windows10安装官网地址:http://ffmpeg.org/download.html解压出来放到安装软件的盘符,添加环境变量即可 D:\ffmpeg-n4.4.1-2-gcc33e73618-win64-gpl-shared-4.4\bin添加过程找到你解压到的位置,复制文件路径win+R,输入指令sysdm.cpl选择高级,环境变量选择Path,点击编辑点击
·
环境配置
ffmpeg运行环境
Windows10安装
官网地址:http://ffmpeg.org/download.html
解压出来放到安装软件的盘符,添加环境变量即可 D:\ffmpeg-n4.4.1-2-gcc33e73618-win64-gpl-shared-4.4\bin
添加过程
找到你解压到的位置,复制文件路径
win+R,输入指令
sysdm.cpl
选择高级,环境变量
选择Path,点击编辑
点击新建,复制刚才的路径,回车,关闭即可
验证是否安装完成
cmd输入
ffmpeg -version
出现如下界面则安装完成
需要安装的第三方拓展库
wave
PyAudio #这个如果安装失败,就去找源码文件,手动安装
time
baidu-api
申请一个百度的语音识别API账号
点击立即使用
领取免费资源,然后创建应用
然后就会给你账号,密码,API接口号
注意,免费资源是有时间的,有次数限制的,学习研究是没有问题,如果用于商业就需要自己花钱购买使用次数。百度维护和升级这些人工智能是需要大量费用的,免费资源是对学习者最大的帮助了。
源码(API自己申请,填自己的账号,我用Spyder编译器写的,pycharm那边没试过能不能跑通)
import wave
from pyaudio import PyAudio, paInt16
import time
from aip import AipSpeech#百度API配套包,装了baidu-api就有
import os#系统包
#录音参数设置
framerate = 16000 # 采样率
num_samples = 3000 # 采样点
channels = 1 # 声道
sampwidth = 2 # 采样宽度2bytes
FILEPATH = 'a.wave' #文件保存路径
dur = 5 # 设置录音时间(秒)
#语音获取
def Acquisition():
print("5s录音时间")
pa = PyAudio()
#打开一个新的音频stream
stream = pa.open(format=paInt16, channels=channels,
rate=framerate, input=True, frames_per_buffer=num_samples)
my_buf = [] #存放录音数据
t = time.time()
print('正在录音...')
while time.time() < t + dur: # 设置录音时间(秒)
#循环read,每次read 2000frames
string_audio_data = stream.read(num_samples)
my_buf.append(string_audio_data)
print('录音结束.')
save_wave_file(FILEPATH, my_buf)
stream.close()
#录音文件写入
def save_wave_file(filepath, data):
wf = wave.open(filepath, 'wb')
wf.setnchannels(channels)
wf.setsampwidth(sampwidth)
wf.setframerate(framerate)
wf.writeframes(b''.join(data))
wf.close()
#识别模块
def Distinguish():
#格式转化:文件路径修改,录音文件位置*.wave和格式转化后文件*.pcm的位置,请不要随意改变参数,除非你懂
os.system('ffmpeg -y -i a.wave -acodec pcm_s16le -f s16le -ac 1 -ar 16000 a.pcm')
#API账号填自己的账号
APP_ID=' '
API_KEY=' '
SECRET_KEY=' '
#客户信息
client=AipSpeech(APP_ID,API_KEY,SECRET_KEY)
with open('a.pcm','rb') as fp:
au=fp.read()
res=client.asr(au,'pcm',16000,{'dev_pid':1537})
print('识别结果:'+"".join(res['result']))
if __name__ == '__main__':
while True:
#录音
Acquisition()
#识别录音
Distinguish()
更多推荐
已为社区贡献1条内容
所有评论(0)