突发奇想,想结合目前的一些所学知识搞一个项目出来,于是乎结合目前的语言大模型搞了一个语音助手,哈哈,好玩多于实用,可以根据你的语音输入回复你的问题,并且自动语音播报出来,本着开源激发更多想法的原则,开源本项目的代码,文末可以获取。
下面介绍一下整个项目,便于大家理解
先来看看项目演示吧
哈哈不错吧
项目技术总揽
本项目的三大核心技术是:语音转文本,语言大模型根据问题产生答案,文本合成语音。三大技术用的都是开源项目,方便多少复现使用.语音转文字是用的funasr阿里开源的;大模型使用基于ollama的qwen2:7b,当然你也可以选择其他的比如gemma2,glm4等;文本合成语音有很多可选方案,比如chattts,fishspeeh,edge-tts,本次基于时间和效果的考虑,选择了edgetts,速度快,效果好,声音可选
技术代码简介
1、语音转文本funasr
model=AutoModel(model="paraformer-zh",vad_model="fsmn-vad",punc_model="ct-punc")defget_spk_txt(file):res=model.generate(input=file,batch_size_s=300,hotword='魔搭')returnres[0]["text"]
这里使用paraformer-zh 模型,第一使用会下载模型,可能会慢一点,这个函数可以直接将语音文件转成文本,当然还有许多其他模型大家可以去官网看看
2、大模型调用
defget_resp(input):prompt="用相对简练的句子回答我的问题,最好不要超过80字:我的问题是{0}".format(input)resp=llm.invoke(prompt)returnresp大模型这里使用ollama作为大模型的支持,方便快捷,目前很多模型支持ollama部署,大家可以去ollama官网去看;这里我设置了prompt,主要是为了让生成快一点,大家可以自行修改
3、文本合成语音
asyncdefget_voice(text):"""Mainfunction"""VOICE="zh-CN-XiaoxiaoNeural"output_file="response"+str(time.time())+".mp3"communicate=edge_tts.Communicate(text,VOICE)awaitcommunicate.save(output_file)returnoutput_file
这里使用的 edge-tts 项目,这个新项目可以直接 pip安装使用,包含很多声音,你可以去 官网看看
或者执行下边命令获取 VOICE
edge-tts --list-voicesName: Microsoft Server Speech Text to Speech Voice (af-ZA, AdriNeural)ShortName: af-ZA-AdriNeuralGender: FemaleLocale: af-ZAName: Microsoft Server Speech Text to Speech Voice (am-ET, MekdesNeural)ShortName: am-ET-MekdesNeuralGender: FemaleLocale: am-ETName: Microsoft Server Speech Text to Speech Voice (ar-EG, SalmaNeural)ShortName: ar-EG-SalmaNeuralGender: FemaleLocale: ar-EGName: Microsoft Server Speech Text to Speech Voice (ar-SA, ZariyahNeural)ShortName: ar-SA-ZariyahNeuralGender: FemaleLocale: ar-SA
选择你喜欢的声音,替换VOICE = "zh-CN-XiaoxiaoNeural" 即可
使用注意点
启动项目后,可以把生成的公网链接发到手机,手机浏览器打开,提示使用麦克风,点击【允许】
点击【录音】,说出你的问题,点击【停止】,注意点击停止后,不要立即点击【submit】,等2s,你的录音转成了 文件后,再点击 【submit】,因为 录音完成到转成文件 需要时间,你也可以先试听一下你的问题
结果返回可能需要等待几秒,后台要进行 语音转文本、文本调用llm,结果合成语音,结果返回后,会直接播放,完美
整体其实不是很难,主要是一个思考过程
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |