Я хотел бы управлять камерой малины с Picamera с питоном. Я создал интерфейс QT с кнопками, и я хочу начать и остановить запись с ними, например, нажав на кнопку 1, я вызываю скрипт python, который начинает запись, нажимая на кнопку 2, запись останавливается. Конечно, я не знаю, имеет ли это смысл, в обоих сценариях мне нужно выделить объект «picamera», но я не знаю, будут ли они ссылаться на один и тот же объект. Идеи? В противном случае я могу записывать только определенное количество времени, начиная, ожидая и останавливая запись в том же сценарии. Благодарность

0
Andrea Guglielmi 13 Апр 2019 в 01:44

2 ответа

Лучший ответ

Просто введите свой код, который начнет запись и остановит запись в скрипте Python. Сделайте их доступными через REST API (конечные точки HTTP). Для этого Python-Flask поможет вам создать объект picamera глобально, а затем определить два метода (функции) в скрипте Python, которые начнут вашу запись и остановят вашу запись. Сопоставьте эти два метода с URL (конечная точка HTTP).

На стороне клиента (интерфейс QT), когда вы нажимаете кнопки, просто вызывайте свои REST API (ваши HTTP URL).

Вот как я это делаю, у меня есть веб-приложение (HTML и JS), которое управляет моей камерой, а в бэк-энде у меня есть python, picamera и flask.

1
webDev 12 Апр 2019 в 22:54

Я создал файл Python, и он работает с Flask. Это может помочь кому-то еще, поэтому я сообщу здесь свой код:

import datetime as dt

from picamera import PiCamera
from time import sleep
from datetime import datetime

from flask import Flask
app = Flask(__name__)


camera = PiCamera()

@app.route('/')
def hello_word():
    return 'Camera control ready'

@app.route('/StartRecord')
def start_record():
    global camera
    timestamp = datetime.now().strftime("%y%m%d_%H%M%S")
    camera.resolution = (1920, 1080)
    camera.rotation = 180
    camera.start_recording('/home/pi/Videos/Video_{}.h264'.format(timestamp))

    return 'Camera recording...'

@app.route('/StopRecord')
def stop_record():
    global camera
    camera.stop_recording()
        return 'Camera video stopped!'

@app.route('/TakePicture')
def take_picture():
        global camera
        timestamp = datetime.now().strftime("%y%m%d_%H%M%S")
        camera.resolution = (1920, 1080)
    camera.rotation = 180
        camera.capture('/home/pi/Pictures/Photo_{}.jpg'.format(timestamp))

        return 'Camera photo captured!'

@app.route('/StartLive')
def start_live():
        global camera
        camera.preview_fullscreen=False
        camera.resolution =(944, 600)
    camera.rotation = 180
        camera.preview_window=(0,0,944,600)

        preview = camera.start_preview()

    return 'Camera start live!'

@app.route('/StopLive')
def stop_live():
        global camera
        camera.stop_preview()
        return 'Camera stop live!'

if __name__ == '__main__':
    app.run(host='0.0.0.0')

@webDev, пожалуйста, если у вас есть дополнительные советы, дайте мне знать. Благодарю.

1
Andrea Guglielmi 14 Апр 2019 в 21:59