2016-11-22 3 views
1

こんにちは、私はラズベリーパイ3とカメラモジュールでドライブレコーダーを作ろうとしています。 次に、開発のために公式のカメラモジュールを使用するpythonライブラリであるpicameraを使用しています。ラズベリーパイカメラカメラモジュールwith 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のクラスから取り除く必要があります。私はあなたが間違いを見ていないことに驚いています。私は「シャットダウン」機能も引き出す​​だろう。

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

ここでクラスを削除してからプログラムを実行すると、モジュール「スレッド」でKeyError(1924434000)が取得されました。私はこの単語keyerror〜あなたがこれを知っていますか? –

+0

あなたは完全なエラーを投稿できますか? –

関連する問題