基于树莓派的语音邮件收发
基于樹莓派的語音郵件收發
- 一、 軟硬件環境及搭建
- 硬件需要
- 軟件環境
- 環境搭建
- 1. 燒錄鏡像
- 2. 連接硬件
- 3. 使用VNC遠程樹莓派桌面
- 4. 百度語音識別與合成SDK安裝
- 附:使用FileZilla在本機及樹莓派之間進行文件傳輸
- 二、Python代碼實現
- 1.郵件發送
- 2.郵件接收
- 3.語音識別
- 4.語音播報
- 5.主函數
- 6.腳本文件
- 附錄
一、 軟硬件環境及搭建
硬件需要
- 3代b型E14中國版樹莓派
- 8G以上SD卡
- USB麥克風
- 3.5mm插孔音箱或藍牙音箱
軟件環境
- 官方推薦系統鏡像:Raspbian
- 鏡像燒錄工具:win32diskimager-v0.9-binary
- SSH工具:PUTTY
- 遠程桌面工具:VNC Viewer
- 文件傳輸工具:FileZilla
由于沒有顯示器,所以選擇SSH或遠程桌面方式連接樹莓派。若有顯示器可忽略。
環境搭建
1. 燒錄鏡像
參考教程:http://shumeipai.nxez.com/2013/09/07/raspberry-pi-under-windows-system-installation-to-sd-card.html
2. 連接硬件
將安裝好的SD卡插入樹莓派卡槽,USB麥克風插入USB接口,插頭音箱插入3.5mm插孔。用網線連接路由器,電腦也要連接同一個路由器,保證兩者在同一局域網內。
3. 使用VNC遠程樹莓派桌面
參考教程:http://shumeipai.nxez.com/2018/08/31/raspberry-pi-vnc-viewer-configuration-tutorial.html
以上步驟完成后就可以愉快地使用樹莓派了
4. 百度語音識別與合成SDK安裝
- 注冊百度AI平臺賬號
- 創建語音應用,獲取APP_ID,API_KEY,SECRET_KEY
- 安裝SDK
這里采用Python開發,所以pip install baidu-aip即可
附:使用FileZilla在本機及樹莓派之間進行文件傳輸
- 主機:使用sftp協議。填入:sftp://樹莓派ip地址
- 用戶名:pi
- 密碼:raspberry
- 端口:一般為22
輸入信息后點擊快速連接就能傳輸文件了。
二、Python代碼實現
分為郵件發送、郵件接收、語音識別、語音播報四個模塊。
1.郵件發送
使用email、smtplib模塊
定義Email的地址,口令和SMTP服務器地址
FROM='你的郵箱地址' password = "授權碼" smtp_server = "smtp服務器地址"通過語音識別得到要發送的郵件內容
#根據語音提示輸入音頻,識別并返回結果 speak.say('to.wav') start=rec.rec(10) speak.say('toe.wav') end=rec.rec(5).lower() TO=start+'@'+end+'.com' print(TO) #由于不能識別特殊符號,所以就把接收郵箱內容分割輸入 speak.say('toname.wav') name=rec.rec(5) speak.say('tosub.wav') SUBJECT=rec.rec(5) speak.say('totext.wav') text=rec.rec(10)定義郵件本身的內容
msg = MIMEMultipart() msg["From"] = _format_addr("CC <%s>" % FROM) msg["To"] = _format_addr("%s <%s>" % (name,TO)) msg["Subject"] = Header(SUBJECT, "utf-8").encode()定義郵件正文
msg.attach(MIMEText(text, "plain", "utf-8"))
定義發送文件
try:server = smtplib.SMTP(smtp_server, 25)server.login(FROM, "221507cc")server.sendmail(FROM, [TO], msg.as_string())server.quit()speak.say('success.wav') except Exception,e:speak.say('faild.wav')print str(e)2.郵件接收
使用email、poplib模塊
定義接收郵箱的地址,口令和POP服務器地址
email='接收郵箱地址' passwd='授權碼' pop_server='pop服務器地址'連接POP服務器
server=poplib.POP3_SSL(pop_server,'995') server.user(email) server.pass_(passwd)下載獲取郵件
#返回所有郵件編號 resp,mails,octets=server.list() index=len(mails) #所有郵件數 if index<1:return None resp,lines,octets=server.retr(index) #獲取最新一封郵件,索引號是從1開始的。lines存儲了郵件的原始文本的每一行msg_content=b'\r\n'.join(lines).decode('utf-8') #把郵件內容解析為Massage對象,用來解析郵件 msg=Parser().parsestr(msg_content) server.quit() print_info(msg)解析郵件內容
遞歸打印出Massage對象的層次結構內容。
比如說一開始打印的是根對象內容,即發送者、接收者、主題。
若還有其他對象(如文本內容、附件等)則indent+1,繼續打印。
利用百度語音合成獲取的郵件內容
#""" 你的 APPID AK SK """ APP_ID = '16106037' API_KEY = 'o7n2ma4eMNa4oUEbITZBcmZM' SECRET_KEY = 'jz2aGbb4OcvobIc7DvC5mgide0ExFUYw'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)#語音播報,傳入的參數: #text:語音播報內容 #flag:保存的文件名 def tts(text,flag):result = client.synthesis(text, 'zh', 1, {'vol': 5,})# 識別正確返回語音二進制 錯誤則返回dict 參照下面錯誤碼if not isinstance(result, dict):with open('./'+flag, 'wb') as f:f.write(result)3.語音識別
新建AipSpeech
APP_ID = '16106037' API_KEY = 'o7n2ma4eMNa4oUEbITZBcmZM' SECRET_KEY = 'jz2aGbb4OcvobIc7DvC5mgide0ExFUYw'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)調用接口進行語音識別
def rec(s):print('recording......')#調用系統命令進行錄音os.system('arecord -D hw:1,0 -d %d -t wav -c 1 -r 44100 -f S16_LE test.wav' %s)print('finish')#由于采樣率不匹配,且語音識別推薦pcm文件,所以需要對音頻進行轉碼os.system('ffmpeg -y -i test.wav -acodec pcm_s16le -f s16le -ac 1 -ar 16000 test.pcm')# 讀取文件def get_file_content(filePath):with open('test.pcm', 'rb') as fp:return fp.read()# 識別本地文件result=client.asr(get_file_content('test.pcm'), 'pcm', 16000, {'dev_pid': 1536,})print(result)# 解析返回值,打印語音識別的結果if result['err_msg']=='success.':word = result['result'][0].encode('utf-8') # utf-8編碼if word!='':print (word.decode('utf-8').encode('gbk'))return wordelse:print "音頻文件不存在或格式錯誤"else:print "錯誤"4.語音播報
調用系統命令播放音頻,其中傳入參數為文件名
def say(flag):os.system("mpv "+flag)5.主函數
根據語音指令執行任務,直到結束跳出循環,程序結束。
while(True):print('start!')listen=rec.rec(7)if listen=='我要發郵件':send.main()elif listen=='最近一封郵件':receive.main()elif listen=='結束':speak.say('end.wav')breakelse:speak.say('respeak.wav')6.腳本文件
最后寫一個.sh文件一鍵運行代碼
python main.py附錄
代碼源碼地址:https://github.com/HolmeC/VoiceMailRaspberryPi
參考資料:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432005226355aadb8d4b2f3f42f6b1d6f2c5bd8d5263000
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014320098721191b70a2cf7b5441deb01595edd8147196000
總結
以上是生活随笔為你收集整理的基于树莓派的语音邮件收发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springcloud(五):熔断监控H
- 下一篇: unable to execute de