0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取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

环境
为myCobot附带的Raspberry Pi进行环境构建。

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


演示

环境搭建完成后,请运行演示程序。若摄像头能够在保持一定距离的同时追踪面部,则说明系统运行正常。

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

# execute demo
python3 depthai_demo.py


PID的调整

如果myCobot的动作不稳定,请调整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摄像头进行面部识别,并利用能够做出复杂动作的机械臂进行面部跟踪。通过计算机视觉捕捉人类的动作,并据此操控机械臂,可以发现它能够进行非常多样的动作。希望这能为大家的开发提供参考。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 摄像头
    +关注

    关注

    60

    文章

    4843

    浏览量

    95739
  • python
    +关注

    关注

    56

    文章

    4797

    浏览量

    84704
  • 面部识别
    +关注

    关注

    1

    文章

    375

    浏览量

    26639
  • 机械臂
    +关注

    关注

    12

    文章

    515

    浏览量

    24592
  • 具身智能
    +关注

    关注

    0

    文章

    47

    浏览量

    64
收藏 人收藏

    评论

    相关推荐

    OpenWRT + OpenCV 无线摄像头监控和图像处理

    知道视频流是jpeg类型,因此“伪造”了jpeg文件名下图是修改OpenCV官网的dem
    发表于 02-09 22:15

    【OK210试用体验】之(五)——Ubuntu12.04安装OpenCV2.4.9并实现USB摄像头C270图像采集

    数据格式,最大帧数为15帧/秒。选用该摄像头重要原因是,该摄像头是UVC(USB Video Class)摄像头。UVC是
    发表于 08-02 12:21

    如何将摄像头视频通过蓝牙传送给手机

    如何将摄像头视频通过蓝牙传送给手机?求各位大神帮忙啊 。,,谢谢了、
    发表于 09-20 09:49

    NanoPi 2接USB摄像头使用OpenCV

    `NanoPi 2接USB摄像头使用OpenCVOpenCV的全称是Open Source Computer Vision Library,是跨平台的计算机视觉库。NanoPi 2跑Debian
    发表于 12-24 18:34

    Nanopi M3 u***摄像头使用opencv

    首先先准备好器材1.M3板子2.烧写好debian系统的sd卡3.lcd屏 (我用的是x710的电容屏,7寸的)4.USB(FA-CAM202)200万摄像头模块启动系统后:OpenCV的全称
    发表于 10-11 15:42

    u***摄像头如何改成水下无线摄像头

    请教大神,我有u***摄像头(也可买直接视频输出的那种摄像头),有线连接也想过,想把它改成可以
    发表于 01-31 23:26

    【大联大友尚安森美半导体感光芯片USB双目摄像头模组试用体验】使用opencv打开摄像头

    摄像头一个是只有灰度值的红外摄像头。我们把灯关上看下效果:可以看到rgb摄像头
    发表于 09-26 21:54

    回收手机摄像头 收购oppo手机摄像头

    回收手机摄像头 收购oppo手机摄像头◆◆回收oppo手机摄像头,收购oppo
    发表于 01-07 17:44

    回收手机摄像头 收购手机摄像头

    !高价回收! 优势回收索尼Xperia Z1摄像头,回收索尼Z2摄像头,回收索尼Z3摄像头,回收索尼 Z3mini摄像头,高价回收!高价回收!手机
    发表于 07-05 11:01

    回收手机摄像头,收购摄像头芯片

    的倒车后视,都有用到摄像头。 特别是手机手机至少2摄像头,有的还有三四
    发表于 07-14 17:53

    专业回收手机摄像头 收购手机摄像头价格高

    系列手机摄像头......回收小米手机红米系列指纹排线,小米max系列手机摄像头,小米系列手机
    发表于 10-16 17:13

    有什么方法可以将双目摄像头结合OpenCV起使用吗

    有什么方法可以将双目摄像头结合OpenCV起使用吗?
    发表于 03-02 09:52

    RK3399实现视频摄像头获取转至OPENCV的方法是什么?

    RK3399实现视频摄像头获取转至OPENCV的方法是什么?
    发表于 03-07 08:00

    基于DirectShow的多摄像头视频采集

    1.为什么使用DirectShow 笔者使用的是两USB摄像头,单摄像头视频采集使用OpenCV的VideoCapture类没有问题,但是
    发表于 02-08 03:24 3304次阅读

    使用Python OpenCV读取摄像头视频文件并播放显示的详细说明

    要从摄像头视频文件读取视频,首先导入opencv 库cv2. 使用cv2.VideoCapture() 方法创建
    发表于 01-19 16:57 5次下载