Source code for payloadcomputerdroneprojekt.camera.raspi2
import payloadcomputerdroneprojekt.camera.abstract_class as cam
from picamera2 import Picamera2
from libcamera import Transform
[docs]
class RaspiCamera(cam.AbstractCamera):
def __init__(self, config):
super().__init__(config)
if not self._config:
self._config = {
"main": {"format": 'RGB888', "size": (1920, 1080)}}
# old default 640x480
self._config["main"]["size"] = tuple(self._config["main"]["size"])
[docs]
def start_camera(self, config=None):
if self.is_active:
if config:
self._config = config
self._config["main"][
"size"] = tuple(self._config["main"]["size"])
self.stop_camera()
self.start_camera()
return
tuning = Picamera2.load_tuning_file("imx708.json")
self._camera = Picamera2(tuning=tuning)
self.mode = self._camera.sensor_modes[0]
self._camera.configure(
self._camera.create_preview_configuration(
main=self._config["main"],
transform=Transform(hflip=1, vflip=1))
)
self._camera.set_controls(
# old default 50
self._config.get("control", {"ExposureTime": 1500}))
self._camera.start()
self.is_active = True
print("Camera started")
[docs]
def get_current_frame(self):
return self._camera.capture_array()
[docs]
def stop_camera(self):
self._camera.stop()
self.is_active = False
if __name__ == "__main__":
import json
with open("start_scripts/config_px4.json", "r") as f:
j = json.load(f)["camera"]
cam = RaspiCamera(j)
cam.start_camera()
import cv2
i = cam.get_current_frame()
cv2.imwrite("test.jpg", i)