用不同的脚本控制picamera

时间:2019-04-12 22:44:26

标签: python raspberry-pi

我想用picamera和python控制树莓派相机。我用按钮创建了一个QT界面,我想用它们开始和停止记录,例如,单击button1,调用一个开始记录的python脚本,单击button2,记录停止。当然,我不知道这是否有意义,在两个脚本中我都必须分配一个“ picamera”对象,但是我不知道它们是否将引用同一对象。 有想法吗?否则,我只能在相同的脚本中记录一段确定的开始时间,等待时间并停止记录。 谢谢

2 个答案:

答案 0 :(得分:1)

只需将将开始记录和停止记录的代码放在python脚本中。通过REST API(HTTP端点)使它们可用。为此,Python-Flask将帮助您全局创建summ_keys = %i[price amount] grouping_key = :tariff_code result = Hash.new { |h, k| h[k] = {} } arr.map do |h| cumulative = result[h[grouping_key]] h.each do |k, v| case k when *summ_keys cumulative[k] = (cumulative[k] || 0) + h[k] else cumulative[k] = v end end end p result.values # [{:price=>4.0, :unit=>"meter", :tariff_code=>"4901.99", :amount=>400}, # {:price=>28.0, :unit=>"yards", :tariff_code=>"6006.24", :amount=>1000}] 对象,然后在python脚本中定义两个方法(函数),这将开始记录并停止记录。用URL(HTTP端点)映射这两种方法。

在客户端(QT界面)上,单击按钮时,只需调用REST API(您的HTTP URL)即可。

这就是我的工作方式,我有控制相机的Web应用程序(HTML和JS),而后端有python,picamera和flask。

答案 1 :(得分:1)

我创建了一个文件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,如果还有其他提示,请告诉我。 谢谢。