预览
测试预览,这是完整版本的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