牟曉東
借助于百度AI智能云平臺(tái)所提供的豐富功能,我們可以在本地非常方便地通過(guò)Python代碼編程與其“對(duì)接”進(jìn)行人臉與人體識(shí)別、音頻與視頻識(shí)別等各種強(qiáng)大而有趣的應(yīng)用,操作方法步驟均大同小異,在此以植物識(shí)別和TTS語(yǔ)音合成為例:
登錄百度智能云平臺(tái)(https://ai.baidu.com/),找到其中的“植物識(shí)別”項(xiàng)(https://ai.baidu.com/tech/imagerecognition/plant),據(jù)稱能夠識(shí)別“超過(guò)2萬(wàn)種常見(jiàn)植物和近8000種花卉”,并且能夠返回所識(shí)別植物的名稱以及對(duì)應(yīng)的百科信息。按照頁(yè)面上的操作指引,在“創(chuàng)建應(yīng)用”中進(jìn)行“創(chuàng)建新應(yīng)用”,填寫對(duì)應(yīng)的名稱(如“識(shí)別植物”)及接口選擇(注意必須要選中“圖像識(shí)別”中的“植物識(shí)別”項(xiàng)),最終就會(huì)生成一個(gè)包括AppID、API Key和Secret Key等信息的新應(yīng)用,將這些信息全部復(fù)制保存至本地(如圖1)。
首先,導(dǎo)入調(diào)用攝像頭的OpenCV庫(kù)和調(diào)用百度AI的aip庫(kù):“import cv2”、“from aip import AipImageClassify”,注意要提前使用“pip install baidu-aip”命令安裝好aip庫(kù);接著,編寫控制攝像頭拍攝植物并生成JPG圖片文件的代碼:新建變量camera,通過(guò)調(diào)用OpenCV庫(kù)為其賦值為“cv2.VideoCapture(0)”,完成將攝像頭所拍攝到的畫面保存至變量camera中的功能;再新建一個(gè)“while True”循環(huán)結(jié)構(gòu),通過(guò)“ret,img = camera.read()”語(yǔ)句實(shí)現(xiàn)“讀取camera中保存的一幀畫面并賦值給變量img”的功能,其中的ret返回的數(shù)據(jù)是一個(gè)布爾值——為真時(shí)才進(jìn)行文件保存的操作;語(yǔ)句“cv2.imshow(‘Capture plants:’,img)”的功能是開(kāi)啟一個(gè)新窗口,標(biāo)題為“Capture plants:”,顯示的內(nèi)容是剛剛變量img所保存的一幀攝像頭捕獲畫面;為了防止程序運(yùn)行過(guò)快,加入延時(shí)等待語(yǔ)句“key = cv2.waitKey(10)”,即每次循環(huán)時(shí)均等待10毫秒,相當(dāng)于給攝像頭充分的時(shí)間進(jìn)行畫面的拍攝等操作;接著,建立一個(gè)if選擇分支結(jié)構(gòu),判斷條件為“if key == ord(‘s’):”,即用戶此時(shí)是否已經(jīng)按下s鍵,當(dāng)條件為真時(shí)則執(zhí)行以下三個(gè)語(yǔ)句:第一是將變量img中保存的畫面內(nèi)容生成capture.jpg圖片文件:“cv2.imwrite(‘capture.jpg’,img)”;第二是關(guān)閉剛剛開(kāi)啟的攝像頭畫面窗口:“cv2.destroyAllWindows()”;第三是使用break語(yǔ)句來(lái)跳出當(dāng)前循環(huán)(如圖2)。
接下來(lái),將上一步中在百度智能云中新建應(yīng)用時(shí)獲得的ID和Key三處關(guān)鍵信息導(dǎo)入,通過(guò)新建三個(gè)變量并進(jìn)行賦值來(lái)實(shí)現(xiàn):“APP_ID = ‘26634939’”、“API_KEY = ‘YqBXBlfEEnRPYKA2eWm54A3F’”和“Secret_KEY = ‘ilCPcW16DbSNXe1GQ9Mhj043
pzxQZcT7’”;然后,通過(guò)百度API接口將三個(gè)變量作為參數(shù)進(jìn)行實(shí)例化:“client = AipImageClassify(APP_ID,API_KEY,Secret_KEY)”;接著,定義一個(gè)讀取圖片的get_file(filePath)函數(shù),通過(guò)變量image1將剛剛生成的capture.jpg圖片文件進(jìn)行讀取,并且根據(jù)百度智能云的API接口封裝參數(shù)要求進(jìn)行結(jié)果的提取,最終對(duì)result進(jìn)行值的輪詢操作并構(gòu)造print語(yǔ)句輸出識(shí)別后的信息(如圖3)。
將程序保存為Detect_plants.py,點(diǎn)擊“運(yùn)行”按鈕進(jìn)行測(cè)試,同時(shí)將一盆巴西木放置于攝像頭前;此時(shí)在屏幕上就會(huì)彈出一個(gè)名為“Capture plants:”的新窗口,其預(yù)覽內(nèi)容即為攝像頭所拍攝的實(shí)時(shí)畫面。調(diào)整好植物盆栽的角度和顯示大小后,按下鍵盤上的s鍵(注意要保持輸入法為英文半角狀態(tài))后,很快就有了顯示結(jié)果:“這種植物的名字叫作: 香龍血樹”、“對(duì)該植物的識(shí)別率是: 53.1 %”、“【簡(jiǎn)介】 香龍血樹(學(xué)名:Dracaena fragrans)是天門冬科……”(如圖4)。
TTS即“Text To Speech”,意為“從文本到語(yǔ)音”,百度AI支持每次1024字節(jié)以內(nèi)的文本合成為語(yǔ)音(若文本較長(zhǎng)可采用多次請(qǐng)求的方式)。
同樣是先建立應(yīng)用項(xiàng)目,從“語(yǔ)音合成”中選擇“短文本在線合成”項(xiàng),將新應(yīng)用名稱設(shè)置為“TTS從文本到語(yǔ)音”(或其他),注意查看其中是否已經(jīng)包含了“短文本在線合成”等項(xiàng),這樣就又會(huì)得到一組AppID、API Key和Secret Key信息,復(fù)制待用(如圖5)。
值得一提的是,如果程序代碼沒(méi)問(wèn)題但最終在測(cè)試運(yùn)行時(shí)一直提示類型錯(cuò)誤的話,此時(shí)就要在百度AI平臺(tái)中進(jìn)行免費(fèi)資源的領(lǐng)取操作——選中“語(yǔ)音技術(shù)”—“語(yǔ)音合成”中的“短文本在線合成—基礎(chǔ)音庫(kù)”和“短文本在線合成—精品音庫(kù)”等項(xiàng)目后,再點(diǎn)擊底部的“0元領(lǐng)取”按鈕,此時(shí)會(huì)有“恭喜您,領(lǐng)取成功”的提示:“免費(fèi)測(cè)試資源將在30分鐘內(nèi)生效”(如圖6)。
同樣,首先從aip庫(kù)模塊中導(dǎo)入待用的AipSpeech:“from aip import AipSpeech”,再將ID和Key的信息通過(guò)三個(gè)賦值語(yǔ)句導(dǎo)入:“APP_ID = ‘26644936’”、“API_KEY = ‘C0QXnUQixE4l8VFj qrl2tvWk’”和“Secret_KEY = ‘eGA7VcZm0cZoKt EOYts5MFnakq4fvxQT’”;然后,仍然是新建變量client,通過(guò)語(yǔ)句“client = AipSpeech(APP_ID,API_KEY,Secret_KEY)”將參數(shù)傳入;接著,建立變量my_str,其值為待轉(zhuǎn)換的文本信息,比如“《電腦報(bào)》是中國(guó)發(fā)行量最大的計(jì)算機(jī)報(bào)……”;再建立變量result,按照規(guī)則進(jìn)行賦值:“result = client.synthesis(my_str,‘zh’,1,{‘vol’:5,})”,其中的參數(shù)比較豐富,可以設(shè)置語(yǔ)速、語(yǔ)調(diào)和音量,還可以設(shè)置發(fā)音人等等,大家可直接在百度AI平臺(tái)中語(yǔ)音技術(shù)的接口說(shuō)明中進(jìn)行查詢?cè)O(shè)置(https://ai.baidu.com/ai-doc/SPEECH/Gk4nlz8tc)。
最后,仍是通過(guò)“with open”以二進(jìn)制文件寫入的方式,將TTS生成的語(yǔ)音數(shù)據(jù)寫入my_TTS.mps文件。將程序保存為TextToSpeech.py,測(cè)試運(yùn)行,很快就會(huì)在當(dāng)前程序的保存文件夾中生成一個(gè)my_TTS.mps音頻文件,打開(kāi)聽(tīng)一下,內(nèi)容即為程序代碼中變量my_str所存儲(chǔ)的文本內(nèi)容(如圖7)。
百度AI平臺(tái)提供的其他智能應(yīng)用調(diào)用方法基本類似,均可以像進(jìn)行植物識(shí)別與TTS語(yǔ)音合成一樣來(lái)使用,可參考官方說(shuō)明文檔進(jìn)行Python程序的編寫。