沈頌龍 陳杰 李郎尼
【摘? 要】本文開(kāi)發(fā)一款投影式空調(diào)面板開(kāi)關(guān),利用投影儀將界面的內(nèi)容投射到物體表面,結(jié)合攝像頭的卷積神經(jīng)網(wǎng)絡(luò)視覺(jué)檢測(cè),可直接完成界面操作,實(shí)現(xiàn)功能交互。本投影開(kāi)關(guān)具有很強(qiáng)的適配性,可在多種物體表面成像,具有使得內(nèi)飾簡(jiǎn)約和科技感強(qiáng)等特點(diǎn)。
【關(guān)鍵詞】機(jī)器視覺(jué);投影界面;卷積神經(jīng)網(wǎng)絡(luò)
中圖分類號(hào):U463.851? ? 文獻(xiàn)標(biāo)志碼:A? ? 文章編號(hào):1003-8639( 2023 )04-0041-04
【Abstract】This paper develops a projection air conditioning panel switch based on the traditional image algorithm of vision. The content of the interface is projected onto the surface of the object by the projector. Combined with the visual detection of the camera,the interface operation can be directly completed to achieve functional interaction.? Projection switch has strong adaptability,can be in a variety of object surface imaging,with the interior simple and strong sense of science and technology.
【Key words】computer vision;projection interface;convolutional neural network
1? 背景描述
本投影開(kāi)關(guān)主要由投影儀、攝像頭、視頻轉(zhuǎn)接板、核心處理板等組成。投影區(qū)域尺寸與投影角度有關(guān),需按投影區(qū)域尺寸選擇合適的投影模組以及投影安裝距離;操作界面通過(guò)投影模組投射至內(nèi)飾表面。投影開(kāi)關(guān)如圖1所示。
與傳統(tǒng)面板開(kāi)關(guān)相比,具備以下優(yōu)點(diǎn)。
1)極簡(jiǎn)化:投影開(kāi)關(guān)為隱藏式安裝,在投影開(kāi)關(guān)未工作時(shí),無(wú)開(kāi)關(guān)式樣,內(nèi)飾簡(jiǎn)約。
2)高度集成化:投影開(kāi)關(guān)可以根據(jù)整車需求,切換各種產(chǎn)品的功能界面,使得功能產(chǎn)品集成化。
3)成本優(yōu)化和輕量化:集成整車內(nèi)飾開(kāi)關(guān)功能,精簡(jiǎn)整車開(kāi)關(guān),成本下降,整車開(kāi)關(guān)質(zhì)量下降。
4)升級(jí)簡(jiǎn)約化:無(wú)需重新開(kāi)內(nèi)飾開(kāi)關(guān),只需要根據(jù)需求,更新投影組件的內(nèi)存信息和軟件部分即可完成產(chǎn)品迭代。
與智能表面相比,具備以下優(yōu)點(diǎn):①適配性強(qiáng),成像在內(nèi)飾表面,可以適配大多數(shù)的內(nèi)飾材料;②功能豐富,投影功能豐富,可根據(jù)整車需要,除了作為普通內(nèi)飾開(kāi)關(guān)使用之外,亦可進(jìn)行視頻播放、游戲投屏等影音娛樂(lè)。
2? 系統(tǒng)框架描述
2.1? 硬件架構(gòu)描述
硬件描述框圖如圖2所示,其主要硬件模塊介紹如下。
1)樹(shù)莓派:樹(shù)莓派是一款基于ARM的單板卡片式電腦,以SD卡為內(nèi)存硬盤,卡片主板周圍有USB接口和網(wǎng)口,擁有視頻模擬信號(hào)的電視輸出接口、HDMI高清輸出接口以及無(wú)線網(wǎng)卡,支持Linux系統(tǒng),擁有活躍的開(kāi)源社區(qū)。本投影開(kāi)關(guān)利用樹(shù)莓派進(jìn)行圖像采集處理和完成界面交互功能等任務(wù)。
2)ICN6211:一款MIPI-DSI視頻信號(hào)轉(zhuǎn)RGB888視頻信號(hào)轉(zhuǎn)換芯片,需要在樹(shù)莓派中適配對(duì)應(yīng)的設(shè)備驅(qū)動(dòng)才能使用。
3)投影儀:型號(hào)OPD2x,是720P TRP系列光機(jī),可通過(guò)I2C命令進(jìn)行配置投影亮度、投影區(qū)域矯正等。
4)攝像頭:為雙目攝像頭,可多角度拍攝手勢(shì)姿態(tài),畫(huà)面具有自適應(yīng)白平衡等功能。
運(yùn)行流程如下:①樹(shù)莓派運(yùn)行空調(diào)界面程序,通過(guò)ICN6211芯片,將MIPI-DSI信號(hào)轉(zhuǎn)換為RGB888視頻輸出信號(hào),最后由投影儀接收并進(jìn)行實(shí)時(shí)投屏顯示;②雙目攝像頭捕獲投屏畫(huà)面,經(jīng)樹(shù)莓派對(duì)數(shù)字圖像進(jìn)行處理,后臺(tái)程序提取出交互操作信息,控制界面程序完成功能顯示;③樹(shù)莓派將當(dāng)前界面狀態(tài)通過(guò)UART反饋到MCU端,然后由CAN信號(hào)轉(zhuǎn)發(fā)出去,同時(shí)MCU也會(huì)控制投影儀電機(jī)的轉(zhuǎn)動(dòng)實(shí)現(xiàn)對(duì)焦功能。
2.2? 軟件架構(gòu)描述
軟件描述框圖如圖3所示,其中包含幾類開(kāi)源庫(kù),比如Qt、OpenCV、Eigen、Linux、DRM等。
Qt是基于C++跨平臺(tái)的應(yīng)用程序開(kāi)發(fā)框架,擁有豐富的API,既可以開(kāi)發(fā)GUI程序,也可用于開(kāi)發(fā)非GUI程序。QML(Qt Meta-Object Languaage,Qt元對(duì)象語(yǔ)言)是一種用于描述應(yīng)用程序用戶界面的聲明式編程語(yǔ)言,其使用一些可視組件以及這些組件之間的交互來(lái)描述用戶界面。QML是一種高可讀性的語(yǔ)言,可以使組件以動(dòng)態(tài)方式進(jìn)行交互,并且允許組件在用戶界面中很容易實(shí)現(xiàn)復(fù)用和自定義。新版本的Qt加強(qiáng)了JavaScript和QML的功能。目前,Qt的主流開(kāi)發(fā)方式是:界面采用QML和JavaScript進(jìn)行開(kāi)發(fā),后臺(tái)業(yè)務(wù)邏輯采用C++開(kāi)發(fā),這種混合編程方式可以極大拓展腳本語(yǔ)言的便利和C++語(yǔ)言的高效性。
OpenCV(Open Source Computer Vision Library)是一個(gè)基于開(kāi)源發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)庫(kù),可實(shí)現(xiàn)圖像處理和計(jì)算機(jī)視覺(jué)方面的很多通用算法,底層采用C和C++編寫,可以在各種主流平臺(tái)上運(yùn)行。本文利用OpenCV庫(kù)進(jìn)行圖像處理和分析。
ONNX Runtime:ONNX Runtime是微軟推出的一款推理框架,用戶可以非常便利地用其運(yùn)行一個(gè)ONNX模型。ONNX Runtime支持多種運(yùn)行后端,包括CPU、GPU、TensorRT、DML等。
Linux DRM(Direct Rending Manger)表示直接渲染管理器,是目前Linux下主流的顯示框架。DRM框架涉及到的元素很多,本文主要是使用了MIPI DSI接口用于顯示輸出,需要DRM驅(qū)動(dòng)支持。
3? 投影界面
投影界面的設(shè)計(jì)框架是:QML負(fù)責(zé)界面設(shè)計(jì)(布局、顯示效果),JavaScript負(fù)責(zé)界面邏輯(按鍵觸發(fā)、長(zhǎng)短按等),C++負(fù)責(zé)后臺(tái)邏輯(網(wǎng)絡(luò)通信)。
3.1? 基于QML的界面設(shè)計(jì)
圖4是設(shè)計(jì)的空調(diào)界面,包含POWER按鍵、溫度+/-按鍵、風(fēng)量+/-按鍵、AUTO按鍵和模式按鍵。溫度和風(fēng)量按鍵包含長(zhǎng)短按功能,為了便于投影交互,當(dāng)按鍵觸發(fā)時(shí),對(duì)應(yīng)的字符圖標(biāo)會(huì)隱藏,而松開(kāi)按鍵會(huì)顯示字符。溫度按鍵、風(fēng)量按鍵以及模式按鍵包含擋位顯示,POWER按鍵和AUTO按鍵包含指示燈顯示。
3.2? 擴(kuò)展QML功能
QML對(duì)于界面的設(shè)計(jì)比較方便,有專門設(shè)計(jì)好的組件可以使用,但對(duì)于網(wǎng)絡(luò)、文件處理等較為底層的功能則需要通過(guò)C++自定義組件來(lái)完成。例如界面程序需要一個(gè)服務(wù)端網(wǎng)絡(luò)進(jìn)行通信,那么接口部分只需要定義幾個(gè)主要的元素即可,如服務(wù)端Port口、接收和發(fā)送的數(shù)據(jù)流以及是否對(duì)重復(fù)接收數(shù)據(jù)進(jìn)行過(guò)濾等,先通過(guò)C++完成這個(gè)ServiceNetwork類的編寫,然后注冊(cè)進(jìn)QML系統(tǒng)中使用。
qmlRegisterType
在QML中通過(guò)如下方式聲明一個(gè)ServiceNetwork對(duì)象,端口號(hào)為8000,允許重復(fù)接收相同的數(shù)據(jù),并對(duì)接收到的數(shù)據(jù)進(jìn)行處理。當(dāng)有客戶端成功連接后,就可以進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)收發(fā)。
import ServiceNetwork 1.0
ServiceNetwork{
id:net
port:8000
repeat:true
onRecvArrayChanged:{
doSomething();
}
}
界面啟動(dòng)后獲得的投影界面效果如圖5所示。
4? 指尖搜索模型介紹
由于本模型被部署在嵌入式設(shè)備上,整機(jī)算力十分緊張,無(wú)法支撐大型模型的實(shí)時(shí)運(yùn)算,所以本文無(wú)法直接使用手勢(shì)姿態(tài)檢測(cè)模型,而是使用了2個(gè)小型的指尖檢測(cè)模型。通過(guò)將2個(gè)小模型級(jí)聯(lián)使用,降低整體計(jì)算量,提高整體判斷準(zhǔn)確度。
4.1? 訓(xùn)練平臺(tái)
本文使用的訓(xùn)練平臺(tái)如下:①軟件,PyTorch 1.11,CUDA 10.4;②硬件,CPU Intel i5,GPU Nvdia 1050TI。
4.2? 模型結(jié)構(gòu)
4.2.1? 指尖判斷器
模型1為指尖判斷器,判斷目標(biāo)區(qū)域內(nèi)是否有指尖。輸入原始RGB圖像,輸出值為一個(gè)0~1之間的浮點(diǎn)數(shù),代表目標(biāo)區(qū)域指尖的概率,輸出值為0代表有指尖概率為0%,輸出值為1代表有指尖概率為100%。
指尖判斷器模型結(jié)構(gòu)如圖6所示。輸入圖像,先經(jīng)過(guò)一次步長(zhǎng)為2的卷積模塊,尺寸會(huì)縮小一半,然后經(jīng)過(guò)一個(gè)殘差模塊,再經(jīng)過(guò)池化,尺寸再次縮小一半,最后經(jīng)過(guò)全連接層輸出的是手指的概率。
4.2.2? 姿態(tài)判斷器
模型2為姿態(tài)判斷器,用于精細(xì)檢測(cè)指尖的具體位置。其輸出值為一張熱力圖,圖中每個(gè)點(diǎn)都為一個(gè)0~1的浮點(diǎn)數(shù),代表指尖出現(xiàn)在該位置的概率。
姿態(tài)判斷器的模型結(jié)構(gòu)圖7所示。輸入原始RBG數(shù)據(jù)后,首先經(jīng)過(guò)一個(gè)卷積層,然后經(jīng)過(guò)一個(gè)沙漏模塊,再經(jīng)過(guò)一個(gè)卷積層,得到最終的熱力圖。其中沙漏模塊是由多個(gè)不同尺度的殘差模塊堆疊而成,可以從多個(gè)分辨率尺度上預(yù)測(cè)指尖位置。
4.3? 訓(xùn)練流程
深度神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過(guò)程比較類似?;玖鞒倘缦拢孩賹⒃紨?shù)據(jù)集分成測(cè)試集和訓(xùn)練集;②初始化網(wǎng)絡(luò)結(jié)構(gòu)、網(wǎng)略參數(shù);③定義損失函數(shù),預(yù)測(cè)函數(shù),學(xué)習(xí)率;④在訓(xùn)練集上,計(jì)算損失;⑤使用梯度下降算法更新網(wǎng)絡(luò)參數(shù);⑥在測(cè)試集上計(jì)算預(yù)測(cè)正確率;⑦重復(fù)步驟④~⑥,直到正確率不再提升。
4.4? 模型部署與推理
4.4.1? 模型部署流程
本文采用ONNX(Open Neural Network Exchange)開(kāi)放神經(jīng)網(wǎng)絡(luò)交換格式作為中間表示,ONNX Runtime作為最終運(yùn)行框架。
1)ONNX:ONNX是一種針對(duì)機(jī)器學(xué)習(xí)所設(shè)計(jì)的開(kāi)放式的文件格式,用于存儲(chǔ)訓(xùn)練好的模型。它使得不同的人工智能框架(如Pytorch、MXNet)可以采用相同格式存儲(chǔ)模型數(shù)據(jù)并交互。ONNX的規(guī)范及代碼主要由微軟、亞馬遜、Facebook和IBM等公司共同開(kāi)發(fā),以開(kāi)放源代碼的方式托管在Github上。
2)ONNX Runtime:ONNX Runtime是微軟推出的一款推理框架,用戶可以非常便利地用其運(yùn)行一個(gè)ONNX模型。ONNX Runtime支持多種運(yùn)行后端包括CPU、GPU、TensorRT、DML等??梢哉f(shuō)ONNX Runtime是對(duì)ONNX模型最原生的支持。
4.4.2? 推理流程
實(shí)踐中,推理流程如圖8所示。實(shí)際使用中,首先使用指尖判斷器,對(duì)所有按鍵區(qū)域進(jìn)行一次初篩,將存在指尖概率高的圖像輸入姿態(tài)判斷器進(jìn)行細(xì)化分析,姿態(tài)判斷器的輸出結(jié)果是熱力圖,從中既可以得到指尖位置信息,也可以得到指尖概率信息。實(shí)際判斷按鍵按下,需要同時(shí)滿足指尖判斷器概率高于閾值、姿態(tài)判斷其概率高于閾值、指尖停留在目標(biāo)位置超過(guò)100ms3個(gè)指標(biāo),才認(rèn)為按鍵確實(shí)被按下。
由于2個(gè)判斷器均為計(jì)算量很小的小型判斷器,各自的判斷準(zhǔn)確率均為95%左右,并不算高,但將2個(gè)判斷器級(jí)聯(lián)使用后,判斷召回率有所降低,但是精確度提升到了99.75%。換句話說(shuō),級(jí)聯(lián)2個(gè)判斷器后會(huì)略降低靈敏度,漏掉一些手指,但是一旦被判定為手指,準(zhǔn)確率接近100%。如此設(shè)計(jì),可以有效降低誤觸。另外,在實(shí)際使用時(shí),可以靈活調(diào)節(jié)2個(gè)判斷器的閾值,調(diào)節(jié)準(zhǔn)確率和靈敏度之間的平衡,并且由于只有經(jīng)過(guò)指尖判斷器的初篩圖像,才會(huì)送入姿態(tài)判斷器,大大降低了整機(jī)的計(jì)算量。
推理效果如圖9所示。圖中,綠色方框?yàn)槟繕?biāo)按鍵區(qū)域,緊貼方框上方的數(shù)字代表指尖判斷器輸出的概率,右下角存在指尖的按鍵框內(nèi)的紅色代表指尖的概率高,藍(lán)色代表指尖的概率低,第2排數(shù)字代表姿態(tài)判斷器輸出的熱力圖的最大值。
5? 總結(jié)與展望
應(yīng)用了卷積神經(jīng)網(wǎng)絡(luò)后的投影開(kāi)關(guān)效果如圖10所示,整體按鍵操作效果已經(jīng)十分接近觸摸按鍵面板。同時(shí)又能適應(yīng)各種材質(zhì)的界面,自由擴(kuò)展操作內(nèi)容,做到傳統(tǒng)觸摸面板無(wú)法做到的高自由度。
由于時(shí)間和工作環(huán)境限制,本文在數(shù)據(jù)集準(zhǔn)備時(shí),缺乏白人、黑人、老人、小孩等的數(shù)據(jù),需要在后續(xù)繼續(xù)采集和添加相應(yīng)的數(shù)據(jù)。另外對(duì)于美甲、手套等非裸手的情況,也未進(jìn)行有效支持,是后續(xù)進(jìn)一步改進(jìn)的一個(gè)方向。
參考文獻(xiàn):
[1] HE K,ZHANG X,REN S,et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition,2016:770-778.
[2] NEWELL A,YANG K,DENG J. Stacked hourglass networks for human pose estimation[C]//European conference on com-puter vision,2016:483-499.
(編輯? 凌? 波)