语音交互程序:语音识别、语音输出、录音计算

预览

测试预览,这是完整版本的4倍速度(加速是一件比较麻烦的事,因为moviepy加速时只对视频加速,不对音频加速,因此需要提取无音频的视频进行加速、然后进行音频加速、最后合成)

语音控制程序示例(4倍快速剪辑版)

一、简介

语音命令控制即通过语音实现对于相应任务的完成,此API接口主要实现语音交互式输出,即在语音提示下完成任务所需的人工信息;简单的说就是语音转文本;但是又不止于语音转文本,该模块包括了语音识别即语音转文本、语音输出即文本转语音以及录音判断功能

二、构成说明

程序一共是由 一个三个模块:命令读取(puaudio录音)、命令识别(谷歌语音识别)、命令输出(百度语音)

(一)语音识别与语音输出

语音识别利用的是谷歌语音识别,实测是在所有语音识别中效果最好的,其余的百度语音识别以及cmu均失败不准确,确定在于需要挂上vpn

语音输出使用时的百度的语音输出,相对于pyttsx3以及win32语音输出来说,百度语音识别可以支持中文

以上两个使用的是谷歌平台以及百度平台的接口,并没有真正的识别模型,而有识别模型的speech_recognition中的PocketSphinx识别准确率特别低,总体上只是进行了组合(虽然组合也是一种智力成果,但是毕竟只是在调包)

(二)命令读取模块

真正贡献了智力成果的地方,是对于命令接收程序即录音实现了比较智能的等待——一个简单的算法。等待一共两个条件,即长期不说话(5秒)以及超时即即使说话时间过长也会退出(20秒),看起来似乎很短,但是在剪辑视频中可见其实并不短了,因为几乎每次都是因为命令完成而退出,几乎不会由于20秒的长命令时间退出。当然这个问题在命令复杂的时候会不合时宜,但是命令过于复杂时,现在计算机技术还不能完成。

虽然在语音查询天气的示例中使用了一些自然语音识别技术,但是本质上和上面是一样的,就是将复杂的命令进行切分,切为简单的命令;如果切分的不对或者切分的简单命令不在命令库中,复杂命令依然不能判断。其中自然语言处理主要是最基础的jieba切词,然后使用fuzzywuzzy模块进行模糊匹配,去语料库中匹配,比如在天气查询中,语音输入长沙,那么就会对全国各市县进行模糊匹配,只有匹配结果大于等于90分的才能进入并作为命令输出。然而

在这里插入图片描述

这里比较麻烦的是可能存在多个类似的匹配结果,如果继续询问到底是长沙镇、长沙乡、长沙市又比较麻烦,所以选择尽量大的地名作为命令结果,输出长沙市的天气。

三、功能说明

功能类似于家庭音箱,小爱同学;

优点:首先,相比于小爱同学的优点在于,可扩散,用统计学的术语来说就是程序泛化能力强,只要是能够提供API接口的程序都可以运用、
其次,内部功能可以继续扩展,具有极强的个性,相对完美的适应于个人

缺点:谷歌语音识别需要挂vpn,而百度语音可能存在次数限制,虽然现在没有遇到这个限制(说明不商用可能是足够的)

四、模块下载

该语音命令模块上传到了GitHub上,链接: reporter-law/speak_command.
直接

pip install speak_command

亦可

五、示例完整版本

本来在“开始”命令剪辑了一个阅兵时的命令“开始”,但是审核不过,可能需要肖像权

语音命令模块

六、补充:实现交互等待即唤醒

(一)唤醒过程说明

实现语音交互程序的唤醒非常简单,需要一直调用语音识别,如果语音命令含有唤醒词就进入语音交互,否者继续进行等待,类似于对小爱音箱说“小爱同学”才会启动

源码:

from apscheduler.schedulers.blocking import BlockingScheduler

def wake_speak():
 """语音唤醒"""
filename = "J:\pyinstaller\Python3.8版本项目\语音命令库\语音命令模块\录音"
if not os.path.exists(filename):
    os.makedirs(filename)
file = filename+"\waking.wav"
r(file)
text = kf(file)
print(text)
if "语音命令" in text:
    print("进去正式命令读取阶段")
    text = sc.command_speak()
    return text
else:
    print("\r非唤醒命令",end="")




sched = BlockingScheduler()  # 创建调度器
sched.add_job(wake_speak, 'interval', seconds=15)  # 每隔5秒执行一次
sched.start()

其实就是通过apscheduler,不停的调度
将之放入任务计划程序就可以实现唤醒以及语音命令,将语音命令的输出作为启动其他程序的接口完成完整的语音控制

(二)下载方式

1.whl文件:链接: link.

2、tar.gz压缩包:链接: link.

3.pypi上也上传的,但是有点小问题,不想对版本号进行迭代,就没有上传了

pip install speak_command
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值