One of the subprojects i want to make is a network camera.
I'll start simple, then add options to the design. But first let me explain why i think making an IP camera out of a Raspberry pi is a good solution.
Why not just use an ordinary network camera?
A few years ago, i bought a motorized network camera (heden something). It had a motorized pan/tilt, ethernet and wifi, with a web based administration interface, for 80 to 100€. It was a good price, but however this device has limitations : the resolution is quite low (640*480), and the only way i could interact with it was through the web interface. On the plus side, it could capture infrared lighted scenes, so "night vision", using the IR LED included.
However, with such a low resolution, it could only be used for basic monitoring, it is unlikely to be able to read a licence plate or whatever. I'm not certain that i would recognize someone's face at a distance either.
The web interface's problem is that if i want to use it in a different fashion than what the constructor had in mind, i'll have to either hack it, or change my mind. Not that hacking a device is bad, but in this case, i spent some time writing a program to control the camera's pan and tilt via command line, and it worked. But the performance was sub-optimal, and it was not the most efficient and elegant way to do so. If i want to do more advanced stuff, that would require even more hacking.
In the end, do i want to spend so much time to end up with VGA video/pictures? probably not.
One could look for other network cameras, and find higher resolution ones, but everything comes at a price, and higher resolution cameras are available at higher price, or without pan/tilt at the same price. And in all cases, there is no open protocol to control it, nor nice documentation on how to do this or that. All in all, those devices work well, and are satisfying if you want to use them as intended.
I thus realized that i could build a more generic system, with higher video resolution, and have it beeing fully programmable, configurable, adaptable.
Why build a network camera using a Raspberry pi? how much will it cost?
If using a Raspberry Pi, i can chose the video module. The Raspberry Pi costs 20 to 35$ depending on the model, plus 5-10$ for an SD card. Add a webcam, or better, the camera module, and that's another 20-25$. If i consider 5$ for the wall wart, it will cost 45$ to 75$. So, cheaper than ordinary network cameras. Of course, the cheapest model, using an A+ would require a wifi network adapter, or usb ethernet adapter; so we're spend 55$ to 75$.
I have yet to estimate the cost of the box, but if we are generous, let's say 10$.
That means that the complete project cost would be 65 to 85$ for a non motorized ip camera. I would require a few more dollars for a motorized version, so let's add 15$ for two small servos and a few other pieces.
We thus obtain a price of 65$ to 85$ for a non motorized camera, and 80 to 100$ for a motorized version.
For cheaper than traditional IP cameras, i can thus obtain an high resolution camera.
The Raspberry pi enables us to do MORE.
The advantage of this solution is not only the price. indeed, we could probably source other systems with comparable prices. However, we have here the advantage of an higher resolution. Furthermore, we gain total control on the camera. Rather than just have a basic web interface, we can add whatever functionality i want to it. We're not limited to web languages, we can us python, ruby, C, etc... Having a full blown Linux, with a classical package manager means that we can install multiple programs, and do almost whatever we want with this device. Possibilities are almost endless. But i'll present a few functions that are specially interesting on such a device :
- We can store data on USB, on the network or however we want, expanding the capacity of the device if needs be;
- We can stream the video through multiple standard protocols, rather than only view it in a browser. As an example, it can be watched via VLC, on any system.
- Using the GPIO of the PI, we can add PIR sensors, ultrasonic rangefinders, or whatever is considered useful, and program the device to make use of it;
- We can run computer vision programs such as OpenCV, to add face tracking, face recognition, etc to the system;
- We can program the device to rotate to follow a subject;
- We can have multiple cameras on one raspberry pi, for wider coverage;
- We could make the camera able to move along a rail, with total software control;
- We can have http, FTP, SSH, scp, or whatever service to access the files, monitor the device and perform administration tasks;
- It's both easy and cheap to add bluetooth or other connectivity to the device.
There's many more things that can be done with such a design, but i'll stop here. One would say that it is possible to find devices with some of those capacities already embedded. Sure, but with all of those? If so, at what cost?
In all cases, we end up with an open source device, and some open hardware parts in it. And open-ness is important, right?