謝作如 林淼焱



DF論壇上有人發(fā)了一篇關于制作“變色龍”的文章,利用RGB全彩LED燈珠或燈帶,結合顏色識別傳感器,做一個能夠根據環(huán)境顏色發(fā)出不同光芒的“變色龍”(如圖1)。這一作品激起很多創(chuàng)客的興趣,于是大家就進一步改造,讓這個“會變色”的作品越來越好玩。
這類變色主題的作品再多,也無非是利用了顏色傳感器,控制的還是REG燈,在我們看來都不夠好玩。在研究利用Wi-Fi控制互聯網智能燈泡的過程中,我們發(fā)現只要遵循一定的協(xié)議,控制物聯網家電并非難事。于是,本文繼續(xù)研究用虛谷號來控制Yeelight燈泡,做一個智能變色燈。和其他作品不同的是,我們用攝像頭或者高拍儀替代了顏色傳感器,并且控制的是220V“真正燈泡”。
作品原理分析
之所以用攝像頭來替代顏色傳感器,是因為前者不僅便宜,而且隨處可以獲取。利用攝像頭獲取顏色,可以借助于Python中的OpenCV庫,調用攝像頭拍照,并對拍到的圖像進行處理分析,將圖像中的主要顏色分解為RGB三種顏色數值,再通過局域網發(fā)送控制指令使智能燈泡變色。
用虛谷號控制智能燈泡的原理,在本欄目上一期文章《讓創(chuàng)客空間的照明系統(tǒng)個性化起來》中已經詳細介紹,這里不再贅述。Yeeligh燈泡支持局域網控制,能夠接收到局域網內任一智能設備的控制指令,發(fā)送控制指令的設備可以是電腦、手機,也可以是任何一個支持網絡功能的MCU,如掌控板、虛谷號和樹莓派等。
這個智能變色燈需要的器材很少,虛谷號加Yeelight智能燈泡、攝像頭就可以了,作品的工作流程如圖2所示。
用攝像頭獲取物體顏色的代碼實現
攝像頭前物體是什么顏色?看起來問題很簡單,但是讓計算機來回答并不容易。當我們要判斷某個物體是什么顏色的時候,往往會先找出這一物體的最主要顏色,再判斷這一顏色和哪種顏色最接近。計算機雖然說不出天藍、橘黃之類的色彩名詞,但可以精確地分析出圖像中某一個像素點的RGB值,即RGB三種顏色的具體組成,但一個物體往往不會是純色的,所以要確定一張含有多種顏色的圖像的“顏色”,需要確定一個算法。
算法一:將這個圖像的所有像素點的RGB值分別相加,取出RGB三種顏色的平均值。如果擔心計算的效率太低,可以均勻地取出部分像素,應該可以得到大致的顏色平均值。
算法二:利用濾鏡功能,給這個圖像加上RGB三種顏色遮罩,處理為黑白圖片,然后通過計算分別得到圖像的白色區(qū)域面積大小,換算為0~255之間的數值(如上頁圖3)。
其實,這兩種算法的原理是差不多的,只不過實現的方式不一樣。OpenCV庫作為著名的跨平臺計算機視覺庫,提供了很多圖像處理和計算機視覺方面的通用算法,可以很簡單地幫我們完成顏色分析的功能。核心代碼如圖4所示。
虛谷號控制物聯網燈泡的代碼實現
為方便用戶控制燈泡,Yeelight公司提供的一個小型庫,可讓用戶通過Wi-Fi發(fā)送指令來控制Yeelight燈泡。只要獲取了設備的IP地址,通過ON、OFF、Set_Color等簡單的函數,就能調整燈泡的開關、顏色、亮度等參數。
需要強調的是,Yeelight燈泡要開啟“局域網控制”功能,默認情況下這一功能是關閉的。另外,虛谷號和Yeelight燈泡一定要處于同一局域網,即連接同一個無線路由器,才能通過指令來找到設備的IP地址。
控制燈泡顏色的參考代碼如圖5所示。
我們在虛谷號的論壇中,提供了更多關于Yeelight庫的教程,地址為:http://vvboard.net.cn/bbs/。
作品測試
為了讓獲取的物體顏色更加準確,我們用高拍儀替代了普通攝像頭。因為高拍儀一般都自帶了用來補光的LED燈,可以避免色差。虛谷號支持絕大多數的免驅攝像頭和高拍儀,能夠做到即插即用。我們使用的高拍儀是良田的S系列。
作品的演示效果如圖6。默認情況下燈光是白色的,當在高拍儀下面放置不同的物體,燈光則會變成物體的顏色,識別速度很快。如果加上語音提示功能,這個作品就更加吸引人了。
從這個作品可以看出,借助Python的OpenCV庫,攝像頭獲取物體顏色非常方便,代碼簡單易懂。開源硬件虛谷號,不僅能夠用來編寫Arduino、Python、Processing等應用,也可以用來做視覺識別、語言識別之類的人工智能應用。在制作這個作品的時候,我們并不需要給虛谷號接上顯示器和鼠標、鍵盤,只需要把在電腦中調試成功的Python代碼,復制到虛谷號的U盤中就可以正常執(zhí)行,進而大大降低了應用門檻。