日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于树莓派的语音邮件收发

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于树莓派的语音邮件收发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于樹莓派的語音郵件收發

  • 一、 軟硬件環境及搭建
    • 硬件需要
    • 軟件環境
    • 環境搭建
      • 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,繼續打印。

def print_info(my_msg,indent=0):if indent==0:#郵件的From,To,Subject存在于跟對象上for header in ['From','Subject']:value=my_msg.get(header,'')if value:if header=='Subject':#解碼Subject字符串value=decode_str(value)print('主題:%s' %value)if (value==None):tts('主題是無','subject.wav')else:tts('主題是'+value,'subject.wav')else:#解碼Email地址hdr,addr=parseaddr(value)name=decode_str(hdr)print('發送者:%s' %name)if (name==None):tts('發送者是未知','send.wav')else:tts('發送者是'+name,'send.wav')#若還有其他對象(如文本內容、附件等)則繼續打印。if my_msg.is_multipart():parts=my_msg.get_payload()for n,part in enumerate(parts):print('%spart %s' %(' ' * indent,n))print('%s-----------------------------------' % ' ' * indent)print_info(part, indent + 1)#文本內容else:content_type = my_msg.get_content_type()if content_type == 'text/plain' : content = my_msg.get_payload(decode=True)#檢測文本編碼charset = guess_charset(my_msg)if charset:content = content.decode(charset)print('Text: %s' % (content))if (content==None):tts('郵件內容是無','content.wav')else:tts('郵件內容是'+content,'content.wav')

利用百度語音合成獲取的郵件內容

#""" 你的 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

總結

以上是生活随笔為你收集整理的基于树莓派的语音邮件收发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。