Raspberry Pi Camera Setup for Time-Lapse: Difference between revisions
Jump to navigation
Jump to search
(16 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
This article describes the setup of the [[Raspberry Pi]] Camera to create a time-lapse movie. | This article describes the setup of the [[Raspberry Pi]] Camera to create a time-lapse movie. If you're looking for a way to set up motion detection, see [[Raspberry Pi Camera Setup - Motion detected movie creation]] | ||
== Setup == | == Setup == | ||
Line 84: | Line 84: | ||
# | # | ||
# Main | # Main | ||
for ((i=1; i<=${GSNAPSHOTSPERMINUTE}; i++)) | for ((i=1; i<=${GSNAPSHOTSPERMINUTE}; i++)) | ||
do | do | ||
Line 100: | Line 98: | ||
done | done | ||
* Add this to <tt>pi</tt>'s crontab: | * Add this to <tt>pi</tt>'s crontab: | ||
# PiCam | # PiCam - Take Snapshots | ||
* * * * * /home/pi/Development/motion_webcam/takePictures.sh > /dev/null 2>&1 | * * * * * /home/pi/Development/motion_webcam/takePictures.sh > /dev/null 2>&1 | ||
Line 133: | Line 131: | ||
* The snapshot archive: http://192.168.42.112/webcam-archive (change to your [[Pi]]'s IPA!) | * The snapshot archive: http://192.168.42.112/webcam-archive (change to your [[Pi]]'s IPA!) | ||
=== | === How do the scripts work? === | ||
* The <tt>takePictures.sh</tt> script will be fired every minute and will take, launching <tt>takePicture.sh</tt> a picture avery 15 seconds (4 per minute) | |||
* The <tt>mergeAllPicturesInOneAnimatedGIF.sh</tt> merges once a day all snapshots into one animated .gif | |||
=== Safety precautions === | |||
* ''Carefully watch your disk, this process could easily eat up all your free space, especially check <tt>/tmp</tt>, where <tt>imagemagick</tt> will create temporary files!'' | |||
* ''Keep in mind, creating so much pictures (if you follow above instructions, you will create 1440*4=5760!) will fill your disk really fast! Taken with full resolution, a picture weighs around 600K, adding up to 3.5GB a day! (24*60*4*0.6M=3.456GB)!''<br>You can reduce the storage used by...: | |||
** …changing <tt>GSNAPSHOTINTERVAL</tt> in <tt>takePictures.sh</tt> | |||
** …changing the quality and resolution in <tt>takePicture.sh</tt> | |||
** …changing your crontab to take only one image per minute:<br><tt>* * * * * /home/pi/Development/webcam/takePicture.sh > /dev/null 2>&1</tt><br>This will result in 1440*0.6MB=864MB per day (yes, our 8GB SD Card is full after one week...) | |||
** …executing <tt>mergeAllPicturesInOneAnimatedGIF.sh</tt> on your [[Mac]] instead of on your [[Pi]], since it draws a LOT of CPU-power and eats up a LOT of free disk space or try [[How to create time-lapse movies from JPEG stills]]. | |||
---- | ---- | ||
* Links | * Links | ||
** [http://www.lavrsen.dk/foswiki/bin/view/Motion/FrequentlyAskedQuestions|Motion FAQ] | ** On Wurst-Wasser.net: | ||
** http://www.raspberrypi.org/phpBB3/viewtopic.php?f=43&t=43844 | *** [[Raspberry Pi Camera Setup - Motion detected movie creation]] | ||
** https://www.modmypi.com/blog/installing-the-raspberry-pi-camera-board | ** External | ||
*** [http://www.lavrsen.dk/foswiki/bin/view/Motion/FrequentlyAskedQuestions|Motion FAQ] | |||
*** http://www.raspberrypi.org/phpBB3/viewtopic.php?f=43&t=43844 | |||
*** https://www.modmypi.com/blog/installing-the-raspberry-pi-camera-board | |||
* Footnotes: | * Footnotes: | ||
<references/> | <references/> | ||
[[Category:RaspberryPi]] | [[Category:RaspberryPi]] |
Latest revision as of 22:50, 30 March 2014
This article describes the setup of the Raspberry Pi Camera to create a time-lapse movie. If you're looking for a way to set up motion detection, see Raspberry Pi Camera Setup - Motion detected movie creation
Setup
Get package list
apt-get update
Update all packages
apt-get upgrade
Enable the camera
raspi-config
Then answer the following stupid questions ("really enable?" and "reboot now?"), and you're done.
Configuration
Since using motion was some hazzle I decied to try a KISS-approach, using only the raspistill and convert[1] to implement.
Make the Pi take pictures
Make PiCam Device accessible
Since /usr/lib/cgi-bin/ is the default CGI-directory...
- make sure, everyone can access the camera device[2]:
chmod o+rwx /dev/vchiq
Setup script for taking a picture
- create this script named takePicture.sh:
#!/bin/bash # # Globals # GFOLDERTARGET="/var/www/webcam-archive" GFILELOCK="${GFOLDERTARGET}/takePicture.lck" GFILELOCKAGEMAX="60" GTIMESTAMP="`date +'%Y-%m-%d_%H-%M-%S'`" GFILETARGET="${GFOLDERTARGET}/${GTIMESTAMP}.jpg" GFILELASTSNAP="/var/www/webcam/lastsnap.jpg" # # # # Main # # Check locking if [ -f "${GFILELOCK}" ]; then LOCKFILEAGE="`stat --format=\"%Z\" \"${GFILELOCK}\"`" NOW="`date +'%s'`" AGE="`expr ${NOW} - ${LOCKFILEAGE}`" if [ "${AGE}" -gt "${GFILELOCKAGEMAX}" ]; then echo "Lockfile is ${AGE} seconds old, removing it." rm "${GFILELOCK}" else echo "Lockfile is ${AGE} seconds old, exiting." exit 1 fi fi # # # Lock echo $$ > "${GFILELOCK}" # # timeout should not be 0, since images will be to dark and are noisy # Since my cam is mounted wrong, I prefer to flip it :) (and flop it) raspistill --nopreview -w 1024 -h 768 -o - | convert - -flip -flop - > "${GFOLDERTARGET}/lastsnap.tmp" mv "${GFOLDERTARGET}/lastsnap.tmp" "${GFILETARGET}" cp "${GFILETARGET}" "${GFILELASTSNAP}" # # Unlock rm "${GFILELOCK}" # # Exit exit 0
- create a folder named webcam and webcam-archive:
cd /var/www mkdir webcam chown pi webcam- mkdir webcam-archive chown pi webcam-archive
Setup script for taking pictures
- create this script named takePictures.sh[3]:
#!/bin/bash # # Globals GSNAPSHOTSPERMINUTE=4 GSNAPSHOTINTERVAL="`expr 60 / 4`" # # Main for ((i=1; i<=${GSNAPSHOTSPERMINUTE}; i++)) do TIMEBEFORESNAPSHOT="`date +'%s'`" echo "Taking snapshot at `date`" /home/pi/Development/motion_webcam/takePicture.sh TIMEAFTERSNAPSHOT="`date +'%s'`" DURATIONOFSNAPSHOT="`expr ${TIMEAFTERSNAPSHOT} - ${TIMEBEFORESNAPSHOT}`" if [ "${DURATIONOFSNAPSHOT}" -lt "${GSNAPSHOTINTERVAL}" ]; then DELAY="`expr ${GSNAPSHOTINTERVAL} - ${DURATIONOFSNAPSHOT}`" echo "Sleeping for ${DELAY} seconds." sleep ${DELAY} fi done
- Add this to pi's crontab:
# PiCam - Take Snapshots * * * * * /home/pi/Development/motion_webcam/takePictures.sh > /dev/null 2>&1
Create a time-lapse movie
- Create a new script mergeAllPicturesInOneAnimatedGIF.sh:
#!/bin/bash # # Script: mergeAllPicturesInOneAnimatedGIF.sh # Author: Heiko Kretschmer # Purpose: Merge all .jpg into one animated .gif # # History: # 2014-03-30, 09:52, h: Creation. Note. default ticks in -delay is n/100 of a second # # Globals # GFOLDERSOURCE="/var/www/webcam-archive" GSUFFIXSOURCE="jpg" GTIMESTAMP="`date +'%Y-%m-%d'`" GFILETARGET="/var/www/webcam-archive/${GTIMESTAMP}.gif" # (Un)Main # convert -limit area 0 -delay 25 -loop 1 "${GFOLDERSOURCE}/*.${GSUFFIXSOURCE}" "${GFILETARGET}"
- Add a crontab entry:
# PiCam - Merge Images to time-lapse-movie 0 0 * * * /home/pi/Development/motion_webcam/mergeAllPicturesInOneAnimatedGIF.sh > /dev/null 2>&1
Check if it works
- The last snapshot: http://192.168.42.112/webcam/lastsnap.jpg (change to your Pi's IPA!)
- The snapshot archive: http://192.168.42.112/webcam-archive (change to your Pi's IPA!)
How do the scripts work?
- The takePictures.sh script will be fired every minute and will take, launching takePicture.sh a picture avery 15 seconds (4 per minute)
- The mergeAllPicturesInOneAnimatedGIF.sh merges once a day all snapshots into one animated .gif
Safety precautions
- Carefully watch your disk, this process could easily eat up all your free space, especially check /tmp, where imagemagick will create temporary files!
- Keep in mind, creating so much pictures (if you follow above instructions, you will create 1440*4=5760!) will fill your disk really fast! Taken with full resolution, a picture weighs around 600K, adding up to 3.5GB a day! (24*60*4*0.6M=3.456GB)!
You can reduce the storage used by...:- …changing GSNAPSHOTINTERVAL in takePictures.sh
- …changing the quality and resolution in takePicture.sh
- …changing your crontab to take only one image per minute:
* * * * * /home/pi/Development/webcam/takePicture.sh > /dev/null 2>&1
This will result in 1440*0.6MB=864MB per day (yes, our 8GB SD Card is full after one week...) - …executing mergeAllPicturesInOneAnimatedGIF.sh on your Mac instead of on your Pi, since it draws a LOT of CPU-power and eats up a LOT of free disk space or try How to create time-lapse movies from JPEG stills.
- Links
- Footnotes: