史澤輝
在之前的基礎(chǔ)篇和常規(guī)篇中,我們已經(jīng)分享了如何用Python驅(qū)動(dòng)Arduino主控板,成功實(shí)現(xiàn)了讀取溫度濕度和光線(xiàn)值,以及點(diǎn)亮LED燈和燈帶。過(guò)程中我們發(fā)現(xiàn),數(shù)值的輸出只在串口顯示相關(guān)數(shù)據(jù),要是能聽(tīng)到語(yǔ)音播報(bào),是不是更方便更生動(dòng)呢?今天我們就來(lái)用Python控制計(jì)算機(jī)發(fā)出聲音。
控制計(jì)算機(jī)發(fā)出聲音,需要用到speech庫(kù)。首先要安裝一下這個(gè)庫(kù),然后才能調(diào)用。使用win+r調(diào)出運(yùn)行對(duì)話(huà)框,輸入cmd進(jìn)入控制臺(tái),輸入pip install speech,回車(chē)即可。打開(kāi)編譯器IDLE,用import speech導(dǎo)入。編寫(xiě)程序代碼speech.say(str),保存,按F5運(yùn)行,計(jì)算機(jī)即可把單引號(hào)里的文字以聲音的方式播報(bào)出來(lái)。注意str是字符類(lèi)型,要播報(bào)的內(nèi)容要放在英文狀態(tài)的單引號(hào)里,如speech.say(‘這里是計(jì)算機(jī)發(fā)出的聲音’)。如圖1:
然而,很多小伙伴兒會(huì)在運(yùn)行過(guò)程中出現(xiàn)錯(cuò)誤提示。如圖2:
這個(gè)錯(cuò)誤提示的意思是,安裝的speech庫(kù)某一行語(yǔ)句有問(wèn)題。按提示修改格式后,繼續(xù)保存運(yùn)行,又會(huì)出現(xiàn)新的錯(cuò)誤提示,依然是程序格式問(wèn)題,叫人頭疼。解決這一問(wèn)題的簡(jiǎn)單方法是,用正確的speech庫(kù)文件進(jìn)行替換。操作如下:
按路徑C:\Users\用戶(hù)\AppData\Local\Prog rams\Python\Python37\Lib\site-packages打開(kāi)相應(yīng)文件夾(注意“用戶(hù)”是你的計(jì)算機(jī)登錄的用戶(hù)名)。找到speech.py文件,用正確的speech文件進(jìn)行替換即可。(可以從正常運(yùn)行的計(jì)算機(jī)上拷貝,也可以直接百度到)
SAPI是微軟Speech API , 是微軟公司推出的語(yǔ)音接口,而細(xì)心的人會(huì)發(fā)現(xiàn)從WinXP開(kāi)始,系統(tǒng)上就已經(jīng)有語(yǔ)音識(shí)別的功能了,可是用武之地相當(dāng)之少,微軟并沒(méi)有給出一些人性化的自定義方案,僅有的語(yǔ)音操控命令顯得相當(dāng)雞肋。 現(xiàn)在,我們的任務(wù)就是利用SAPI進(jìn)行個(gè)性化的語(yǔ)音識(shí)別。
win32com庫(kù)的安裝方法一:使用win+r調(diào)出運(yùn)行對(duì)話(huà)框,輸入cmd進(jìn)入控制臺(tái),輸入pip install pypiwin32或pip3 install pypiwin32 或 Python -m pip install pypiwin32(根據(jù)所安裝的Python版本選擇不同的命令,安裝時(shí)會(huì)有提示)。
win32com庫(kù)的安裝方法二:從https://sourceforge.net/projects/pywin32/files/pywin
32/下載pywin32-221.win-amd64-py3.7.exe文件。選擇Build 221,下載和本機(jī)Python對(duì)應(yīng)版本的pywin32的版本。
下載后,雙擊pywin32-221.win-amd64-py3.7.exe,會(huì)識(shí)別Python的安裝路徑,一路Next安裝即可。
安裝完成后,打開(kāi)IDLE編譯器,編寫(xiě)程序。首先用import win32com.client調(diào)用一下系統(tǒng)客戶(hù)端包,再用speaker=win32com.client.Dispatch("SAPI.SPVOICE")調(diào)用系統(tǒng)接口。接下來(lái)就可以輸入需要文本轉(zhuǎn)語(yǔ)音的字符串了。
我們簡(jiǎn)單編寫(xiě)一下體溫檢測(cè)程序,當(dāng)體溫小于37.3攝氏度,就播報(bào)str1語(yǔ)句內(nèi)容,否則播報(bào)str2語(yǔ)句內(nèi)容。如圖3:
winsound是Windows的音頻工具接口,可以實(shí)現(xiàn)簡(jiǎn)單的音頻播放功能。允許播放WAV文件或發(fā)出嗶嗶聲,但它僅適用于Windows。如圖4:
Playsound是一個(gè)僅用于播放WAV和MP3文件的簡(jiǎn)單程序包,它純Python,跨平臺(tái),單一功能模塊,不依賴(lài)于播放聲音。使用此模塊,我們可以使用一行代碼播放聲音文件,除簡(jiǎn)單播放外,它不提供任何功能。如圖5:
另外,我們還可以利用Python-sounddevice、pydub、pyaudio等方式來(lái)播放各種音頻文件,有興趣的讀者可以自行嘗試。
有了以上基礎(chǔ),我們就可以結(jié)合開(kāi)源硬件Arduino主控板進(jìn)行編寫(xiě)程序了。我們繼續(xù)使用pinpong庫(kù)來(lái)驅(qū)動(dòng)Arduino主板,當(dāng)然你也可以試試其他庫(kù)。如圖6:
上述程序中,我們導(dǎo)入pinpong庫(kù)和speech庫(kù),定義了LED燈為13號(hào)引腳,從A0端口讀取光線(xiàn)傳感器的值。如果光線(xiàn)值大于等于400那么LED燈開(kāi)始點(diǎn)亮,輸出“LED燈工作中”,同時(shí)音箱播報(bào)聲音。按F5運(yùn)行程序。如圖7:
我們看到,檢測(cè)到的光線(xiàn)值為600以上,LED燈處于點(diǎn)亮狀態(tài)。利用這個(gè)功能,我們的創(chuàng)客作品就有聲有色,生動(dòng)多了。
作品程序完成后,我們可以將Python文件打包成exe文件分享給他人。本次分享的是利用pyinstaller打包工具對(duì)Python打包。操作步驟如下:
安裝pyinstaller之前先安裝Python,建議安裝32位的Python版本,因?yàn)閣in64位系統(tǒng)向下兼容32位程序。如果安裝64位版本Python進(jìn)行打包,只能在win64位系統(tǒng)中運(yùn)行,在win32中是無(wú)法運(yùn)行的。
安裝時(shí)需注意的是Add Python3.6 to path此處選項(xiàng)一定要勾選,否則后期還要對(duì)環(huán)境進(jìn)行配置,十分麻煩。
使用win+r調(diào)出運(yùn)行對(duì)話(huà)框,輸入cmd進(jìn)入控制臺(tái),先檢查一下當(dāng)前Python版本(事關(guān)pip和pip3的使用)。
輸入:Python -V? (獲取Python的版本)。本文使用的是Python3.6.1版本,那么我們?cè)诎惭bpyinstaller時(shí)需要使用pip3。(Python2版本使用pip)
輸入:pip3? install pyinstaller (若是輸入pip會(huì)出現(xiàn)錯(cuò)誤提醒)。如圖8:
安裝成功會(huì)顯示successfully installed……此時(shí)pyinstaller已經(jīng)安裝成功了。
將需要打包的Python文件和圖標(biāo)圖片(ico格式)存放在一個(gè)文件夾中。(若是沒(méi)有圖片作為圖標(biāo),則打包時(shí)系統(tǒng)會(huì)自動(dòng)生成默認(rèn)圖標(biāo))
打開(kāi)控制臺(tái),先將路徑定位至存放目標(biāo)文件的文件夾,本文文件存放路徑為e:\Python。
輸入打包命令:pyinstaller? -F? -i? jisuan.ico? text.py
運(yùn)行后,出現(xiàn)building exe successfully即為打包成功。如圖9、圖10:
返回目標(biāo)文件夾可以發(fā)現(xiàn)重新生成了4個(gè)文件。生成的exe文件就在dist文件夾中。
我們可以看到在dist文件中生成了一個(gè)exe文件,而且圖標(biāo)也是相應(yīng)的ico圖片。
雙擊生成的exe文件,可正常運(yùn)行。至此,我們就成功地將Python程序打包成exe文件進(jìn)行分享了。