116 lines
5.3 KiB
Markdown
116 lines
5.3 KiB
Markdown
# photobooth
|
|
A Raspberry-Pi powered photobooth using gPhoto 2.
|
|
|
|
## Description
|
|
Python application to build your own photobooth using a [Raspberry Pi](https://www.raspberrypi.org/), [gPhoto2](http://gphoto.sourceforge.net/) and [pygame](https://www.pygame.org).
|
|
|
|
The code was developed from scratch but inspired by the following tutorials/projects:
|
|
* http://www.instructables.com/id/Raspberry-Pi-photo-booth-controller/
|
|
* http://www.drumminhands.com/2014/06/15/raspberry-pi-photo-booth/
|
|
* https://www.renesasse.de/diy-die-eigene-photo-booth-box/
|
|
|
|
## Requirements
|
|
|
|
### Software stack
|
|
The following is required for running this photobooth application. I used the versions given in brackets, others might work just as well.
|
|
|
|
* [Python](https://www.python.org) (2.7.3)
|
|
* [Pygame](https://www.pygame.org) (1.9.1)
|
|
* [Pillow](http://pillow.readthedocs.org) (2.8.1)
|
|
* [gPhoto](http://gphoto.sourceforge.net/) (2.5.6)
|
|
* Optional: [RPi.GPIO](https://pypi.python.org/pypi/RPi.GPIO) (0.5.11)
|
|
|
|
RPi.GPIO is necessary to use external buttons as a trigger but it works just fine without. Triggering is then only possible using touch screen / mouse or key 'c'.
|
|
|
|
### Hardware
|
|
* [Raspberry Pi](https://www.raspberrypi.org/) (Any device able to run the software stack should work fine)
|
|
* Camera supported by gPhoto. I've used a Canon EOS 500D.
|
|
* Optional: External button that closes GPIO23 (pin 16) and GND.
|
|
|
|
## Usage
|
|
Simply download `photobooth.py` or clone the repository and run it.
|
|
It opens the GUI, prints the features of the connected camera, e.g.,
|
|
```
|
|
$ ./photobooth.py
|
|
Abilities for camera : Canon EOS 500D
|
|
Serial port support : no
|
|
USB support : yes
|
|
Capture choices :
|
|
: Image
|
|
: Preview
|
|
Configuration support : yes
|
|
Delete selected files on camera : yes
|
|
Delete all files on camera : no
|
|
File preview (thumbnail) support : yes
|
|
File upload support : yes
|
|
```
|
|
and waits for you to hit the button to take pictures.
|
|
|
|
Available actions:
|
|
|
|
* Press `q`: Exit the application
|
|
* Press `c`: Take four pictures, arrange them in a grid and display them for some seconds.
|
|
* Hit a switch that closes GPIO23 (Pin 16) and GND: Take four pictures, arrange them in a grid and display them for some seconds.
|
|
* Click anywhere on the screen: Take four pictures, arrange them in a grid and display them for some seconds.
|
|
|
|
All pictures taken are stored in a subfolder of the current working directory, named `YYYY-mm-dd` after the current date. Existing files are not overwritten.
|
|
|
|
## Installation
|
|
A brief description on how to set-up a Raspberry Pi to use this photobooth software.
|
|
|
|
1. Download latest Raspbian image and set-up an SD-card. You can follow [these instruction](https://www.raspberrypi.org/documentation/installation/installing-images/README.md).
|
|
|
|
If your display needs some additional configuration, change the file `config.txt` in the `boot`-partition to your needs. For example, I'm using a [Pollin LS-7T touchscreen](http://www.pollin.de/shop/dt/NTMwOTc4OTk-), for which I need to enter the following to avoid overscan:
|
|
```
|
|
hdmi_group=2
|
|
hdmi_mode=87
|
|
hdmi_cvt=1024 600 60 6 0 0 0
|
|
```
|
|
|
|
2. Insert the SD-card into your Raspberry Pi and fire it up. Use the `rpi-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.).
|
|
|
|
3. Reboot and open a terminal. Type `sudo rpi-update` to install the latest software versions. Reboot.
|
|
|
|
4. Run `sudo apt-get update` and `sudo apt-get upgrade` to upgrade all installed software.
|
|
|
|
5. Install any additionally required software:
|
|
* Pillow:
|
|
```
|
|
sudo apt-get install python-dev python-pip libjpeg8-dev
|
|
sudo pip install Pillow
|
|
```
|
|
* gPhoto2: Unfortunately, the version in the repositories is too old to work (some USB-bugs), hence one must use [Gonzalos installer script]()
|
|
```
|
|
git clone https://github.com/gonzalo/gphoto2-updater
|
|
sudo gphoto2-updater/gphoto2-updater.sh
|
|
```
|
|
To ensure the camera can be controlled properly via USB, remove some files:
|
|
```
|
|
sudo rm /usr/share/dbus-1/services/org.gtk.Private.GPhoto2VolumeMonitor.service
|
|
sudo rm /usr/share/gvfs/mounts/gphoto2.mount
|
|
sudo rm /usr/share/gvfs/remote-volume-monitors/gphoto2.monitor
|
|
sudo rm /usr/lib/gvfs/gvfs-gphoto2-volume-monitor
|
|
```
|
|
* xinput_calibrator to calibrate touchscreens:
|
|
```
|
|
wget http://adafruit-download.s3.amazonaws.com/xinput-calibrator_0.7.5-1_armhf.deb
|
|
sudo dpkg -i -B xinput-calibrator_0.7.5-1_armhf.deb
|
|
```
|
|
Calibrate by calling `xinput_calibrator` and pasting the showed snippet to a new file `/etc/X11/xorg.conf.d/99-calibration.conf` (Create the directory if necessary).
|
|
|
|
6. Reboot.
|
|
|
|
7. Clone the Photobooth repository
|
|
```
|
|
git clone https://github.com/reuterbal/photobooth
|
|
```
|
|
and run `photobooth.py`
|
|
|
|
## Modifications
|
|
In the beginning of `photobooth.py` a number of config options are available. Change them to your liking.
|
|
|
|
The GUI-class is separated from the entire functionality. I'm using Pygame because it's so simple to use. Feel free to replace it by your favorite library.
|
|
|
|
## License
|
|
I provide this code under AGPL v3. See [LICENSE](https://github.com/reuterbal/photobooth/blob/master/LICENSE).
|