#項目起源#
這兩年,受疫情的影響,芯片的價格都讓人嘆為觀止,尤其是一些進口的芯片。正是由于這種原因,一些國內(nèi)的公司會將自家 產(chǎn)品的主控芯片換成國產(chǎn)的CPU或者MCU,相信這種情況大家都有所耳聞。近期旺仔爸爸收到一款基于國產(chǎn)的CPU芯片制作的主控板,它是由DFRobot公司設(shè)計生產(chǎn)的主打Python教學(xué)的主控板,究竟它的表現(xiàn)如何,下面我們一起來看一下
圖 1 行空板開箱
首先通過測試視頻來全面了解一下行空板
#硬件介紹#
看完視頻,我們來看一下這塊主控板的具體參數(shù)從外包裝我們知道主控板的名字叫行空板又稱UNIHIKER,大家可能在這之前都沒聽說過行空板,但你可能聽過Arduino Uno、micro:bit、掌控板亦或者是樹莓派這類型的開源硬件。行空板也是一款專為Python編程教育而設(shè)計的開源硬件,是一塊有著樹莓派級別的性能,如micro:bit一樣簡單易上手,可以運行完整Python程序的神奇板子!采用單板計算機架構(gòu),集成LCD彩屏、WiFi藍牙、多種常用傳感器和豐富的拓展接口。同時,其自帶Linux操作系統(tǒng)和Python環(huán)境,預(yù)裝了常用的Python第三方庫,讓廣大師生只需兩步就能進行Python教學(xué),輕松勝任各種編程相關(guān)的開發(fā)場景,如搭建物聯(lián)網(wǎng)系統(tǒng)、體驗人工智能應(yīng)用、編寫電子游戲、進行科學(xué)實驗、設(shè)計聲光互動、開發(fā)可穿戴設(shè)備等。
圖 2 行空板硬件介紹
行空板的正面是一塊2.8寸的觸摸彩色屏幕,第一眼看到這個屏幕,相信大家都會聯(lián)想到樹莓派,沒錯就是那個由于疫情原因現(xiàn)在天價的樹莓派,那么行空板的面世,會不會與樹莓派的價格有一定關(guān)系呢,這個問題留給大家去猜測。
圖 3樹莓派4B
既然從各方面去看,行空板與樹莓派都有千絲萬縷的相似之處,那么本次測評我們不妨就用最新的樹莓派4B版本作為行空板的對標(biāo)對象來展開測試,下面我們將樹莓派和行空板的詳細配置參數(shù)做詳細比較
#性能參數(shù)介紹#
首先來看行空板的具體性能參數(shù)
圖 4行空板參數(shù)
行空板詳細配置如下:
CPU: RK3308 64位 Ram國產(chǎn) 4核 1.2GHz
協(xié)處理器:GD32VF103C8T6 RISC-V 主頻108MHz & 64KB Flash & 32KB SRAM
內(nèi)存: 512MB DDR3
硬盤: 16GB eMMC
Wi-Fi: 2.4G
藍牙: 4.0
板載元件:
實體按鍵:Home按鍵,A/B按鍵屏幕:2.8寸240*320 TFT彩屏麥克風(fēng)傳感器光線傳感器LED燈ICM20689三軸加速度三軸陀螺儀蜂鳴器
接口:
USB Type-C *1
USB TYPE-A *1
microSD卡接口 *1
4Pin I2C *2
金手指: 19路無沖突I/O(支持I2C、UART、SPI、ADC、PWM)
供電: Type-C 5V供電
工作電壓:3.3V
最大工作電流: 2000mA
系統(tǒng):定制化的debian系統(tǒng)
之后,來看樹莓派4B的具體性能參數(shù)
圖 5樹莓派4B參數(shù)
樹莓派 4 B的詳細配置如下:
CPU:1.5 GHz 4 核心 64 位博通 BCM2711
GPU:400MHzVideoCore IV
網(wǎng)絡(luò):千兆以太網(wǎng)端口
內(nèi)存:1GB/2GB/4GB/8GB LPDDR4 SDRAM 內(nèi)存
Wi-Fi:雙頻(2.4 GHz 和 5 GHz)無線網(wǎng)絡(luò)
藍牙:藍牙 5.0
接口:
Micro-HDMI 接口*2支持雙4K 30HzUSB 3.0 接口*2USB 2.0 接口*2CSI 攝像頭接口*1DSI 顯示接口*1音頻接口*1MicroSD 卡槽PoE(以太網(wǎng)供電)供電針GPIO 40針引腳接口
USB Type C 電源接口(5V3A)
系統(tǒng):Ubuntu、debian、raspbian、windows等
看完行空板和樹莓派的參數(shù),你可能會感覺有點眼花繚亂,不過沒關(guān)系,我們總結(jié)出了以下幾點供大家參考:
在CPU和主頻率方面行空板要比樹莓派稍遜一些
內(nèi)存方面行空板沒有更多的選擇,只有512MB;而樹莓派則給用戶提供了1-8GB多種選擇(當(dāng)然內(nèi)存和價格有著明顯的關(guān)系)
在板載的元件方面,行空板要略勝一籌,板載了很多實用的按鍵、傳感器,省去了再配置的麻煩
在硬盤方面,行空板直接在主控板中配置了16GB的硬盤芯片,除此之外還可以通過microSD卡的接口擴大存儲容量。而樹莓派則只預(yù)留了SD卡的接口,需要自備內(nèi)存卡來燒錄系統(tǒng)
在接口方面,行空板配置了一個USB2.0的外設(shè)接口,要使用多個USB設(shè)備則需要擴展塢來實現(xiàn)。而樹莓派則配置了兩個USB 2.0和兩個USB 3.0的端口,除此之外樹莓派還支持雙路MicroHDMI接口、CSI攝像頭接口,DSI顯示器接口以及音頻接口,在接口配置方面樹莓派明顯占了上風(fēng)。
在系統(tǒng)方面,行空板出廠自帶官方提供的深度定制系統(tǒng)。而樹莓派則支持包括windows在內(nèi)的多種系統(tǒng),不過系統(tǒng)需要用戶自己完成燒錄
在GPIO接口方面,行空板提供了4路3Pin I/O接口(支持ADC、PWM),2兩路I2C接口以及19路金手指接口。而樹莓派則提供了40針的GPIO接口。在這一環(huán)節(jié),樹莓派的引腳選擇性更多,但接線相對更繁瑣。而行空板使用起來則相對簡單一些
通過以上7點的比較,我們可以簡單總結(jié)兩塊主控的特點行空板偏向簡單、易操作的方向而樹莓派更靈活自由,選擇性更多,給用戶更多自由創(chuàng)作的空間。對性能參數(shù)簡單比較后,我們可以看出行空板和樹莓派各有優(yōu)勢,相信你也會對這兩款產(chǎn)品的硬件表現(xiàn)上有自己的看法,大家可以根據(jù)不同的使用場景需求來選擇主控硬件參數(shù)了解完成,下面我們來體驗一下控制板的軟件部分樹莓派已經(jīng)發(fā)行了很多版本,關(guān)于樹莓派的使用 方法很多朋友應(yīng)該都非常熟悉而行空板是首發(fā),它都能做哪些事情,與樹莓派有什么不同,會不會是樹莓派的替代品,現(xiàn)在我們就來上手試一下,首先來看一下行空板的系統(tǒng)
#控制板系統(tǒng)介紹#
與樹莓派那種帶有桌面的Linux系統(tǒng)不同的是,行空板基于Linux深度定制了一個系統(tǒng)界面,系統(tǒng)中取消了Linux的桌面,取而代之的是一個home主菜單,長按Home按鍵即可進入菜單,AB按鍵控制光標(biāo)上下移動,Home按鍵確認(rèn)。我想省去系統(tǒng)桌面的原因應(yīng)該是為了節(jié)約內(nèi)存,提高效率在行空板系統(tǒng)的主菜單中提供了對板子控制常用的功能:
切換運行程序
應(yīng)用開關(guān)
查看網(wǎng)絡(luò)信息
開關(guān)無線熱點模式
圖 6 行空板系統(tǒng)界面
下面我們一一介紹一下這些功能菜單
切換應(yīng)用程序
此菜單中顯示系統(tǒng)文件目錄下的所有py程序,選中之后按Home按鍵確認(rèn)即可開始運行,運行程序時長按Home按鍵可以退出運行的程序。
圖 7 切換應(yīng)用程序
應(yīng)用開關(guān)
此菜單項提供了開關(guān)內(nèi)置應(yīng)用的功能:
Jupyter:開關(guān)Jupyter python編輯器服務(wù),默認(rèn)關(guān)閉
SIoT:開關(guān)SIoT物聯(lián)網(wǎng)服務(wù)器,默認(rèn)開啟
文件共享:開關(guān)samba文件共享功能,默認(rèn)開啟
屏幕共享:開關(guān)VNC屏幕共享功能,默認(rèn)開啟
開機自啟:打開之后,板子開機時將自動運行上一次關(guān)機前運行的程序,默認(rèn)關(guān)閉
圖 8 應(yīng)用開關(guān)
查看網(wǎng)絡(luò)信息
此菜單提供了查看網(wǎng)絡(luò)ip的功能:
USB網(wǎng)口:顯示使用usb線連接板子和電腦時 板子的IP地址,固定為10.1.2.3
無線連接:顯示板子連接其他Wi-Fi熱點時,板子被分配的地址,由路由器分配ip
無線熱點:顯示當(dāng)板子開啟無線熱點模式時,板子的ip地址,固定為192.168.123.1
其他設(shè)備:顯示其他情況出現(xiàn)的ip地址,例如在板子上連接其他網(wǎng)卡設(shè)備時被分配的地址,由路由器分配ip
圖 9 網(wǎng)絡(luò)信息
查看系統(tǒng)信息
此菜單顯示系統(tǒng)運行的相關(guān)信息:
系統(tǒng)版本:顯示當(dāng)前系統(tǒng)版本
CPU占用:顯示當(dāng)前CPU占用情況
內(nèi)存占用:顯示當(dāng)前內(nèi)存占用情況
硬盤占用:顯示當(dāng)前硬盤占用情況
圖 10 系統(tǒng)信息
開關(guān)無線熱點
此菜單可開關(guān)行空板上的無線熱點模式,當(dāng)啟動時,會顯示板子的熱點名稱及密碼,其他設(shè)備可搜索此熱點并連接板子(設(shè)備會斷網(wǎng)),此時板子固定IP為192.168.123.1
圖 11 無線熱點
本地Web主頁訪問
行空板上運行了一個Web網(wǎng)頁服務(wù),因此其他設(shè)備可以直接訪問行空板的ip地址打開一個網(wǎng)頁。 讓其他設(shè)備(電腦、手機、平板)與行空板在一個網(wǎng)絡(luò)中(可通過有線、無線、熱點模式),然后打開設(shè)備上的瀏覽器,輸入行空板的ip地址。例如使用有線連接電腦,打開電腦的chrome瀏覽器,輸入板子的ip10.1.2.3
,就可以打開界面。此頁面顯示板子的相關(guān)使用教程,可以方便打開官網(wǎng)、教程、論壇了解行空板相關(guān)資料。
圖 12 web訪問
應(yīng)用開關(guān)設(shè)置
在Web網(wǎng)頁的應(yīng)用開關(guān)一欄中,可以設(shè)置SIoT和Jupyter應(yīng)用程序的運行狀態(tài),可以開關(guān)服務(wù),點擊打開頁面可以一鍵跳轉(zhuǎn)到對應(yīng)服務(wù)管理頁面。SIoT是一個針對學(xué)校場景的開源免費MQTT服務(wù)器Jupyter是一個具有分步執(zhí)行程序功能的Python代碼編輯器
圖 13 應(yīng)用開關(guān)設(shè)置
網(wǎng)絡(luò)設(shè)置
進入網(wǎng)絡(luò)設(shè)置頁面會自動掃描板子周圍的Wi-Fi,在名稱下拉框選擇需要連接的Wi-Fi,在密碼輸入框輸入密碼,點擊連接即可讓行空板連接WiFi。
圖 14 連接Wi-Fi
需要注意的是這里不支持中文Wi-Fi,另外熱點僅支持2.4G Wi-Fi。
文件上傳
此頁面可以通過網(wǎng)頁上傳電腦中的文件到行空板上,適合用來適配其他不能直接通過ssh連接行空板的軟件。
選擇文件后點擊上傳即可上傳文件到文件夾名稱所在的文件夾下,如果重名則直接覆蓋,刪除文件夾將刪除文件夾及其中所有文件。
圖 15 上傳文件
注:此處僅能上傳到單個文件
VNC屏幕共享
行空板中內(nèi)置開啟了遠程桌面服務(wù),因此你可以在電腦上實時顯示板子的界面,為教學(xué)演示或是截圖寫教程帶來了便利關(guān)于遠程訪問的方式可以使用windows遠程桌面訪問
圖 16 遠程桌面
也可以使用VNC的軟件進行訪問
圖 17 遠程VNC訪問
不論哪種方式,成功訪問行空板后,就可以使用電腦鼠標(biāo)來操作行空板了
圖 18 遠程訪問行空板
熟悉了行空板的系統(tǒng)后,我們再來與樹莓派系統(tǒng)做橫向比較樹莓派的系統(tǒng)需要由用戶進行選擇性燒錄,給用戶開放自由度的同時也提高了一定的門檻。樹莓派常用的系統(tǒng)為官方提供的Raspbian帶桌面的Linux系統(tǒng),由于樹莓派可以通過HDMI接口與顯示器連接,所以當(dāng)系統(tǒng)燒錄完成后可以與顯示器搭配組合成為一個微型電腦來使用
圖 19 樹莓派連接顯示器
除此之外,樹莓派也可以進行遠程訪問,方式有SSH,VNC,網(wǎng)線等,不過在使用這些功能之前都需要做大量的配置工作(比如遠程訪問是要獲取樹莓派的IP地址,開啟VNC服務(wù)等等操作步驟)而行空板則沒有系統(tǒng)桌面,也沒有提供連接顯示器的接口,只能通過USB接口或者遠程的方式訪問,好處是行空板出廠的系統(tǒng)提前做好了各種配置,用戶只需要一鍵連接即可,節(jié)省時間,降低使用門檻,提高了效率,當(dāng)然與之相對應(yīng)的自由開發(fā)靈活度也會有所降低以上就是關(guān)于行空板和樹莓派系統(tǒng)的橫向比較介紹,相信不同階段的用戶需求是不同的,選擇適合自己的即可
#上手測試#
對行空板的系統(tǒng)有了一定認(rèn)識后,現(xiàn)在我們來上手測試一下,首先來看一下官方提供的文檔https://wiki.unihiker.com/從官方文檔我們知道行空板支持五種編程方式:Mind+編程、Jupyter編程、Thonny編程、SSH遠程訪問、VScode編程,本次測評我們以Mind+編程環(huán)境為例進行講解,我們先在官方網(wǎng)站提供的百度網(wǎng)盤連接下載對應(yīng)版本的編程環(huán)境
圖 20 Mind+編程環(huán)境下載軟件
下載并安裝完成后,我們需要將行空板與電腦連接,官方文檔中介紹的連接方式有很多種,我們采用USB數(shù)據(jù)線的方式進行測試行空板連接電腦后,在Mind+軟件中點擊“終端”按鈕打開終端。隨后,在軟件的上方會出現(xiàn)“連接遠程終端”的菜單,我們選擇行空板的IP地址進行連接
圖 21 Mind+連接行空板
連接完成,現(xiàn)在就可以開始程序設(shè)計了。程序設(shè)計第一步,加載行空板的Python庫
unihiker庫說明
unihiker庫是專門為了便于行空板的使用而開發(fā)的Python庫。我們可以借助unihike庫中的GUI類來實現(xiàn)屏幕顯示和控制,如顯示文字、表情、按鈕等,借助其中的Audio類來使用麥克風(fēng)和外接喇叭,如錄制語音,檢測環(huán)境音量等行空板默認(rèn)自帶unihiker庫,如果要安裝也可以按照下面步驟進行操作安裝庫指令如下
pip install unihiker
unihiker庫GUI導(dǎo)入方法
from unihiker import GUI #導(dǎo)入包
gui=GUI() #實例化GUI類
接下來,我們介紹一下unihiker庫的基礎(chǔ)使用方法
顯示文字
我們在編程環(huán)境中輸入如下測試程序
import time
from unihiker import GUI #導(dǎo)入包
gui=GUI() #實例化GUI類
def info_text_on_click():
print("文字被點擊")
info_text = gui.draw_text(x=120, y=320, text='你好',origin='bottom' ,onclick=info_text_on_click)
while True:
#增加等待,防止程序退出和卡住
time.sleep(1)
程序中,設(shè)置了在行空板屏幕的底部位置顯示文本通過“text='你好'”的方法實現(xiàn),還設(shè)置了當(dāng)點擊文字后會打印輸出“文字被點擊”的字樣,由“onclick=info_text_on_click”方法實現(xiàn)當(dāng)文字被點擊時執(zhí)行函數(shù)“info_text_on_click”
程序運行后,會看到如下圖所示的結(jié)果
圖 22 顯示文字
圖 23 文字被點擊后的效果
看了上述效果,行空板文字顯示的位置是如何確定的呢?根據(jù)前面介紹的硬件參數(shù),我們知道行空板的屏幕分辨率是240*320,左上角為坐標(biāo)原點,如下圖24所示,根據(jù)這樣的坐標(biāo)系,我們即可確定文字顯示的具體位置
圖 24 行空板坐標(biāo)系
其中文字顯示的代碼中還有一個origin參數(shù),它的作用是為了對齊控件,控件有9個對齊位置點,可以采用東南西北(ESWN)和上下左右(top/bottom/left/right)兩種方法標(biāo)識。
圖 25 對齊方位
圖 26 對齊圖示
顯示表情
文本顯示過后,下面我們來測試在行空板的屏幕中顯示表情,在編程環(huán)境中輸入如下程序
from unihiker import GUI #導(dǎo)入包
import time
gui=GUI() #實例化GUI類
# 傳入圖片文件路徑的方式
emj1 = gui.draw_emoji(x=0, y=0, w=100, h=100, emoji="Wink", duration=0.1, onclick=lambda:print("emojis clicked"))
emj2 = gui.draw_emoji(x=120, y=200, w=100, h=100, emoji="Smile", duration=1,origin="center" , onclick=lambda:print("emojis clicked"))
while True:
time.sleep(1) #等待防止程序退出看不到效果
程序中,繪制表情的方法是gui.draw_emoji,其中包含的參數(shù)解釋如下
x : 橫坐標(biāo)
y : 縱坐標(biāo)
w : 表情的寬度。按照長寬最小邊等比例縮放,可省略,寬高參數(shù)都省略則保持原圖分辨率。
h : 表情的高度。按照長寬最小邊等比例縮放,可省略,寬高參數(shù)都省略則保持原圖分辨率。
emoji : 表情名,可以使用內(nèi)置表情(Angry,Nerve,Peace,Shock,Sleep,Smile,Sweat,Think,Wink)也可以傳入路徑表情圖片(按照名字-序號.png順序)
duration : 圖片切換間隔時間
origin : 對齊位置,默認(rèn)左上角
onclick : 當(dāng)被點擊時觸發(fā)的回調(diào)函數(shù)
程序運行后,會看到如下圖27所示的效果,在屏幕的左上角和中間位置分別顯示了眨眼睛和微笑的表情,并且點擊表情會看到打印輸出的內(nèi)容
圖 27 顯示表情
圖 28 表情被點擊后的效果
顯示二維碼
學(xué)會了文本和表情的顯示后,下面我們嘗試在屏幕中顯示二維碼,在編程環(huán)境中輸入如下測試程序
from unihiker import GUI #導(dǎo)入包
gui=GUI() #實例化GUI類
gui.draw_qr_code(x=120, y=150, w=100, text="https://unihiker.com", origin ="center",onclick=lambda:print("qr clicked"))
import time
while True:
#增加等待,防止程序退出和卡住
time.sleep(1)
觀察程序,你會發(fā)現(xiàn)生成二維碼的方法只需要一條指令draw_qr_code即可實現(xiàn)在這個方法中涉及到的參數(shù)如下
x : 橫坐標(biāo)
y : 縱坐標(biāo)
w : 二維碼的邊長
text : 二維碼掃描后得到的內(nèi)容
origin : 對齊位置,默認(rèn)左上角
onclick : 當(dāng)被點擊時觸發(fā)的回調(diào)函數(shù)
通過修改text的參數(shù)即可改變二維碼的內(nèi)容程序運行后的效果如下圖29
圖 29 顯示二維碼
行空板中板載了三個按鍵,這可以很方便的做一些人機交互的案例,下面我們來嘗試一下按鍵的使用方法
按鍵偵測
按鍵偵測的指令是gui.wait_a_click()我們可以設(shè)置當(dāng)按下A鍵時顯示表情,程序如下
from unihiker import GUI #導(dǎo)入包
import time
gui=GUI() #實例化GUI類
gui.wait_a_click()
# 傳入圖片文件路徑的方式
emj1 = gui.draw_emoji(x=0, y=0, w=100, h=100, emoji="Wink", duration=0.1, onclick=lambda:print("emojis clicked"))
emj2 = gui.draw_emoji(x=120, y=200, w=100, h=100, emoji="Smile", duration=1,origin="center" , onclick=lambda:print("emojis clicked"))
while True:
time.sleep(1) #等待防止程序退出看不到效果
你會看到,我們只是在顯示表情的程序中增加了按鍵偵測的指令運行程序 ,可以看到當(dāng)按下A鍵后才會在屏幕中顯示表情,這里的等待A鍵按下是一種阻塞式的等待方式
圖 30 按鍵偵測
行空板麥克風(fēng)錄音
行空板除了有板載按鍵之外,在行空板屏幕的上方還板載了聲音采集的麥克風(fēng),下面我們來使用麥克風(fēng)實現(xiàn)錄音的效果,在編程環(huán)境中輸入如下測試程序
from unihiker import Audio
import time
audio = Audio() #實例化音頻
print("錄音5秒")
audio.record('5s.wav', 5) #錄音5秒,存到文件5s.wav中
程序中,通過調(diào)用音頻庫Audio()中的audio.record('5s.wav', 5) 方法來實現(xiàn)錄音,錄音時長可修改由于行空板的系統(tǒng)不帶電腦桌面,所以常規(guī)通過鍵盤輸入漢字內(nèi)容的操作就顯得比較困難,這一點樹莓派要比行空板做的好。不過,如果我們使用錄音的方式將音頻內(nèi)容進行語音識別,然后再外接一個音響就可以實現(xiàn)智能對話,這樣的另辟蹊徑雖然準(zhǔn)確性有可能不是很高,不過也算是一種優(yōu)雅的解決辦法了。那么,不妨我們就來嘗試一下這種解決辦法
行空板音播放頻
行空板只需要一條指令就可以實現(xiàn)音頻播放,指令如下
audio.play('5s.wav')
實現(xiàn)了錄音及播放,究竟如何才能實現(xiàn)語音輸入內(nèi)容呢?這里需要除了要用到行空板自帶的音頻庫以外還需要使用百度智能云的語音識別和語音合成功能比較方便的是,行空板出廠系統(tǒng)已經(jīng)自帶了這些庫,我們只需要調(diào)用即可,不再需要花時間去配置調(diào)試了,在這一點行空板要比樹莓派效率更高一些如果樹莓派要實現(xiàn)此功能不單單要外接麥克風(fēng)和音響,還需要配置各種第三方庫來實現(xiàn)錄音,語音識別,語音合成的功能,如下圖所示為樹莓派配置過程的部分截圖
圖 31 樹莓派配置過程
百度語音識別
要實現(xiàn)語音識別,這里我們需要借助百度智能云平臺中的人工智能語音技術(shù)來實現(xiàn)
圖 32 百度智能云平臺
不過在調(diào)用語音技術(shù)的功能時需要先在平臺中注冊賬戶,關(guān)于百度智能云的使用方法可以參考之前案例文章,這里就不過多強調(diào)了因一次點外賣的經(jīng)歷成就的“傳話筒”——基于樹莓派的智能語音助手
準(zhǔn)備工作完成,我們在編程環(huán)境輸入如下測試程序,其中APP_ID,APP_KEY,SECRET_KEY需要修改為自己賬號中的參數(shù)
#調(diào)用百度智能云,進行語音識別
def audio_discern(audio_path):
audio_type = "wav"
""" 百度云的ID,免費注冊 """
APP_ID = ' '
API_KEY = ' '
SECRET_KEY = ' '
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# 讀取文件
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
# 識別本地文件
text = client.asr(get_file_content(audio_path), audio_type, 16000)
return text
如果將前文中的錄音文件與語音識別程序結(jié)合在一起即可實現(xiàn)錄音后識別的效果
百度語音合成
語音識別實現(xiàn)后,同樣的方法我們可以借助百度智能云平臺的語音合成技術(shù)實現(xiàn)將文本內(nèi)容播放出來,在編程環(huán)境中輸入如下測試程序,其中APP_ID,APP_KEY,SECRET_KEY需要修改為自己賬號中的參數(shù)
#調(diào)用百度云,進行語音合成
def audio_speech(text):
APP_ID = ' '
API_KEY = ' '
SECRET_KEY = ' '
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
text=text
result = client.synthesis(text, 'zh', 1, { 'vol': 10,})
# 識別正確返回語音二進制 錯誤則返回dict 參照下面錯誤碼
if not isinstance(result, dict):
with open('auido.mp3', 'wb') as f:
f.write(result)
在行空板中實現(xiàn)了錄音、播放、語音識別和語音合成等功能后,下面我們來完成兩個小任務(wù)
二維碼生成器
第一個要制作的是二維碼生成器,實現(xiàn)過程是:通過語音識別的方式將用戶的音頻識別為文字,然后使用生成二維碼的指令,將文本內(nèi)容封裝在二維碼中,測試程序如下
from unihiker import GUI
from unihiker import Audio
import time
from aip import AipSpeech #導(dǎo)入百度AI
audio = Audio() #實例化音頻
print("錄音5秒")
audio.record('5s.wav', 5) #錄音5秒,存到文件5s.wav中
print("停止錄音")
#調(diào)用百度云,進行語音識別
def audio_discern(audio_path = "5s.wav",audio_type = "wav"):
""" 百度云的ID,免費注冊 """
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# 讀取文件
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
# 識別本地文件
text = client.asr(get_file_content(audio_path), audio_type, 16000)
return text
result = audio_discern()
print(result['result'][0])
result_text = result['result'][0]
gui=GUI()
gui.draw_text(x=40, y=44, color="red", text="二維碼生成器", font_size=20)
gui.draw_qr_code(x=130, y=200, w=150, text=result_text , origin ="center",onclick=lambda:print("qr clicked"))
while True:
pass
程序運行后的效果如下圖所示
圖 33 二維碼生成器
翻譯助手
接下來我們要制作的第二個任務(wù)是翻譯小助手,同樣使用語音識別技術(shù)將用戶說出的單詞識別為文本信息,再將文本內(nèi)容發(fā)送至有道翻譯網(wǎng)站進行翻譯,最后將翻譯結(jié)果顯示在行空板的屏幕中,測試程序如下圖所示
#導(dǎo)入requests庫
import requests
#導(dǎo)入json庫
import json
from unihiker import GUI
from unihiker import Audio
import time
from aip import AipSpeech #導(dǎo)入百度AI
audio = Audio() #實例化音頻
print("錄音5秒")
audio.record('5s.wav', 5) #錄音5秒,存到文件5s.wav中
print("停止錄音")
#調(diào)用百度云,進行語音識別
def audio_discern(audio_path = "5s.wav",audio_type = "wav"):
""" 百度云的ID,免費注冊 """
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# 讀取文件
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
# 識別本地文件
text = client.asr(get_file_content(audio_path), audio_type, 16000)
return text
result = audio_discern()
print(result['result'][0])
result_text = result['result'][0]
#翻譯函數(shù)
def translate(b):
#將有道翻譯API地址放入“url”變量中
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
#獲取要翻譯的內(nèi)容
word = b
#新建data字典,用來存放POST請求時需要攜帶的數(shù)據(jù)
data = {}
data['i'] = word
data['doctype'] = 'json'
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['client'] = 'fanyideskweb'
#向有道翻譯API發(fā)送網(wǎng)絡(luò)請求,并將返回的數(shù)據(jù)放入變量“http_data”中
http_data = requests.post(url=url,data=data).text
#將http_data中的數(shù)據(jù)解析為json格式
dict_data = json.loads(http_data)
#提取字典中的有效數(shù)據(jù)
result = dict_data["translateResult"][0][0]["tgt"]
print(f'翻譯結(jié)果:{result}')
return(result)
result_text = result_text.replace("。", "")
result_f = translate(result_text)
gui=GUI()
gui.draw_text(x=80, y=44, color="red", text="翻譯助手", font_size=20)
gui.draw_text(x=10, y=88, color=(255,105,180), text="原文:", font_size=20)
gui.draw_text(x=90, y=88, color=(0,191,255), text=result_text, font_size=18)
gui.draw_text(x=10, y=150, color=(255,105,180), text="結(jié)果:", font_size=20)
gui.draw_text(x=90, y=150, color=(0,191,255), text=result_f, font_size=18)
while True:
pass
程序運行后效果如下圖所示
圖 34 翻譯助手
通過兩個案例的制作,相信你一定對行空板的基礎(chǔ)使用方法有了一定了解,下面我們再來嘗試一下行空板運行人工智能案例的效果
人工智能案例測試
首先在行空板官網(wǎng)下載案例代碼,下載地址如下圖所示
圖 35 人工智能案例下載
案例下載完成,我們將“media-pipe”的程序放置在行空板的程序文件中
圖 36 人工智能案例代碼
程序加載完成后,首先點擊1-install_dependency.py的程序運行,目的是安裝配置該程序用到的第三方庫第三庫安裝完成就可以運行2至8中的任意一個測試程序了 ,不過在運行這些程序之前需要將攝像頭與行空板連接人臉關(guān)鍵點檢測
圖 37 人臉關(guān)鍵點檢測
手部關(guān)鍵點檢測
圖 38 手部關(guān)鍵點檢測
通過兩個人工智能案例的體驗,你會發(fā)現(xiàn)在行空板中運行一些人工智能的案例會很方便,幾乎做到了一鍵體驗,而對比樹莓派的話,樹莓派需要安裝配置各種庫和框架,這個過程可能需要花費大量的時間和精力,當(dāng)然這個過程也是非常寶貴的。總結(jié)一下就是,行空板門檻低,適合小白入門體驗,樹莓派靈活自由,適合深度開發(fā)。除此之外,行空板還可以運行一些OpenCV的案例和物聯(lián)網(wǎng)應(yīng)用的案例,由于篇幅原因,這里我們就不展開介紹了,感興趣的朋友可以在官網(wǎng)詳細了解
#總結(jié)#
深度使用了行空板后的感受 由于行空板預(yù)制了各種各樣的Python第三方庫,所以原先只能在電腦端運行的Python程序,現(xiàn)在這個口袋式大小的行空板中就可以運行了。這里有的朋友可能會有疑問, 一些在開源硬件當(dāng)中的MicroPython不是也可以運行Python程序嗎?事實上,那是不一樣的,MicroPython只能在單片機中運行部分Python程序。
而行空板則能夠運行完整的Python程序,由于運行場景的改變相信一些人工智能的項目或者是終端運行的項目將會向雨后春筍板涌現(xiàn)出來。那么現(xiàn)在我們再來回到開頭的那個問題,行空板與樹莓派的區(qū)別是什么?行空板能夠取代樹莓派嗎?我的觀點是行空板不能取代樹莓派,通過橫向的硬件性能參數(shù)對比,我們就可以看出來,樹莓派是一個具有各種靈活接口的微型電腦,給用戶的自由發(fā)揮空間更多,它不單單可以運行完整的Python程序,還可以處理各種多媒體任務(wù)。所以我更愿意把樹莓派稱作為一個口袋式的電腦。
而行空板 不一樣,它的系統(tǒng)由廠家深度定制,支持完整的Python,預(yù)制了各種第三方庫,板載了常用的傳感器,使用起來更加方便,易用。很明顯行空板側(cè)重的方向就是為了降低門檻,深度聚焦在Python教學(xué)應(yīng)用場景中,適合學(xué)生拿在手上就可以驗證各種各樣的Python程序,甚至在一些科創(chuàng)比賽中如果有了行空板的加持,相信學(xué)生可以更好的駕馭人工智能的項目,所以我更愿意把行空板稱作為一個口袋式的Python實驗教具。
OK,以上就是我們本次測評的全部內(nèi)容了 造物讓生活更美好,我們下期再見