# == smapp.py == from flask import Flask, send_file from picamera import PiCamera from io import BytesIO app = Flask(__name__) @app.route("/camera.jpg") def camera_jpg(): steam = BytesIO() camera = PiCamera() camera.resolution = (1024, 768) camera.capture(steam, 'jpeg') camera.close() steam.seek(0) resp = send_file(steam, mimetype='image/jpeg') resp.headers['Cache-Control'] = 'no-cache' return resp
Сталкивался с похожей ситуацией, когда Flask-приложение управляло gpio портами. Решением стало добавить пользователя www-data в группу gpio - это работало под uwsgi/nginx (и не работало под wsgi/apache). Здесь пробовал добавлять www-data в группу video (в сети человеку это помогло с захватом видеопотока с камеры). Также добавлял сразу во много других групп, но результата это не дало. Какие идеи стоит попробовать? Каким путем мне погуглить тему ещё?
Настройки uwsgi
#== wsgi.ini == [uwsgi] module = wsgi:app master = true processes = 2 socket = smapp.sock chmod-socket = 666 uid = www-data gid = www-data vacuum = true die-on-term = true plugins = python3
Сервис запуска uwsgi
#== /etc/systemd/system/smapp.service == [Unit] Description=uWSGI instance to serve smapp After=network.target [Service] User=www-data Group=www-data WorkingDirectory=/var/www/html ExecStart=/usr/bin/uwsgi --ini wsgi.ini [Install] WantedBy=multi-user.target
Настроки nginx
#== /etc/nginx/sites-available/smapp ==
server {
listen 80;
location / {
include uwsgi_params;
uwsgi_pass unix:/var/www/html/smapp.sock;
}
}
В логах nginx и статусе uwsgi можно видеть отсылки на ошибку, возникающую в send_file, думаю из-за пустого потока по причине недостатка прав доступа к библиотеке picamera. Что я сделал не так?