Ethernet camera GUI library
Ethernet connected cameras can be pretty powerful devices with many features. This makes common, webcam oriented programs inadequate. We can rely on vendor-supplied software, but that limits us to this particular vendor's cameras. On the other hand, ethernet cameras support GenICam standard, which allows using the same program to access all connected cameras. There is a free software library for the GNU/Linux operating system called Aravis which facilitates camera control. Using this library, members of our astronomical society wrote a graphical interface for camera control and image or video capture which we named QArv. QArv is not only a program, but is itself a library; it provides a graphical interface for other programs so they don't need to invent their own. The name "QArv" is derived from Aravis and Qt, libraries that QArv is built upon and around which its programming interface is designed.
Check the screenshots!
- Viewing the video, recording it and taking snapshots, with basic controls, such as frames-per-second, pixel format and exposure/gain easily accessible. Region-of-interest can be selected via manual entry or by drawing it directly in the video display.
- A viewer and transcoder for raw video dumps recorded with qarv.
- The network interface used by the camera is automatically detected and camera's packet size is set to match the interface MTU, providing usable (hopefully) performance with minimal interaction, unlike the default settings on some cameras.
- Full access to all camera features is available in a tree view. Settings can be saved and restored, subject to some limitations.
- Basic image transformations: mirroring, rotating, inverting.
- Histogram; clipped highlights can be marked in the video display.
- QArvCamera class which isolates the Qt program from Aravis internals, thus avoiding clashes between Qt and Glib/GTK. It provides direct access to basic settings and emits signals when frames are ready. To access features not covered by the basic interface, it implements the QAbstractItemModel interface. This interface allows access to camera features using Qt's Model/View paradigm. The QArvCamera model can thus be plugged directly into a "view" widget, as is done in our GUI.
- QArvCameraDelegate class which implements the QStyledItemDelegate interface. It can be used with the QArvCamera model to get editing widgets for camera features.
- QArvGui class provides a camera control window that can be embedded into a host application. It is the same as the standalone application; in fact, the latter is simply a minimal host application. The difference is in the recording functionality: instead of recording to a file, the GUI will emit signals and pass frames to the host application.
- QArvDecoder and QArvPixelFormat, which are plugin interfaces for converting a raw frame into an OpenCV image. Convenience functions are available to obtain QImages. Currently provided are decoders for 8, 10, 12 (packed or unpacked) and 16 bit grayscale formats, plus anything supported by libav/ffmpeg. The libav plugin is exposed further to allow easy decoding of all pixel formats, not just those used by Aravis.
- QArvRecordedVideo class, which can read a raw video dumped by the qarv GUI and generate a QArvDecoder for decoding the frames.
QArv is available under the terms of GNU General Public Licence, version 3 or later.
QArv requires the following:
- Qt 4.8 or later
- aravis 0.2 or later
- OpenCv 2.4 or later
- gstreamer 1.0.7 or later
- libav 0.8.5 or later (or ffmpeg)
All dependencies should be available as part of your Linux distribution. GStreamer plugins required by QArv are in packages designated "good", "bad", "ugly" and "libav".