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