Initial commit
This commit is contained in:
Executable
+173
@@ -0,0 +1,173 @@
|
||||
#!/usr/bin/env python3
|
||||
from typing import Union, overload
|
||||
from picamera2 import Picamera2
|
||||
from pprint import pprint
|
||||
import json
|
||||
import cv2
|
||||
#import numpy as np
|
||||
#import argparse
|
||||
#import sys
|
||||
#import csv
|
||||
#import matplotlib.pyplot as plt
|
||||
|
||||
items = [
|
||||
"ColourCorrectionMatrix",
|
||||
"Saturation",
|
||||
"Contrast",
|
||||
"Sharpness",
|
||||
"Brightness",
|
||||
"NoiseReductionMode",
|
||||
"AeEnable",
|
||||
"AeMeteringMode",
|
||||
"AeConstraintMode",
|
||||
"AeExposureMode",
|
||||
"AwbEnable",
|
||||
"AwbMode",
|
||||
"ExposureValue",
|
||||
"ExposureTime",
|
||||
"AnalogueGain",
|
||||
"ColourGains",
|
||||
"ScalerCrop",
|
||||
"FrameDurationLimits",
|
||||
"FrameRate"
|
||||
]
|
||||
|
||||
picam2 = Picamera2()
|
||||
pprint(picam2.sensor_modes)
|
||||
settings = {'NoiseReductionMode': 0, 'AeExposureMode': 0, 'ExposureTime': 10000, 'AnalogueGain': 1, 'FrameRate': picam2.sensor_modes[0]['fps']}
|
||||
caps = {"FrameRate": (1, picam2.sensor_modes[0]['fps'], None)}
|
||||
|
||||
def load_settings():
|
||||
_result = None
|
||||
try:
|
||||
with open("settings.json", "r") as fp:
|
||||
_result = json.load(fp)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return _result
|
||||
|
||||
def save_settings(_settings):
|
||||
with open("settings.json", "w") as fp:
|
||||
json.dump(_settings, fp, indent=0)
|
||||
|
||||
def apply_settings(_settings):
|
||||
for item in _settings:
|
||||
c = caps[item]
|
||||
value = _settings[item]
|
||||
if value < c[0] or value > c[1]:
|
||||
raise Exception(f"Invalid Value for {item}")
|
||||
|
||||
picam2.set_controls({item: value})
|
||||
|
||||
def set_value(item: str, value):
|
||||
clamped_value = value
|
||||
c = caps[item]
|
||||
clamped_value = max(c[0], min(c[1], value))
|
||||
picam2.set_controls({item: clamped_value})
|
||||
settings[item] = clamped_value
|
||||
|
||||
return clamped_value
|
||||
|
||||
|
||||
def get_value(item: str):
|
||||
return picam2.camera_controls[item]
|
||||
|
||||
if __name__ == '__main__':
|
||||
for item in items:
|
||||
try:
|
||||
caps[item] = picam2.camera_controls[item]
|
||||
except KeyError:
|
||||
print(f"{item}: Not implemented")
|
||||
|
||||
# Config
|
||||
camera_config = picam2.create_preview_configuration({'size': picam2.sensor_modes[0]['size']})
|
||||
camera_config = picam2.create_preview_configuration({'size': (800, 600)})
|
||||
picam2.configure(camera_config)
|
||||
|
||||
|
||||
settings |= load_settings()
|
||||
shutter = settings['ExposureTime']
|
||||
gain = settings['AnalogueGain']
|
||||
fps = settings['FrameRate']
|
||||
apply_settings(settings)
|
||||
|
||||
pprint(f"Capabilities: {caps}")
|
||||
pprint(f"Settings: {settings}")
|
||||
pprint(f"Camera config: {picam2.camera_configuration()}")
|
||||
|
||||
# Start
|
||||
picam2.start()
|
||||
|
||||
while True:
|
||||
rgb = picam2.capture_array("main")
|
||||
frame = cv2.cvtColor(rgb, cv2.COLOR_RGB2BGR)
|
||||
|
||||
# Process the frame using OpenCV operations
|
||||
cv2.imshow('Frame', frame)
|
||||
|
||||
# Exit the loop on pressing 'q'
|
||||
key = cv2.pollKey() & 0xFF
|
||||
if key == ord('q'):
|
||||
break
|
||||
elif key == ord('w'):
|
||||
shutter -= 1000
|
||||
shutter = set_value('ExposureTime', shutter)
|
||||
print(f"Shutter: {shutter}")
|
||||
elif key == ord('s'):
|
||||
shutter -= 100
|
||||
shutter = set_value('ExposureTime', shutter)
|
||||
print(f"Shutter: {shutter}")
|
||||
elif key == ord('x'):
|
||||
shutter -= 1
|
||||
shutter = set_value('ExposureTime', shutter)
|
||||
print(f"Shutter: {shutter}")
|
||||
elif key == ord('e'):
|
||||
shutter += 1000
|
||||
shutter = set_value('ExposureTime', shutter)
|
||||
print(f"Shutter: {shutter}")
|
||||
elif key == ord('d'):
|
||||
shutter += 100
|
||||
shutter = set_value('ExposureTime', shutter)
|
||||
print(f"Shutter: {shutter}")
|
||||
elif key == ord('c'):
|
||||
shutter += 1
|
||||
shutter = set_value('ExposureTime', shutter)
|
||||
print(f"Shutter: {shutter}")
|
||||
elif key == ord('h'):
|
||||
gain -= 1
|
||||
gain = set_value('AnalogueGain', gain)
|
||||
print(f"Gain: {gain}")
|
||||
elif key == ord('j'):
|
||||
gain += 1
|
||||
gain = set_value('AnalogueGain', gain)
|
||||
print(f"Gain: {gain}")
|
||||
elif key == ord('r'):
|
||||
fps -= 1
|
||||
fps = set_value('FrameRate', fps)
|
||||
print(f"FPS: {fps}")
|
||||
elif key == ord('f'):
|
||||
fps -= 0.1
|
||||
fps = set_value('FrameRate', fps)
|
||||
print(f"FPS: {fps}")
|
||||
elif key == ord('v'):
|
||||
fps -= 0.01
|
||||
fps = set_value('FrameRate', fps)
|
||||
print(f"FPS: {fps}")
|
||||
elif key == ord('t'):
|
||||
fps += 1
|
||||
fps = set_value('FrameRate', fps)
|
||||
print(f"FPS: {fps}")
|
||||
elif key == ord('g'):
|
||||
fps += 0.1
|
||||
fps = set_value('FrameRate', fps)
|
||||
print(f"FPS: {fps}")
|
||||
elif key == ord('b'):
|
||||
fps += 0.01
|
||||
fps = set_value('FrameRate', fps)
|
||||
print(f"FPS: {fps}")
|
||||
|
||||
|
||||
# Release the capture and close windows
|
||||
save_settings(settings)
|
||||
cv2.destroyAllWindows()
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"NoiseReductionMode": 0,
|
||||
"AeExposureMode": 0,
|
||||
"ExposureTime": 19029,
|
||||
"AnalogueGain": 1,
|
||||
"FrameRate": 25.000000000000007
|
||||
}
|
||||
Reference in New Issue
Block a user