Add anti-flicker control
This commit is contained in:
parent
6219e18b96
commit
0d8434136a
|
@ -32,7 +32,6 @@ _ = gettext.translation('template', localedir='locales', languages=[LOCALE]).get
|
|||
project_settings_defaults = {
|
||||
'cam_is_picam': True,
|
||||
'cam_is_showmewebcam': False,
|
||||
'cam_is_dslr': False,
|
||||
'use_date_for_folder': False,
|
||||
'file_extension':'png',
|
||||
'jpg_quality':90,
|
||||
|
@ -73,8 +72,6 @@ for location in config_locations:
|
|||
config_found_msg = _("Found configuration file in {}").format(os.path.expanduser(location))
|
||||
print(config_found_msg)
|
||||
|
||||
|
||||
# Populate default values according to config and camera type
|
||||
if project_settings['cam_is_showmewebcam']:
|
||||
camera_current_settings = {
|
||||
'auto_exposure': dict(min=0, max=1, default=camera_settings['auto_exposure'], value=camera_settings['auto_exposure']),
|
||||
|
@ -83,13 +80,13 @@ if project_settings['cam_is_showmewebcam']:
|
|||
'vertical_flip': dict(min=0, max=1, default=camera_settings['vflip'], value=camera_settings['vflip']),
|
||||
'video_bitrate': dict(min=25000000, max=25000000, default=camera_settings['video_bitrate'], value=camera_settings['video_bitrate']),
|
||||
}
|
||||
elif project_settings['cam_is_picam']:
|
||||
# Todo : add framerate ? see "FrameDurationLimits" and "FrameDuration" in camera_controls FrameDurationLimits': (33333, 120000, None)
|
||||
else: # cam is picam
|
||||
camera_current_settings = {
|
||||
'auto_exposure': dict(min=0, max=4, default=camera_settings['auto_exposure'], value=camera_settings['auto_exposure']),
|
||||
'white_balance_auto_preset': dict(min=0, max=7, default=camera_settings['white_balance_auto_preset'], value=camera_settings['white_balance_auto_preset']),
|
||||
'horizontal_flip': dict(min=0, max=1, default=camera_settings['hflip'], value=camera_settings['hflip']),
|
||||
'vertical_flip': dict(min=0, max=1, default=camera_settings['vflip'], value=camera_settings['vflip']),
|
||||
'anti_flicker': dict(min=0, max=2, default=1, value=1),
|
||||
}
|
||||
|
||||
|
||||
|
@ -117,14 +114,10 @@ def apply_cam_setting(cam_settings:dict, to_set:list=None):
|
|||
else:
|
||||
print(_("Unknown setting!"))
|
||||
break
|
||||
# TODO: Refactor to call method according to cam type
|
||||
if project_settings['cam_is_showmewebcam']:
|
||||
serialutils.send_serial_cmd(serialutils.find_cam_port(), cmd.format(*args))
|
||||
elif project_settings['cam_is_picam']:
|
||||
pass
|
||||
elif project_settings['cam_is_dslr']:
|
||||
pass
|
||||
else:
|
||||
# TODO: v4l2 support
|
||||
print(_("Camera function not supported."))
|
||||
return cam_settings
|
||||
|
||||
|
@ -476,7 +469,7 @@ def main(args):
|
|||
|
||||
cam.configure(picam_config)
|
||||
# Autofocus, get lens position and switch to manual mode
|
||||
# Set Af mode to Manual (0). Default is Continuous (2), Auto is 1
|
||||
# Set Af mode to Auto then Manual (0). Default is Continuous (2), Auto is 1
|
||||
cam.set_controls({'AfMode':1})
|
||||
cam.start()
|
||||
cam.autofocus_cycle()
|
||||
|
@ -487,7 +480,14 @@ def main(args):
|
|||
'AwbMode': camera_current_settings['white_balance_auto_preset']['default'],
|
||||
'AeEnable': 1,
|
||||
'AeExposureMode': camera_current_settings['auto_exposure']['default'],
|
||||
# ~ 'FrameDurationLimits':(40000,120000,None)
|
||||
# Enable flicker avoidance due to mains
|
||||
'AeFlickerMode': 1,
|
||||
# Mains 50hz = 10000, 60hz = 8333
|
||||
# ~ 'AeFlickerPeriod': 8333,
|
||||
'AeFlickerPeriod': 10000,
|
||||
# Format is (min, max, default) in ms
|
||||
# here: (60fps, 12fps, None)
|
||||
# ~ 'FrameDurationLimits':(16666,83333,None)
|
||||
})
|
||||
# ~ cam.stop()
|
||||
|
||||
|
@ -588,9 +588,9 @@ def main(args):
|
|||
if project_settings['cam_is_picam']:
|
||||
print(camera_current_settings['auto_exposure']['value'])
|
||||
if camera_current_settings['auto_exposure']['value'] == 4:
|
||||
cam.set_controls({'AeEnable': 0})
|
||||
else:
|
||||
cam.set_controls({'AeEnable': 1})
|
||||
else:
|
||||
cam.set_controls({'AeEnable': 0})
|
||||
cam.set_controls({"AeExposureMode": camera_current_settings['auto_exposure']['value']})
|
||||
# Key f / 3 - flip image
|
||||
elif (k%256 == 102) or (k%256 == 51) or (k%256 == 179):
|
||||
|
@ -662,6 +662,32 @@ def main(args):
|
|||
# Remove frame
|
||||
print(_("Remove frame"))
|
||||
img_list, index, frame = remove_frame(img_list, index)
|
||||
# TODO: replace keys with rotary encoder
|
||||
# Focus +/- with a,z
|
||||
elif (k%256 == 97) and project_settings['cam_is_picam']:
|
||||
cam_lenspos += 0.2
|
||||
# Set AfMode to Manual
|
||||
cam.set_controls({'AfMode': 0, 'LensPosition': cam_lenspos})
|
||||
print(_("+Lens pos: {}".format(cam_lenspos)))
|
||||
elif (k%256 == 122) and project_settings['cam_is_picam']:
|
||||
cam_lenspos -= 0.2
|
||||
# Set AfMode to Manual
|
||||
cam.set_controls({'AfMode': 0, 'LensPosition': cam_lenspos})
|
||||
print(_("-Lens pos: {}".format(cam_lenspos)))
|
||||
# Set anti-flicker mode with q
|
||||
elif (k%256 == 113) and project_settings['cam_is_picam']:
|
||||
# Set AfMode to Manual
|
||||
camera_current_settings = apply_cam_setting(camera_current_settings, ['anti_flicker'])
|
||||
if camera_current_settings['anti_flicker']['value'] == 0:
|
||||
cam.set_controls({'AeFlickerMode': 0})
|
||||
elif camera_current_settings['anti_flicker']['value'] == 1:
|
||||
cam.set_controls({'AeFlickerMode': 1, 'AeFlickerPeriod':8333})
|
||||
else:
|
||||
cam.set_controls({'AeFlickerMode': 1, 'AeFlickerPeriod':10000})
|
||||
print(camera_current_settings['anti_flicker']['value'])
|
||||
# ~ elif (k%256 == 115) and project_settings['cam_is_picam']:
|
||||
# ~ # Set AfMode to Manual
|
||||
# ~ cam.set_controls({'AeFlickerMode': 0, 'AeFlickerPeriod': 8333})
|
||||
# Take pic
|
||||
# SPACE or numpad 0 pressed
|
||||
elif (k%256 == 32) or (k%256 == 48) or (k%256 == 176):
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
## Branche libcamera
|
||||
|
||||
**Ceci est la branche qui restaure la possibilité d'utiliser des périphériques compatibles rpi-libcamera (Modules Raspicam v1,v2 et v3).**
|
||||
**En utiulisant la [branche correspondante pour la télécommande picote](/arthus/picote/src/branch/picamera), vous pouvez régler la mise au point du module caméra avec un [codeur rotatif](https://fr.wikipedia.org/wiki/Codeur_rotatif).**
|
||||
**En utilisant la [branche correspondante pour la télécommande picote](/arthus/picote/src/branch/picamera), vous pouvez régler la mise au point du module caméra avec un [codeur rotatif](https://fr.wikipedia.org/wiki/Codeur_rotatif).**
|
||||
|
||||
<a style="max-height: 300px;display: inline-block;" href="./stopi2/raw/branch/master/stopi_station.jpg"><img src="./stopi_station.jpg"/><a/>
|
||||
|
||||
|
|
Loading…
Reference in New Issue