Ale*_*kzz 2 python tornado raspberry-pi
尝试启动带有运动传感器的相机。像这样工作正常:
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")
Run Code Online (Sandbox Code Playgroud)
但后来我尝试为 Tornado 服务器定义我的函数:
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"}
Run Code Online (Sandbox Code Playgroud)
龙卷风:
class SecureOnHandler(tornado.web.RequestHandler):
@gen.coroutine
def get(self):
result = RosPi.secure_on(prevSec, currSec)
self.write({"info": result['info']})
Run Code Online (Sandbox Code Playgroud)
之后我得到一个错误
“无法启用相机组件:资源不足(内存除外)错误:tornado.access:500 GET /secure_on
什么可能导致错误?提前致谢!
小智 5
我知道这是一个老问题,但我只是想发布我的Out of resources错误解决方案,以防它可以节省某人的时间和精力。
对我来说,问题是我同时初始化相机模块是两个Python文件(一个带有while循环的脚本,在检测到运动时拍照,另一个脚本按需拍照)。
根据文档:https://picamera.readthedocs.io/en/release-1.13/faq.html#camera-locks-up-with-multiprocessingPiCamera ,您必须确保一次只有一个进程创建 的实例。
我的解决方案只是将初始化相机模块移至函数内,并.close()在拍照后调用以释放进程,以供下一个调用它的脚本使用。
| 归档时间: |
|
| 查看次数: |
6839 次 |
| 最近记录: |