2016-04-14 2 views
0

Я делаю программу, которая позволяет мне записывать видео, используя библиотеку rapsberry pi camera для python, есть одна небольшая проблема, когда вы запускаете camera = picamera.PiCamera(), камера включена и используется до конца программы, то, что я хотел бы сделать, это включить ее только при записи и остановке, когда запись будет выполнена, но все-таки сохранит мою программу.Глобальная переменная в python, инициализация и завершение

Что мне нужно: Как создать глобальную переменную для picamera и как ее закончить.

часть моего кода, релевантно:

camera = picamera.PiCamera() 
camera.resolution = (1920, 1080) 
filename = "" 

#Start recording video into raw file 
def start_record(): 
       print("Starting recording"); 
       reset_tmp() 
       global filename 
       filename = "vid/" + str(int(time.time())); 
       camera.start_recording(filename+".h264"); 

#Stop recording and convert h264 raw file to mp4 and remove raw file 
def stop_record(): 
       print("Stopping recording"); 
       reset_tmp() 
       global filename 
       camera.stop_recording() 
       os.system("MP4Box -fps 30 -add "+filename+".h264"+" "+filename+".mp4"); 
       os.system("rm "+filename+".h264"); 

Обновленная версия коды, функциональный для тех, кто ищет решения заголовка необходимо использовать del ключевое слово, чтобы избавиться от переменных, но picamera библиотеки функция называется .close() прекратить объект, вот мой фиксированный код:

camera = None 
filename = "" 

#Start recording video into raw file 
def start_record(): 
       print("Starting recording"); 
       reset_tmp() 
       global filename 
       filename = "vid/" + str(int(time.time())); 

       global camera 
       camera = picamera.PiCamera() 
       camera.resolution = (1920, 1080) 
       camera.start_recording(filename+".h264"); 

#Stop recording and convert h264 raw file to mp4 and remove raw file 
def stop_record(): 
       print("Stopping recording"); 
       reset_tmp() 
       global filename 
       global camera 
       camera.stop_recording() 
       camera.close() 
       os.system("MP4Box -fps 30 -add "+filename+".h264"+" "+filename+".mp4"); 
       os.system("rm "+filename+".h264"); 
+0

поставить строку, которая начинается запись внутри функции start_record. – dbliss

+0

Это не работает, потому что мне нужно получить доступ к той же переменной внутри другой функции – Iceberg

+0

Я бы порекомендовал потратить некоторое время, чтобы посмотреть, как работают функции, и как передавать параметры между ними. – Chris

ответ

-2

Как насчет:

camera = None 
camera.resolution = (1920, 1080) 
filename = "" 

#Start recording video into raw file 
def start_record(): 
       print("Starting recording"); 
       reset_tmp() 
       global filename 
       filename = "vid/" + str(int(time.time())); 

       global camera 
       camera = picamera.PiCamera() 
       camera.start_recording(filename+".h264"); 

Основная идея - переместить код, чтобы запустить камеру в funktion - где global может использоваться для изменения глобальной переменной.

+0

Спасибо, я попробую и посмотрю, работает ли это. – Iceberg

+0

Это работает, но мне все еще нужно прекратить переменную во 2-й функции, как мне это сделать? – Iceberg

+0

Вы уже это делаете, см. Camera.stop_recording(). Если этого недостаточно, вам придется проконсультироваться с документами –

2

Здесь нет необходимости в глобальном поиске. Просто используйте возвращаемые значения:

import os 
import subprocess 
import time 

import picamera 

def start_record(resolution=(1920, 1080)): 
    """Start recording video into raw file""" 
    print("Starting recording") 
    camera = picamera.PiCamera() 
    camera.resolution = resolution 
    reset_tmp() 
    filename = os.path.join('vid', '{}.h264'.format(int(time.time()))) 
    camera.start_recording(filename) 
    return camera, filename 


def stop_record(camera, filename): 
    """Stop recording and convert h264 raw file to mp4 and remove raw file""" 
    print("Stopping recording") 
    reset_tmp() 
    camera.stop_recording() 
    mp4_fn = os.path.splitext(filename)[0] + '.mp4' 
    subprocess.call(['MP4Box', '-fps', '30', '-add', mp4_fn]) 
    os.remove(filename) 

Теперь вызовите функцию запуска:

camera, filename = start_record() 

, а позже функцию остановки:

stop_record(camera, filename) 
Смежные вопросы