Switch to JPG format
This commit is contained in:
parent
0bf7fb9d98
commit
913a4b7eb6
20
config.toml
20
config.toml
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue