Gamma Camera
By Robert Russell
- 4 minutes read - 821 wordstl;dr: Gamma Camera is my open source flexible camera array project and you can build your own with https://github.com/robrussell/gamma.
I made a thing I call Gamma Camera. What is it? It’s easiest to explain starting from my motivation. For the past few years I’ve been tinkering with a lot of commodity camera parts and single board computers like the Raspberry Pi and Jetson Nano. I’ve also spent a lot of time trying to get a better handle on algorithms like structure from motion (SfM) and, more recently, neural radiance fields (NeRFs).
While trying to understand how feature descriptors work in SfM or trying to build a NeRF something became very clear to me. There are a lot of complicated steps to get the imagery which really don’t have much to do with the core algorithms. Researchers often work with some small self-produced dataset or they adapt some existing dataset for their application. Data collection seems like an artificial barrier slowing research and replication. Personally, I hate to build a one-off piece of hardware or a one-off bespoke processing pipeline. I still had to solve these prerequisite problems for myself though. So I figured out how to build a multicamera rig out of open source software and commodity parts that anyone with a credit card can acquire.
Building with open source lets me focus on the thing I care about and leave implementing deeper dependencies to someone else. That even applies to really big, very camera-related software. Gamma Camera uses libcamera apps to actually record images. It uses GRPC for communication between the camera nodes. It uses rsync for retrieving files. The whole point of Gamma Camera is not to invent things that don’t need inventing.
Choosing commodity parts instead of specialized hardware makes it easier to build more prototypes. And it makes it easier for others to replicate what I’ve built. The real utility of making Gamma Camera public is that others can skip ahead to the interesting part1. Build the same camera I built and then you can capture imagery to create a NeRF. Or you can orient the cameras in an inward-facing ring and make a more traditional 3d scanner. Or add some more sensors and you don’t have to figure out the camera parts, just the parts for your new sensor.
My personal current implementation is gammacam P6. It’s the sixth iteration of the flexible camera array that I’ve built. It also happens to be composed of 6 individual cameras. It’s also the only system that I’m testing the Gamma Camera software on.Most of the code isn’t specific to the Raspberry Pi though - it’ll run on any computer. That makes it easier to simulate operation and port to different platforms. My rig is not very stylish, here’s what it looks like in action.
The greenery I’m walking through in that photo looked like it had sharp edges but I knew it would be challenging. The ocean waves were in the view and they’re quickly changing. So far the photos I took on that day turned out to be far too busy for good feature matching. But it was easy very to get hundreds of photos in about 15 minutes from start to finish. Drastically decreasing the setup costs makes it easy for me to try things even when I’m not sure they’ll work out.
Here are some short samples of my results with Gamma Camera that have turned out a little better.
An InstantNGP NeRF of a table in the back yard
Point cloud reconstruction of a park bench with COLMAP
Synchronized stereo from a previous prototype
Building your own Gamma Camera rig allows you to connect to a network of little computers and tell them when to start and stop taking pictures. How you configure the cameras and what you do with the output is up to you and your project.
The project usage guide describes a simple directory structure to simplify planning. The predictable directory structure makes it easier to fetch the data when the experiment is done. STL files are provided along with the OpenSCAD sources so that you can 3d print necessary parts that join the commodity hardware together.
There are plenty of rough edges still but if it sounds interesting then give it a shot. If you have trouble then ping me in the issue tracker and I’ll see if I can help.
Oh, and one last thing to make sure it’s clear - this is built on my own time and on my own dime. Gamma Camera is not an official Google project. It is not supported by Google and Google specifically disclaims all warranties as to its quality, merchantability, or fitness for a particular purpose.
-
If you think building Gamma Camera is part of the interesting stuff, contributions are welcome. Get in touch if you want to help out or discuss ideas about how you’d like to use Gamma Camera. ↩︎