A Low-cost Distributed Camera System for Stereo-photogrammetry

What is PEPI?

Over the last 12 weeks, I’ve worked full-time on the development of an open-source software platform that addresses the shortcomings of existing camera systems for photogrammetry, particularly in their inability to be adapted or configured, and in the high cost of these systems.

The end-result is PEPI (Portable, Extensible, Photogrammetry Instrument). A disclaimer: PEPI itself is really a larger project involving several different components, of which the software here is just one part (albeit a core part). Therefore, the software here is both “PEPI” and “for PEPI”, in some respects. A bit confusing, nonetheless..

PEPI’s software is unique in its separation of the system into modular, swappable components. Each component is cross-compatible, even between components implemented in different languages, or separated over the network. Thus, if you have a new piece of hardware (e.g. a camera) to use with PEPI, you simply write a few functions as defined in PEPI’s core interface definitions, and you’ll be provided all the benefits of the PEPI ecosystem. This provides a massive benefit in accessing hardware in its most native, convenient language. The components are highly modular, so the implementation details you concern yourself with are minimal.

PEPI is intended to utilise the growth in low-cost computing and in low-cost cameras to create a cost-effective system, but it just as easily supports high-cost, high-quality systems. In doing so, it defines client-side and a server-side categories that divide the components. On the server-side, we have CameraServer, and Camera. A Cameras simply provides a few functions that capture/return images from the hardware level – almost like a hardware driver for PEPI. CameraServer accepts multiple cameras (of different types concurrently, if desired) and manages them. Upon receival of the command from a client, the CameraServer calls it’s Cameras’ image functions and stores the images internally for later retrieval from the client.

The client–of which PEPI provides and should be usable for all system configurations–can then retrieve the images asynchronously at a convenient time. The client also provides dynamic server discovery and video-streaming, which means there is no manual setup required (at least in software).

What benefits does this design provide?

  • As PEPI’s component library grows, more and more hardware will be supported out of the box – no coding required.
  • Components can be mixed-and-matched as required to address any combination of performance, quality and cost constraints for a given application.
  • A network-based architecture provides easy setup, particularly if using a wireless network. Just plug in power to your servers and go.
  • Because of it’s generic design, PEPI is super flexible in how you layout components. CameraServers can accessed nested CameraServers in a master-slave configuration for physical image capture synchronisation, etc. All is supported out-of-the-box.
  • New components are provided with an extensive contract testing suite to ensure they remain complaint with the PEPI core interfaces.

Where to access PEPI?

PEPI is an open-source, licensed project. It’s source code is hosted at GitHub where you can find more details. PEPI’s development and design is also detailed in my honour’s thesis, “A Low-cost Distributed Camera System for Stereo-photogrammetry”.