Switch to JPG format

This commit is contained in:
ABelliqueux 2025-01-04 11:51:16 +01:00
parent 0bf7fb9d98
commit 913a4b7eb6
3 changed files with 34 additions and 15 deletions

View File

@ -1,21 +1,23 @@
[DEFAULT] [DEFAULT]
cam_is_showmewebcam = true cam_is_picam = true
cam_is_showmewebcam = false
use_date_for_folder = false use_date_for_folder = false
file_extension = 'png' file_extension = 'jpg'
jpg_quality = 88
projects_folder = '' projects_folder = ''
onion_skin_onstartup = true onion_skin_onstartup = true
onionskin_alpha_default = 0.5 onionskin_alpha_default = 0.5
fullscreen_bool = true fullscreen_bool = true
screen_w = 1920 screen_w = 1440
screen_h = 1080 screen_h = 900
framerate = 16 framerate = 16
ffmpeg_path = '/usr/bin/ffmpeg' ffmpeg_path = '/usr/bin/ffmpeg'
export_options = 'scale=1920:-1,crop=1920:1080' export_options = 'scale=1920:-1,crop=1920:1080'
[CAMERA] [CAMERA]
cam_w = 1600 cam_w = 1920
cam_h = 900 cam_h = 1080
vflip = 1 vflip = 0
hflip = 1 hflip = 0
auto_exposure = 1 auto_exposure = 1
white_balance_auto_preset = 2 white_balance_auto_preset = 1
video_bitrate=25000000 video_bitrate=25000000

View File

@ -32,8 +32,10 @@ _ = 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,
'projects_folder': '', 'projects_folder': '',
'onion_skin_onstartup' : False, 'onion_skin_onstartup' : False,
'onionskin_alpha_default' : 0.4, 'onionskin_alpha_default' : 0.4,
@ -71,6 +73,8 @@ 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']),
@ -79,7 +83,8 @@ 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']),
} }
else: elif project_settings['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']),
@ -112,10 +117,14 @@ 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
@ -477,7 +486,8 @@ def main(args):
'AwbEnable': 1, 'AwbEnable': 1,
'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)
}) })
# ~ cam.stop() # ~ cam.stop()
@ -658,7 +668,10 @@ def main(args):
print(_("Capture frame")) print(_("Capture frame"))
img_name = return_next_frame_number(get_last_frame(savepath)) img_name = return_next_frame_number(get_last_frame(savepath))
img_path = os.path.join(savepath, img_name) img_path = os.path.join(savepath, img_name)
cv2.imwrite(img_path, og_frame) if project_settings['file_extension'] == 'jpg':
cv2.imwrite(img_path, og_frame, [int(cv2.IMWRITE_JPEG_QUALITY), project_settings['jpg_quality']])
else:
cv2.imwrite(img_path, og_frame)
print(_("File {} written.").format(img_path)) print(_("File {} written.").format(img_path))
if len(img_list) and (img_list[index] == '{letter}.-001.{ext}'.format(letter=project_letter, ext=project_settings['file_extension'])): if len(img_list) and (img_list[index] == '{letter}.-001.{ext}'.format(letter=project_letter, ext=project_settings['file_extension'])):
img_list[index] = img_name img_list[index] = img_name

View File

@ -1,10 +1,14 @@
# Stopi2 # Stopi2
## 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).**
<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/>
Seconde version du script python [stopi](https://git.arthus.net/arthus/stopi) destiné à être utilisé avec une télécommande [picote](/arthus/picote). Seconde version du script python [stopi](https://git.arthus.net/arthus/stopi) destiné à être utilisé avec une télécommande [picote](/arthus/picote).
Cette version utilise opencv et ne fonctionne pour le moment qu'avec une webcam. Cette version utilise opencv et libcamera.Elle fonctionne avec une webcam ou un module vidéo Picamera (v1,v2 ou v3).
Encore une fois, l'objectif est de créer un logiciel simple et minimaliste dans son interface, dont les caractéristiques sont les suivantes : Encore une fois, l'objectif est de créer un logiciel simple et minimaliste dans son interface, dont les caractéristiques sont les suivantes :
* Affichage des images en plein écran sans interface : toutes les fonctions utilisent quelques touches du clavier. * Affichage des images en plein écran sans interface : toutes les fonctions utilisent quelques touches du clavier.
@ -17,7 +21,7 @@ Encore une fois, l'objectif est de créer un logiciel simple et minimaliste dans
## Banc de test ## Banc de test
Ce script a été testé avec une webcam compatible V4L2, et plus précisement une ["showmewebcam"](https://github.com/showmewebcam/showmewebcam) à base de rpi 0 et d'un module caméra v2 (8Mp), et un ordinateur classique sous [Debian](https://debian.org). Ce script a été testé avec une webcam compatible V4L2, une ["showmewebcam"](https://github.com/showmewebcam/showmewebcam) à base de rpi 0 et d'un module caméra v2 (8Mp), et un ordinateur classique sous [Debian](https://debian.org) et un [RPI 4B](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/) munis d'un module [Picamera V3](https://www.raspberrypi.com/products/camera-module-3/).
Les contributions et rapports de bugs sont les bienvenus ! Les contributions et rapports de bugs sont les bienvenus !
## Installation ## Installation