[Практика 6] Стрим с Raspberry Pi Zero W
Фев 21, 2020 в 11:04  •  4 мин  •  читали 608 раз

Здравствуйте уважаемые!!!!!!


Сегодня я решил поговорить о том, как мы будем снимать видеопоток с RPi и что мы будем с ним делать.



Начнем!


Мы будем использовать Raspberry Pi Zero W c Raspberry Pi Camera v1.3

Вот они.


Для того, чтобы что то хостить (а мы хотим хостить видеопоток) нам нужен сервер. И я выбрал Python+Flask.


%lang(python)%
from pi_cam import Camera # импортируем класс Camera (позже расскажу о нем)
from flask import Flask, render_template, Response # импортируем штуки для Flask

app = Flask(__name__) # создаем приложение Flask


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=49001, debug=True, threaded=True)
# запускаем приложение


Теперь по порядку. Что тут происходит? Мы создаем url, на котором у нас будет висеть jpeg картинка. Однако, обращаю внимание, что эта картинка будет постоянно меняться. Каждый кадр мы сжимаем алгоритмом jpeg. Поэтому фактически, мы будем смотреть на смену этих картинок. Это называется mjpeg.


https://ru.wikipedia.org/wiki/MJPEG - тут можно прочитать.


Вот тут можно посмотреть код класса Camera. Мы используем эту обертку, чтобы было удобнее.


Таким образом, запустив приложение и перейдя в браузере на <RPi IP>:49001/video_feed мы увидим изображение с Rapsberry Pi Camera.


Спасибо за внимание!

Копирование материалов допускается только с разрешения автора (vladivanov.dev@gmail.com) в письменной форме.
(Copying of materials is allowed only with the written permission of the author)
Похожие статьи