2016-11-22 3 views
1

Привет, Я пытаюсь сделать регистратор дисков с помощью малинового pi3 и модуля камеры. Затем я использую picamera, которая представляет собой библиотеку python, которая использует официальный модуль камеры для разработки.Модуль камеры малины Pi с Picamera

Адрес document of picamera.

Основная идея заключается в следующем. Запишите на 10 минут и запишите это. Если пользователь нажал кнопку, подключенную к выходу GPIO, прекратите запись.

Я думал, что могу использовать функцию обратного вызова, чтобы закончить запись. Но я не смог остановить запись камеры методом обратного вызова. Кто-нибудь говорит мне, что мое признание обратного вызова неверно?

Вот мой код.

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

from time import sleep 
from picamera import PiCamera 
import os 
import sys 
import datetime 
import RPi.GPIO as GPIO 
import os 

class driveRecoder(): 
    try: 
     #Button setup 
     SWITCH_PIN=21 
     GPIO.setmode(GPIO.BCM) 
     GPIO.setup(SWITCH_PIN,GPIO.IN,pull_up_down=GPIO.PUD_DOWN) 

     #Camera setup 
     camera = PiCamera() 
     resolution_width = 1920 
     resolution_height = 1080 
     record_time=60 
     camera.resolution = (resolution_width, resolution_height) 
     camera.framerate = 30 
     camera.led = False 

     def shutdown(): 
      print "shutdown" 
      os.system("sudo shutdown -h now") 

     #Callback function 
     def stopRecording(): 
      camera.stop_recording() 
      print("録画終了") 
      #I want to power down after stop recording 
      #GPIO.cleanup() 
      #shutdown() 

     GPIO.add_event_detect(SWITCH_PIN,GPIO.FALLING) 
     GPIO.add_event_callback(SWITCH_PIN,stopRecording) 

     while True: 
      try: 
       print("録画開始") 

       #setup file name and directory path to save 
       now = datetime.datetime.now() 
       dir_name = now.strftime('%Y%m%d') 
       dir_path = '/home/admini/Video/'+dir_name 
       file_name = now.strftime('%H%M%S') 

       #Make each date folder if not exist folder 
       if not os.path.exists(dir_path): 
         os.makedirs(dir_path) 
         os.chmod(dir_path, 0777) 

       #Recording 10 min the loop 
       camera.start_recording(dir_path+'/'+file_name+'.h264') 
       camera.wait_recording(record_time) 
       camera.stop_recording() 
       print("録画終了") 
        sleep(2) 
      except KeyboardInterrupt: 
       camera.stop_recording() 
       break 
      finally: 
       pass 
     print("録画終了") 
    except KeyboardInterrupt: 
     print("ctl+c終了") 
     GPIO.cleanup() 
     sys.exit(0) 
    finally: 
     pass 
    print("終了") 
    GPIO.cleanup() 
    sys.exit(0) 

ответ

0

Вам необходимо вытащить эту функцию из класса для DriveRecorder. Я удивлен, что вы не видите ошибки. Я тоже вытащил бы функцию «shutdown».

#Callback function 
def stopRecording(): 
    camera.stop_recording() 
    print("録画終了") 
    #I want to power down after stop recording 
    #GPIO.cleanup() 
    #shutdown() 
+0

Теперь я удаляю класс, затем запускаю программу, я получил KeyError (1924434000) в модуле «threading». Я никогда не вижу это слово keyerror в ~ ты это знаешь? –

+0

Можете ли вы разместить полную ошибку? –

Смежные вопросы