|
В данной статье будет рассмотрен вопрос трансляции видео с
модуля камеры одноплатного компьютера Raspberry Pi посредством созданного веб сервера
на Raspberry Pi и
фреймворка Flask.
Краткий видеоролик можно посмотреть ниже.
Установим фреймворк Flask,
служащий для создания веб-приложений на языке программирования Python, для чего откроем терминальное окно и выполним
следующую команду:
sudo apt-get install python3-flask

Далее создадим на рабочем столе папку "RpiWebServer" и внутри её две папки под
названиями "static" и "templates".

Загружаем модуль StartServer.py и сохраняем его в нашей
уже созданной папке
RpiWebServer.
Текст модуля StartServer.py представлен ниже.
from flask import Flask, render_template, Response
from RPi_cam import Camera
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
def gen(camera):
while True:
frame = camera.get_frame()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
@app.route('/video_feed')
def video_feed():
return Response(gen(Camera()),
mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == '__main__':
app.run(host='0.0.0.0', port =80, debug=True, threaded=True)
Создаем html страницу и размещаем её в
созданной папке templates.

В папке static размещаем файл style.css , текст
данного файла ниже.
body{ background: SkyBlue; }
Также в папке RpiWebServer необходимо разместить файл RPi_cam.py текст которого
представлен ниже:
import time
import io
import threading
import picamera
class Camera(object):
thread = None
frame = None
last_access = 0
def initialize(self):
if Camera.thread is None:
Camera.thread = threading.Thread(target=self._thread)
Camera.thread.start()
while self.frame is None:
time.sleep(0)
def get_frame(self):
Camera.last_access = time.time()
self.initialize()
return self.frame
@classmethod
def _thread(cls):
with picamera.PiCamera() as camera:
camera.resolution = (1024, 768)
camera.hflip = True
camera.vflip = True
camera.start_preview()
time.sleep(2)
stream = io.BytesIO()
for foo in camera.capture_continuous(stream, 'jpeg',
use_video_port=True):
stream.seek(0)
cls.frame = stream.read()
stream.seek(0)
stream.truncate()
if time.time() - cls.last_access > 5:
break
cls.thread = None
Далее для
организации доступа к создаваемому на одноплатном компьютере Raspberry Pi серверу
видеотрансляции нам следует знать сетевой адрес компьютера Raspberry Pi.
Узнать
сетевой адрес нашего одноплатного компьютера можно двумя способами.
Способ 1. Требуется выполнить нижеследующую команду на самом Raspberry Pi:
ifconfig

Сетевой адрес в данном случае - 192.168.1.101.
Способ 2.Можно узнать сетевой адрес Raspberry Pi, используя веб интерфейс
роутера данной локальной сети.

Запускаем сервер видеотрансляции на
одноплатном компьютере Raspberry Pi следующей командой:
sudo python3 /home/pi/Desktop/RpiWebServer/StartServer.py

На удаленном компьютере,
подключенном к нашей сети, открываем браузер Google Chrome или любой другой, в адресной строке
браузера набираем определенный нами сетевой адрес компьютера Raspberry Pi и наблюдаем
потоковую видеотрансляцию.
Вернуться на главную страницу раздела
"Одноплатные компьютеры Raspberry
Pi"
|