DIY 유령 초상화: 라즈베리파이 점프 스케어 프로젝트 (업데이트)
프로젝트 개요
일반적인 LCD 모니터를 모션 감지형 으스스한 유령 초상화로 변신시킵니다. 라즈베리파이 3 B, 파이썬, AtmosFX의 Unliving Portrait 비디오를 사용해 모션에 반응하는 사실적인 점프 스케어를 만들 수 있습니다. 이 단계별 가이드는 하드웨어 조립, 이미지/비디오 준비, 생명을 불어넣는 파이썬 스크립트를 다룹니다.
하드웨어 설정
1단계: LCD 프레임 제작
LCD 모니터를 분해한 후 패널 치수를 측정했습니다: 17" × 11" (세로). 온라인 프레이밍 도구로 내부 치수가 패널과 일치하는 1" × 2" 목재 프레임을 잘랐습니다. LCD가 프레임 안에 딱 맞게 들어가고, 외부 액자 프레임은 뒤에서 접근 가능합니다. 프레임에 우드 스테인을 칠하고 브래드 네일러로 고정했습니다.
다음으로 라즈베리파이를 3D 프린트된 파이 사이드 마운트(Thingiverse)에 장착했습니다. 미러 홀더로 LCD를 고정하고 PIR 센서가 라즈베리파이 GPIO 헤더(핀 7)에 연결될 구멍을 뚫었습니다.
2단계: 이미지, 비디오, 코드 준비
다양한 스케어 세트를 위해 AtmosFX Unliving Portrait 비디오 세 개(남성, 여성, 아동)를 선택했습니다. 각 비디오는 $7.99이며 높은 임팩트의 점프 스케어 콘텐츠를 제공합니다. AtmosFX에서 다운로드 가능한 MP4를 MaleScare.mp4, FemaleScare.mp4, ChildScare.mp4로 이름을 변경했습니다.
초기 정지 이미지로 각 비디오의 첫 프레임을 VLC로 캡처해 MaleStart.png, FemaleStart.png, ChildStart.png로 저장하고 모든 미디어를 ScareMedia 폴더에 보관했습니다.
폴더 구조
/home/pi/Projects/Halloween/
├─ ScareMedia/
│ ├─ MaleStart.png
│ ├─ FemaleStart.png
│ ├─ ChildStart.png
│ ├─ MaleScare.mp4
│ ├─ FemaleScare.mp4
│ └─ ChildScare.mp4
파이썬 스크립트
프로젝트는 두 개의 파이썬 스크립트를 사용합니다: PIR 센서를 읽는 pirDetect.py와 모션 감지 시 비디오를 실행하는 scare.py.
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import os
class detector(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(f"GPIO pin {self.sensor} is {'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)
except (KeyboardInterrupt, SystemExit):
os.system('stty sane')
#!/usr/bin/python
import subprocess as sp
import time
import os
from pirDetect import *
import sys
video = ["omxplayer", "filename", "-o", "both", "--win", "0 0 1280 720", "--aspect-mode", "fill", "--no-osd", "--orientation", "180", "--vol", "-600"]
scareFile = "/home/pi/Projects/Halloween/ScareMedia/{0}Scare.mp4".format(sys.argv[1])
print(scareFile)
def onMotion(currState):
if currState:
video[1] = scareFile
subVideo = sp.Popen(video)
while subVideo.poll() is None:
time.sleep(.1)
def showImage():
os.system(f"sudo fbi -T 1 -d /dev/fb0 -noverbose -once /home/pi/Projects/Halloween/ScareMedia/{sys.argv[1]}Start.png")
showImage()
objDetect = detector(7)
objDetect.subscribe(onMotion)
objDetect.start()
os.system("sudo killall -9 fbi")
모션이 감지되면 scare.py는 fbi로 정지 이미지를 표시하고 omxplayer로 선택된 비디오를 실행합니다. 비디오가 끝나면 정지 이미지가 화면에 남아 다음 만남을 기다립니다.
모든 것 통합하기
단일 인수로 실행해 캐릭터를 선택하세요:
python scare.py Male
나중에 스크립트를 확장해 비디오를 랜덤으로 선택하거나 파이 카메라로 침입자를 녹화할 수 있습니다. 이 모듈식 설계로 향후 확장에 유연하게 대응할 수 있습니다.
시각적 데모는 완성된 유령 초상화 작동 영상 참조: YouTube Video.
전체 기술 문서: Possessed Portrait – Updated