{"id":14982739,"url":"https://github.com/jss95/araviq6","last_synced_at":"2025-10-29T16:30:57.215Z","repository":{"id":38257799,"uuid":"499902295","full_name":"JSS95/araviq6","owner":"JSS95","description":"Python package for NDArray-based processing of QVideoFrame with Qt6.","archived":false,"fork":false,"pushed_at":"2023-09-26T06:45:56.000Z","size":1295,"stargazers_count":9,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-10-12T01:21:34.258Z","etag":null,"topics":["image-processing","numpy","pyqt6","pyside6","python","qt6"],"latest_commit_sha":null,"homepage":"https://araviq6.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JSS95.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-04T18:09:26.000Z","updated_at":"2024-06-27T05:36:02.000Z","dependencies_parsed_at":"2024-09-28T08:00:38.462Z","dependency_job_id":null,"html_url":"https://github.com/JSS95/araviq6","commit_stats":{"total_commits":261,"total_committers":2,"mean_commits":130.5,"dds":0.04980842911877392,"last_synced_commit":"883b5ae7798f1ff1a0177b0d55cf8efa461970e6"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JSS95%2Faraviq6","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JSS95%2Faraviq6/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JSS95%2Faraviq6/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JSS95%2Faraviq6/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JSS95","download_url":"https://codeload.github.com/JSS95/araviq6/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219857515,"owners_count":16556062,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["image-processing","numpy","pyqt6","pyside6","python","qt6"],"created_at":"2024-09-24T14:05:56.438Z","updated_at":"2025-10-29T16:30:51.774Z","avatar_url":"https://github.com/JSS95.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AraViQ6 - NDArray-based Video processing with Qt6\n\n[![PyPI version](https://badge.fury.io/py/AraViQ6.svg)](https://badge.fury.io/py/AraViQ6)\n[![Python Version](https://img.shields.io/pypi/pyversions/araviq6)](https://pypi.org/project/araviq6/)\n[![Build Status](https://github.com/JSS95/araviq6/actions/workflows/ci.yml/badge.svg)](https://github.com/JSS95/araviq6/actions/workflows/ci.yml)\n[![Documentation Status](https://readthedocs.org/projects/araviq6/badge/?version=latest)](https://araviq6.readthedocs.io/en/latest/?badge=latest)\n[![License](https://img.shields.io/github/license/JSS95/araviq6)](https://github.com/JSS95/araviq6/blob/master/LICENSE)\n\nAraViQ6 is a Python package which integrates NDArray-based image processing with video pipeline of Qt6.\n\nIt provides:\n- QVideoFrame processor based on array processing\n- Converters between NDArray and QVideoFrame\n- Convenience classes and widgets for array displaying\n\nThe following Qt bindings are supported:\n- [PySide6](https://pypi.org/project/PySide6/)\n- [PyQt6](https://pypi.org/project/PyQt6/)\n\n# How to use\n\nThere are two ways to use AraViQ6; using QVideoFrame-based pipeline, or using NDArray-based pipeline.\n\n## Frame-based pipeline\n\nFrame-based pipeline is a high-level approach that works well with Qt Multimedia scheme.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/JSS95/araviq6/raw/master/doc/source/_images/frame-pipeline.jpg\"/\u003e\u003cbr\u003e\n    QVideoFrame pipeline with AraViQ6\n\u003c/div\u003e\n\nFrame-based pipeline consists of:\n1. `VideoFrameWorker`\n2. `VideoFrameProcessor`\n\nQVideoFrame comes from and goes to Qt6's `QVideoSink`. AraViQ6's\n`VideoFrameWorker` converts QVideoFrame to numpy array, performs processing, and sends the results to downstream in both QVideoFrame and NDArray. User may subclass the worker to define own processing.\n\n`VideoFrameProcessor` wraps the worker and provides API around it.\nWorker is mulithreaded in the processor.\n\n## Array-based pipeline\n\nArray-based pipeline is a low-level approach.\nIt can be useful when third-party package provides video frame in numpy array format.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/JSS95/araviq6/raw/master/doc/source/_images/array-pipeline.jpg\"/\u003e\u003cbr\u003e\n    NDArray pipeline with AraViQ6\n\u003c/div\u003e\n\nArray-based pipeline consists of:\n\n1. `FrameToArrayConverter`\n2. `ArrayWorker`\n3. `ArrayProcessor`\n4. `ArrayToFrameConverter`\n\n`FrameToArrayConverter` and `ArrayToFrameConverter` performs conversion between frame pipeline and array pipeline.\nTo retain the metadata (e.g., timestamp) of QVideoFrame, these classes includes the original frame for the array.\n\n`ArrayWorker` performs processing on incoming array and sends the result to downstream in NDArray. User may subclass the worker to define own processing.\n\n`ArrayProcessor` wraps the worker and provides API around it.\nWorker is mulithreaded in the processor.\n\n## Convenicence classes\n\nAraViQ6 also provides various convenience classes to make building the pipeline easier.\n\nThe following classes help setting array pipeline with the video source and the display.\n- `NDArrayVideoPlayer`\n- `NDArrayMediaCaptureSession`\n- `NDArrayLabel`\n\nThe following classes are plug-and-play widgets where user can process the video with minimal boilerplate.\n- `PlayerProcessWidget`\n- `CameraProcessWidget`\n\n# Examples\n\nUse cases are provided in [examples](https://github.com/JSS95/araviq6/tree/master/doc/source/examples) directory.\nThey can be found in documentation as well.\n\n# Installation\n\nBefore you install, be careful for other Qt-dependent packages installed in your environment.\nFor example, non-headless OpenCV-Python modifies the Qt dependency thus can make other Qt bindings unavailable.\n\n`araviq6` can be installed using `pip`.\n\n```\n$ pip install araviq6\n```\n\n# Documentation\n\nAraViQ6 is documented with [Sphinx](https://pypi.org/project/Sphinx/).\nDocumentation can be found on Read the Docs:\n\n\u003e https://araviq6.readthedocs.io/\n\nIf you want to build the document yourself, clone the source code and install with `[doc]` option.\nGo to `doc` directory and build the document.\n\n```\n$ pip install araviq6[doc]\n$ cd doc\n$ make html\n```\n\nDocument will be generated in `build/html` directory. Open `index.html` to see the central page.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjss95%2Faraviq6","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjss95%2Faraviq6","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjss95%2Faraviq6/lists"}