Compare commits

...

27 Commits

Author SHA1 Message Date
ABelliqueux 058f7a4b51 Ajout précisions pyvenv 2025-04-09 20:46:48 +02:00
ABelliqueux e12fe81ed3 Fix flip_image() method 2025-03-23 13:50:51 +01:00
ABelliqueux b21a8d669c Copy original frame before resizing 2025-03-21 14:07:41 +01:00
ABelliqueux cbbc945821 Insert new frame at current index instead of last position 2025-03-21 10:13:32 +01:00
ABelliqueux 04dcaadfba Fix liveview/onionskin conflict, wrong frame being saved 2025-03-21 06:53:09 +01:00
ABelliqueux ae7e582d58 Use inc arg in apply_setting(), fix saved picture file case 2025-03-07 11:08:24 +01:00
ABelliqueux 9d5a49da21 Add gphoto error handling, fix crash on fast triggering 2025-03-06 15:12:23 +01:00
ABelliqueux 0351c19eba Fix showmewebcam class 2025-03-05 17:32:25 +01:00
ABelliqueux 85d31def6f Add exposure control for picam 2025-03-01 19:35:25 +01:00
ABelliqueux df0193a689 Fix flip_image for picam 2025-02-24 14:44:06 +01:00
ABelliqueux 5fef8eed03 Fix dslr settings dict 2025-02-17 14:25:12 +01:00
ABelliqueux 52d058047a Fix issue #3 2025-02-15 14:56:14 +01:00
ABelliqueux 77c17f11ec Add wiki link 2025-02-15 14:52:22 +01:00
ABelliqueux 92059f7ffc Move some doc to wiki, update readme 2025-02-15 14:49:26 +01:00
ABelliqueux 3b8a3cd197 Fix close() recursion 2025-02-15 10:46:23 +01:00
ABelliqueux 4cead89259 Fix picam support 2025-02-15 10:41:26 +01:00
ABelliqueux e03d5e7872 Fix picam support 2025-02-15 10:08:13 +01:00
ABelliqueux d254b6307b DSLR, webcam ok. 2025-02-12 17:06:39 +01:00
ABelliqueux ab586d29ca Use Classes for cam type 2025-02-10 17:54:28 +01:00
ABelliqueux 8bc52eae04 DSLR capture, initialize working 2025-02-02 15:45:05 +01:00
ABelliqueux c302f17087 Add missing settings functions back 2025-02-01 11:15:31 +01:00
ABelliqueux fb842cdb69 gphoto frame capture added back 2025-02-01 11:03:09 +01:00
ABelliqueux d8cc388279 Switch to cam_type config 2025-01-31 16:47:12 +01:00
ABelliqueux 0d8434136a Add anti-flicker control 2025-01-12 10:29:04 +01:00
ABelliqueux 6219e18b96 Add focus control for picamera modules 2025-01-11 14:54:17 +01:00
ABelliqueux 913a4b7eb6 Switch to JPG format 2025-01-04 11:51:16 +01:00
ABelliqueux 0bf7fb9d98 Add pi camera v3 support 2024-12-15 12:28:40 +01:00
5 changed files with 869 additions and 252 deletions

View File

@ -1,7 +1,10 @@
[DEFAULT]
cam_is_showmewebcam = true
# Camera type - can be : showmewebcam, picam, webcam, dslr
cam_type = 'webcam'
apply_settings_on_startup = true
use_date_for_folder = false
file_extension = 'png'
file_extension = 'jpg'
jpg_quality = 88
projects_folder = ''
onion_skin_onstartup = true
onionskin_alpha_default = 0.5
@ -10,12 +13,13 @@ screen_w = 1920
screen_h = 1080
framerate = 16
ffmpeg_path = '/usr/bin/ffmpeg'
v4l2-ctl_path = '/usr/bin/v4l2-ctl'
export_options = 'scale=1920:-1,crop=1920:1080'
[CAMERA]
cam_w = 1600
cam_h = 900
vflip = 1
hflip = 1
cam_w = 1280
cam_h = 960
vflip = 0
hflip = 0
auto_exposure = 1
white_balance_auto_preset = 2
white_balance_auto_preset = 1
video_bitrate=25000000

File diff suppressed because it is too large Load Diff

161
readme.md
View File

@ -1,130 +1,113 @@
# Stopi2
<a style="max-height: 300px;display: inline-block;" href="./stopi2/raw/branch/master/stopi_station.jpg"><img src="./stopi_station.jpg"/><a/>
## Branche gphoto / réflexe numérique
Seconde version du script python [stopi](https://git.arthus.net/arthus/stopi) destiné à être utilisé avec une télécommande [picote](/arthus/picote).
**Ceci est la branche qui restaure la possibilité d'utiliser des périphériques compatibles [gphoto](http://gphoto.org/doc/remote).**
<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/src/branch/picamera).
Cette version utilise opencv, libcamera et gphoto.
Elle fonctionne avec une webcam, un module vidéo Picamera (v1,v2 ou v3) ou un réflexe numérique.
Cette version utilise opencv et ne fonctionne pour le moment qu'avec une webcam.
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.
* [Pelure d'oignon](https://fr.wikipedia.org/wiki/Pelure_d'oignon#Sciences_et_techniques) entre la dernière image et le flux vidéo.
* Un seul fichier de configuration permet de régler les options (résolution, images/secondes, mirroir vertical/horizontal, )
* Un seul [fichier de configuration](/arthus/stopi2/wiki/configuration) permet de régler les options (résolution, images/secondes, mirroir vertical/horizontal, )
* Auto configuration de la camera au démarrage (exposition et balance des blancs)
* Pilotage de certains réglages de la caméra depuis la télécommande/clavier (balance des blancs, rotation de l'image, mise au point (picam V3), exposition...)
* Prévisualisation de l'animation
* Exportation vidéo avec [ffmpeg](https://ffmpeg.org/)
* Interface localisée (anglais et français disponible pour le moment.)
* Textes localisés (anglais et français disponible pour le moment.)
## 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).
Les contributions et rapports de bugs sont les bienvenus !
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), ainsi qu'avec 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/).
Voici un récapitulatif des tests effectués :
| Machine \ Type de Caméra | Webcam | [Showmewebcam](https://github.com/showmewebcam/showmewebcam) | RPI Caméra module V1 (5MP) | [RPI Caméra module V3](https://www.raspberrypi.com/products/camera-module-3/) (12MP) | [Réflexe numérique](http://gphoto.org/doc/remote) (Nikon D3000/D40x)|
| --- | --- | --- | --- | --- | --- |
| Raspberry Pi 3B+ (Debian 12) | &check; | &check; | &check; | &check; | &check; |
| Raspberry Pi 4B (Debian 12) | &check; | &check; | &check; | &check; | &check; |
| PC Linux (Debian, Manjaro) | &check; | &check; | N/A | N/A | &check; |
## Documentation
La documentation est disponible [dans le wiki](/arthus/stopi2/wiki/).
## Feuille de route
Des fonctions supplémentaires sont prévues :
* Mise à jour de la traduction FR
* Réflexe numérique: utilisation du liveview de l'appareil (si je trouve un modèle compatible pour le développement)
* Mécanisme de mise à jour
## Contributions
Les contributions et rapports de bugs sont les bienvenus !
## Installation
Dans un terminal :
Dans un terminal :
0. (Utilisateurs Windows) Activer le [sous système Linux **version 2** (WSL2)](https://learn.microsoft.com/fr-fr/windows/wsl/install) et installer Debian.
1. Installer les dépendances suivantes :
1. Installer les dépendances suivantes :
```
# Avec une distribution basée sur Debian (Ubuntu, Mint...)
sudo apt install --no-install-recommends --no-install-suggests git ffmpeg python3-tk python3-pip python3-venv libtiff5-dev libtopenjp2 libopenjp2-7-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev libharfbuzz-dev libfribidi-dev libxcb1-dev python3-tk python3-dev
```
- (Optionnel) Pour installer un environnement graphique minimal sur une [installation console](https://debian-facile.org/doc:install:installation-minimale) : `sudo apt install --no-install-recommends --no-install-suggests openbox xserver-xorg xinit pcmanfm gmrun lxterminal hsetroot unclutter plymouth plymouth-themes`
sudo apt install --no-install-recommends --no-install-suggests git ffmpeg python3-pip python3-venv libtiff5-dev libopenjp2-7 libopenjp2-7-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev libharfbuzz-dev libfribidi-dev libxcb1-dev python3-tk python3-dev libopenblas-dev libatlas-base-dev libhdf5-dev libhdf5-serial-dev libatlas-base-dev libjasper-dev v4l-utils
```
- (Optionnel) Pour installer un environnement graphique minimal sur une [installation console](https://debian-facile.org/doc:install:installation-minimale) : `sudo apt install --no-install-recommends --no-install-suggests openbox xserver-xorg xinit pcmanfm gmrun lxterminal hsetroot unclutter plymouth plymouth-themes`
2. Cloner le dépôt dans le dossier de votre choix : `git clone https://git.arthus.net/arthus/stopi2.git`
3. Aller dans répertoire du projet : `cd stopi2`
4. Créer un environnement virtuel (venv) Python : `python -m venv ./`
- (Optionnel) Dans le cas de l'utilisation d'une "raspicam", il faudra ajouter le paramètre `--system-site-packages` pour avoir accès au module picamera2, et installer la librairie correspondante `python3-picamera2`.
4. Créer un environnement virtuel (venv) Python : `python -m venv ./`
- Mise à jour de l'environnement pypi: '`MAKEFLAGS="-j$(nproc)" pip install -vvv --upgrade pip setuptools wheel`
- (Optionnel) Dans le cas de l'utilisation d'une "raspicam", il faudra ajouter le paramètre `--system-site-packages` à la commande de création de l'environnement virtuel pour avoir accès au module picamera2 du système, et installer la librairie correspondante `python3-picamera2`.
5. Activer l'environnement virtuel avec `source bin/activate`
6. Installer les dépendances python (~150Mo) : `pip install -r requirements.txt`
6. Installer les dépendances python (~150Mo) : `MAKEFLAGS="-j$(nproc)" pip install -r requirements.txt`
7. Activer l'éxécution du script : `chmod +x stopi2.sh`
8. Lancer le script : `./stopi2.sh`
[Voir le wiki pour plus de détails](/arthus/stopi2/wiki/python_environnement)
## Fonction par touches
L'idéal est d'utiliser une télécommande [picote](/arthus/picote) mais le logiciel est aussi pilotable via un clavier/clavier numérique.
| Fonction | Boutton | Clavier |
| --- | --- | --- |
| Capturer une image | 🟢 | touche Espace ou 0 sur le clavier numérique |
| Supprimer une image | 🔴 | touche Suppr, touche Backspace ou touche - sur le clavier numérique |
| Lecture de l'animation | Alt + 🟢 | touches Entrée |
| Exporter l'animation | Alt + 🔴 | touche E ou * sur le clavier numérique |
| Image suivante | 🔵 | touche flèche droite ou 6 sur le clavier numérique |
| Image précédente | 🟡 | touche flèche gauche ou 4 sur le clavier numérique |
| Aller à la dernière image | Alt + 🔵| touche flèche bas ou 2 sur le clavier numérique |
| Aller à la première image | Alt + 🟡 | touche flèche haut ou 8 sur le clavier numérique |
| Activer/Désactiver onionskin | ⚫ | touche O ou / sur le clavier numérique |
| Quitter le logiciel | n/a | touche Échap, Alt-F4 ou Ctrl-C |
| Capturer une image | 🟢 | touche Espace ou 0 sur le clavier numérique |
| Supprimer une image | 🔴 | touche Suppr, touche Backspace ou touche - sur le clavier numérique |
| Lecture de l'animation | Alt + 🟢 | touches Entrée |
| Exporter l'animation | Alt + 🔴 | touche E ou * sur le clavier numérique |
| Image suivante | 🔵 | touche flèche droite ou 6 sur le clavier numérique |
| Image précédente | 🟡 | touche flèche gauche ou 4 sur le clavier numérique |
| Aller à la dernière image | Alt + 🔵| touche flèche bas ou 2 sur le clavier numérique |
| Aller à la première image | Alt + 🟡 | touche flèche haut ou 8 sur le clavier numérique |
| Activer/Désactiver onionskin | ⚫ | touche O ou / sur le clavier numérique |
| Quitter le logiciel | n/a | touche Échap, Alt-F4 ou Ctrl-C |
| **Réglages de la caméra (compatible showmewebcam seulement)** | | |
| Réinitialiser la caméra | Alt + ⚫ | touche R ou 9 sur le clavier numérique |
| Changer le mode de balance des blancs | ① | touche W ou 7 sur le clavier numérique |
| Changer le mode d'exposition | Alt + ① | touche X ou 1 sur le clavier numérique |
| Afficher seulement le flux vidéo | ② | touche L ou 3 sur le clavier numérique |
| Rotation de 180° de la capture vidéo | Alt + ② | touche F ou 5 sur le clavier numérique |
| Réinitialiser la caméra | Alt + ⚫ | touche R ou 9 sur le clavier numérique |
| Changer le mode de balance des blancs | ① | touche W ou 7 sur le clavier numérique |
| Changer le mode d'exposition | Alt + ① | touche X ou 1 sur le clavier numérique |
| Afficher seulement le flux vidéo | ② | touche L ou 3 sur le clavier numérique |
| Rotation de 180° de la capture vidéo | Alt + ② | touche F ou 5 sur le clavier numérique |
Si vous utilisez une télécommande [picote avec un encodeur rotatif (ou potar)](/arthus/picote/src/branch/picamera), les fonctions suivantes sont également disponibles :
| Fonction | Boutton | Clavier |
| --- | --- | --- |
| Mise au point - | ↶ | touche A |
| Mise au point + | ↷ | touche Z |
| Mode anti-flicker | Alt+↶ | touche Q |
## Installation Kiosque
Pour créer un kiosque d'animation à partir d'une installation minimale de Debian :
1. Installer Debian pour un environnement console avec environnement graphique minimal, par exemple:
```sudo apt install --no-install-recommends --no-install-suggests openbox xserver-xorg xinit hsetroot unclutter```
2. Suivre les [étapes d'installation](#installation) ci-dessus.
3. Activer le login automatique de votre utilisateur au démarrage :
```
sudo systemctl edit getty@tty1.service
# Ajout du contenu suivant dans le fichier créé:
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -f -- \\u' --skip-login --nonewline --noissue --noclear --autologin arthus %I $TERM
```
4. Ajouter ce contenu à '~/.bash_login' :
```
if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" = 1 ]; then
exec startx &>/dev/null
fi
```
5. Ajouter ce contenu à '~/.xinitrc' :
```
#!/bin/sh
# /etc/X11/xinit/xinitrc
#
# global xinitrc file, used by all X sessions started by xinit (startx)
# invoke global X session script
. /etc/X11/Xsession
exec openbox-session
```
6. Ajouter ce contenu à '~/.config/openbox/autostart.sh' :
```
#!/bin/env bash
# Change X keyboard mapping
setxkbmap fr
# Set background color
hsetroot -solid "#8393CC"
# Hide mouse after 0.2 seconds
unclutter -idle 0.2 &
# Start script
/home/$USER/stopi2.sh &
```
Au redémarrage, la session graphique devrait démarrer automatiquement.
[Voir le wiki](/arthus/stopi2/wiki/kiosk)
# Démarrage 'silencieux'
Pour un démarrage sans aucun texte avant la session graphique, ajouter les lignes suivantes à `/etc/default/grub` :
```
GRUB_HIDDEN_TIMEOUT=5
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_GFXMODE=1920x1080
```
et modifier la ligne :
`GRUB_CMDLINE_LINUX_DEFAULT="quiet`
en :
`GRUB_CMDLINE_LINUX_DEFAULT="quiet splash loglevel=3`
Puis configurer plymouth : `sudo plymouth-set-default-theme`
Appliquer les modifs avec `sudo update-grub`.
[Voir le wiki](/arthus/stopi2/wiki/demarrage_silencieux)

View File

@ -1,5 +1,6 @@
Send2Trash
opencv-python
numpy
pyserial
pillow
opencv-python
gphoto2

View File

@ -9,10 +9,21 @@ def find_cam_port():
return None
def send_serial_cmd(cam_port, cmd:str, clear=True):
if cam_port is None:
print("No com. port found.")
return False
con = serial.Serial(cam_port, baudrate=115200)
if clear:
append = b'\rclear\r'
else:
append = b'\r'
con.write(str.encode(cmd) + append)
con.close()
con.close()
def main():
cmd = "/usr/bin/v4l2-ctl --all"
send_serial_cmd(find_cam_port(), cmd)
if __name__ == '__main__':
import sys
sys.exit(main())