第二章 Watson初接觸

歡迎關注微信公眾號watson_python,及時獲取最新的更新。


上一章介紹了開發環境的安裝和配置,在正式進行Python和Watson WDC的介紹之前,我們先做一個小的Demo,給大家一個簡單直觀的演示,讓大家對Watson和Python有個直觀的認識。

Python是一種面向對象的解釋型計算機程序語言,有荷蘭人Guido van Rossum發明于1989年,第一個正式版本發布于1991年。

Python是純粹的自由軟件, 源代碼和解釋器CPython遵循 GPL(GNU General Public License)協議。

Python語法簡潔清晰,特色之一是強制用空白符(white space)作為語句縮進。

Python具有豐富和強大的庫。它常被昵稱為膠水語言,能夠把用其他語言制作的各種模塊(尤其是C/C++)很輕松地聯結在一起。常見的一種應用情形是,使用Python快速生成程序的原型(有時甚至是程序的最終界面),然后對其中有特別要求的部分,用更合適的語言改寫,比如3D游戲中的圖形渲染模塊,性能要求特別高,就可以用C/C++重寫,而后封裝為Python可以調用的擴展類庫。

Python在執行時,首先會將.py文件中的源代碼編譯成Python的byte code(字節碼),然后再由Python Virtual Machine(Python虛擬機)來執行這些編譯好的byte code。這種機制的基本思想跟Java,.NET是一致的。然而,Python Virtual Machine與Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一種更高級的Virtual Machine。這里的高級并不是通常意義上的高級,不是說Python的Virtual Machine比Java或.NET的功能更強大,而是說和Java 或.NET相比,Python的Virtual Machine距離真實機器的距離更遠。或者可以這么說,Python的Virtual Machine是一種抽象層次更高的Virtual Machine。

本章的主要目的是實現一個demo,這個demo使用Watson的文本轉語音,來演示一下,Watson的基本功能。具體的Python的會在第二部分進行介紹;第三部分介紹Watson的API和這些算法的實現原理。第四部分會用Python + Watson API來實現我們的第一個項目。

本章的demo是在一個網頁上,輸入一段文字之后,點擊按鈕會調用Watson API,將文字轉化為語音并播放。在這個demo中,我們會基于Flask搭建一個簡單的web應用,使用AJAX來進行數據的異步更新。Flask 是一個 Python 實現的 Web 開發微框架。Flask的微不是表示將所有的Web應用塞進一個py文件,也不是意味著功能有所欠缺,微框架中的“微”意味著 Flask 旨在保持核心簡單而易于擴展。到此,在demo中使用的知識概要介紹完了,正式進入demo的實現介紹。

創建第一個Python項目

在這里,我們首先在Eclipse創建我們的第一個Python項目,并在這個Python項目中創建一個簡單的Flask應用的結構。啟動Eclipse之后,通過File->New->Project(圖2-1)打開新建項目向導。

圖2-1

在新建項目向導中選擇PyDev項目,如圖2-2

圖2-2

在向導對話框中,填入項目名稱(FirstDemo),選在Project Type等,如圖2-3:

圖2-3

在圖2-3中,點擊Finish按鈕,完成項目的基本構建,如圖2-4:

如圖2-4

到此一個簡單的Python項目已經構建完成,下一步我們建立我們第一個項目的Flask目錄結構,代碼的實現。

創建Flask項目目錄結構

我們第一個Demo是基于Web的小程序,所以,目錄結構會按照MCV的結構來劃分。MCV是目前主流的Web應用的劃分結構,將整個應用劃分為三個層,M指的是Model,主要是持久層;C是Controller是控制層,V是Views是試圖層。通過這個三層結構將應用的結構合理的劃分,方便開發與管理。我們的應用也是按照這個原理劃分的,結構如下(圖2-5):

圖2-5

在上圖我們建立了幾個PyDev Package,Python Module和Folder來分別存儲我們基于MCV結構的應用模塊,在這個Demo中沒有數據持久層的操作,所以,model是一個空的Package,controller是我們的控制層,Watson的訪問會放入其中。static和templates是我們試圖層的資源,應用中使用的JQuery等資源會配置在static下,使用的html模版會配置在templates下,view是Flask試圖層來展示畫面的相應配置代碼。PyDev Package,Python Module和Folder的創建是通過在項目上的右鍵菜單或者文件的新建菜單來實現,具體的就不再贅述。圖2-6新建Folder的向導,圖2-7新建Pydev Package的向導,圖2-8新建Python Module的向導。

圖2-6

圖2-7

圖2-8

到這里,我們第一個Demo的基本框架結構已經完成了,下一步我們將我們的Demo上傳到GitHub上,來管理我們的source。

首先登陸github(https://github.com)來建立一個新的代碼庫,在圖2-9中選擇New repository來建立我們的代碼庫如圖2-10。

圖2-9

圖2-10

在gitHub上建立了代碼庫之后,將我們這次的FirstDemo上傳到gitHub。在代碼上傳之前,我們要建立本地的代碼庫。在Eclipse里選中項目后,右鍵->Team->Share Project (圖2-11)

圖2-11

在打開的畫面中,選中User or create repository in parent folder of project,后點擊Creater Repository按鈕,后按Finish。入下圖(圖2-12):

圖2-12

回到Eclipse的主畫面后,選中項目后點擊右鍵->Team->Commit,打開Git Staging窗口,如圖2-13

如圖2-13

然后將所有的unstaged change到追加的這次的變更里,入下圖:(圖2-14)

圖2-14

添加完畢后,在右側的Commit Message里添加自己的版本信息,例如“First Version”,后點擊Commit按鈕后,回到Eclipse的主畫面。繼續在主畫面中選中項目后,點擊右鍵->team->Push Branch ‘Master’,來提交代碼到gitHub。在打開的窗口中填上URL和用戶名,密碼后,點擊Next按鈕后,按照提示一步一步來完成代碼向gitHub的提交。如圖2-15

圖2-15

代碼提交到gitHub后,我們可以在剛才我們在gitHub上建立的代碼庫中看到,如下圖2-16:

圖2-16

到目前為止,我們建立的第一demo的代碼框架已經提價到gitHub代碼庫中了。接下來就要正式進入Demo的做成。

第一個HTML畫面

到目前為止,我們建立的第一demo的代碼框架已經提價到gitHub代碼庫中了。接下來就要正式進入Demo的做成。

每一個PyDev Package做成的時候,都會默認生成一個”_init_.py”的初始化文件,首先我們要在app package的初始化文件中定義我們的Flask app,來完成我們的app的初始化的設定。代碼入下(圖2-17):

圖2-17

然后在app.view.views中第一我們的第一個view。這個畫面非常簡單,啟動之后在瀏覽器中顯示“Hello, Flask!”。代碼如圖2-18

代碼如圖2-18

到目前為止,我們第一個畫面已經完成,為了讓Python能啟動Flask來提供服務顯示我們剛才展示剛剛完成的第一個畫面,我們還需要在run.py中完成如下代碼。圖2-19:

圖2-19

在這里稍微對這3行代碼做一下解釋。第一行代碼是表示引入我們自己定義的app應用,這個是在我們app package的初始化里定義的。第二行代碼是設定我們的app運行在debug模式下,應用運行時會打印debug的信息到控制臺,方便我們運行時跟蹤錯誤。第三行代碼是讓我們的Flask app執行。到此一個簡單的Flask應用就完成了,讓我們啟動來看一下效果。

因為Flask自帶了一個微型的web container,所以測試執行比較簡單,在項目中選中我們的run.py,然后點擊右鍵->Run As->Python Run,來啟動我們Flask web container來進行測試。如下圖(圖2-20):

圖2-20

在Console中顯示圖2-20所示的信息,我們在web瀏覽器中直接訪問http://127.0.0.1:5000/ 可以看到如圖2-21,所示的畫面,證明我們第一個Demo已經可以正常運行。

圖2-21

Watson的初接觸 —— 文本轉語音Demo

到目前為止我們的第一個web應用已經具有雛形,現在就完成我們Demo的最后一步,使用Watson的API將一段文本轉化成語音。在這個Demo中,我們將使用AJAX來異步更新來提交我們輸入的文本帶server端,并將server端生成的語音文件在web端進行播放。

在這里利用Watson的API來進行文本到語音大轉換,首先要在Bluemix上創建一個Watson的service。首先打開bluemix的控制臺(https://console.ng.bluemix.net/dashboard/apps/),創建一個service。在bluemix控制臺,選擇create service后,選中Watson后打開如圖2-22的畫面。

圖2-22

在圖2-22中點擊Text To Speech來創建我們的文本轉語音的service。在顯示的畫面中,我們可以所有的項目都保留默認,然后點擊Create按鈕來完成我們的Service的創建。記住我們的service name,以后會用到。完成后會顯示如下畫面(圖2-23):

圖2-23

到這里Watson Service的創建已經完成,接下來就要在我們的程序里完成對Watson API的調用來實現我們文本轉語音的Demo。

首先打開圖2-23畫面中的Service credentials來查看我們這個service的認證信息。在圖中我對我的用戶名和密碼進行了掩蓋,請在程序中使用自己的用戶名和密碼。如圖2-24:

圖2-24

回到Eclipse,在我們的項目中打開config.py,寫下如圖2-25所示代碼,這里的bluemix_username就是圖2-24中的username,bluemix_password就是圖2-24中的password。Bluemix_watsonvoice是文本轉語音的語言設定。

圖2-25

在程序中用到的Watson API的配置和用戶名密碼的設置到這里就結束了。接下來,就要在我們的程序里調用Watson API來完成這個Demo。首先在templates里新建一個HTML文件,名字可以叫text2speech,代碼如圖2-26.

圖2-26

完成上述HTML代碼之后,我們要在watsonAPI中實現我們對文本轉語音API的調用來實現文本到語音的轉換,代碼如圖2-27:

圖2-27

完成了對API的調用我們就在views配置我們自己的url來實現在頁面上輸入一段文本(英文),點擊按鈕后跳用Watson API來轉換成語音。在這里總共有兩個URL來完成這個功能,第一個是text2speech,通過訪問這個URL來顯示我們的畫面,提供一個文本輸入的窗口。第二個是按鈕點擊后,AJAX調用異步獲取語音文件的URL(dotext2speech),在這里實現了對get方法的數據獲取,并調用watsonAPI中的text2speech來完成語音轉換,并將語音文件返回給html畫面。已實現對語音文件的播放。代碼如圖2-28:

圖2-28

到這里所有的代碼已經編碼完成,我們可以運用run.py來測試我們的代碼。運行方式跟第一次測試一樣,在這里就不再贅述。測試畫面如圖2-29:

圖2-29

到這里這個Demo的所有Source都完成了。所有的代碼都提交到gitHub上了,需要的可以到gitHub上下載。下載地址如下:

https://github.com/weizy1981/FirstDemo

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容