The pibooth
project provides a photobooth application out-of-the-box in pure Python
for Raspberry Pi. Have a look to the wiki
to discover some realizations from GitHub users, and don't hesitate to send us photos of your version.
Note
Even if designed for a Raspberry Pi, this software may be installed on any Unix/Linux based OS (tested on Ubuntu 16 and Mac OSX 10.14.6).
Contents
- Interface available in Danish, Dutch, English, French, German, Hungarian, Norwegian and Spanish (customizable)
- Capture from 1 to 4 photos and concatenate them in a final picture
- Support all cameras compatible with gPhoto2, OpenCV and Raspberry Pi
- Support for hardware buttons and lamps on Raspberry Pi GPIO
- Fully driven from hardware buttons / keyboard / mouse / touchscreen
- Auto-start at the Raspberry Pi startup
- Animate captures from the last sequence during idle time
- Store final pictures and the individual captures
- Printing final pictures using CUPS server (printing queue indication)
- Custom texts can be added on the final picture (customizable fonts, colors, alignments)
- Custom background(s) and overlay(s) can be added on the final picture
- All settings available in a configuration file (most common options in a graphical interface)
- Highly customizable thanks to its plugin system, you can develop your own plugin
You can see some examples of the output picture formats you can get with pibooth
on the following page.
The requirements listed below are the ones used for the development of pibooth
, but
other configuration may work fine. All hardware buttons, lights and printer are optional,
the application can be entirely controlled using a keyboard, a mouse or a touchscreen.
Warning
Using a Pi Camera, the preview is visible only on a screen connected to the HDMI or
DSI connectors (the preview is an overlay managed at GPU low level). It also means
that pibooth
can not be started throught SSH tuneling. Even with X11 forwarding
enabled (ssh -X ...
) the preview will not be visible.
- 1 Raspberry Pi 3 Model B (or higher)
- 1 Camera (Raspberry Pi Camera v2.1 8 MP 1080p or any DSLR camera compatible with gPhoto2 or any webcam compatible with OpenCV )
- 2 push buttons
- 2 LEDs
- 2 resistors of 100 Ohm
- 1 printer
- Raspberry Pi OS with desktop
- Python
3.7.3
- libsdl2
2.0
- libgphoto2
2.5.27
- libcups
2.2.10
A brief description on how to set-up a Raspberry Pi to use this software.
Download the Raspbian image and set-up an SD-card. You can follow these instructions.
Insert the SD-card into the Raspberry Pi and fire it up. Use the
raspi-config
tool to configure your system (e.g., expand partition, change hostname, password, enable SSH, configure to boot into GUI, etc.).Hint
Don't forget to enable the camera in raspi-config.
Upgrade all installed software:
$ sudo apt-get update $ sudo apt-get full-upgrade
Install SDL2 (and extras) which is required by
pygame 2+
:$ sudo apt-get install libsdl2-*
Optionally install the last stable
gPhoto2
version (required only for DSLR camera):$ sudo wget raw.github.com/gonzalo/gphoto2-updater/master/gphoto2-updater.sh $ sudo chmod 755 gphoto2-updater.sh $ sudo ./gphoto2-updater.sh
Optionally install
CUPS
to handle printers (more instructions to add a new printer can be found here):$ sudo apt-get install cups libcups2-dev
Optionally install
OpenCV
to improve images generation efficiency or if a Webcam is used:$ sudo apt-get install python3-opencv
Install
pibooth
from the pypi repository:$ sudo pip3 install pibooth[dslr,printer]
Hint
If you don't have
gPhoto2
and/orCUPS
installed (steps 5. and/or 6. skipped), remove printer or dslr under the[]
Note
An editable/customizable version of pibooth
can be installed by following
these instructions .
Be aware that the code on the master branch may be unstable.
Start the photobooth application using the command:
$ pibooth
All pictures taken are stored in the folder defined in [GENERAL][directory]
. They are named
YYYY-mm-dd-hh-mm-ss_pibooth.jpg which is the time when first capture of the sequence was taken.
A subfolder raw/YYYY-mm-dd-hh-mm-ss is created to store the single raw captures.
Note
if you have both Pi
and DSLR
cameras connected to the Raspberry Pi, both are used,
this is called the Hybrid mode. The preview is taken using the Pi
one for a better
video rendering and the capture is taken using the DSLR
one for better picture rendering.
You can display a basic help on application options by using the command:
$ pibooth --help
The application follows the states sequence defined in the simplified diagram below:
The states of the LED 1 and LED 2 are modified depending on the actions available for the user.
Detailed state diagram can be found on this page.
After the graphical interface is started, the following actions are available:
Action | Keyboard key | Physical button | Touch event |
---|---|---|---|
Toggle Full screen | Ctrl + F | - | - |
Choose layout | LEFT or RIGHT | Button 1 or Button 2 | Tap 1 finger |
Take pictures | P | Button 1 | Tap 1 finger |
Export Printer/Cloud | Ctrl + E | Button 2 | Tap 1 finger |
Open/close settings | ESC | Button 1 + Button 2 | Tap 4 finger |
Select option | UP or DOWN | Button 1 | Tap 1 finger |
Change option value | LEFT or RIGHT | Button 2 | Tap 1 finger |
The pibooth
application handle the rendering of the final picture using 2 variables defined in
the configuration (see Configuration below):
[CAMERA][resolution] = (width, height)
is the resolution of the captured picture in pixels. As explained in the configuration file, the preview size is directly dependent from this parameter.[PICTURE][orientation] = auto/landscape/portrait
is the orientation of the final picture (after concatenation of all captures). If the value is auto, the orientation is automatically chosen depending on the resolution.
Note
The resolution is an important parameter, it is responsible for the quality of the final picture. Have a look to picamera possible resolutions .
Image effects can be applied on the capture using the [PICTURE][effect]
variable defined in the
configuration.
[PICTURE]
# Effect applied on all captures
captures_effects = film
Instead of one effect name, a list of names can be provided. In this case, the effects are applied sequentially on the captures sequence.
[PICTURE]
# Define a rolling sequence of effects. For each capture the corresponding effect is applied.
captures_effects = ('film', 'cartoon', 'washedout', 'film')
Have a look to the predefined effects available depending on the camera used:
Texts can be defined by setting the option [PICTURE][footer_text1]
and [PICTURE][footer_text2]
(lets them empty to hide any text). For each one, the font, the color and the alignment can be chosen.
For instance:
[PICTURE]
# Same font applied on footer_text1 and footer_text2
text_fonts = Amatic-Bold
This key can also take two names or TTF file paths:
[PICTURE]
# 'arial' font applied on footer_text1, 'Roboto-BoldItalic' font on footer_text2
text_fonts = ('arial', 'Roboto-BoldItalic')
The available fonts can be listed using the following the command:
$ pibooth --fonts
To regenerate the final pictures afterwards, from the originals captures present in the
raw
folder, use the command:
$ pibooth-regen
It permits to adjust the configuration to enhance the previous pictures with better parameters (title, more effects, etc...)
At the first run, a configuration file is generated in ~/.config/pibooth/pibooth.cfg
by default. This file permits to configure the behavior of the application.
A quick configuration GUI menu (see Commands ) gives access to the most common options:
More options are available by editing the configuration file which is easily done using the command:
$ pibooth --config
The default configuration can be restored with the command (strongly recommended when
upgrading pibooth
):
$ pibooth --reset
The configuration directory can be chosen at startup. This feature gives the possibility
to keep several configurations on the same Raspberry Pi and quickly switch from one
configuration to another. The following command will start pibooth
using configuration
files from myconfig1/
directory:
$ pibooth myconfig1/
See the default configuration file for further details.
Several plugins maintained by the community are available. They add extra features to
pibooth
. Have a look to the plugins on PyPI.
You can also easily develop your own plugin, and declare it in the [GENERAL][plugins]
key of the configuration. See guidelines to
develop custom plugin.
The graphical interface texts are available in 8 languages by default: Danish, Dutch, English, French, German, Hungarian, Norwegian and Spanish. The default translations can be easily edited using the command:
$ pibooth --translate
A new language can be added by adding a new section ([alpha-2-code]
).
If you want to have pibooth
in your language feel free to send us the corresponding keywords via a GitHub issue.
The print button (see Commands) and print states are automatically activated/shown if:
- pycups and pycups-notify are installed
- at least one printer is configured in CUPS
- the key
[PRINTER][printer_name]
is equal todefault
or an existing printer name
To avoid paper waste, set the option [PRINTER][max_duplicates]
to the maximum
of identical pictures that can be sent to the printer.
Set the option [PRINTER][max_pages]
to the number of paper sheets available on the
printer. When this number is reached, the print function will be disabled and an icon
indicates the printer failure. To reset the counter, open then close the settings
graphical interface (see Commands).
Here is the default configuration used for this project in CUPS, it may depend on the printer used:
Options | Value |
---|---|
Media Size | 10cm x 15cm |
Color Model | CMYK |
Media Type | Glossy Photo Paper |
Resolution | Automatic |
2-Sided Printing | Off |
Shrink page ... | Shrink (print the whole page) |
Here is the diagram for hardware connections. Please refer to the default configuration file to know the default pins used (physical pin numbering).
An extra button can be added to start and shutdown properly the Raspberry Pi.
Edit the file /boot/config.txt
and set the line:
dtoverlay=gpio-shutdown
Then connect a push button between physical pin 5 and pin 6.
See the LICENSE file to have details on the terms and coniditions.
pibooth
was developed for a private usage with no connection to a professional or commercial activity,
as a consequence GDPR does not apply.
However if you are using photobooth in Europe, it is your responsability to check that your usage and
more particularly the usage of the pictures generated by pibooth
follows the GDPR rules, especially make
sure that the people that will use the pibooth
are aware that the image will be stored on the device.
Pibooth icon from Artcore Illustrations
Icons from the Noun Project (https://thenounproject.com/)
- Polaroid by icon 54
- Up hand drawn arrow by Kid A
- Cameraman and Friends Posing For Camera by Gan Khoon Lay
- Camera by Alfa Design
- Print Photo by Kmg Design
- Pointer hand by Peter van Driel
If you want to help us you can by clicking on the following links!