Иногда на стандартном компьютерном экране с разрешением 1920x1080 просто не хватает пикселей для того чтобы разглядеть все детали роликов с YouTube. Эта проблема коснулась и меня. Когда это случилось — я создал устройство, которое позволяет смотреть YouTube со сверхвысоким разрешением.
Бывает так, что мне надоедает смотреть ролики с YouTube на HD-мониторе или на телевизоре. Особенно меня расстраивает то, что этим роликам обычно не хватает чёткости. Эту проблему я решил с помощью особого устройства, собранного из Raspberry Pi 3 и светодиодной RGB-панели с фантастическим разрешением 64х64 пикселя.
Светодиодная RGB-панель
Raspberry Pi с платой расширения для подключения RGB-панели
Вот как выглядит просмотр видео на моём проигрывателе.
Просмотр видео на RGB-панели
В этом проекте используются следующие компоненты:
Программный код проекта написан на Python.
Подробности о подключении светодиодной панели к Raspberry Pi и об установке необходимого программного обеспечения можно почитать здесь. После того, как удастся наладить совместную работу устройств, установим OpenCV:
Далее, так как мы планируем проигрывать видео с YouTube, установим ещё пару библиотек. В частности — библиотеку
Теперь, когда предварительная подготовка завершена, поговорим о коде проигрывателя.
Вот полный код моей программы:
В нём реализована следующая последовательность действий:
Видео на RGB-панели
Я написал программу так, чтобы она могла бы, в качестве аргумента командной строки, принимать URL видео, которое нужно воспроизвести. После того, как программа узнаёт адрес видео, для его загрузки и сохранения на устройстве используется библиотека
Программа выводит на RGB-панель кадры до тех пор, пока не закончится видео, или до тех пор, пока программа не будет остановлена.
Для просмотра видео программу нужно запустить, воспользовавшись такой командой (программе надо передать адрес видео):
После этого останется лишь наслаждаться YouTube-роликом сверхвысокой чёткости.
Хотите собрать себе проигрыватель «сверхвысокой» чёткости для YouTube?
Обзор проекта
Бывает так, что мне надоедает смотреть ролики с YouTube на HD-мониторе или на телевизоре. Особенно меня расстраивает то, что этим роликам обычно не хватает чёткости. Эту проблему я решил с помощью особого устройства, собранного из Raspberry Pi 3 и светодиодной RGB-панели с фантастическим разрешением 64х64 пикселя.
Светодиодная RGB-панель
Raspberry Pi с платой расширения для подключения RGB-панели
Вот как выглядит просмотр видео на моём проигрывателе.
Просмотр видео на RGB-панели
В этом проекте используются следующие компоненты:
- Светодиодная RGB-панель DFRobot с разрешением 64x64 пикселя.
- Одноплатный компьютер Raspberry Pi 3 Model B+.
- Плата расширения для подключения светодиодной панели к Raspberry Pi — Adafruit Matrix Driver HAT.
Программный код проекта написан на Python.
Сопряжение устройств и подготовка программ
Подробности о подключении светодиодной панели к Raspberry Pi и об установке необходимого программного обеспечения можно почитать здесь. После того, как удастся наладить совместную работу устройств, установим OpenCV:
sudo apt-get update
sudo apt-get install libopencv-dev python-opencv
Далее, так как мы планируем проигрывать видео с YouTube, установим ещё пару библиотек. В частности — библиотеку
pafy
, которая реализует именно тот функционал, который нас интересует:sudo python -m pip install youtube_dl
sudo python -m pip install pafy
Теперь, когда предварительная подготовка завершена, поговорим о коде проигрывателя.
Код
Вот полный код моей программы:
import pafy
import time
import sys
import numpy as np
from rgbmatrix import RGBMatrix, RGBMatrixOptions, graphics
from PIL import Image, ImageDraw
url = sys.argv[1]
video = pafy.new(url)
best = video.getbest(preftype="mp4")
options = RGBMatrixOptions()
options.rows = 64
options.cols = 64
options.chain_length = 1
options.parallel = 1
options.hardware_mapping = 'adafruit-hat'
matrix = RGBMatrix(options=options)
matrix.Clear()
import cv2
capture = cv2.VideoCapture()
capture.open(best.url)
success,image = capture.read()
FRAMERATE = 120
while success:
image_resized = cv2.resize(image, (64,64), interpolation = cv2.INTER_AREA)
image_resized = cv2.cvtColor(image_resized, cv2.COLOR_BRG2RGB)
display_img = Image.fromarray(image_resized)
matrix.SetImage(display_img.convert('RGB'))
#cv2.imshow('frame',image_resized)
#time.sleep(1/FRAMERATE)
success, image = capture.read()
cap.release()
cv2.destroyAllWindows()
В нём реализована следующая последовательность действий:
- Импорт библиотек.
- Загрузка видео и преобразование его в нужный формат.
- Настройка RGB-панели.
- Создание объекта OpenCV для захвата видео.
- Обход кадров видео, их преобразование к нужному виду и отправка на RGB-панель.
Видео на RGB-панели
Я написал программу так, чтобы она могла бы, в качестве аргумента командной строки, принимать URL видео, которое нужно воспроизвести. После того, как программа узнаёт адрес видео, для его загрузки и сохранения на устройстве используется библиотека
pafy
. В программе я указал, что используемая RGB-панель имеет разрешение 64x64 пикселя, и что в проекте применяется плата расширения adafruit-hat
. Далее, чтобы помочь OpenCV в деле захвата кадров видео, я создал объект VideoCapture
и передал ему видео. И наконец, после того, как изображение готово для вывода на RGB-панель, я применил библиотеку rpi-rgb-led-matrix
, которая, с использованием инструментов, импортированных из PIL, выводит изображение. Для этого, в частности, объекты изображений OpenCV преобразуются в объекты изображений PIL:display_img = Image.fromarray(image_resized)
Программа выводит на RGB-панель кадры до тех пор, пока не закончится видео, или до тех пор, пока программа не будет остановлена.
Просмотр видео
Для просмотра видео программу нужно запустить, воспользовавшись такой командой (программе надо передать адрес видео):
sudo python low_res_yt.py <youtube_video_url>
После этого останется лишь наслаждаться YouTube-роликом сверхвысокой чёткости.
Хотите собрать себе проигрыватель «сверхвысокой» чёткости для YouTube?