Source code for QVideo.demos.yolodemo

#!/usr/bin/env python3
'''Demo combining a live video feed, camera controls, and a YOLO overlay.

Run directly::

    python -m QVideo.demos.yolodemo

See :mod:`QVideo.overlays.yolo` for literature references.
'''

from QVideo.demos.demo import Demo
from QVideo.lib import QCameraTree
from QVideo.overlays import QYoloWidget


__all__ = ['YoloDemo']


[docs] class YoloDemo(Demo): '''Extends :class:`~QVideo.demos.demo.Demo` with a YOLO overlay. Adds a :class:`~QVideo.overlays.yolo.QYoloWidget` control panel below the camera control tree. Detected object bounding boxes are rendered in real time as a rectangle overlay on the video screen. Parameters ---------- cameraTree : QCameraTree The camera control tree widget to display alongside the video feed. model_name : str YOLO model weights file passed to :class:`~QVideo.overlays.yolo.QYoloWidget`. Default: ``'yolo11n.pt'``. **kwargs : Additional keyword arguments forwarded to :class:`~QVideo.demos.demo.Demo`. ''' def __init__(self, cameraTree: QCameraTree, model_name: str = 'yolo11n.pt', **kwargs) -> None: super().__init__(cameraTree, **kwargs) self.yolo = QYoloWidget(self, model_name=model_name) self.yolo.source = self.screen.source self.screen.addOverlay(self.yolo.overlay) self._controls.addWidget(self.yolo)
def main() -> None: # pragma: no cover '''Launch the YOLO demo with an interactively chosen camera.''' import sys import pyqtgraph as pg from QVideo.lib import choose_camera pg.mkQApp() camera = choose_camera().start() try: widget = YoloDemo(camera) except ImportError as e: print(f'Error: {e}', file=sys.stderr) sys.exit(1) widget.show() pg.exec() if __name__ == '__main__': # pragma: no cover main()