A photo booth application in pure Python for the Raspberry Pi.
The pibooth project attempts to provide a photo booth application out-of-the-box in pure Python for Raspberry Pi.
The requirements listed below are the one 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 standard keyboard.
- 1 Raspberry Pi 2 Model B (or higher)
- 1 Camera (Pi Camera v2.1 8 MP 1080p or any camera compatible with gPhoto2)
- 2 push buttons
- 4 LEDs
- 4 resistors of 100 Ohm
- 1 printer
- Python 3.5.3
- RPi.GPIO 0.6.3
- picamera 1.13
- Pillow 4.0.0
- pygame 1.9.3
- gphoto2 1.8.0 ( libgphoto2 2.5.15 )
- pycups 1.9.73 ( CUPS 2.2.1 )
A brief description on how to set-up a Raspberry Pi to use this software.
Download latest 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 that is shown automatically on the first boot to configure your system (e.g., expand partition, change hostname, password, enable SSH, configure to boot into GUI, etc.).
Don’t forget to enable the camera in raspi-config.
Reboot and open a terminal. Install the latest firmware version:
$ sudo rpi-update
Upgrade all installed software:
$ sudo apt-get update $ sudo apt-get upgrade
Optionally install gPhoto2 (required only for external 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 instruction to add a new printer can be found here):
$ sudo apt-get install cups libcups2-dev
Install pibooth from the pypi repository:
$ sudo pip3 install pibooth
If you don’t have gPhoto2 and/or CUPS installed (steps 5. and/or 6. skipped), use the --no-deps option to avoid installation failures (you may need to install Python dependencies by yourself)
Start the photo booth application using the command:
All pictures taken are stored in a subfolder of the one defined in the configuration, named YYYY-mm-dd hh-mm-ss which the time when first picture of the sequence was taken.
Note that if you have both Pi and gPhoto2 cameras connected to the Raspberry Pi, both are used. The preview is taken using the Pi one for a better video rendering and the capture is taken using the gPhoto2 one for better picture rendering.
You can display a basic help on application options by using the command:
$ pibooth --help
After the graphical interface is started, the following actions are available:
|Action||Keyboard key||Physical button|
|Toggle Full screen||Ctrl + F||-|
|Choose layout||LEFT or RIGHT||Button 1 or Button 2|
|Take pictures||P||Button 1|
|Export Printer/Cloud||Ctrl + E||Button 2|
States and lights management
The application follows the states sequence defined in the diagram below:
The states of the LED 1 and LED 2 are modified depending on the actions available for the user. The LED 3 is switched on when the application starts and the LED 4 is switched on during the preview and photo capture.
Final picture rendering
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.
The resolution is an important parameter, it is responsible for the quality of the final picture. Have a look to picamera possible resolutions .
Run a developing version
If you want to use an unofficial version of the pibooth application, you need to work from a clone of this git repository. Replace the step 7. of the Install procedure above by the following actions:
clone from github
$ git clone https://github.com/werdeil/pibooth.git
go in the cloned directory
$ cd pibooth
run pibooth with the command
$ PYTHONPATH=. python3 pibooth/ptb.py
At the first run, a configuration file is generated in ~/.config/pibooth/pibooth.cfg which permits to configure the behavior of the application. The configuration can be easily edited using the command:
$ pibooth --config
The default configuration can be restored with the command (strongly recommended when upgrading pibooth):
$ pibooth --reset
Below is the default configuration file:
[GENERAL] # User interface language (fallback to English if not found) language = en # Path to save pictures directory = ~/Pictures/pibooth # Cleanup the 'directory' before start clear_on_startup = True # How long to debounce the button in seconds debounce_delay = 0.3 # Start pibooth at Raspberry Pi startup autostart = False # Show fail message and go back to wait state in case of exception failsafe = True [WINDOW] # (width, height) of the display monitor or 'fullscreen' size = (800, 480) # Blinking background when picture is taken flash = True # How long is the preview in seconds preview_delay = 3 # Show a countdown timer during the preview preview_countdown = True # Stop the preview before taking the picture preview_stop_on_capture = False [PICTURE] # Possible choice(s) of captures numbers (numbers between 1 to 4 max) captures = (4, 1) # Orientation of the final image ('auto', 'portrait' or 'landscape') orientation = auto # First text displayed footer_text1 = Footer 1 # Second text displayed footer_text2 = Footer 2 # Footer text RGB color text_color = (0, 0, 0) # Background RGB color or path to a background image bg_color = (255, 255, 255) [CAMERA] # Adjust for lighting issues (normal is 100 or 200. Dark is 800 max) iso = 100 # Flip horizontally the captured picture flip = False # Rotation of the camera (valid values are 0, 90, 180, and 270) rotation = 0 # Resolution for camera captures (preview will have same aspect ratio) resolution = (1934, 2464) [PRINTER] # Name of the printer defined in CUPS (or use the 'default' one) printer_name = default # How long is the print view in seconds (0 to skip it) printer_delay = 10 # Maximum number of duplicates sent to the printer (avoid paper wast) max_duplicates = 3
Here is the default configuration used in CUPS, this may depend on the printer used:
|Media Size||10cm x 15cm|
|Media Type||Glossy Photo Paper|
|Shrink page …||Shrink (print the whole page)|
Icons from the Noun Project
- Thumb up by Symbolon
- Polaroid by icon 54
- Cat by Внталий Плут
- Up hand drawn arrow by Kid A
- Cameraman and Friends Posing For Camera by Gan Khoon Lay