引言
由于YouTube和Netflix的出現(xiàn),我們開(kāi)始躺著看手機(jī)。然而,長(zhǎng)時(shí)間用手拿著手機(jī)會(huì)讓人感到疲勞。這次我們制作了一個(gè)可以在你眼前保持適當(dāng)距離并調(diào)整位置的自動(dòng)移動(dòng)手機(jī)支架,讓你無(wú)需用手拿著手機(jī)。請(qǐng)務(wù)必試試!
準(zhǔn)備工作
這次我們使用了Elephant Robotics公司的機(jī)械臂。與其他產(chǎn)品相比,它價(jià)格便宜,作為初學(xué)者也相對(duì)容易上手。
myCobot 280 Pi- 6 DOF Collaborative Robot (Raspberry Pi version)
為了讓攝像頭跟蹤面部,我們采用了OAK-D OpenCV DepthAI攝像頭。它不僅僅是進(jìn)行視頻捕捉,還能輔助進(jìn)行面部識(shí)別所需的神經(jīng)網(wǎng)絡(luò)運(yùn)算,因此即使微控制器沒(méi)有GPU,也能高速進(jìn)行面部識(shí)別。
這是一個(gè)可以始終將顯示屏調(diào)整到眼前適當(dāng)距離的手機(jī)支架。主要由OAK-D攝像頭和機(jī)械臂“myCobot”構(gòu)成。OAK-D攝像頭不僅可以獲取視頻,還可以獲取深度信息,從而計(jì)算出攝像頭到臉部的距離。myCobot是一款具有6個(gè)旋轉(zhuǎn)軸的機(jī)械臂,能夠?qū)崿F(xiàn)多種動(dòng)作。通過(guò)OAK-D攝像頭獲取的圖像來(lái)計(jì)算臉部的三維位置,myCobot可以將手機(jī)顯示屏移動(dòng)到眼前。這樣一來(lái),即使不用手拿著手機(jī)也能享受視頻。
將OAK-D攝像頭和手機(jī)安裝到myCobot上
myCobot的末端有四個(gè)M2.6的螺絲孔。我們3D打印了一個(gè)手機(jī)殼,并利用這些螺絲孔將殼子固定到myCobot上,從而固定手機(jī)。
另一方面,OAK-D攝像頭有一個(gè)1/4英寸的螺絲孔。我們?cè)?D打印的殼子上也開(kāi)了一個(gè)用于1/4英寸螺絲的孔,以便固定攝像頭。
作為參考,這里放置了此次使用的STL數(shù)據(jù)。
As a reference, here are the STL files used for this project.
Smartphone holders with a camera for myCobot by techlife_hacking - Thingiverse
機(jī)械臂的動(dòng)作
X方向的移動(dòng):J1軸的旋轉(zhuǎn)
Y方向的移動(dòng):J4軸的旋轉(zhuǎn)
Z方向的移動(dòng):J2和J3軸的旋轉(zhuǎn)(J2和J3反向旋轉(zhuǎn))
使用J2和J3軸來(lái)進(jìn)行深度方向的移動(dòng)。僅移動(dòng)J2會(huì)影響Y方向,因此讓J3以與J2軸相反的方向旋轉(zhuǎn)相同的量,以減小影響。
3D Face Tracking
在XY平面上跟蹤面部
通過(guò)對(duì)OAK-D攝像頭獲取的圖像進(jìn)行面部檢測(cè),可以獲取相機(jī)畫面中面部的坐標(biāo)(x, y)。
將OAK-D攝像頭畫面的中心坐標(biāo)設(shè)為目標(biāo)值,將面部識(shí)別獲得的面部坐標(biāo)(x, y)作為反饋值進(jìn)行PID控制。
深度方向(Z方向)上的面部跟蹤
由于OAK-D攝像頭配備了立體攝像頭,因此不僅可以獲取平面上的面部坐標(biāo),還可以獲取深度方向的面部坐標(biāo)z。將面部與顯示屏之間既不過(guò)近也不過(guò)遠(yuǎn)的距離設(shè)為目標(biāo)值,利用立體攝像頭測(cè)量的面部坐標(biāo)(z)作為反饋值進(jìn)行PID控制。
myCobot和OAK攝像頭
將OAK攝像頭和myCobot附帶的Raspberry Pi通過(guò)USB連接。OAK攝像頭計(jì)算出面部的目標(biāo)坐標(biāo),myCobot附帶的Raspberry Pi根據(jù)這些坐標(biāo)進(jìn)行PID控制,以調(diào)整攝像頭的方向。
環(huán)境
為myCobot附帶的Raspberry Pi進(jìn)行環(huán)境構(gòu)建。
myCobot
在myCobot的Raspberry Pi版本中,只要接通電源,就可以立即使用。機(jī)械臂可以通過(guò)Python進(jìn)行操作,并且官方也提供支持。
# test
from pymycobot.mycobot import MyCobot
mycobot = MyCobot('/dev/ttyUSB0')
# 使其直立
# go zero
mycobot.send_angles([0,0,0,0,0,0], 80)
OAK-D OpenCV DepthAI攝像頭
安裝用于操作OAK-D攝像頭的depthai庫(kù)。
OAK-D OpenCV DepthAI Camera
Install the depthai library to operate the OAK-D camera.
# install dependency
sudo curl -fL http://docs.luxonis.com/_static/install_dependencies.sh | bash
# get sources
git clone https://github.com/luxonis/depthai.git
# install depthai
python3 install_requirements.py
演示
環(huán)境搭建完成后,請(qǐng)運(yùn)行演示程序。若攝像頭能夠在保持一定距離的同時(shí)追蹤面部,則說(shuō)明系統(tǒng)運(yùn)行正常。
# get demo sources
git clone https://github.com/tech-life-hacking/depthai.git
# execute demo
python3 depthai_demo.py
PID的調(diào)整
如果myCobot的動(dòng)作不穩(wěn)定,請(qǐng)調(diào)整PID值。
# settings
PID_control.PID(P值, I值, D值)
pidX.setTargetPosition(幀中的點(diǎn)的位置(X方向): 范圍0-1, 0.5是中心)
pidY.setTargetPosition(幀中的點(diǎn)的位置(Y方向): 范圍0-1, 0.5是中心)
pidZ.setTargetPosition(攝像頭和面部的距離(米), 0.5米 = 50厘米)
#en
PID_control.PID(P value, I value, D value)
pidX.setTargetPosition(Position of the point in the frame (X direction): Range 0-1, 0.5 is the center)
pidY.setTargetPosition(Position of the point in the frame (Y direction): Range 0-1, 0.5 is the center)
pidZ.setTargetPosition(Distance between the camera and the face (meters), 0.5m = 50cm)
# default
pidX = PID_control.PID(10, 10, 3.75)
pidY = PID_control.PID(6.5, 5, 2.5)
pidZ = PID_control.PID(50, 30, 20)
pidX.setTargetPosition(0.5)
pidY.setTargetPosition(0.5)
pidZ.setTargetPosition(0.5)
確定目標(biāo)值
Setting Target Values
確定myCobot攝像頭指向目標(biāo)值的代碼如下。nnData[0]表示OAK-D攝像頭檢測(cè)到的面部包圍框的四個(gè)角的坐標(biāo)。將這四個(gè)角的坐標(biāo)和除以2,可以得出包圍框的中心點(diǎn)。spatialCoordinates.z是一個(gè)方法,用于返回?cái)z像頭和面部之間的距離測(cè)量結(jié)果。
x = (self._nnData[0].xmin + self._nnData[0].xmax) / 2
y = (self._nnData[0].ymin + self._nnData[0].ymax) / 2
z = int(self._nnData[0].spatialCoordinates.z) / 1000
結(jié)語(yǔ)
這次我們使用OAK-D攝像頭進(jìn)行面部識(shí)別,并利用能夠做出復(fù)雜動(dòng)作的機(jī)械臂進(jìn)行面部跟蹤。通過(guò)計(jì)算機(jī)視覺(jué)捕捉人類的動(dòng)作,并據(jù)此操控機(jī)械臂,可以發(fā)現(xiàn)它能夠進(jìn)行非常多樣的動(dòng)作。希望這能為大家的開(kāi)發(fā)提供參考。
審核編輯 黃宇
-
攝像頭
+關(guān)注
關(guān)注
59文章
4836瀏覽量
95599 -
python
+關(guān)注
關(guān)注
56文章
4792瀏覽量
84627 -
面部識(shí)別
+關(guān)注
關(guān)注
1文章
375瀏覽量
26632 -
機(jī)械臂
+關(guān)注
關(guān)注
12文章
513瀏覽量
24554 -
具身智能
+關(guān)注
關(guān)注
0文章
42瀏覽量
41
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論