Files
brewLogger/brewCamera.py
Kevin 343d0855c7 Setup camera capture. Captured image has datetime timestamp overlay
Main function here is the capture function. All attrs are currently fixed.
The server fetches the saved image, in order to not have read/write conflict we first save captured image as 'assets/foo.jpg' and after capture rename it to 'assets/capture.jpg'.
2021-10-03 18:27:22 +02:00

50 lines
1.6 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()