Skip to main content

PyQt-based framework for integrating video cameras into research applications

Project description

QVideo: PyQt support for video cameras

PyPI version Python License: GPL v3 Tests Documentation

QVideo is a framework for integrating video cameras into PyQt5 projects for scientific research. It provides a unified, registration-based property system so that every camera backend — USB webcams, GenICam devices, FLIR cameras, Raspberry Pi cameras — is controlled through the same API. Property trees, display widgets, and a digital video recorder are built on top of that abstraction and require no camera-specific code.

QVideo interface demo

Features

  • Unified camera APIQCamera subclasses expose adjustable parameters via registerProperty / registerMethod; UI and recording layers consume them without knowing the underlying hardware.
  • Auto-built property treesQCameraTree reads the registered property map and builds a pyqtgraph parameter tree widget automatically.
  • Threaded video sourceQVideoSource wraps any camera in a QThread and emits newFrame(ndarray) at acquisition rate.
  • Composable filter pipelineVideoFilter / QFilterBank sit between source and display; filters include blur, edge detection, RGB channel selection, sample-and-hold, and statistical median variants.
  • Digital video recorder — lossless HDF5 (with timestamps) and OpenCV video formats; QDVRWidget is the composite UI widget.
  • Live displayQVideoScreen supports mouse-aware graphical overlays for annotations, regions of interest, and user interaction.

Installation

pip install QVideo

Optional hardware backends

Backend Extra Notes
GenICam cameras (Vimba, etc.) pip install QVideo[genicam] Requires a vendor-supplied .cti producer file
Raspberry Pi camera pip install QVideo[picamera] Requires picamera2
FLIR / Spinnaker cameras Requires the proprietary PySpin SDK; install that separately

Quick start

from pyqtgraph.Qt import QtWidgets
from QVideo.cameras.Noise import QNoiseSource
from QVideo.lib import QVideoScreen

app = QtWidgets.QApplication([])

source = QNoiseSource()          # synthetic noise — no hardware needed
screen = QVideoScreen()
source.newFrame.connect(screen.setImage)

screen.show()
source.start()
app.exec()

Replace QNoiseSource with QOpenCVSource, QGenicamSource, etc. to switch hardware — the rest of the code is identical.

Camera backends

Backend Class Hardware
cameras/Noise QNoiseCamera Synthetic — no hardware required
cameras/OpenCV QOpenCVCamera USB webcams via OpenCV
cameras/Genicam QGenicamCamera Abstract base for all GenICam/GigE Vision cameras
cameras/Flir QFlirCamera FLIR cameras via GenICam (Spinnaker GenTL producer)
cameras/Basler QBaslerCamera Basler cameras via GenICam (pylon GenTL producer)
cameras/IDS QIDSCamera IDS Imaging cameras via GenICam
cameras/MV QMVCamera Any GenICam camera via MATRIX VISION mvGenTLProducer
cameras/Vimbax QVimbaXCamera Allied Vision cameras via VimbaX GenTL producer
cameras/Picamera QPicamera Raspberry Pi camera module

Writing a new camera backend

Subclass QCamera and implement three methods:

from QVideo.lib import QCamera

class MyCamera(QCamera):

    def _initialize(self) -> bool:
        self.device = open_my_hardware()
        if not self.device:
            return False
        self.registerProperty('exposure',
                              getter=lambda: self.device.get_exposure(),
                              setter=lambda v: self.device.set_exposure(v),
                              ptype=float)
        return True

    def _deinitialize(self) -> None:
        self.device.close()

    def read(self):
        ok, frame = self.device.read_frame()
        return ok, frame

QCameraTree and QVideoSource work with MyCamera immediately — no additional code needed.

Acknowledgements

Work on this project at New York University is supported by the National Science Foundation of the United States under award number DMR-2428983 and by an award from the TAC Program of New York University.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qvideo-3.4.0.tar.gz (166.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qvideo-3.4.0-py3-none-any.whl (143.9 kB view details)

Uploaded Python 3

File details

Details for the file qvideo-3.4.0.tar.gz.

File metadata

  • Download URL: qvideo-3.4.0.tar.gz
  • Upload date:
  • Size: 166.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for qvideo-3.4.0.tar.gz
Algorithm Hash digest
SHA256 a81553ee53078ae0decb12a54a8bde7ef8be5e4b8e6cffeaab21238d404c191f
MD5 7a51b26e851e2f7e367deec0a67e5458
BLAKE2b-256 0119f4b51d99c01d929571e96c2860d1c1ae60f14c9cc3e1ac7bc545fe090fd5

See more details on using hashes here.

File details

Details for the file qvideo-3.4.0-py3-none-any.whl.

File metadata

  • Download URL: qvideo-3.4.0-py3-none-any.whl
  • Upload date:
  • Size: 143.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for qvideo-3.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9c7b5d6d6d14831f501c735c06a939fde315c5794f7c487f5cd43e81f1742f34
MD5 cf647be26c59cbe2b6842c2e730c6765
BLAKE2b-256 4a12b044bfdaff5faac0603d154344f30997eb47b78dc19cb85dba3af470b6bb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page