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 = {
|
project_settings_defaults = {
|
||||||
'cam_is_picam': True,
|
'cam_is_picam': True,
|
||||||
'cam_is_showmewebcam': False,
|
'cam_is_showmewebcam': False,
|
||||||
'cam_is_dslr': False,
|
|
||||||
'use_date_for_folder': False,
|
'use_date_for_folder': False,
|
||||||
'file_extension':'png',
|
'file_extension':'png',
|
||||||
'jpg_quality':90,
|
'jpg_quality':90,
|
||||||
|
@ -73,8 +72,6 @@ for location in config_locations:
|
||||||
config_found_msg = _("Found configuration file in {}").format(os.path.expanduser(location))
|
config_found_msg = _("Found configuration file in {}").format(os.path.expanduser(location))
|
||||||
print(config_found_msg)
|
print(config_found_msg)
|
||||||
|
|
||||||
|
|
||||||
# Populate default values according to config and camera type
|
|
||||||
if project_settings['cam_is_showmewebcam']:
|
if project_settings['cam_is_showmewebcam']:
|
||||||
camera_current_settings = {
|
camera_current_settings = {
|
||||||
'auto_exposure': dict(min=0, max=1, default=camera_settings['auto_exposure'], value=camera_settings['auto_exposure']),
|
'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']),
|
'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']),
|
'video_bitrate': dict(min=25000000, max=25000000, default=camera_settings['video_bitrate'], value=camera_settings['video_bitrate']),
|
||||||
}
|
}
|
||||||
elif project_settings['cam_is_picam']:
|
else: # cam is picam
|
||||||
# Todo : add framerate ? see "FrameDurationLimits" and "FrameDuration" in camera_controls FrameDurationLimits': (33333, 120000, None)
|
|
||||||
camera_current_settings = {
|
camera_current_settings = {
|
||||||
'auto_exposure': dict(min=0, max=4, default=camera_settings['auto_exposure'], value=camera_settings['auto_exposure']),
|
'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']),
|
'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']),
|
'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']),
|
'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:
|
else:
|
||||||
print(_("Unknown setting!"))
|
print(_("Unknown setting!"))
|
||||||
break
|
break
|
||||||
# TODO: Refactor to call method according to cam type
|
|
||||||
if project_settings['cam_is_showmewebcam']:
|
if project_settings['cam_is_showmewebcam']:
|
||||||
serialutils.send_serial_cmd(serialutils.find_cam_port(), cmd.format(*args))
|
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:
|
else:
|
||||||
|
# TODO: v4l2 support
|
||||||
print(_("Camera function not supported."))
|
print(_("Camera function not supported."))
|
||||||
return cam_settings
|
return cam_settings
|
||||||
|
|
||||||
|
@ -476,7 +469,7 @@ def main(args):
|
||||||
|
|
||||||
cam.configure(picam_config)
|
cam.configure(picam_config)
|
||||||
# Autofocus, get lens position and switch to manual mode
|
# 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.set_controls({'AfMode':1})
|
||||||
cam.start()
|
cam.start()
|
||||||
cam.autofocus_cycle()
|
cam.autofocus_cycle()
|
||||||
|
@ -487,7 +480,14 @@ def main(args):
|
||||||
'AwbMode': camera_current_settings['white_balance_auto_preset']['default'],
|
'AwbMode': camera_current_settings['white_balance_auto_preset']['default'],
|
||||||
'AeEnable': 1,
|
'AeEnable': 1,
|
||||||
'AeExposureMode': camera_current_settings['auto_exposure']['default'],
|
'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()
|
# ~ cam.stop()
|
||||||
|
|
||||||
|
@ -588,9 +588,9 @@ def main(args):
|
||||||
if project_settings['cam_is_picam']:
|
if project_settings['cam_is_picam']:
|
||||||
print(camera_current_settings['auto_exposure']['value'])
|
print(camera_current_settings['auto_exposure']['value'])
|
||||||
if camera_current_settings['auto_exposure']['value'] == 4:
|
if camera_current_settings['auto_exposure']['value'] == 4:
|
||||||
cam.set_controls({'AeEnable': 0})
|
|
||||||
else:
|
|
||||||
cam.set_controls({'AeEnable': 1})
|
cam.set_controls({'AeEnable': 1})
|
||||||
|
else:
|
||||||
|
cam.set_controls({'AeEnable': 0})
|
||||||
cam.set_controls({"AeExposureMode": camera_current_settings['auto_exposure']['value']})
|
cam.set_controls({"AeExposureMode": camera_current_settings['auto_exposure']['value']})
|
||||||
# Key f / 3 - flip image
|
# Key f / 3 - flip image
|
||||||
elif (k%256 == 102) or (k%256 == 51) or (k%256 == 179):
|
elif (k%256 == 102) or (k%256 == 51) or (k%256 == 179):
|
||||||
|
@ -662,6 +662,32 @@ def main(args):
|
||||||
# Remove frame
|
# Remove frame
|
||||||
print(_("Remove frame"))
|
print(_("Remove frame"))
|
||||||
img_list, index, frame = remove_frame(img_list, index)
|
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
|
# Take pic
|
||||||
# SPACE or numpad 0 pressed
|
# SPACE or numpad 0 pressed
|
||||||
elif (k%256 == 32) or (k%256 == 48) or (k%256 == 176):
|
elif (k%256 == 32) or (k%256 == 48) or (k%256 == 176):
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
## Branche libcamera
|
## 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).**
|
**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/>
|
<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