尝试启动带有运动传感器的相机。工作原理如下:
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 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']})
之后我得到一个错误
"无法启用相机组件:资源不足(内存除外)错误:龙卷风。访问:上的500 GET/secure_on
是什么原因导致了错误?提前感谢!
我知道这是一个老问题,但我只是想发布我对Out of resources
错误的解决方案,以防它能为某人节省时间和精力。
对我来说,问题是我在初始化相机模块时同时使用了两个Python文件(一个带有while循环的脚本在检测到运动时拍摄照片,另一个脚本在需要时拍摄照片)。
根据文件:https://picamera.readthedocs.io/en/release-1.13/faq.html#camera-通过多处理锁定,您必须确保一次只有一个进程创建PiCamera
的实例。
我的解决方案只是在一个函数中初始化相机模块,并在拍照后调用.close()
,以释放进程,为下一个调用它的脚本使用做好准备。