Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Besessenes Porträt – Aktualisiertes

DIY-Sprungschreck-Porträt von Grund auf mit Himbeere Pi 3 B, Python und AtmosFX Videos unlebende Porträts. Es ist wieder Oktober und ich wollte mir ein Halloween-Projekt mit einem Raspberry Pi einfallen lassen. Ich habe hier und da ein paar verwunschene Porträts gesehen, aber keines davon war wirklich erschreckend, nur eine einfache Bewegung.

Ich beschloss, diese Idee zu erweitern und suchte nach guten Jump-Scare-Videos, die ich verwenden konnte. Dies führte mich zu AtmosFx. Sie haben einige wirklich coole Unliving Portrait-Videos, die jeweils nur 7,99 $ kosten. Diese waren perfekt für meine Vorstellungen und ermöglichten mir mehr als ein Jump-Scare-Video, das ich manuell auswählen oder jedes einzelne nach dem Zufallsprinzip ausführen lassen konnte.

Hier ist ein Video des fertigen Projekts.

Ich wollte den PIR-Code nicht von Grund auf neu schreiben, also suche ich im Internet nach Beispielen für den Zugriff auf den PIR mit Python. Ich habe einen alten Artikel von Arc Software gefunden, der ein ähnliches Projekt demonstriert.

Der Code, den ich präsentiere, stammt hauptsächlich aus ihrem Beispiel, aber ich habe mehrere Änderungen daran vorgenommen, um meinen Anforderungen gerecht zu werden.

SCHRITT 1:Bauen Sie den LCD-Rahmen auf

Nach dem Zerlegen des LCD-Monitors und dem Entfernen des LCD-Panels und der Elektronik messe ich die genaue Größe des Displays 17 x 11 im Hochformat.

Ich habe mit diesem Online-Tool meine Rahmenzuschnitte für mein LCD-Panel gemessen.

Ich baute einen Holzrahmen aus 1″ x 2″ Holz mit einer Innenabmessung von 17″ x 11″, der das LCD halten würde. Ich schneide 4 Stücke, die, wenn sie zusammen gerahmt werden, die genaue Größe meines LCDs haben, und montierte das LCD in den Rahmen und machte das LCD bündig mit dem LCD-Rahmen. Der Bilderrahmen wird am LCD-Rahmen befestigt und lässt die gesamte Elektronik von der Rückseite zugänglich.

Nachdem ich den Bilderrahmen gebeizt und trocknen lassen habe, habe ich den Bilderrahmen mit einem Nagelnagel am LCD-Rahmen befestigt.

Zusammengebauter LCD-Rahmen

Als nächstes habe ich den Raspberry Pi mit einer schönen kleinen Halterung von Thingiverse.com (Pi Side Mount) montiert, die ich mit meinem 3D-Drucker gedruckt habe.

Ich habe Spiegelhalter verwendet, um das LCD festzuschrauben, damit es sich nicht verschiebt und bündig mit der Vorderseite des Rahmens am Bilderrahmen bleibt.

Der letzte Schritt der Montage bestand darin, ein Loch für den PIR-Sensor zu bohren und ihn am GPIO-Header des Pi zu befestigen. Der PIR ist ziemlich einfach, er hat einen Hot-, Ground- und Sensor-Pin.

SCHRITT 2:Bilder, Videos und Code

Ich habe in meinem Projekt drei der Unliving Portrait-Videos von AtmosFX verwendet.

Die erste Hürde bestand darin, das Video zum Abspielen zu bringen, wenn eine Bewegung erkannt wurde und nicht nur ständig auf dem Bildschirm wiederholt. Ich könnte das Video laden und dann beim ersten Frame anhalten und dann, wenn es eine Bewegung gibt, die Wiedergabe fortsetzen und nach dem vollständigen Zurücksetzen von vorne beginnen.

Es wäre einfacher, ein Standbild des ersten Frames anzuzeigen und dann, wenn eine Bewegung erkannt wird, den OMXPlayer zu starten, um die entsprechende Videodatei abzuspielen. Der Vorteil dabei ist, dass beim Beenden von OMXPlayer das geladene Standbild immer noch im Framebuffer und auf dem Bildschirm zu sehen wäre.

Um das Startbild anzuzeigen, habe ich das Linux FBI (Framebuffer Imageviewer) verwendet.

Der verwendete Player ist OMXPlayer und obwohl er das Anhalten unterstützt, gibt es keinen Befehlszeilenbefehl, den ich in Python zum Anhalten und Abspielen aufrufen könnte, ohne etwas wie DBuscontrol zu implementieren, was das Projekt übermäßig komplizieren würde.

Ordnerstruktur:

Die folgende Ordnerstruktur entspricht den Pfaden im Skript, um auf die Bilder und Videos zuzugreifen. Der Pfad kann geändert werden, solange die Pfade in den Skripten entsprechend aktualisiert werden.

Erforderliche Ordnerstruktur zum Abgleichen von Skriptpfaden

Bilder:

Also habe ich es für jedes Video in VLC geladen und eine Bildschirmobergrenze des ersten Frames in der gleichen Auflösung wie das Video erstellt, damit sie beim Abspielen perfekt auf dem Bildschirm mit dem Video überlagert werden .

Die drei Videos zeigten einen Mann, eine Frau und ein Kind, also habe ich von jedem eine Bildschirmkappe genommen und sie MaleStart.png, FemaleStart.png und ChildStart.png genannt. Ich habe in meinem Halloween-Projekt einen Ordner namens ScareMedia erstellt und die 3 Standbilder hochgeladen.

Videos:

Als nächstes nannte ich jedes Video MaleScare.mp4, FemaleScare.mp4 und ChildScare.mp4 und lud sie in den ScareMedia-Ordner hoch.

Code:

Es sind 2 Skripte erforderlich, um die Videos bei der Bewegungserkennung zu automatisieren.

pirDetect.py

#!/usr/bin/python
Import RPi.GPIO als GPIO
Import Zeit
Import OS
Klasse Detektor(Objekt):
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} ist {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):
versuchen:
self.read()
self.printState()
while True:
self.read()
if self.currState !=self.prevState:
self.printState()
self.callBack(self.currState)
time.sleep(.1)
#Da fbi die Konsole nicht richtig wiederherstellt Wenn die Anwendung beendet wird, führen wir eine kleine Bereinigung durch und behandeln das KeyboardInterrupt-Ereignis.
außer (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“, „filename“, „-o“, „beide“, „–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)
während subVideo.poll() None ist:
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 =Detektor(7)
objDetect.subscribe(onMotion)
objDetect.start()
os.system(“sudo killall -9 fbi”)

Alles zusammenbringen:

Dem Scare-Skript kann ein einzelner Parameter mit der abzuspielenden Videosequenz übergeben werden. Später werde ich dies automatisieren, um einen der drei zufällig abzuspielen.

Es gibt auch eine Modifikation, um eine Pi-Kamera hinzuzufügen und ein 5-Sekunden-Video der Person aufzunehmen, die die Bewegung aktiviert, und jedes Mal, wenn eine Bewegung erkannt wird, auf dem Pi zu speichern. (Noch nicht implementiert).

Lesen Sie mehr Details:Besessenes Porträt – Aktualisiert


Herstellungsprozess

  1. Tabelle (Hochformat)
  2. Brillenfassung
  3. Liquid Crystal Display (LCD)
  4. CDS:transparente 3D-LCD-Displays
  5. Ausstellung:Die Urausstellung
  6. LCD-Animation und -Spiele
  7. KI-LCD-Freund!
  8. Arduino-Wetterstation
  9. Weiche den Defs aus!
  10. Einfacher Wecker mit DS1302 RTC