Nous avons vu dans les précédents articles de quel matériel nous avions besoin pour créer un photobooth avec un Raspberry, puis nous avons développé le programme pour afficher le retour vidéo, capturer les images et intégrer un flash et un bouton. Dans cet article, nous allons voir comment créer le service qui permettra de démarrer notre programme automatiquement à l’allumage du Raspberry et comment créer un script pour installer automatiquement notre programme.
Pour que le photobooth démarre automatiquement avec le Raspberry Pi, nous allons créer une unité systemd. Ce fichier décrit le programme à lancer, l’utilisateur qui l’exécutera et le comportement à adopter en cas d’erreur.
[Unit] Description=PhotoBooth After=graphical.target Wants=graphical.target
La section Unit permet de décrire le service, de vérifier des prérequis. nous donnons le nom du service avec Description. After indique que le photobooth doit être lancé après le démarrage de l’environnement graphique. Wants=graphical.target demande à systemd de démarrer également l’environnement graphique qui est nécessaire à notre programme.
[Service] Type=simple User=YOUR_USER Group=YOUR_USER WorkingDirectory=/home/YOUR_USER/PhotoBooth Environment=WAYLAND_DISPLAY=wayland-0 Environment=XDG_RUNTIME_DIR=/run/user/YOUR_UID Environment=PYTHONUNBUFFERED=1 ExecStart=/usr/bin/python3 /home/YOUR_USER/PhotoBooth/main.py
La section [Service] décrit l’exécution du programme. Avec Type=simple, systemd considère le service comme démarré dès que la commande est lancée. User et Group indiquent le compte système à utiliser. WorkingDirectory définit le dossier depuis lequel le programme s’exécute.
Les lignes Environment ajoutent des variables nécessaires à l’environnement graphique Wayland. PYTHONUNBUFFERED=1 permet notamment d’envoyer les sorties de Python sans attendre qu’elles soient mises en mémoire tampon. Enfin, ExecStart contient la commande qui lance le programme.
Restart=on-failure RestartSec=5 StandardOutput=journal StandardError=journal
Avec Restart=on-failure, systemd relance le programme s’il se termine avec une erreur. RestartSec=5 impose une pause de cinq secondes avant cette relance.
Les sorties standard et les erreurs sont envoyées dans le journal système ; on peut les consulter en tapant dans le terminal: journalctl -u photobooth -f.
[Install] WantedBy=graphical.target
La section [Install] indique que le service doit être associé à graphical.target lorsqu’on l’active.
Maintenant que notre fichier service est prêt, passons à l’installation de notre programme !
Le script install.sh automatise l’installation du photobooth sur le Raspberry Pi. Il installe les dépendances, copie les fichiers du programme, configure les permissions puis active le service systemd.
#!/bin/bash set -e
La première ligne indique que le script doit être exécuté avec Bash. set -e lui demande de s’arrêter si une commande échoue, afin de ne pas poursuivre une installation incomplète.
CURRENT_USER=$(logname 2>/dev/null || whoami) CURRENT_UID=$(id -u "$CURRENT_USER") INSTALL_DIR="/home/$CURRENT_USER/PhotoBooth" SERVICE_NAME="photobooth"
Nous définissons ensuite plusieurs variables : le nom de l’utilisateur courant (l. 4), son identifiant numérique (l. 5), le chemin du dossier d’installation (l. 6) et le nom du service (l. 7). Le script utilise ces valeurs pour adapter les chemins et la configuration au Raspberry Pi utilisé.
sudo apt update
sudo apt install -y \
python3-opencv \
python3-pygame \
python3-pil \
python3-numpy
sudo apt install -y \
python3-gpiozero \
python3-lgpio \
python3-picamera2 La première étape de notre script est d’installer toutes les dépendances pour notre programme. Nous commençons par mettre à jour la liste des paquets disponibles (l. 13), puis nous installons les bibliothèques nécessaires. OpenCV, Pygame, Pillow et NumPy servent au traitement et à l’affichage des images. Les paquets gpiozero, lgpio et picamera2 permettent de gérer les entrées GPIO et la caméra.
sudo mkdir -p "$INSTALL_DIR"
if [ "$(realpath .)" != "$(realpath "$INSTALL_DIR")" ]; then
sudo cp -r ./* "$INSTALL_DIR/"
else
echo " Déjà dans $INSTALL_DIR, copie ignorée."
fi
sudo chown -R "$CURRENT_USER:$CURRENT_USER" "$INSTALL_DIR" La deuxième étape crée le dossier /home/pi/PhotoBooth (l. 28), puis y copie les fichiers du programme (l. 30). Si le script est déjà exécuté depuis ce dossier, la copie est ignorée. Enfin, les fichiers sont attribués à l’utilisateur courant (l. 34).
sudo usermod -aG video,render,gpio "$CURRENT_USER" mkdir -p "/home/$CURRENT_USER/photos"
La troisième étape ajoute l’utilisateur aux groupes video, render et gpio, nécessaires à l’accès à la caméra, au rendu graphique et aux broches GPIO (l. 38). Elle crée également le dossier photos, où le programme pourra enregistrer les images (l. 39).
sed \
-e "s/YOUR_USER/$CURRENT_USER/g" \
-e "s/YOUR_UID/$CURRENT_UID/g" \
photobooth.service | sudo tee "/etc/systemd/system/${SERVICE_NAME}.service" > /dev/null
sudo systemctl daemon-reload
sudo systemctl enable "$SERVICE_NAME"
sudo systemctl start "$SERVICE_NAME" La dernière étape de notre script configure le service systemd. La commande sed remplace les valeurs YOUR_USER et YOUR_UID du fichier photobooth.service, puis installe le fichier généré dans le dossier des services système (l. 46). daemon-reload demande à systemd de relire sa configuration (l. 47). Enfin, enable active le lancement automatique au démarrage (l. 48) et start lance le service immédiatement (l.49).
Vous pouvez retrouver l’ensemble du programme sur le github de Pymotion.
A partir d’une image de Raspberry PI OS avec le module arducam préalablement installé, exécutez ces commandes
git clone https://github.com/pymotion/Pi-photobooth.git
cd Pi-photobooth
chmod +x install.sh
./install.sh Une fois l’installation finie, le Photobooth devrait démarrer automatiquement et vous voilà prêt pour prendre de superbes photos.
Nous avons préparé la semaine dernière toute la partie matérielle du photobooth. Maintenant nous allons…
J'avais il y a quelques années réalisé un photobooth, afin de permettre aux convives de…
Détecter les voies de circulation est une étape incontournable pour la réalisation d’un système de…
Vous avez commencé un projet de vision par ordinateur ou de traitement d'images ? Alors,…
Dans l’article d’aujourd’hui, nous allons nous intéresser à la lecture des plaques d’immatriculation des voitures.…
Nous avons vu la semaine dernière comment utiliser tesseract dans un invité de commande. Nous…