So, now that I’m in Morgantown – my home is too small to comfortably work on side gigs and personal projects – especially now that my family is getting bigger with the baby! I’ve been using the office space I leased out more and more. While exploring video conferencing with Matt last week, I had the thought “wouldn’t it be cool to have a security camera in the office?”. So I did just that, and it’s actually quite easy for Ubuntu linux users.
What you need:
- Ubuntu Linux ( I was using 8.04.1 at the time of installation )
- one or more USB web cameras
What you can do:
- Motion detection – record video/and or frames if there is motion.
- Snapshot intervals – take time interval snapshots regardless of motion detection.
- Live video IP stream in mjpeg format.
- Specify recorded video to be saved in your choice mpeg, avi, flv, swf format.
- When motion exists, have frames and videos draw a box around the specific motion for more obvious recognition of subtle movements ( this actually shows the shadow of the janitor near the door around 6 a.m. every morning – I wouldn’t have noticed otherwise! )
- Easily send all data to a backup server in a variety of ways – I keep it simple by saving data to my Dropbox directory, a wonderful cross-platform data syncronization and sharing utility.
1. Plugin your webcam.
For me, the Logitech QuickCam® Pro 9000 worked right out of the box, and was only 105$.
2. Install Motion – software motion detector, and turn it on.
sudo apt-get install motion sudo motion
3. Configure Motion
Everything really works out of the box with this – but isn’t quite organized to my liking, and probably not yours either. Global configuration is located inside /etc/motion.conf ( You’ll notice there are multiple threadN.conf files in this directory – which can be used for custom configured individual cameras if you are setting up more than one ).
Note: Be sure to restart the Motion server everytime you make a configuration change.
sudo /etc/init.d/motion restart
Take a look at the files, they are well documented. Below are a few helpful configurations to get your data organized quicker:
#/etc/motion/motion.conf # Locate and draw a box around the moving object. locate on # Draws the timestamp using same options as C function strftime(3) text_right %Y-%m-%dn%T-%q # Text is placed in lower left corner text_left SECURITY CAMERA %t - Office
Organize the filesytem to save data by date, instead of all in one directory.
# File path for snapshots (jpeg or ppm) relative to target_dir snapshot_filename %Y%m%d/camera-%t/snapshots/hour-%H/camera-%t-%v-%Y%m%d%H%M%S-snapshot # File path for motion triggered images (jpeg or ppm) relative to target_dir jpeg_filename %Y%m%d/camera-%t/motions/hour-%H/camera-%t-%v-%Y%m%d%H%M%S-%q-motion # File path for motion triggered ffmpeg films (mpeg) relative to target_dir movie_filename %Y%m%d/camera-%t/movies/hour-%H/camera-%t-%v-%Y%m%d%H%M%S-movie # File path for timelapse mpegs relative to target_dir timelapse_filename %Y%m%d/camera-%t/timelapses/hour-%H/camera-%t-%Y%m%d-timelapse
4. (Optional) Setup a backup solution
a. Easy solution, get and install Dropbox — instructions on the Dropbox site. Then update your motion.conf to save to your Dropbox directory:
#/etc/motion/motion.conf ... target_dir /path/to/dropbox/security_camera ...
b. A more granular solution is to take advantage of hooks configurable in motion.conf. Using these, you can create bash scripts to do anything your heart desires ( like trigger a silent alarm on motion detection outside business hours ). Available hooks: on_event_start, on_event_end, on_picture_save, on_motion_detected, on_movie_start, on_movie_end.
If you have wput installed, you can easily upload files to a remote backup server with these hooks:
#motion.conf ... on_picture_save wput ftp://user@pass@server %f ...
However, this solution is somewhat less secure, as it uses FTP. In a future post I will detail how to secure this up using encrypted transfer and phrase free keys. ( Stay tuned! )
5. Live feed
This comes working out of the box with Motion. Check out your live stream in your web browser by navigating to: http://localhost:8081
That’s it! Webcam security made easy