陸欣欣,李曉欣
(賀州學(xué)院人工智能學(xué)院,賀州 542899)
隨著互聯(lián)網(wǎng)體系的成熟,物聯(lián)網(wǎng)技術(shù)已經(jīng)逐漸被廣泛應(yīng)用到各個領(lǐng)域。在日常生活中,手機已經(jīng)成為人們生活中不可或缺的一部分。人們除了將手機用來通訊之外,還更多的是將它作為生活娛樂的重要工具。現(xiàn)在的人們越來越喜歡在社交平臺上分享自己的自拍視頻來記錄自己的美好生活,但是在拍攝過程當(dāng)中或多或少會出現(xiàn)一些拍攝的問題,比如需要他人幫忙,或是需要人為的控制拍攝的方向等等,都不能達(dá)到智能的效果。如果手機在視頻拍攝過程當(dāng)中可以檢測出人臉,并且可以跟隨人臉的位置移動而移動,這樣就可以使拍攝效果更加的智能化,人們的拍攝效果和體驗感更佳。
本設(shè)計由2部分組成,Android手機視頻采集端以及由STM32單片機、藍(lán)牙模塊、2個舵機模塊以及放置手機的支架組成的硬件端。整個系統(tǒng)的流程是:Android手機在實時視頻采集過程中檢測出單人臉,根據(jù)人臉位置通過藍(lán)牙技術(shù)將不同的指令發(fā)送到硬件端,硬件端通過藍(lán)牙模塊接收指令后,經(jīng)STM32模塊處理后驅(qū)動舵機的做出相應(yīng)的轉(zhuǎn)動,手機放置在舵機的支架上,從而可以實現(xiàn)對手機的控制,最終達(dá)到智能實時視頻采集的效果。整體設(shè)計如圖1所示。
圖1 系統(tǒng)的整體框架
Android手機視頻采集端最終要實現(xiàn)的是一個手機APP,采用的開發(fā)的語言以及開發(fā)工具分別是JAVA和Android Studio。Android Studio提供了集成的Android開發(fā)工具,對于編寫手機軟件的PC端程序來說,在其提供的工具下,能夠快速的建立Android開發(fā)環(huán)境,以及程序的實時調(diào)試,開發(fā)過程中開發(fā)者可以利用模擬器進行調(diào)試,也可以用手機連接電腦,直接進行調(diào)試。
Android手機視頻采集端主要實現(xiàn)的功能是先與硬件端的藍(lán)牙模塊連接,然后在實時視頻采集過程中檢測出每幀視頻的人臉位置信息,最后再根據(jù)人臉位置信息給硬件端發(fā)送不同的控制指令。
Android手機視頻采集端與硬件端的通信需要通過藍(lán)牙技術(shù)來實現(xiàn),所以手機在實時視頻采集前需要與硬件端的藍(lán)牙模塊連接。連接的過程是:①要想手機使用藍(lán)牙功能,首先需要先添加藍(lán)牙權(quán)限。②藍(lán)牙的初始化設(shè)置。利用管理者對象調(diào)用getAdapter()方法檢查當(dāng)前手機是否支持藍(lán)牙,并將藍(lán)牙狀態(tài)設(shè)置為打開狀態(tài),如圖2所示。③搜索設(shè)備,調(diào)用BluetoothAdapter類中的startLeScan()方法來搜索硬件端的藍(lán)牙模塊,通過回調(diào)函數(shù)LeScanCallback()獲得藍(lán)牙設(shè)備的設(shè)備名稱和MAC地址,如圖3所示。④實現(xiàn)藍(lán)牙的連接,連接之前先獲取目標(biāo)藍(lán)牙設(shè)備BluetoothDevice對象,調(diào)用connectGatt()方法進行連接,并將BluetoothGattCallback作為connect?Gatt方法的參數(shù),然后最這些參數(shù)status進行分析,如果status為GATT_SUCCESS時表明藍(lán)牙連接成功。如圖4所示。
圖2 藍(lán)牙開啟
圖3 藍(lán)牙搜索
圖4 藍(lán)牙連接
要想實現(xiàn)智能實時視頻采集,在實時視頻采集過程中獲取到每一幀視頻的人臉位置信息非常關(guān)鍵。實現(xiàn)的過程是:①在設(shè)計實時視頻采集界面的時候用兩個View進行疊加,底層的View用來實現(xiàn)實時視頻采集,頂層的View用來繪制人臉框,并默認(rèn)設(shè)置為透明狀態(tài)。②打開手機攝像頭,獲取CameraDevice的mCameraDe?vice對象,利用mCameraDevice對象調(diào)用create?CaptureRequest()方法實現(xiàn)視頻預(yù)覽和監(jiān)聽每一幀視頻數(shù)據(jù)。③利用回調(diào)方法CameraCapture?Session.CaptureCallback()獲取每幀視頻的人臉的模式以及人臉的Face[]數(shù)據(jù)。④在頂層View通過畫布和畫筆將人臉框繪制出來。
在人臉檢測過程中繪制人臉框的時候要特別注意,因為屏幕看到的人臉位置和實際測出的人臉位置信息不匹配。主要的原因是Android默認(rèn)坐標(biāo)系和視圖坐標(biāo)系不同,默認(rèn)坐標(biāo)系的原點在手機屏幕左上角,而視圖坐標(biāo)系是相對默認(rèn)坐標(biāo)系而言,需要通過一定的方法來獲取控件相對默認(rèn)坐標(biāo)系的位置。人臉位置信息的采集是在默認(rèn)坐標(biāo)系的基礎(chǔ)上進行的,而人臉框的繪制是以視圖坐標(biāo)系為基準(zhǔn)的,所以為了可以使檢測出來的人臉位置和在屏幕上看到的人臉位置一樣,需要將檢測出的人臉位置信息進行一定的轉(zhuǎn)換。在轉(zhuǎn)換的之前又需要先區(qū)分是手機前置攝像頭還是后置攝像頭,因為兩者的轉(zhuǎn)換方法有區(qū)別,如果是前置攝像頭,需要先將獲取到的人臉位置信息在水平方向左右轉(zhuǎn)換,再旋轉(zhuǎn)90°,如果是后置攝像頭,只需旋轉(zhuǎn)90°。最后再將轉(zhuǎn)換后的人臉信息根據(jù)視圖坐標(biāo)系繪制在頂層的View即可。還需要注意的是,在繪制新的一幀視頻人臉位置信息時需要重新刷新一下頂層的View。圖5和圖6分別是2種情況下在實時視頻采集時采集到的單人臉位置結(jié)果。
圖5 前置攝像頭單人臉檢測
圖6 后置攝像頭單人臉檢測
手機在實時視頻采集過程中檢測到每一幀視頻人臉位置信息后,還需要將人臉位置信息通過藍(lán)牙技術(shù)發(fā)到給硬件端。但是因為檢測到的人臉信息是一個矩形數(shù)據(jù),如果要將所有的數(shù)據(jù)都發(fā)送給硬件端,那么無論是在手機發(fā)送和還是硬件接收的過程中要處理的數(shù)據(jù)都太復(fù)雜。所以為了方便,只取矩形的中點作為人臉位置信息,根據(jù)與上一幀人臉位置中點信息的不同,給硬件端發(fā)送上下左右不同的控制指令。
硬件端主要由一個微型STM32單片機、一個藍(lán)牙模塊、2個舵機、電源和一個手機支架構(gòu)成,主要實現(xiàn)的功能是通過藍(lán)牙模塊來接收手機發(fā)送的控制指令,轉(zhuǎn)交給STM32處理后驅(qū)動舵機的轉(zhuǎn)動,手機放置在手機支架上,從而達(dá)到實現(xiàn)智能實時視頻采集的效果。
硬件部分的主控芯片采用的是STM32F103C 8T6,它是基于高性能ARM?CortexTM-M3的32位RISC內(nèi)核處理器,芯片主頻高達(dá)72 MHz,擁有I2C,SPI,PWM等總線接口。
因為只需要接收手機控制端發(fā)出的指令,所以藍(lán)牙模塊采用的是BT05從模塊。它引出的端口包括VCC、GND、TXD、RXD以及預(yù)留LED狀態(tài)輸出引腳。它的輸出電壓為3.6~6 V,在空曠的地方有效距離可超過10 m。藍(lán)牙模塊中的TXD為發(fā)送端,需與STM32的RDX端連接,RDX為接收端,需與STM32的TXD端連接。
因為手機在實時視頻采集過程中需要根據(jù)人臉位置移動而移動,所以需要用舵機來實現(xiàn)。舵機模塊采用的是MG995,本設(shè)計其工作的時候使用的電壓為5 V,需要旋轉(zhuǎn)的角度在0~180之間。舵機上有三根線,分別為電源、接地和信號線。
電源模塊主要是為STM32單片機和藍(lán)牙模塊供電,本系統(tǒng)設(shè)計采用的電源模塊為可充電電池,可以方便實現(xiàn)對STM32單片機3.3 V以及藍(lán)牙模塊5 V的穩(wěn)壓供電。
硬件端的主控芯片是STM32單片機,程序設(shè)計的過程主要包含定時器的初始化,串口的初始化以及主程序的實現(xiàn)。
3.2.1 定時器的初始化
(1)打開TIM4的時鐘。因為設(shè)計需要控制2個舵機上下左右的轉(zhuǎn)動,所以需要用到定時器的兩個輸出通道CH1和CH2,并將對應(yīng)的引腳PB6和PB7設(shè)置為復(fù)用功能輸出。
(2)設(shè)置定時器的基本參數(shù),主要是用來設(shè)置定時器的時鐘周期、預(yù)分頻器和定期器的計數(shù)模式。
(3)設(shè)置定時器輸出通道,主要是用來確定輸出波形的占空比和輸出比較極性。
(4)使用定時器,可以利用庫函數(shù)TIM_Cmd()來實現(xiàn)。
3.2.2 串口的初始化
(1)需要使能串口時鐘以及它相應(yīng)的GPIO端口才能實現(xiàn)數(shù)據(jù)的輸入輸出。
(2)設(shè)置GPIO端口模式。
(3)設(shè)置串口參數(shù)。
(4)開啟中斷并且初始化NVIC。
(5)編寫中斷處理函數(shù)。
(6)實現(xiàn)串口數(shù)據(jù)收發(fā)。
(7)獲取串口傳輸?shù)臓顟B(tài)。
3.2.3 主程序的實現(xiàn)
在主函數(shù)里面主要實現(xiàn)的是處理藍(lán)牙模塊收到的數(shù)據(jù),并控制舵機的轉(zhuǎn)動,處理函數(shù)如下:
程序設(shè)計好后,首先將藍(lán)牙模塊上的RXD、TXD、VCC、GND引腳分別連接STM32上的串口2的PA2引腳、PA3引腳,3.3V引腳、GND引腳,兩個舵機的信號線分別連接STM32上的PB6、PB7引腳,剩下的兩根線分別接電源和地。然后通過MDK的方式將程序下載到STM32上。硬件部分效果如圖7所示。
圖7 硬件效果
啟動手機APP后,在手機實時視頻采集之前首先需要在藍(lán)牙界面搜索連接硬件端的藍(lán)牙模塊,如果連接成功,這個時候的藍(lán)牙模塊上的LED燈會由閃爍狀態(tài)變成一直亮著的狀態(tài)。藍(lán)牙成功后可以開始實時視頻采集,視頻采集過程中會檢測到每一幀視頻的人臉信息,手機根據(jù)人臉信息位置不同給硬件端發(fā)送不同的控制指令,從而可以實現(xiàn)對手機的前后左右的控制,達(dá)到智能實時視頻采集的效果。
本設(shè)計采用STM32最小系統(tǒng)為控制中心,結(jié)合藍(lán)牙模塊、舵機模塊等,在Android手機平臺上,利用藍(lán)牙傳輸技術(shù),通過軟件編程的方式來實現(xiàn)智能實時視頻采集的效果,這為將來智能家居的遙控設(shè)計提供一定的參考意義。
將編譯的手機APP安裝成功以及硬件部分的主控芯片的程序下載好后,經(jīng)過反復(fù)測試,可以在一定距離之內(nèi)很好的實現(xiàn)手機在實時視頻采集時可以根據(jù)人臉位置的轉(zhuǎn)動而轉(zhuǎn)動,達(dá)到了預(yù)期的設(shè)想。
本控制系統(tǒng)采用人臉檢測+接收端信號轉(zhuǎn)化控制,這種方式采用的終端軟件具有易移植和通用性,市場的應(yīng)用價值較高,便于推廣,本系統(tǒng)所需硬件系統(tǒng)符合國產(chǎn)化要求。