Здравствуйте уважаемые!!!!!!
Сегодня я решил поговорить о том, как мы будем снимать видеопоток с 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.
Спасибо за внимание!