50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
import os
|
|
import time
|
|
import picamera
|
|
import threading
|
|
from datetime import datetime
|
|
|
|
from logger import logger
|
|
|
|
class BrewCamera():
|
|
def __init__(self, interval=10):
|
|
self.lastCaptureTimestamp = None
|
|
self.interval = interval
|
|
self.warmupTime = 0.3
|
|
|
|
def spawnBackgroundCapture(self):
|
|
thread = threading.Thread(target=self.captureOnIntervalForever, args=())
|
|
thread.daemon = True
|
|
thread.start()
|
|
logger.info("spawned camera capture daemon at interval: {}".format(self.interval))
|
|
|
|
def captureOnIntervalForever(self):
|
|
while True:
|
|
time.sleep(self.interval - self.warmupTime)
|
|
self.capture()
|
|
|
|
def capture(self):
|
|
try:
|
|
logger.debug('Capturing image')
|
|
with picamera.PiCamera() as camera:
|
|
camera.resolution = (1297, 972)
|
|
camera.rotation = 180
|
|
camera.annotate_background = picamera.Color('black')
|
|
camera.annotate_text_size = 50 # (values 6 to 160, default is 32)
|
|
camera.annotate_text = datetime.now().strftime('%A %d %b %Y %H:%M:%S')
|
|
|
|
# Camera warm-up time
|
|
time.sleep(self.warmupTime)
|
|
camera.capture('assets/foo.jpg')
|
|
self.lastCaptureTime = datetime.now()
|
|
os.replace('assets/foo.jpg', 'assets/capture.jpg')
|
|
|
|
except picamera.exc.PiCameraMMALError as error:
|
|
logger.error('Picamera MMAL exception. Retrying picture in 1 second', es={
|
|
'error': str(error),
|
|
'exception': error.__class__.__name__
|
|
})
|
|
time.sleep(1)
|
|
self.capture()
|
|
|