歡迎關注微信公眾號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上下載。下載地址如下: