What's taking the pictures?

Apart from a few still pictures, taken with a Canon Elph digital camera, the pictures and MPEG movies that you see here were collected using a computer with a Philips Vesta PCVC675K USB video camera, primarily at 640x480 resolution and 24-bit color. For some of the movies, the pictures were scaled down to save space.

The original computer was a Pentium 200MHz with 32meg of RAM. In 2004, I updated it to a 350MHz Pentium with 128meg of RAM. The computer is actually located in the garden, in a custom-made cart. I named the computer "gourd". It's running Debian/GNU Linux. I have scripted most of the tasks using Python and PIL. PIL comes in very handy to resize and label pictures and other simple image tasks. There are actually two USB webcams hooked up to "gourd". I take a snapshot on the camera typically every 2 minutes using a crontab entry. To control the camera, I use a Python program, and I developed a Python webcam interface module that does its work by calling ioctls from the v4l API.

When I make fairly heavy use of the USB driver, taking lots of pictures, I have at times run into some stability problems. The USB driver seems to pack in sometimes, and other times, the whole machine crashes or hangs. This has been somewhat less of a problem lately - in Linux kernels in the 2.6 range. To alleviate the stability problems, I run a software watchdog program that reboots the machine if it sees trouble. If the machine hangs, the software watchdog does no good, of course. Another step I have sometimes used is to reboot the machine via crontab each night. With these steps, the machine stays running almost always. One way it fails is if something hangs. Another way is if the reboot fails to get through fsck. To alleviate the fsck problem, I switched to a journaled file system. Every now and then, you will see that the machine has been down because of missing data in the temperature plots. When the machine really hangs, I have to go out in the garden with a keyboard and monitor and see what needs to be done.

I have written much software to make this work. Some of the software that I have written includes the Python webcam module and script to take the pictures, a script to back up picture data to a CDROM, mpeg generation programs, including some processing of still frames and selecting a subset of a sequence of stills, labeling a still with a date stamp, temperature plotting using Grace, Zope scripts for displaying web content, automatic picture exposure and settings, and a number of other things. If I find that people are interested in this software, I might post it. You could make your own PumpkinCam!

I also make custom hardware for the PumpkinCam project. I am able to take pictures at night because I built low-voltage portable lights that are controlled by "gourd" using an X-10 module. I have made enclosures for the webcams, a cart that allows me to wheel "gourd" around the garden and yard, lighting stands, and various other things. You can see some of the hardware in the picture gallery. One of my upcoming projects is to make a computer-controlled webcam that will be able to pan, tilt, zoom, and focus automatically and/or under web-based control. Some day, you may be able to take control of PumpkinCam and look around the patch.

Gourd, the computer, is an IBM PC that I purchased used on Ebay. It was up and running May 2001, only down when I've been fixing something, moving it, or it crashed. About four years later, I upgraded it to a 350MHz IBM PC machine. The original machine was still running when I decommissioned it. Keep in mind that this machine ran four years, round the clock, year round. Our winters here are very wet and rainy. It was a bit rusty, but nothing failed on it. It had some bugs. Not the software kind. The original prototype was networked to my house and other computers inside with a 80-foot ethernet 10-base-T ethernet cable. Of course, I have since moved to 802.11b wireless. Here are some stats from the computer as of 4/5/2002:

  me@gourd:~$ date
  Thu Apr  4 22:18:15 PST 2002
  me@gourd:~$ cat /proc/version
  Linux version 2.4.18 (root@gourd) (gcc version 2.95.4 (Debian prerelease)) #1 Sun Mar 3 22:37:07 PST 2002
  me@gourd:~$ uptime
   22:18:29 up  7:40,  1 user,  load average: 0.22, 0.25, 0.18

More recently:

  me@gourd:~$ date
  Wed Jun 14 04:38:12 PDT 2006
  me@gourd:~$ cat /proc/version 
  Linux version (root@gourd) (gcc version 4.1.2 20060604 (prerelease) (Debian 4.1.1-2)) #1 Sat Jun 10 01:14:36 PDT 2006
  me@gourd:~$ uptime
   04:38:31 up 1 day,  8:23,  3 users,  load average: 0.03, 0.06, 0.01

Copyright © 2001 Jef Treece & Pierre R - Powered by Zope