2016-03-29 12 views
0

モーションセンサーでカメラを起動しようとしています。このような 作品罰金:ラズベリーパイカメラ。リソース不足

import RPi.GPIO as GPIO 
import time 
import picamera 
import datetime 
import os 

def getFileName(): 
    return datetime.datetime.now().strftime("%Y-%m-%d_%H.%M.%S.h264") 

pin = 4 
GPIO.setmode(GPIO.BCM) 
GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) 
prevState = False 
currState = False 
camera = picamera.PiCamera() 
while True: 
    time.sleep(0.1) 
    prevState = currState 
    currState = GPIO.input(pin) 
    if currState != prevState: 
     newState = "HIGH" if currState else "LOW" 
     print ("GPIO pin %s is %s" % (pin, newState)) 
     if currState: 
      fileName = getFileName() 
      print ("Starting Recording...") 
      camera.start_preview() 
      camera.start_recording(fileName) 
      time.sleep(10) 
      print (fileName) 
     else: 
      camera.stop_preview() 
      time.sleep(1) 
      camera.stop_recording() 
      print ("Stopped Recording") 

    else: 
     print("No motions") 

しかし、その後、私はトルネードサーバーのための私の機能DEFしよう:

def secure_on(prevState, currState): 
    pin = 4 
    #GPIO.setmode(GPIO.BCM) 
    #GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) 
    #camera = picamera.PiCamera() 
    time.sleep(0.1) 
    prevState = currState 
    #currState = GPIO.input(pin) 
    if currState != prevState: 
     newState = "HIGH" if currState else "LOW" 
     return {'info': "GPIO pin %s is %s" % (pin, newState)} 
     if currState: 
      fileName = getFileName() 
      print ("Starting Recording...") 
      #camera.start_preview() 
      #camera.start_recording(fileName) 
      time.sleep(10) 
      return {'info': fileName} 
     else: 
      #camera.stop_preview() 
      time.sleep(1) 
      #camera.stop_recording() 
      return {'info': "Stopped Recording"} 
    else: 
     return {'info': "No motions"} 

トルネード:私はエラーを取得した後

class SecureOnHandler(tornado.web.RequestHandler): 
    @gen.coroutine 
    def get(self): 
     result = RosPi.secure_on(prevSec, currSec) 

     self.write({"info": result['info']}) 

"Camera component couldn't be enabled: Out of resources (other than memory) ERROR:tornado.access:500 GET /secure_on

このエラーの原因は何ですか? ありがとうございます!

+0

[こちら](https://raspberrypi.stackexchange.com/questions/26829/picamera-not-working)をチェックしてください – jDo

+0

彼はカメラが壊れています。しかし、私のものは単純なPythonコードで正しく動作しています。 Tornadoサーバーにカメラモジュールを追加すると動作しません – Alekzz

+0

@Alexzz * "私のラズベリーパイのカメラポートに問題がありました.Piを置き換えて、カメラはスムーズに動作します。" - Coderaemon。私はあなたがあなたのPiを捨てなければならないと言っているのではなく、単純にそれがPiであり、壊れているカメラではないということではない。 – jDo

答えて

1

これは古い質問ですが、私はちょうど誰かの時間と労力を節約できる場合は、Out of resourcesエラーに私の解決策を掲載したいと思っていました。

私の問題は、同時に2つのPythonファイルがカメラモジュールを初期化していたことです(モーションが検出されたときにループを描いたスクリプトとオンデマンドでピクチャを撮った別のスクリプト)。

ドキュメントごとに:https://picamera.readthedocs.io/en/release-1.13/faq.html#camera-locks-up-with-multiprocessing 1つのプロセスで一度にPiCameraのインスタンスが作成されていることを確認する必要があります。

私の解決方法は、単にカメラモジュールを関数内に初期化し、画像を撮影した後に.close()に電話をかけて、次のスクリプトが使用する準備ができたプロセスを解放することでした。

関連する問題