RM新时代网站-首页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用myCobot和OAK-D OpenCV DepthAI攝像頭制作一個可以在眼前始終享受視頻的手機支架!

大象機器人科技 ? 來源:大象機器人科技 ? 作者:大象機器人科技 ? 2024-07-02 18:23 ? 次閱讀

引言
由于YouTube和Netflix的出現,我們開始躺著看手機。然而,長時間用手拿著手機會讓人感到疲勞。這次我們制作了一個可以在你眼前保持適當距離并調整位置的自動移動手機支架,讓你無需用手拿著手機。請務必試試!

準備工作
這次我們使用了Elephant Robotics公司機械臂。與其他產品相比,它價格便宜,作為初學者也相對容易上手。

wKgZomaD1AuAVppxAAEi2xuBV2A460.png

myCobot 280 Pi- 6 DOF Collaborative Robot (Raspberry Pi version)

為了讓攝像頭跟蹤面部,我們采用了OAK-D OpenCV DepthAI攝像頭。它不僅僅是進行視頻捕捉,還能輔助進行面部識別所需的神經網絡運算,因此即使微控制器沒有GPU,也能高速進行面部識別。

wKgZomaD1AaAbJWBAAgqpK_SvU4151.pngwKgaomaD1BKAeLKYAClo97uDIxY406.png

這是一個可以始終將顯示屏調整到眼前適當距離的手機支架。主要由OAK-D攝像頭和機械臂“myCobot”構成。OAK-D攝像頭不僅可以獲取視頻,還可以獲取深度信息,從而計算出攝像頭到臉部的距離。myCobot是一款具有6個旋轉軸的機械臂,能夠實現多種動作。通過OAK-D攝像頭獲取的圖像來計算臉部的三維位置,myCobot可以將手機顯示屏移動到眼前。這樣一來,即使不用手拿著手機也能享受視頻。

將OAK-D攝像頭和手機安裝到myCobot上
myCobot的末端有四個M2.6的螺絲孔。我們3D打印了一個手機殼,并利用這些螺絲孔將殼子固定到myCobot上,從而固定手機。

另一方面,OAK-D攝像頭有一個1/4英寸的螺絲孔。我們在3D打印的殼子上也開了一個用于1/4英寸螺絲的孔,以便固定攝像頭。

wKgaomaD1CWAA0ogAAEpz7mhYDE171.png

作為參考,這里放置了此次使用的STL數據。

As a reference, here are the STL files used for this project.

Smartphone holders with a camera for myCobot by techlife_hacking - Thingiverse

機械臂的動作

wKgZomaD1DWAGxn3AAJYH20IQ6M510.png


X方向的移動:J1軸的旋轉

Y方向的移動:J4軸的旋轉

Z方向的移動:J2和J3軸的旋轉(J2和J3反向旋轉)

wKgZomaD1EGAD_oHACtzVHDgZ4U771.png

使用J2和J3軸來進行深度方向的移動。僅移動J2會影響Y方向,因此讓J3以與J2軸相反的方向旋轉相同的量,以減小影響。

3D Face Tracking
在XY平面上跟蹤面部
通過對OAK-D攝像頭獲取的圖像進行面部檢測,可以獲取相機畫面中面部的坐標(x, y)。

wKgaomaD1FCAXFjyAAGlx4IBHl0274.png

將OAK-D攝像頭畫面的中心坐標設為目標值,將面部識別獲得的面部坐標(x, y)作為反饋值進行PID控制。

wKgZomaD1F-AcA-HAABChU3BIKM457.png

深度方向(Z方向)上的面部跟蹤
由于OAK-D攝像頭配備了立體攝像頭,因此不僅可以獲取平面上的面部坐標,還可以獲取深度方向的面部坐標z。將面部與顯示屏之間既不過近也不過遠的距離設為目標值,利用立體攝像頭測量的面部坐標(z)作為反饋值進行PID控制。

wKgZomaD1HWAVb17AABC9LbXHrg320.png

myCobot和OAK攝像頭
將OAK攝像頭和myCobot附帶的Raspberry Pi通過USB連接。OAK攝像頭計算出面部的目標坐標,myCobot附帶的Raspberry Pi根據這些坐標進行PID控制,以調整攝像頭的方向。

wKgZomaD1IOAdsgIAAEDOwbJqvg362.png

環(huán)境
為myCobot附帶的Raspberry Pi進行環(huán)境構建。

myCobot

在myCobot的Raspberry Pi版本中,只要接通電源,就可以立即使用。機械臂可以通過Python進行操作,并且官方也提供支持。

# 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庫。

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)境搭建完成后,請運行演示程序。若攝像頭能夠在保持一定距離的同時追蹤面部,則說明系統運行正常。

# get demo sources
git clone https://github.com/tech-life-hacking/depthai.git

# execute demo
python3 depthai_demo.py


PID的調整

如果myCobot的動作不穩(wěn)定,請調整PID值。

# settings
PID_control.PID(P值, I值, D值)
pidX.setTargetPosition(幀中的點的位置(X方向): 范圍0-1, 0.5是中心)
pidY.setTargetPosition(幀中的點的位置(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)

確定目標值
Setting Target Values

確定myCobot攝像頭指向目標值的代碼如下。nnData[0]表示OAK-D攝像頭檢測到的面部包圍框的四個角的坐標。將這四個角的坐標和除以2,可以得出包圍框的中心點。spatialCoordinates.z是一個方法,用于返回攝像頭和面部之間的距離測量結果。

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


結語
這次我們使用OAK-D攝像頭進行面部識別,并利用能夠做出復雜動作的機械臂進行面部跟蹤。通過計算機視覺捕捉人類的動作,并據此操控機械臂,可以發(fā)現它能夠進行非常多樣的動作。希望這能為大家的開發(fā)提供參考。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 攝像頭
    +關注

    關注

    59

    文章

    4836

    瀏覽量

    95596
  • python
    +關注

    關注

    56

    文章

    4792

    瀏覽量

    84626
  • 面部識別
    +關注

    關注

    1

    文章

    375

    瀏覽量

    26632
  • 機械臂
    +關注

    關注

    12

    文章

    513

    瀏覽量

    24552
  • 具身智能
    +關注

    關注

    0

    文章

    42

    瀏覽量

    40
收藏 人收藏

    評論

    相關推薦

    OpenWRT + OpenCV 無線攝像頭監(jiān)控和圖像處理

    知道視頻流是jpeg類型,因此“偽造”了jpeg文件名下圖是修改OpenCV官網的dem
    發(fā)表于 02-09 22:15

    【OK210試用體驗】之(五)——Ubuntu12.04安裝OpenCV2.4.9并實現USB攝像頭C270圖像采集

    數據格式,最大幀數為15幀/秒。選用該攝像頭重要原因是,該攝像頭是UVC(USB Video Class)攝像頭。UVC是
    發(fā)表于 08-02 12:21

    如何將攝像頭視頻通過藍牙傳送給手機?

    如何將攝像頭視頻通過藍牙傳送給手機?求各位大神幫忙啊 。,,謝謝了、
    發(fā)表于 09-20 09:49

    NanoPi 2接USB攝像頭使用OpenCV

    `NanoPi 2接USB攝像頭使用OpenCVOpenCV的全稱是Open Source Computer Vision Library,是跨平臺的計算機視覺庫。NanoPi 2跑Debian
    發(fā)表于 12-24 18:34

    Nanopi M3 u***攝像頭使用opencv

    首先先準備好器材1.M3板子2.燒寫好debian系統的sd卡3.lcd屏 (我用的是x710的電容屏,7寸的)4.USB(FA-CAM202)200萬攝像頭模塊啟動系統后:OpenCV的全稱
    發(fā)表于 10-11 15:42

    u***攝像頭如何改成水下無線攝像頭

    請教大神,我有u***攝像頭(也可買直接視頻輸出的那種攝像頭),有線連接也想過,想把它改成可以
    發(fā)表于 01-31 23:26

    【大聯大友尚安森美半導體感光芯片USB雙目攝像頭模組試用體驗】使用opencv打開攝像頭

    攝像頭,一個是只有灰度值的紅外攝像頭。我們把燈關上看下效果:可以看到rgb攝像頭
    發(fā)表于 09-26 21:54

    回收手機攝像頭 收購oppo手機攝像頭

    回收手機攝像頭 收購oppo手機攝像頭◆◆回收oppo手機攝像頭,收購oppo
    發(fā)表于 01-07 17:44

    回收手機攝像頭 收購手機攝像頭

    !高價回收! 優(yōu)勢回收索尼Xperia Z1攝像頭,回收索尼Z2攝像頭,回收索尼Z3攝像頭,回收索尼 Z3mini攝像頭,高價回收!高價回收!手機
    發(fā)表于 07-05 11:01

    回收手機攝像頭,收購攝像頭芯片

    的倒車后視,都有用到攝像頭。 特別是手機手機至少2攝像頭,有的還有三四
    發(fā)表于 07-14 17:53

    專業(yè)回收手機攝像頭 收購手機攝像頭價格高

    系列手機攝像頭......回收小米手機紅米系列指紋排線,小米max系列手機攝像頭,小米系列手機
    發(fā)表于 10-16 17:13

    有什么方法可以將雙目攝像頭結合OpenCV起使用嗎

    有什么方法可以將雙目攝像頭結合OpenCV起使用嗎?
    發(fā)表于 03-02 09:52

    RK3399實現視頻攝像頭獲取轉至OPENCV的方法是什么?

    RK3399實現視頻攝像頭獲取轉至OPENCV的方法是什么?
    發(fā)表于 03-07 08:00

    基于DirectShow的多攝像頭視頻采集

    1.為什么使用DirectShow 筆者使用的是兩USB攝像頭,單攝像頭視頻采集使用OpenCV的VideoCapture類沒有問題,但是
    發(fā)表于 02-08 03:24 ?3280次閱讀

    使用Python OpenCV讀取攝像頭視頻文件并播放顯示的詳細說明

    要從攝像頭視頻文件讀取視頻,首先導入opencv 庫cv2. 使用cv2.VideoCapture() 方法創(chuàng)建
    發(fā)表于 01-19 16:57 ?5次下載
    RM新时代网站-首页