import grovepi import math from sensors.lock import grove_lock from picamera2 import Picamera2, Preview import time picam2 = Picamera2() # Get maximum full-sensor dimensions sensor_format = picam2.sensor_modes[0] max_width = sensor_format['size'][0] max_height = sensor_format['size'][1] camera_config = picam2.create_still_configuration( raw={"size": (1640, 1232)}, main={"size": (1640, 1232)} ) picam2.set_controls({ "AeEnable": False, # Disable Auto Exposure to lock settings "ExposureTime": 60000, # 40 ms shutter time (brightens without grain) "AnalogueGain": 2.0, # Keep gain low to eliminate sensor noise "AwbEnable": False, # Disable Auto White Balance fluctuation "ColourGains": (1.4, 1.2), # Balanced RGB gains for indoor warm LED "Brightness": 0.2, # Slight boost to shadow detail "Contrast": 1.1, # Crisp edges around metallic surfaces "ScalerCrop": [0, 0, max_width, max_height] # Uncrop the image }) picam2.configure(camera_config) picam2.start() time.sleep(2) def preview_camera(): picam2.start_preview(Preview.DRM) def stop_preview_camera(): picam2.stop_preview() def take_picture(): """Takes a picture and saves it to the file system""" picam2.capture_file("test.jpg") return "test.jpg" def get_picture(): """Returns the image bytes as base64 """ file_path = take_picture() with open(file_path, "rb") as f: image_bytes = f.read() return image_bytes