闹鬼电视-由Raspberry Pi和OpenCV驱动

简介:闹鬼电视-由树莓皮和OpenCV驱动

关于:再试一次。再次失败。失败得更好
万圣节快乐!

今年,我决定扩展一个经典恐怖电影陈词滥调的想法:镜子恐惧(一个场景,一个反射是用来突然显示一个怪物,鬼魂等)我已经使用了一个覆盆子圆周率,相机,和OpenCV创建了一个令人毛骨悚然的摄像头饲料在一个旧的黑白电视,这是由面部/眼睛检测触发。当树莓皮检测到一张脸,它打开电视显示一个实时摄像头饲料。当人脸从电视上看向别处时,背景中会显示一个鬼影(使用背景减法)。一旦脸回头看电视,看到鬼魂,第二次掉头,鬼魂就消失了,几秒钟后电视就关了,重新开始循环。

我还实现了眼睛检测来检测带面具的人脸,所以你可以在2020年把它作为户外装饰!

轮廓

在第一步中,我将解释这个项目背后的灵感,稍后我将给你一个清单,列出你自己构建这个项目所需要的所有东西。然后我将向您展示如何设置Raspberry Pi来运行此程序。稍后我将向您展示人脸/眼睛检测和背景去除算法的工作原理。在给你一个循序渐进的装配指南之后,我将用一个故障排除指南来结束这篇可指导的文章。

我们开始吧!

第一步:灵感

正如我上面提到的那样,这个项目的灵感来自于恐怖电影中使用的着名伎俩。我想建立一个可以创造相同效果的项目。诀窍通常在4部分中完成:

  1. 一个角色从镜柜里拿东西,我们看到角色在镜子前的倒影。
  2. 他们打开柜子或者在做其他事情时分心。
  3. 他们再回头看镜子,发现身后有东西。
  4. 他们向后看,什么也看不见。

这是从各种电影中汇编镜子恐慌,为您提供一个想法:

我想在另一种媒介上创造这种效果,于是我决定用一台破旧的电视机。低分辨率和干扰产生了一种独特的效果,仿佛电视反映了一个平行但不同的现实。我就是在这里想出这个主意的。

第2步:工具和零件

所有必要的文件(3D打印文件和代码)附加到此步骤,您还可以找到最新版本的代码这个链接。

工具:

  • 3D打印机(如果可以使用木材、亚克力等来安装覆盆子圆周率,则为可选)
  • 钻孔/Dremel
  • 烙铁

部分:

3D打印部件:

  • raspi山
  • 摄像机支架

第3步:设置覆盆子pi

注意:如果已经安装了Raspberry Pi操作系统,则可以跳过此步骤

安装树莓皮

注意:你需要一个键盘,鼠标和显示器来设置你的树莓圆周率

在我们进入程序之前,我们首先需要设置我们的树莓圆周率。关于如何在Pi上安装操作系统,您可以遵循以下官方指南:

https://www.raspberrypi.org/documentation/installation/installing-images/README.md

一定要安装“Raspberry Pi OS(32位),带桌面和推荐软件”,此版本将拥有我们需要运行我们的程序所需的所有软件。

安装操作系统并启动raspberry pi后,打开终端并键入:

sudo raspi配置

这将打开配置菜单,导航到接口选项,并启用照相机宋承宪.

启用S​​SH将帮助我们远程进入覆盆子PI,因此我们每次都不必使用键盘,鼠标和监控。

现在我们的raspberry pi准备好了我们的代码!,在下一步中,我们将把相机和电子设备装配到我们的raspberry pi并用代码测试它。

第4步:装配-电子设备

注意:在这个阶段,你不必使用烙铁。我强烈建议您使用跨接电缆,这样您可以改变任何组件,如果它不能正常工作。

树莓皮GPIO引脚

我用过物理引脚编号如下图所示

树莓GPIO图

资料来源:https://www.raspberrypi.org/documentation/usage/gpio/

照相机

摄像头端口位于HDMI输出和音频插孔之间,插入摄像头电缆时,应使电缆上的开口触点朝向HDMI端口。

如图所示,将接收器,RGB和带跳线电缆的继电器连接到覆盆子PI,如下所示:

YK04接收器

YK04. 树莓皮3
接地 接地
权力 3.3伏
第0页 12
D1级 16

RGB LED

发光二极管 树莓皮3
接地 接地
红色 22
绿色 24
蓝色 26

中继

中继 树莓皮3
接地 接地
权力 5V.
数据 32

第五步:代码

我们将使用OpenCV(开源计算机视觉库)进行人脸检测和背景去除。让我们在Pi上安装这个库,

安装OpenCV

可以从Raspbian存储库下载OpenCV Python模块,执行此操作,只需打开终端和类型;

sudo apt更新sudo apt install python3 opencv

此命令将安装运行OpenCV所需的所有软件包。

在安装后重新启动Pi;

sudo重启

闹鬼电视代码

首先,导航到Documents文件夹;

cd文件

接下来,通过以下方式从Github存储库安装闹鬼电视代码:

git克隆https://github.com/gocivici/hounted-tv.git

此命令将安装最新版本的代码。

导航到项目文件夹后;

cd闹鬼电视

您应该能够通过以下方式运行程序:

蟒蛇3鬼魂电视台

现在要测试和调试代码,可以使用键盘而不是遥控器。使用“h”拍摄鬼魂照片,使用“a”开始人脸检测。

注意:如果在运行代码时出现错误,请查看最后的故障排除指南。

自动启动

有关更多信息和故障排除检查:https://learn.sparkfun.com/tutorials/how-to-run-a-raspberry-pi-program-on-startup#方法-2-自动启动

我们希望在Raspberry Pi启动时自动运行脚本。为此,我们将使用一个名为自动启动. 使用此方法,图形界面将首先初始化,然后运行我们的脚本。

打开终端并键入:

mkdir / home/pi/.config/autostart nano / home/pi/.config/autostart/hauntedtv.desktop

现在将下面的内容复制到您刚刚创建的文件中:

[桌面输入]Type=Application Name=hourtedtv Exec=/usr/bin/python3/home/pi/Documents/hourtedtv/鬼魂电视台

保存,退出Ctrl + X并重新启动:

sudo重启

定制

要在项目目录中编辑代码,请键入:

sudo nano公司鬼魂电视台

有三个计时器对跳跃恐惧效应的工作非常重要,它们是:

timeTV=5 timeGhost=25 timeNoGhost=10

这些值不是以秒为单位的。它们是由Facefreqcounter..当检测到面部时,该计数器开始,并且如果脸部仍然在图片中,则继续计算。如果脸部离开屏幕超过4秒,则计数器设置为0.(以这种方式过滤误报)

  1. 时间电视:当faceFreqCounter点击此值时,电视将打开。
  2. 时间幽灵:当FaceFreqCounter击中此值时,将在脸部视线后显示Ghost。如果您希望客人在显示Ghost之前,您可以将其设置为更大的值。
  3. 时间主机:此值确定在面看到重影并将目光移开后,何时禁用重影的可见性。

您还应该自定义代码中的背景敏感度。

背景灵敏度=20

该值确定背景减法的灵敏度。如果闹鬼图片在背景中不可见,则应增加此值。

你完了!现在是时候用你的电视来测试设置了。

步骤6:人脸/眼睛检测和背景去除(可选)

在此步骤中,我将详细了解我如何使用OpenCV检测面部并删除背景。如果您只想下载并运行代码,您可以跳过此步骤。

基于OpenCV的人脸/眼睛检测

有许多方法可以检测面部,我使用的方法被调用利用Haar级联进行目标检测。HAAR CASCADE是一种机器学习对象检测算法,可以基于特征概念检测图像中的对象。(点击这里了解其工作原理)

该方法可用于检测任何不仅仅是面孔的物体。为了检测一张脸,首先,我们需要级联文件。您可以使用任何搜索引擎查找要检测的各种级联的内容。

在这个项目中,我们将使用脸部级联和眼睛级联,您可以找到它们在这里在这里。

将级联作为.xml文件下载后,我们将它们导入到代码中:

import numpy as np import cv2#导入检测到的级联=cv2.cascade_默认.xml')#检测到=cv2.haarcascade_眼睛.xml')

我刚刚进口脸部级联,正如我在最后一步中提到的那样,您可以自定义代码以检测面部,眼睛或两者。

接下来,我们启动相机并初始化while循环,以便代码检查是否检测到人脸:

cam=cv2.VideoCapture(0)为真时:ret,img=凸轮读取()灰色=cv2.CVT颜色(img,cv2.COLOR\ U BGR2GRAY)面=检测到。检测到多尺度(灰色,1.3,5)

级联分类器“detectMultiScale”只检测人脸。现在我们创建一个循环,在检测到的面周围绘制一个矩形。

对于检测到的(x,y,w,h):cv2.rectangle(img,(x,y),(x + w,y + h),(255,0,0),2)#put代码检测到脸部时运行

最后,我们在窗口中显示最终图像:

cv2.imshow('img',img)

下面是人脸检测的完整代码:

导入numpy作为np导入cv2 #import检测到的瀑布= cv2.cascadeclassifier('haarcascade_frontalface_default.xml')#detected = cv2.cascadeclassifier('haarcascade_eye.xml')cam = cv2.videocapture(0)虽然true:ret,img =cam.read()灰色= cv2.cvtcolor(IMG,CV2.COLOR_BGR2GRAY)FACES =检测到(x,y,w,h)检测到的detectmultiscale(灰色,1.3,5):cv2.rectangle(img,(x,y),(x + w,y + h),(255,0,0),2)#put代码在检测到脸部的cv2.imshow('img',img)cam.release()cv2.destroyallwindows()

将此文件另存为人脸检测.py运行它,你应该可以看到一个蓝色的矩形围绕着你的脸。

用OpenCV去除背景

我想用一个背景移除算法来移除背景,并用一个附在背景上的闹鬼图片来替换背景。用这种方法,我能把鬼魂放在人后面。这是一个重要的功能,因为我想创造的效果,有一个人背后的鬼。在网上搜索如何做到这一点时,我发现了一个非常好的教程:

在本教程中,Misbah向我们展示了如何用视频替换背景。但是,要在代码中使用它,我们需要根据需要编辑它。我们希望在触发时在背景中显示图片而不是视频。

你也可以使用其他的背景减法。我将在这一步的底部链接所有的源代码。

参考文献:

https://pythonprogramming.net/haar-cascade-face-eye-detection-python-opencv-tutorial/

https://docs.opencencv.org/3.4/d1/dc5/tutorial_background_subtraction.html.

https://github.com/misbah4064/backgroundremovation

第7步:第一个原型和测试

对于第一个原型,我为相机构建了一个可调节的支架,并用覆盆子Pi将其放在电视上。在这个阶段,主要目标是测试设置和电视检查它们是否正常工作。

  • 用复合电缆将Raspberry Pi连接到电视(如果电视没有复合输入,请使用AV-RF转换器)
  • 将Raspberry PI连接到电量并等待它启动。
  • 检查视频源是否有问题

第8步:设计和3D打印

这个版本有两个3d打印部件,一个是覆盆子皮支架,它将被粘在电视里。另一部分是摄像头支架,它将帮助我们安装摄像头。

注意:您可以在fusion360中编辑/自定义这些部件,这些部件连接到此步骤

我使用的打印机是TEVO Tornado,具有以下设置:

  • 喷嘴:0.4mm
  • 填充:%30
  • 灯丝:PLA.

第9步:焊接

焊料有两部分。LED和接收器的天线。

第十步:拆卸并清洁电视机

安全第一!

即使我们只拆卸电视机的一小部分,如果你不遵守安全规程,那也是非常危险的。即使拔下插头,高压仍可能存储在管内。

我强烈建议你阅读Jentis先生关于这个主题的指导:

//www.smiletrl.com/How-to-dispose-a-CRT-monitor/

第11步:安装树莓皮

步骤12:安装摄像头

  • 我卸下了电视上的耳机输出插孔并在那里安装了相机。

步骤13:最终组装和测试

现在你的覆盆子皮安装到电视上,电源设置。Raspberry Pi应该在启动时启动并运行Python脚本,几秒钟后电视应该打开,您应该能够在电视上看到自己。

下一步,找一个鬼怪服装,拿着遥控器走到电视机前,按遥控器上的B键拍下闹鬼的照片。现在脚本可以运行了。按遥控器上的D按钮,电视应关闭并开始检测人脸。

通过进入电视前面测试设置并在几秒钟后查看。这应该触发设置,现在您应该能够在后台看到闹坏的图像,如果没有,请在步骤13转到故障排除指南。

第14步:故障排除

+闹鬼的画面看不见。

- 对于背景删除非常重要。确保电视位于灯光下。也将光源移到电视后面。

+我不确定人脸检测是否有效。

-转到步骤6并单独运行人脸检测代码。你应该能看到一个长方形围绕着你的脸。

+ CRT电视没有显示图片。

-进入配置.txt文件在你的树莓皮,并确保电视地区是相同的电视。

如果你有其他问题,请留言。我会把它们收集起来,试着在这里回答。

+在现场饲料上有很多滞后/延迟。

-我在这个项目中用了树莓皮3。任何处理能力较低的树莓pi都可能导致延迟和延迟。但也有一些你可以做的优化为了防止这种情况。

第15步:下一步是什么

在这一步中,我将列出我的一些想法。但没有找到时间/资源来添加它们:w88官网手机

  • 当鬼魂出现在后面时发出噪音的蓝牙扬声器。
  • 红外摄像机和发光二极管可以在黑暗中工作。这就产生了一种更可怕的氛围。
  • 带幽灵般装饰的电视特殊立场。
  • 一台功能更强大的计算机,比如Nvidia Jetson,它是为视觉任务而构建的。这将减少延迟。

请随时添加更多的想法或方法,以改善这个项目的评论!

万圣节比赛

年度大奖
万圣节比赛

第一个分享

    建议

    • 任何比赛

      任何比赛
    • 方块码竞赛

      方块码竞赛
    • 让它成为真正的学生设计挑战

      让它成为真正的学生设计挑战

    6讨论

    0
    肉毒杆菌

    6周前

    很酷;我只能想象这在20世纪50年代会有多奇怪——即使是在一个展览上,一些科学家解释了它的工作原理,仍然会有人做噩梦回家:哦

    这完全是另一种恐怖——一个疯狂的修补匠把你家里的小家电拆开,用运行闹鬼的Python代码的树莓馅饼代替它们的内脏!

    你的项目在这么多层面上都令人难以置信。你绝对可以在娱乐和创意方面赢得大好时光。除此之外,你的整个项目大纲都是一流的。当我把我的行为集中起来,并最终提升一个可指导的,我一定会用你的作为指导,帮助我使它成为一个好的。

    1
    霍纳斯

    7周前

    精彩的项目!

    1
    这不是零

    7周前

    这是一个伟大的项目!幽灵般的!

    2
    兰多福

    7周前

    我喜欢这个。非常有趣。