语音交互程序:语音识别、语音输出、录音计算 您所在的位置:网站首页 AI语音交互合资SUV 语音交互程序:语音识别、语音输出、录音计算

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

2023-08-18 08:40| 来源: 网络整理| 查看: 265

语音交互程序 预览一、简介二、构成说明(一)语音识别与语音输出(二)命令读取模块 三、功能说明四、模块下载五、示例完整版本六、补充:实现交互等待即唤醒(一)唤醒过程说明(二)下载方式

预览

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


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有