謝作如
涉及學(xué)科:信息技術(shù)
人工智能是通過智能機器延伸,增強人類改造自然、治理社會能力的新興技術(shù),也是近幾年中小學(xué)信息技術(shù)課程中最受關(guān)注的技術(shù)之一。高中信息技術(shù)課程將“人工智能初步”作為選擇性必修模塊。《普通高中信息技術(shù)課程標(biāo)準(zhǔn)》(2017年版2020年修訂)鼓勵學(xué)校建立信息技術(shù)實驗室,提供開源硬件及開源AI應(yīng)用框架,讓學(xué)生搭建簡單人工智能應(yīng)用模塊,并能根據(jù)實際需要配置適當(dāng)?shù)沫h(huán)境、參數(shù)及自然交互方式等,體驗各種經(jīng)典算法和應(yīng)用。
絕大多數(shù)的人工智能課程,都會提供一些相關(guān)的體驗活動和實驗活動。最常見的是機器學(xué)習(xí)中的經(jīng)典算法模型,如回歸、聚類、決策樹、神經(jīng)網(wǎng)絡(luò)等。借助參考代碼,學(xué)生通過整理數(shù)據(jù)集,經(jīng)過一定時間的訓(xùn)練后,一般都能順利得到學(xué)習(xí)成果,即人工智能模型。那么,如何將這些模型部署為人工智能應(yīng)用,直觀形象地呈現(xiàn)他們的學(xué)習(xí)成果呢?
● 思考:將人工智能模型部署為應(yīng)用的一般方式
訓(xùn)練人工智能模型的最終目的是解決問題,如實現(xiàn)人臉識別、物體分類等。這些功能整合在一個信息系統(tǒng)中,就形成了智能信息系統(tǒng)。將人工智能模型部署為人工智能應(yīng)用的前提,是具備一定的信息系統(tǒng)開發(fā)能力。如果僅僅將人工智能部分獨立出來,部署為一個人工智能應(yīng)用,實際上就是將數(shù)據(jù)輸入和模型結(jié)果輸出的環(huán)節(jié)剝離出來,這需要借助TK、EasyGUI或者PySimpleGUI等能夠設(shè)計應(yīng)用程序界面的庫。如果輸入的數(shù)據(jù)比較復(fù)雜,還需要QT之類的專業(yè)庫支持。如果要部署為Web應(yīng)用,則要采用Flask、Django之類的Web框架。
一般而言,高校學(xué)生在學(xué)習(xí)人工智能課程前都已經(jīng)學(xué)過程序設(shè)計,具備一定的編程能力,如何部署AI應(yīng)用不需要教師關(guān)心。但中小學(xué)不一樣,由于義務(wù)教育階段的信息科技課程標(biāo)準(zhǔn)還沒有正式發(fā)布,一些學(xué)校往往是并行開設(shè)人工智能課程和編程課程,導(dǎo)致學(xué)習(xí)人工智能的學(xué)生,很多并不具備相應(yīng)的編程能力。即使在高中,“人工智能基礎(chǔ)”模塊是選擇性必修,學(xué)生雖然已經(jīng)學(xué)習(xí)過兩個必修模塊,但是編程技術(shù)并不扎實,用QT之類的GUI庫編寫復(fù)雜的程序,或者用Flask之類的Web框架編寫Web應(yīng)用,都有些力不從心。如果僅僅用input和Print語句進行輸入輸出,又很難得到直觀形象的體驗,相對來說,以Web形式“交互”是最好的選擇。
● 發(fā)現(xiàn):用PyWebIO編寫交互式Web應(yīng)用
在本欄目的文章《用Python寫一個基于Web的物聯(lián)網(wǎng)應(yīng)用程序》中,筆者曾經(jīng)介紹了一個名叫“Remi”的Python庫,可以在沒有HTML和JS基礎(chǔ)的情況下,快速開發(fā)出Web應(yīng)用。但是,這個庫的使用門檻還是稍微高了些,功能也比較復(fù)雜。筆者在比較當(dāng)前眾多的Python的輸入輸出和GUI庫的基礎(chǔ)上,最終發(fā)現(xiàn)了一個名叫PyWebIO的庫,非常適合應(yīng)用于人工智能模型的部署環(huán)節(jié)。
1.PyWebIO庫簡介
PyWebIO庫是一個基于Web方式來實現(xiàn)輸入輸出(I/O)的Python庫。這是北京航空航天大學(xué)在讀研究生王偉民同學(xué)用業(yè)余時間寫的庫。目前在GitHbu上獲得了高達1.6K的Star。它允許用戶像編寫終端腳本一樣來編寫Web應(yīng)用或基于瀏覽器的GUI應(yīng)用,而無需具備HTML和JS的相關(guān)知識。
2.PyWebIO庫的安裝
PyWebIO可以采用pip命令安裝,具體為:pip install remi或者pip3 install remi
3.PyWebIO庫的代碼示例
PyWebIO提供了一系列命令式的交互函數(shù)來在瀏覽器上獲取用戶輸入和進行輸出,相當(dāng)于將瀏覽器變成了一個“富文本終端”,如圖1所示。運行這段代碼后,瀏覽器會自動打開一個本地的網(wǎng)址,出現(xiàn)如圖2所示的界面。
輸入姓名再點擊“提交”按鈕,網(wǎng)頁上就會輸出相應(yīng)的文字。這種基于Web頁面的“交互”,體驗比黑乎乎的終端界面要好很多。
PyWebIO支持常見的網(wǎng)頁控件。既然PyWebI的定位就是輸入和輸出,那么也可以將網(wǎng)頁控件分為這兩類,部分控件的說明如下表所示。
尤其值得稱贊的是,PyWebIO還支持MarkDown語法。除了輸入輸出,PyWebIO還支持布局、協(xié)程、數(shù)據(jù)可視化等特性。通過和其他庫的配合,可以呈現(xiàn)更加酷炫的網(wǎng)頁效果。
如果需要了解更多關(guān)于PyWebIO庫的資源,請訪問github或者官方文檔。
Github:https://github.com/wang0618/PyWebIO
文檔:https://pywebio.readthedocs.io/
● 實踐:基于PyWebIO部署的人工智能作品案例
2020年,筆者和溫州的其他幾位教師一起承擔(dān)了浙江教育出版社的初中人工智能教材編寫。首選選擇了幾個常見的機器學(xué)習(xí)經(jīng)典案例,然后設(shè)計為實驗活動,讓學(xué)生體會機器學(xué)習(xí)的一般過程。一個典型的實驗大致分為“數(shù)據(jù)整理”“模型搭建”“模型訓(xùn)練”“模型測試”四個環(huán)節(jié),用Jupyter來完成,實驗效果較好。
在學(xué)生完成實驗活動后,也就是已經(jīng)訓(xùn)練出人工智能模型后,筆者和其他幾位教師又增加了“模型部署”的拓展活動環(huán)節(jié),即利用PyWebIO來實現(xiàn)基于Web的數(shù)據(jù)輸入和預(yù)測結(jié)果輸出。學(xué)生需要增加的代碼很少,效果很不錯。以“手寫體數(shù)字識別”實驗為例,模型部署的代碼如下頁圖3所示。
代碼中的ocr函數(shù),本來就屬于實驗中給出的基本代碼,實現(xiàn)模型根據(jù)輸入的圖片輸出預(yù)測結(jié)果,用于“模型測試”環(huán)節(jié)。而PyWebIO實現(xiàn)了圖片以Web上傳的方式輸入,模型預(yù)測結(jié)果以網(wǎng)頁文字的形式輸出,代碼運行效果如圖4所示。
● 反思:從普通交互到多模態(tài)交互
Python作為人工智能領(lǐng)域的第一語言,雖然能夠快速用于完成人工智能的各種實驗,但其偏向于腳本執(zhí)行的方式,內(nèi)置的“交互”能力較弱,肯定需要借助于第三方的庫。PyWebIO就是一個很好的例子,它能夠?qū)⑵胀ùa快速“變身”為Web應(yīng)用,極大地提高了學(xué)生的學(xué)習(xí)收獲感。
當(dāng)然,人工智能模型的呈現(xiàn)也不能僅僅滿足于Web的交互,還需要結(jié)合攝像頭、麥克風(fēng)、傳感器和執(zhí)行器等,實現(xiàn)多模態(tài)交互。這里的“模態(tài)”(Modality)指感官,如人類有視覺、聽覺、觸覺、味覺和嗅覺等模態(tài)。多模態(tài)交互是指人通過聲音、肢體語言、信息載體(文字、圖片、音頻、視頻)、環(huán)境等多個通道與計算機進行交流,充分模擬人與人之間的交互方式。要實現(xiàn)多模態(tài)交互,除了PyWebIO之外,教師還要結(jié)合OepnCV、pinpong等第三方庫,這是中小學(xué)人工智能課程開發(fā)需要關(guān)注的重點之一。