Призрак в вашем телевизоре

Если вы еще не выбросили свой старый телевизор, то советую вам ознакомится с этой статьей. Из нее можно узнать, как из него можно сделать крутой гаджет — телевизор с призраком.
Наверное, большинство смотрело американские фильмы ужасов (ну или хотя бы фрагменты из них).

Как правило такие сюжеты можно разбить на четыре этапа.
1) Персонаж идет за чем-то находящимся в шкафу с зеркальной дверцей, и мы видим отражение персонажа перед зеркалом.
2) Открывает шкаф или отвлекаются на что-то.
3) Снова смотрит в зеркало и видят что-то позади себя.
4) Оборачивается и ничего не видит.

Примерно, как на видео ниже.

Именно такого эффекта и решил добиться мастер, а вместо зеркала он будет использовать старый телевизор.
Мастер использовал Raspberry Pi, камеру и OpenCV для отображения привидения на старом черно-белом телевизоре. Когда Raspberry Pi обнаруживает лицо, он включает телевизор, отображающий прямую трансляцию с камеры. Когда пользователь смотрит в сторону от телевизора, на заднем плане отображается призрак. Как только пользователь снова смотрит на телевизор, то видит призрак. Естественно желание повернутся и посмотреть, в этот момент призрак исчезает и через несколько секунд телевизор выключается, перезапуская цикл.

Инструменты и материалы:
-3D-принтер (опция);
-Дрель;
-Паяльник;
-Raspberry Pi 3;
-Модуль камеры;
-Телевизор ЭЛТ;
-Преобразователь AV в RF (если телевизор не имеет композитного входа);
-YK04 Модуль дистанционного управления;
-KY-019 Релейный модуль 5 В;
-Резистор 330 Ом — 2 шт;
-Композитный видеокабель для Raspberry Pi;

Шаг первый: 3D-печать
Детали, напечатанные на 3D-принтере вполне можно сделать и из других материалов, дерева, пластика или даже картона. Для этой самоделки есть две детали, напечатанные на 3D-принтере, одна из которых — это крепление Raspberry Pi, которое будет приклеено к телевизору термоклеем. Другая часть — это крепление для камеры.
Файлы можно скачать ниже.
cammount.f3d
Raspimount.f3d

Шаг второй: настройка Raspberry Pi
Сначала нужно настроить Raspberry Pi. Официальное руководство по установке операционной системы на Pi находится здесь.
Отсюда можно установить ОС Raspberry Pi (32-разрядная версия ) с рекомендуемым программным обеспечением.
После установки операционной системы и запуска raspberry pi нужно открыть терминал и ввести:
sudo raspi-config
Команда включит камеру и запустит SSH.
Включение SSH поможет подключиться к Raspberry Pi удаленно, чтобы не использовать каждый раз клавиатуру, мышь и монитор.

Шаг третий: электроника
На этом шаге мастер проверяет работу Raspberry Pi и других комплектующих, монтируя их на монтажной плате.

Raspberry Pi имеет распиновку как на фото ниже.

Подключает камеру. Порт камеры находится между выходом HDMI и аудиоразъемом.
Подключает приемник, RGB и реле с помощью перемычек как показано в таблице:

YK04 Raspberry Pi 3
GND GND
POWER 3,3 В
D0 12
D1 16

LED Raspberry Pi 3
GND GND
КРАСНЫЙ 22
ЗЕЛЕНЫЙ 24
СИНИЙ 26

Relay Raspberry Pi 3
GND GND
POWER 5В
Data 32
Шаг четвертый: код
Сначала нужно установить библиотеку OpenCV. Она нужна для обнаружения лица и удаления фона. Модуль OpenCV Python можно загрузить из репозитория Raspbian, для этого нужно открыть терминал и ввести:
sudo apt update
sudo apt install python3-opencv
Эта команда установит все пакеты, необходимые для запуска OpenCV.
Затем нужно перезагрузить Pi с помощью команды:
sudo reboot
Переходим в папку «Документы»:
cd Documents
Затем установите код Haunted TV из репозитория Github:
git clone https://github.com/gocivici/haunted-tv.git
Эта команда установит самую последнюю версию кода.
Затем переходим в папку проекта;
cd haunted-tv
Чтобы иметь возможность запускать программу вводим:
python3 hauntedTV.py
Теперь для тестирования и отладки кода можно использовать клавиатуру вместо пульта. Используем «h», чтобы сделать снимок с привидениями, и «a», чтобы начать распознавание лиц.
Теперь нужно настроить автозапуск скрипта при загрузке Raspberry Pi.
Вводим команду:
mkdir /home/pi/.config/autostart
nano /home/pi/.config/autostart/hauntedTV.desktop
В созданный файл вставляем нижеприведеную часть кода:
[Desktop Entry]
Type=Application
Name=HauntedTV
Exec=/usr/bin/python3 /home/pi/Documents/haunted-tv/hauntedTV.py
Дальше сохраняем, выходим с помощью ctrl + x и перезагружаем:
sudo reboot
Для редактирования кода в каталоге проекта, вводим:
sudo nano hauntedTV.py
В коде есть настройки для трех таймеров:
timeTV = 5
timeGhost = 25
timeNoGhost = 10
Эти значения не в секундах. Это значение, устанавливаемое функцией faceFreqCounter. Этот счетчик запускается при обнаружении лица и продолжает отсчет, если лицо все еще присутствует на изображении. Если лицо покидает экран более чем на 4 секунды, счетчик устанавливается на 0. (Таким образом, ложные срабатывания фильтруются)
timeTV: когда faceFreqCounter достигает этого значения, телевизор включается.
timeGhost: когда faceFreqCounter достигает этого значения, призрак будет отображаться после того, как лицо отвернется. Можно установить больший интервал.
timeNoGhost: это значение определяет, когда отключить видимость призрака после того, как пользователь увидит призрак и повернется посмотреть.
Также нужно настроить чувствительность фона в коде:
backgroundSensitivity = 20
Это значение определяет чувствительность «удаления» фона. Нужно увеличить это значение, если изображение с привидениями не видно на заднем плане.

Шаг пятый: обнаружение лица / глаз и удаление фона
В этом шаге мастер подробно расскажет, как использовать OpenCV для обнаружения лиц и удаления фона.
Существует множество методов обнаружения лица, метод, который он использовал называется обнаружением объектов с помощью каскадов Хаара. Haar Cascade — это алгоритм обнаружения объектов.
Этот метод можно использовать для обнаружения любого объекта, а не только лиц. Для того, чтобы обнаружить лицо, сначала нужны каскадные файлы. Можно использовать любую поисковую систему, чтобы найти различные каскады вещей, которые вы хотите обнаружить.
В этом проекте мастер использует Face Cascade и Eye Cascade. Их можно найти здесь и здесь.
После загрузки каскадов в виде файлов .xml импортируем их код:
import numpy as np
import cv2

#importing the cascades
detected = cv2.CascadeClassifier(‘haarcascade_frontalface_default.xml’)
#detected = cv2.CascadeClassifier(‘haarcascade_eye.xml’)
Затем включаем камеру и инициализируем цикл while, чтобы код проверил, обнаружено ли лицо:
cam = cv2.VideoCapture(0)
while True:
ret, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = detected.detectMultiScale(gray, 1.3, 5)<br>
Каскадный классификатор «detectMultiScale» просто обнаруживает лица. Теперь создадим цикл, чтобы нарисовать прямоугольник вокруг обнаруженных лиц.
for (x,y,w,h) in detected:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
#put code here to run when a face is detected
Наконец отображаем финальное изображение в окне:
cv2.imshow ('img', img)
ниже полный код для распознавания лиц:

 Показать / Скрыть текстimport numpy as np
import cv2

#importing the cascades
detected = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
#detected = cv2.CascadeClassifier('haarcascade_eye.xml')
cam = cv2.VideoCapture(0)
while True:
ret, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = detected.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in detected:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
#put code here to run when a face is detected
cv2.imshow('img',img)
cam.release()
cv2.destroyAllWindows()
Сохраняем этот файл как FaceDetection.py и запускаем его. Пользователь должны увидеть синий прямоугольник вокруг лица.

Шаг шестой: тест
Для пробного теста мастер сделал регулируемую подставку для камеры и поместил ее на телевизор с Raspberry Pi. На этом этапе основная цель — протестировать установку и телевизор, чтобы убедиться, что они работают правильно.
Подключаем Raspberry Pi к телевизору с помощью композитного кабеля (если телевизор не имеет композитного входа, используем преобразователь AV-RF)
Подключаем Raspberry Pi к источнику питания и ожидаем пока он загрузится.
Проверяем нет ли проблем с видеопотоком.

Шаг седьмой: сборка
Перед сборкой припаиваем резисторы к светодиоду и антенну к приемнику.

Дальше нужно снять заднюю крышку с телевизора и при необходимости очистить от пыли внутреннюю часть.

Устанавливает внутрь Raspberry Pi и остальные детали.

Камеру устанавливает вместо аудиоразъема.

Шаг восьмой: привидение
Теперь, когда Raspberry Pi установлен на телевизоре, нужно проверить работу устройства и сделать снимок привидения.
Включаем устройство. Raspberry Pi должен загрузиться и запустить сценарий Python. Через несколько секунд телевизор должен включиться, и можно увидеть себя на экране телевизора.

Затем надеть костюм привидения, встать перед телевизором и с помощью пульта дистанционного управления сделайте снимок, нажав кнопку B на пульте дистанционного управления. Теперь скрипт готов к запуску. При нажатии на кнопку D на пульте, телевизор должен выключиться и начать определение лиц.

Сборка закончена, но если что-то пошло не так, то смотрим последний шаг.

Шаг девятый: устранение неисправностей
+ Картинка с привидениями не видна.
-свет очень важен для удаления фона. Убедитесь, что телевизор находится в хорошо освещенном месте. Также переместите источник света за телевизор.
+ Не понятно, работает распознавание лиц или нет.
-Перейдите к шагу 5 и запустите только код обнаружения лица. Вы должны увидеть прямоугольник вокруг своего лица.
+ ЭЛТ-телевизор не отображает изображение.
— Зайдите в файл config.txt на своем raspberry pi и убедитесь, что регион ТВ такой же, как у вашего телевизора.
Все готово, но в дальнейшем мастер собирается модернизировать устройство.
Установить динамик Bluetooth, чтобы издавать звуки, когда призрак появляется.
Установить инфракрасную камеру и светодиоды для возможности работы устройства в темноте. Это создаст более пугающую атмосферу.
Сделать специальную подставку для телевизора с жуткими декорациями.
Установить более мощный компьютер, такой как Nvidia Jetson.

Источник (Source)

Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

Источник: usamodelkina.ru

Понравилась статья? Поделиться с друзьями:
KIA