立体(3D)流摄像机和观看器——第2部分

2025-01-16

在这个项目的第一个版本中,我创建了一个三脚架安装的立体3D相机,它通过HTTP传输立体视频流,这样它就可以在谷歌Cardboard这样的立体观看器上观看。在这个设置中,我使用了两台Raspberry Pi zero,每个都有自己的摄像头。

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第1张

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第2张

在这个更新的项目中,我使用树莓派5,它有两个摄像头插槽,因此可以在单板上容纳两个摄像头。

代码也已更新,以利用新的PiCamera2 python库。版本1使用了PiCamera,因为最新的树莓派操作系统仍然没有python支持libcamera。更新后的代码支持两种设置-使用2板,2摄像头设置树莓派零或1板,2摄像头设置树莓派5。它还利用Javascript来防止屏幕自动锁定。

在这个项目中,我将主要关注Raspberry Pi 5的设置。您可以参考前面的项目了解Raspberry Pi Zero安装的具体细节,包括将它们安装在机箱上并共享电源轨,因此两者都可以通过单个电源适配器供电。

立体3D图像/视频试图复制我们亲眼所见的东西。你的双眼相距约2.5英寸或6厘米(60毫米)(也称为眼间距离)。因此,每只眼睛从略微不同的角度和角度看图像。大脑将这两个图像结合成一个无缝的图像,并利用这些信息来测量距离和深度。这也被称为双目视觉。

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第3张

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第4张

我们可以用一个3D立体摄像机来复制这个过程,用两个相距大致眼间距离的摄像机。这两幅图像(左图和右图)然后使用谷歌Cardboard等立体观看器分别呈现给每只眼睛。然后,大脑将这些图像结合起来,处理视角和角度的细微差异,从而产生深度感知,即3D图像!

在这个项目中,我用一个树莓派5和两个树莓派相机2s建立了一个立体3D相机,安置在树莓派3/4/5的ProtoStax外壳中。

我也使用ProtoStax立体3D相机套件树莓派相机- 60mm立体底座,它允许你安装两个Pi相机2坐落,你猜它相隔60mm -我们的眼间距离(也称为轴间距离或立体底座时,参考相机设置)!它还配备了一个三脚架安装件,使整个外壳三脚架安装。

我们将使用Python将来自两个摄像头的摄像头输出流式传输到基于左眼/右眼浏览器的复合视频流中。然后,您可以在手机上的浏览器上打开这个立体声视频流,并将其放置在谷歌Cardboard等立体观看器中,然后voilom !-我们有我们的3D立体流媒体相机和查看器!

现在,你可以给你的奶奶或奶奶带一个3D参观你的房子,而不必让他们爬楼梯或离开舒适的椅子,因为你去操作相机,让他们远程观看!

或者玩一些愚蠢的3D游戏,你可以让你的朋友或家人看到你通过谷歌Cardboard呈现的世界——转动相机,对准他们,看看他们在3D中看到自己时的反应!很迷糊了!

免责声明-晕动病患者在观看VR头显或立体相机时可能会感到有点恶心。如果你开始感到恶心,只要放松立体相机观看!

另一个免责声明-两个摄像机不是同步在这里,这个项目不是用于硬核立体视频使用。为此,您可以使用其他硬件,例如Arducam的同步立体相机HAT用于树莓派(或来自Arducam的其他类似产品)。ProtoStax外壳有足够的空间放置HAT,因此您可以升级项目以使用硬件同步摄像机。您还可以尝试使用软件技术来改进性能和同步。在“前进”一节中提到了如何改进这个项目。

好了,我们开始吧!

第一步:准备树莓派

如果您是从头开始,您需要首先为您的树莓派5配置SD卡和树莓派操作系统。Raspberry Pi Imager工具允许您在创建启动映像时提前进行一些配置。

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第5张

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第6张

由于我们将在无头设置中使用树莓派(未连接到显示器或电视),因此您需要在它们上启用SSH。我们还希望它们在启动时直接连接到无线网络。我们可以使用树莓派Imager工具设置提供WIFI网络名称和密码凭证。

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第7张

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第8张

一旦我们这样做了,我们可以做其余的设置稍后,在我们启动我们的立体流媒体相机硬件设置。我们可以SSH到Raspberry Pi,并完成其余的设置,包括获取源代码和运行程序。

步骤2:设置硬件

首先将树莓派5安装在树莓派5 / 4 / 3型号B/B+的ProtoStax机箱上。

接下来,安装树莓派相机的顶部板的ProtoStax立体3D相机套件树莓派相机。

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第9张

将Pi相机安装到顶板上

连接相机线到树莓派5。或者,您可以在将相机安装到顶板之前将相机连接到树莓派5上!只要你觉得容易就行!

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第10张

离以太网接口最近的摄像机槽位为camera 0。它旁边的插槽(靠近HDMI端口)是相机1。在我的设置中,我将右摄像头连接到槽0,将左摄像头连接到槽1。如果您交换了它们,只需适当地更新代码。

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第11张

添加侧壁(包括一个/两个三脚架安装侧壁从ProtoStax立体3D相机套件树莓派相机),并关闭一切。

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第12张

完成外壳与三脚架安装

这是最后完成立体相机设置,与附加的三脚架安装适配器板(这将完全取决于你有三脚架的类型!)。

步骤3:配置树莓派

使用最新的树莓派和树莓派操作系统,你不需要做很多额外的配置。之前,您需要使用raspi-config启用相机接口。现在,当摄像头连接到接口上时,它们会自动启用。

步骤4:配置软件

你可以从GitHub下载该软件。或者,您可以使用git安装它

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第13张

该程序将通过一个简单的web服务器暴露相机的两个MJPG视频流,如:

(*将上面的raspberrypi5替换为您为pi选择的主机名)

该程序还有一个主页(index.html),将两个视频流显示为立体图像(并排),如

您可以打开手机浏览器上的链接(只需确保您的手机与树莓派在同一网络上),并将手机放在谷歌Cardboard(或类似的查看器)等3D立体查看器中,以便在您的查看器上获得3D立体流媒体相机。

因此,观众可以看到3D的一切。摄像机操作员可以四处移动,让观众从舒适的沙发上享受3D之旅!

第五步:调焦相机和其他技巧

为了获得最佳性能,您可以对焦树莓派相机2的镜头,以获得更清晰的图像。您可以使用树莓派相机的镜头调整工具来轻松调整焦点。

为了获得最佳的流媒体性能,请确保您的树莓派上没有运行太多其他程序或服务。如果您从SD卡图像开始,这应该不是问题。但是,如果您从已经配置的现有树莓派开始,请确保您已经停止并禁用了额外的服务,因此流媒体性能不会受到影响。

当您在手机上的浏览器上打开立体流链接时,最好隐藏工具栏,这样查看器中的无关元素就会最小化。您需要在查看器中横向调整手机,以便图像显示为单个平滑的3D图像(并且没有模糊的伪影)。

更新后的代码在这个项目也可以防止屏幕锁定踢在一段时间后,这将发生如果手机被放置在谷歌纸板查看器-只需点击“唤醒锁定被禁用”按钮启用它!当它被启用时,背景变为黑色。

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第14张

代码

这个代码是基于Picamera库的Web视频流的高级配方,它开始将相机的视频流记录到缓冲区,然后通过http请求处理程序提供帧。它已经更新为在最新版本的树莓派操作系统上使用PiCamera2。web服务器在端口8000上启动。您可以使用raspberrypi5.local:8000/leftstream查看每个相机的每个单独的mjpg流。或raspberrypi5.local:8000/rightstream.mjpg

这个简单的web服务器将使用一些HTML和CSS将左右mjpg流配置为带有拆分视图的单个页面,并提供对主页请求的响应(raspberypi5)。本地:8000/或index.html页面(raspberrypi5.local:8000/index.html)。因此打开主页将提供一个立体视频流。

下面是用来格式化页面的HTML和CSS:

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第15张

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第16张

立体(3D)流摄像机和观看器——第2部分 (https://ic.work/) 工控技术 第17张

它利用了richtr的NoSleep.js javascript库来防止手机屏幕在一段时间不活动后自动锁定,这将发生在手机处于谷歌Cardboard Viewer中时。在版本1中,我建议你使用手机的设置关闭自动锁定功能。更新后的代码使其更方便,更易于使用。

代码也有另一个HTML/CSS设置为2摄像头,2 Pi零设置,结合流从左摄像头。本地和右凸轮。本地pi(更新名称以匹配您的设置)。

为了使代码在启动时自动运行,您需要将其作为服务运行。GitHub页面的README有关于如何做到这一点的说明,包括服务的配置文件。

展望未来:

和往常一样,我想在结束时谈谈如何用自己的补充来推进这个项目!一旦您熟悉了代码示例并理解了代码,尝试通过做更多的事情来扩展您的学习总是好的。以下是一些建议:

•在Pi上将python流程序作为服务运行,这样它就会在Pi启动时自动启动。GitHub链接有关于如何做到这一点的说明。

•我们目前使用MJPEG格式流媒体视频。使用MPEG1或其他可能提供更好性能的格式进行流式传输

•添加拍摄立体照片的功能——在树莓派的GPIO上添加一个按钮,并使用该按钮从两个相机中拍摄左右照片,并将它们拼接在一起,形成立体二人组


本文编译自hackster.io

文章推荐

相关推荐

  • 使用ADXL362加速度计构建跌倒检测系统

    老年人跌倒是一个严重的健康问题,尤其是在全球人口结构发生变化之际。到2050年,全世界65岁及以上的人口将超过15亿,其中很 ...

    2025-01-16
  • ESP32作为MQTT代理:两个库的比较

    ESP32作为MQTT代理:两个库的比较 在小型物联网项目领域,ESP32作为一款经济高效且功能强大的微控制器大出望外。将它 ...

    2025-01-16
  • 用Arduino Nano复制Dino Run手机游戏

    把经典的Dino Run变成亲身体验!使用Arduino Nano,以有趣,引人入胜的方式将互动游戏带入生活!

    2025-01-16
  • 如何自定义5x5键盘

    从零开始制作一个5x5键盘矩阵。 大家好,欢迎回来。这是一些有趣又有用的东西。定制的5x5按钮矩阵板从头开始构建。 ...

    2025-01-16
  • EDES301: PocketTetris

    我的目标 我一直很喜欢《俄罗斯方块》,所以我想尝试在PocketBeagle上重现这款游戏。不幸的是,我没有能够实现我想要 ...

    2025-01-16
  • 工业电机和电机控制入门

    选择合适的电动机和电动机控制在工业应用中可以产生更高的效率,节省板空间,降低设计复杂性。

    2025-01-16
  • 如何克隆ESP32固件到另一个ESP32:一个快速和Ea

    将固件从一个ESP32克隆到另一个ESP32是一种强大的技术,可以将已编程设备的功能复制到一个新设备上。无论您是准备大规模生产 ...

    2025-01-16
  • 如何为WLED构建一个RGB PWM LED驱动程序

    在这个项目中,我将为WLED构建一个RGB PWM LED驱动程序。您可以使用此项目无线驱动12v RGB LED条。这个项目是WLED兼容,这使 ...

    2025-01-16
  • 使用Arduino Nano重现“Flappy Bird”

    简单地复制曾经占主导地位的手机游戏“Flappy Bird”使用Arduino Nano。

    2025-01-16