[Python作品]公司用人臉辨識系統DIY Part.4 - 騷包的花邊功能:語音與音效提示功能


  各位好,這次小弟又要來分享一下一些有趣的東東了~因為一些因緣際會,小弟有了人臉辨識系統的開發機會,後續又因為一些因緣際會停止開發了。根據開源的精神,有些內容小弟就拿來當作這次的知識分享嘍~因為這是個算有點規模的開發案,一次的篇題肯定是不夠的,所以小弟打算分成4個Part來做分享,也希望幫助到遭遇相關開發問題的朋友喔!





  作為最後一個人臉辨識的最後一個Part,當然要來點輕鬆有趣的東西嘍。所以最後要介紹的功能,是整個專案裡面比較有意思的語音音效功能,以及e-mail寄信的功能。如果整個人臉辨識系統,在執行的過程中都靜悄悄的,不發一語,也不會通知使用者刷卡是否成功、提醒使用者有無異常,就顯得太不人性化了,而且這個專案原本是希望合併體溫量測的功能,所以如果體溫過高,會e-mail溫馨提醒使用者要注意身體狀況(可惜因為專案終止了,否則應該可以再多寫個兩篇XD)。文字轉語音以及音效功能放在TextToSpeech資料夾裡的Speech.py;發系統e-mail給使用者的功能放在SMTP資料夾裡的SMTP.py


  e-mail這件事情也源自公司經常發生忘記打卡或打卡後系統上卻沒有打卡紀錄,使得員工們心中總會有點碎念,所以小弟所設計的這個系統,每次打卡後都會寄公司信給員工,當打卡後雲端卻沒有打卡紀錄時,員工便有證據可以跟管理部做打卡系統異常的反饋。






gtts


  文字轉語音功能使用起來很簡單[1],只要import gtts之後,用gTTS(text="XXX", lang="YYY")來產生一段文字語音存進變數,再用with tempfile.NamedTemporaryFile(delete=True) as fp:以及(var).save('{}.mp3'.format(fp.name)),便可將語音檔暫存至windows的temp資料夾內


[1] Python文字轉語音(Text TO Speech)
https://yanwei-liu.medium.com/python%E6%96%87%E5%AD%97%E8%BD%89%E8%AA%9E%E9%9F%B3-text-to-speech-f16609f80df9




mixer


  mixer是個簡單好用的python撥放器,先用mixer.init()將撥放器初始化,接著用mixer.music.load('{}.mp3'.format(fp.name))撥放剛才存放至temp資料夾內的音效檔。如果要連續撥放不同音效,就要用到mixer.music.queue語法,將聲音檔暫存進緩衝區,等前一個聲音檔撥放完,便會撥放緩衝區的聲音檔。最後,用mixer.music.play()來啟動撥放器。這邊另外要注意的是,"務必"使用QThread,也就是多執行緒的功能,因為小弟測試過,撥放音效的時候,其他執行緒(傳輸攝影機圖像)的程序會被中斷。




smtplib


  這是一個e-mail寄送郵件的API,也是簡單好用[2]。用smtpObj = smtplib.SMTP(mail_host, "587")將傳輸通信建立起來,smtpObj.ehlo()驗證SMTP伺服器,smtpObj.starttls()建立加密傳輸,smtpObj.login(mail_user, mail_pass)進行信箱登入(STMP server的帳密,而非e-mail的帳密),最後用smtpObj.sendmail(sender, self.receivers, message.as_string())將信件送出(message裡面會用dict來包含信件內容、標題、標頭等資訊)。這些語法用法都是固定的,只要有打對,便可成功寄信嘍~以上這些程式碼要用try-catch包起來,當有傳輸問題時,才能抓到通信問題的exception。另外要注意的是,"務必"使用QThread,也就是多執行緒的功能,因為小弟測試過,寄出e-mail的時候,其他執行緒(傳輸攝影機圖像)的程序會被中斷。


[2] 利用Python自動寄送Gmail電子郵件Email
https://badgameshow.com/fly/python-%E5%88%A9%E7%94%A8python%E8%87%AA%E5%8B%95%E5%AF%84%E9%80%81gmail%E9%9B%BB%E5%AD%90%E9%83%B5%E4%BB%B6email/fly/python/










人臉辨識系統原始碼:
https://github.com/hcyang1227/PythonProj_Fin/tree/master/MDIT_Punch_Card_System

沒有留言:

張貼留言