亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

拥有肖像 – 更新

使用 Raspberry 从头开始​​ DIY 跳跃恐吓肖像Pi 3 B、Python 和 AtmosFX 视频没有人像。又到了 10 月,我想用 Raspberry Pi 想出一个万圣节项目。我看到一些闹鬼的肖像散落在各处,但没有一个真正以惊吓的方式表现出来,只是一些简单的动作。

我决定扩展这个想法并开始寻找一些我可以使用的好的跳跃式恐慌类型的视频。这让我想到了 AtmosFx,他们有一些非常酷的 Unliving Portrait 视频,每个仅 7.99 美元。这些非常适合我的想法,让我可以拥有不止一个跳跃恐吓视频,我可以手动选择或随机运行每个视频。

这是完成项目的视频。

我不想从头开始编写 PIR 代码,所以我在网上搜索使用 Python 访问 PIR 的示例。我找到了 Arc Software 的一篇旧文章,其中展示了一个类似的项目。

我展示的代码主要来自他们的示例,但我对其进行了一些修改以满足我的需要。

第 1 步:构建 LCD 框架

拆卸液晶显示器并卸下液晶面板和电子设备后,我以纵向测量了显示器的准确尺寸 17 X 11。

我使用这个在线工具来计算我的框架切割尺寸以适合我的 LCD 面板。

我用 1 英寸 x 2 英寸的木头建造了一个木框架,内部尺寸为 17 英寸 x 11 英寸,可以固定 LCD。我切割了 4 块,当装在一起时,它们将是我的 LCD 的确切尺寸,并将 LCD 安装到框架中,并使 LCD 与 LCD 框架齐平。相框固定在 LCD 框架上,所有电子设备都可以从背面接触到。

将相框染色并晾干后,我使用钉子将相框固定到 LCD 相框上。

组装的 LCD 框架

接下来,我使用我用 3D 打印机打印的 Thingiverse.com 上的一个漂亮的小支架(Pi Side Mount)安装了 Raspberry Pi。

我使用镜架将 LCD 固定到位,以防止其移位并使其与框架前部与相框齐平。

组装的最后一步是为 PIR 传感器钻孔,并将其连接到 Pi 的 GPIO 接头。 PIR 非常简单,它有一个热引脚、接地引脚和传感器引脚。

第 2 步:图像、视频和代码

我在我的项目中使用了来自 AtmosFX 的三个 Unliving Portrait 视频。

第一个障碍是在检测到运动时播放视频,而不仅仅是在屏幕上不断循环播放。我可以加载视频,然后在第一帧暂停它,然后当有运动时让它继续播放,当完全重置并重新开始时。

显示第一帧的静止图像会更简单,然后在检测到运动时启动 OMXPlayer 以播放适当的视频文件。这样做的好处是当 OMXPlayer 退出时,加载的仍然会在帧缓冲区中并在屏幕上。

为了显示初始图像,我使用了 Linux FBI(帧缓冲图像查看器)。

使用的播放器是 OMXPlayer,虽然它确实支持暂停,但没有命令行命令我可以在 Python 中调用来暂停和播放,而无需实现像 DBuscontrol 这样的东西,这会使项目过于复杂。

文件夹结构:

下面的文件夹结构与脚本中访问图像和视频的路径相匹配。只要脚本中的路径更新为匹配,就可以更改路径。

匹配脚本路径所需的文件夹结构

图片:

因此,对于每个视频,我都将其加载到 VLC 中,并以视频所在的相同分辨率对第一帧进行屏幕截图,以便它们在播放时与视频完美叠加.

这三个视频分别是一个男人、一个女人和一个孩子,所以我拍下了每个视频的屏幕截图,并将它们命名为 MaleStart.png、FemaleStart.png 和 ChildStart.png。我在我的万圣节项目中创建了一个名为 ScareMedia 的文件夹并上传了 3 张剧照。

视频:

接下来我将每个视频命名为MaleScare.mp4、FemaleScare.mp4和ChildScare.mp4,并上传到ScareMedia文件夹。

代码:

有 2 个脚本需要自动化运动检测视频。

pirDetect.py

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import os
class detection(object):
def __init__(self, sensor ):
self.callBacks =[]
self.sensor =sensor
self.currState =False
self.prevState =False
GPIO.setmode(GPIO.BOARD )
GPIO.setup(self.sensor, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
def read(self):
self.prevState =self.currState
self. currState =GPIO.input(self.sensor)
def printState(self):
print( “GPIO pin {0} is {1}”.format(self.sensor, “HIGH” if self. currState else “LOW”))
def subscribe(self, callBack):
self.callBacks.append(callBack)
def callBack(self, state):
for fn in self.callBacks:
fn(state)
def start(self):
try:
self.read()
self.printState()
while True:
self.read()
if self.currState !=self.prevState:
self.printState()
self.callBack(self.currState)
time.sleep(.1)
#由于fbi没有正确恢复控制台wh en 应用程序退出我们做一些清理和处理 KeyboardInterrupt 事件。
except (KeyboardInterrupt, SystemExit):
os.system(‘stty sane’)

scare.py

#!/usr/bin/python
import subprocess as sp
import time
import os
from pirDetect import *
import sys
video =[“ omxplayer”、“文件名”、“-o”、“两者”、“–win”、“0 0 1280 720”、“–aspect-mode”、“fill”、“–no-osd”、“–orientation” ,“180”,“–vol”, “-600”]
scareFile =“/home/pi/Projects/Halloween/ScareMedia/{0}ScareV.mp4”.format(sys.argv[1])
print(scareFile)
def onMotion(currState):
if currState:
video[1] =scareFile
subVideo =sp.Popen(video)
while subVideo.poll() 是 None:
time.sleep(.1)
def showImage():
os.system(“sudo fbi -T 1 -d /dev/fb0 -noverbose -once /home/pi/Projects/Halloween/ScareMedia/{0}Start.png”.format(
sys.argv[1]))
showImage()
objDetect =检测器(7)
objDetect.subscribe(onMotion)
objDetect.start()
os.system(“sudo killall -9 fbi”)

将它们整合在一起:

恐吓脚本可以传递一个带有您要播放的视频序列的参数。稍后我将自动执行此操作以随机播放三个中的任何一个。

还有一个修改,添加了一个 Pi 摄像头,并在每次检测到运动时拍摄一个人激活动作的 5 秒视频并将其保存到 Pi。 (尚未实施)。

阅读更多细节:拥有肖像 - 更新


制造工艺

  1. 表格(纵向视图)
  2. 眼镜框
  3. 液晶显示器 (LCD)
  4. CDS:3D 透明液晶显示器
  5. 展览:原始展示
  6. LCD 动画和游戏
  7. AI LCD 朋友!
  8. Arduino 气象站
  9. Arduino LCD 电子游戏
  10. 使用 XOD 的无代码 LCD 菜单生成
  11. Dodge The Defs!
  12. 带 DS1302 RTC 的简单闹钟