Установим фреймворк 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 следующей командой:
На удаленном компьютере,
подключенном к нашей сети, открываем браузер Google Chrome, в адресной строке
браузера набираем определенный нами сетевой адрес компьютера Raspberry Pi и наблюдаем
потоковую видеотрансляцию.