A curated list of open technology projects to sustain a stable climate, energy supply, biodiversity and natural resources.

pyOpenRiverCam

Surface velocity, object tracking, and river flow measurements in an open-source API.
https://github.com/localdevices/pyorc

Category: Hydrosphere
Sub Category: Freshwater and Hydrology

Keywords

computer-vision hydrology hydrometry velocimetry

Last synced: about 14 hours ago
JSON representation

Repository metadata

Surface velocity, object tracking, and river flow measurements in an open-source API

README.md

pyOpenRiverCam

PyPI
Conda-Forge
codecov
docs_latest
Binder
License
downloads

pyorc, short for "pyOpenRiverCam" is a fully Open Source library for performing image-based river flow analysis. It is the underlying library for
computations on the fully open software stack OpenRiverCam. pyorc can only be successful if the underlying methods
are made available openly for all. Currently pyorc implements Large-scale Particle Image Velocimetry (LSPIV) based
flow analysis using the OpenPIV library and reprojections and image pre-processing with OpenCV. We wish to extend this
to Large-scale Particle Tracking Velocimetry (LSPTV) and Space-Time Image Velocimetry (STIV) for conditions that are less favourable for LSPIV using open
libraries or extensions to this code.

example_image
Image: Example of pyorc velocimetry over Ngwerere river at the Zambezi Road crossing - Lusaka, Zambia.

Current capabilities are:

  • Reading of frames and reprojection to surface
  • Velocimetry estimation at user-defined resolution
  • Discharge estimation over provided cross-section
  • Plotting of velocimetry results and cross-section flows in camera, geographical and orthoprojected perspectives.

We use the well-known xarray data models and computation pipelines (with dask) throughout the entire library to
guarantee an easy interoperability with other tools and methods, and allow for lazy computing.

We are seeking funding for the following frequently requested functionalities:

  • Exports to simple text formats and GIS-compatible layers
  • Exports to augmented reality videos
  • Implementation of additional processing algorithms (STIV and LSPTV)
  • Implementation of several optical methods for reading water levels
  • Improved nighttime / poor weather conditions processing through learning approaches

If you wish to fund this or other work on features, please contact us at [email protected].

note: For instructions how to get Anaconda (with lots of pre-installed libraries) or Miniconda (light weight) installed, please go to https://docs.conda.io/projects/conda/en/latest/

manual: Please go to https://localdevices.github.io/pyorc for the latest documentation

compatibility: At this moment pyorc works with any video compatible with OpenCV as long as it has proper metadata.

Installation

You need a python environment. We recommend using the Miniforge project. Download
the latest miniforge installer from https://github.com/conda-forge/miniforge and follow the installation instructions
before continuing installing pyorc.

virtual environment

To get started with pyorc, we recommend to set up a python virtual environment. This ensures that installed libraries
pyorc will not conflict with other libraries or library versions which you may need for other projects.

Setting up a virtual environment can be done with:

python -m venv pyorc_env

this creates a new folder pyorc_env on your disk which contains your virtual environment.
After activating the environment, any package you install will be installed in this environment only.
Activating in Unix/Linux is done as follows:

source pyorc_env/bin/activate

In Windows, the activation script is in a different folder. Type the following to activate the environment.

pyorc_env\Scripts\activate

Installation for direct use

If you simply want to add pyorc to an existing python installation or virtual environment, then follow these
instructions.

First activate the environment you want pyorc to be installed in (if you don't care about virtual environments, then
simply skip this step). See the above sub-section for information. You can simply install pyorc with all its
dependencies as follows:

pip install pyopenrivercam[extra]

The [extra] section ensures that also geographical plotting is supported, which we recommend especially for the
set up of a camera configuration.

Upgrading from pypi with pip

Did you read about a new version and you want to upgrade? Simply activate your virtual environment, type

pip install --upgrade pyopenrivercam[extra]

and then enjoy the latest features.

installation with mamba package manager

If you use mamba as a package manager, then the steps are the same, except for the installation step, which is:

mamba install pyopenrivercam

Installation from latest code base

To install pyorc from scratch in a new virtual environment from the code base, go through these steps. Logical cases
when you wish to install from the code base are when you wish to have the very latest non-released version.

First, clone the code with git and move into the cloned folder.

git clone https://github.com/localdevices/pyorc.git
cd pyorc

Set up a virtual environment with all dependencies as follows:

conda env create -f envs/pyorc-dev.yml
conda activate pyorc-dev

then install pyorc from the code base as follows:

pip install .

note: pyorc is now installed in a virtual environment called pyorc-dev. This means that if you wish to run
python with pyorc. You need to always first activate this environment before running python (or jupyter). This is
done with the following command:

conda activate pyorc-dev

Installation from latest code base as developer

Clone the repository with ssh and move into the cloned folder.

git clone [email protected]:localdevices/pyorc.git
cd pyorc

Setup a virtual developers environment and install the package as follows:

conda env create -f envs/pyorc-dev.yml
conda activate pyorc-dev
pip install -e .

Make sure you install pre-commit hooks so that code is properly linted before pushing.

pip install pre-commit
pre-commit install

Using pyorc

To use pyorc, you can use the API for processing. A command-line interface is forthcoming pending funding.
A manual is also still in the making.

Acknowledgement

The first development of pyorc has been supported by the World Meteorological Organisation - HydroHub.

License

pyorc is licensed under AGPL Version 3 (see LICENSE file).

pyorc uses the following important libraries and software with said licenses.

Package Version License
ffpiv 0.1.2 AGPLv3
numpy 1.26.4 BSD License
opencv2 4.10.0 MIT License
openpiv 0.25.3 GPLv3
matplotlib 3.9.2 Python Software Foundation License
geopandas 1.0.1 BSD License
pandas 2.2.2 BSD License

Project organisation

.
├── CHANGELOG.md        <- Version-based changelog documentation
├── README.md           <- This file
├── LICENSE             <- License file containing AGPLv3.0 license terms
├── TRADEMARK.md        <- Trademark guidelines
├── pyproject.toml      <- setup pipeline compatible with pip
├── environment.yml     <- YML-file for setting up a conda environment with dependencies
├── docs                <- Sphinx documentation source code
    ├── ...             <- Sphinx source code files
├── examples            <- Jupyter notebooks with examples how to use the API
    ├── ...             <- individual notebooks and folder with example data files
├── pyorc               <- pyorc library
    ├── ...             <- pyorc functions and API files
├── tests               <- pytest suite
    ├── ...             <- pytest functions on API level

Owner metadata


GitHub Events

Total
Last Year

Committers metadata

Last synced: 5 days ago

Total Commits: 486
Total Committers: 3
Avg Commits per committer: 162.0
Development Distribution Score (DDS): 0.004

Commits in past year: 31
Committers in past year: 1
Avg Commits per committer in past year: 31.0
Development Distribution Score (DDS) in past year: 0.0

Name Email Commits
hcwinsemius h****s@g****m 484
Stephen Mather 1****r 1
Rick Hagenaars r****s@m****m 1

Committer domains:


Issue and Pull Request metadata

Last synced: 1 day ago

Total issues: 134
Total pull requests: 67
Average time to close issues: 3 months
Average time to close pull requests: 1 day
Total issue authors: 16
Total pull request authors: 2
Average comments per issue: 0.75
Average comments per pull request: 0.48
Merged pull request: 66
Bot issues: 0
Bot pull requests: 0

Past year issues: 39
Past year pull requests: 22
Past year average time to close issues: 25 days
Past year average time to close pull requests: about 19 hours
Past year issue authors: 8
Past year pull request authors: 1
Past year average comments per issue: 0.59
Past year average comments per pull request: 0.59
Past year merged pull request: 21
Past year bot issues: 0
Past year bot pull requests: 0

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/localdevices/pyorc

Top Issue Authors

  • hcwinsemius (112)
  • Ilhamrafi (3)
  • abhisek-acharya (3)
  • moroth89 (2)
  • amirdastgheib (2)
  • RodrigoMR89 (2)
  • lflowers39 (1)
  • farhanvicena (1)
  • NajafiRoja (1)
  • Shen001 (1)
  • Andreas-Bombaert (1)
  • A290-65 (1)
  • riddle911 (1)
  • MemoGonzalez23 (1)
  • Mohawker47 (1)

Top Pull Request Authors

  • hcwinsemius (66)
  • smathermather (1)

Top Issue Labels

  • bug (24)
  • enhancement (12)
  • documentation (1)
  • invalid (1)

Top Pull Request Labels


Package metadata

pypi.org: pyopenrivercam

pyorc: free and open-source image-based surface velocity and discharge.

  • Homepage:
  • Documentation: https://pyopenrivercam.readthedocs.io/
  • Licenses: GNU Affero General Public License v3
  • Latest release: 0.8.5 (published about 1 month ago)
  • Last Synced: 2025-04-25T12:04:04.011Z (1 day ago)
  • Versions: 31
  • Dependent Packages: 1
  • Dependent Repositories: 1
  • Downloads: 982 Last month
  • Rankings:
    • Stargazers count: 6.634%
    • Forks count: 7.217%
    • Dependent packages count: 10.126%
    • Average: 11.922%
    • Downloads: 14.098%
    • Dependent repos count: 21.535%
  • Maintainers (1)
conda-forge.org: pyopenrivercam

pyOpenRiverCam is an open-source API for estimating surface velocity and river flow from IP, drone or smartphone camera videos. It performs preprocessing, surface velocity estimation, spurious velocity filtering, cross section sampling, infilling of missings, and integration to discharge. A user only needs to perform light field work and collect videos. It is pure python code and therefore easy to take up in your own software project or perform research with or develop new features.

  • Homepage: https://github.com/localdevices/pyorc
  • Licenses: AGPL-3.0-only
  • Latest release: 0.3.0 (published over 2 years ago)
  • Last Synced: 2025-04-01T02:09:57.253Z (26 days ago)
  • Versions: 3
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Rankings:
    • Stargazers count: 32.513%
    • Dependent repos count: 34.025%
    • Forks count: 37.31%
    • Average: 38.756%
    • Dependent packages count: 51.175%

Dependencies

.github/workflows/documentation.yml actions
  • actions/checkout v3 composite
  • conda-incubator/setup-miniconda v2 composite
  • peaceiris/actions-gh-pages v3.8.0 composite
.github/workflows/pypi-publish.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v3 composite
  • pypa/gh-action-pypi-publish 27b31702a0e7fc50959f5ad993c78deac1bdfc29 composite
.github/workflows/pypitest-publish.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v3 composite
  • pypa/gh-action-pypi-publish 27b31702a0e7fc50959f5ad993c78deac1bdfc29 composite
.github/workflows/tests.yml actions
  • actions/checkout v2 composite
  • codecov/codecov-action v1 composite
  • conda-incubator/setup-miniconda v2 composite
Dockerfile docker
  • continuumio/miniconda3 latest build
docs/requirements.txt pypi
  • ipykernel *
  • matplotlib *
  • nbsphinx *
  • pandoc *
  • pydata_sphinx_theme *
  • sphinx ==5.3
  • sphinx-design *
  • sphinx-gallery *
  • sphinx_autosummary_accessors *
  • sphinx_rtd_theme *
  • sphinxcontrib-programoutput *
setup.py pypi
  • click *
  • cython *
  • dask *
  • descartes *
  • flox *
  • geojson *
  • geopandas *
  • matplotlib *
  • netCDF4 *
  • numba *
  • numpy *
  • opencv-python *
  • openpiv *
  • packaging *
  • pip *
  • pyproj *
  • pythran *
  • pyyaml *
  • rasterio *
  • scikit-image *
  • scipy *
  • shapely *
  • tqdm *
  • typeguard *
  • xarray *
environment.yml conda
  • cartopy
  • dask
  • descartes
  • flox
  • geojson
  • geopandas
  • geos
  • jupyter
  • matplotlib
  • netcdf4
  • numba
  • numpy
  • opencv
  • pip
  • pyproj
  • python
  • rasterio
  • requests
  • scikit-image
  • scipy
  • shapely
  • tqdm
  • typeguard
  • xarray
  • yaml

Score: 13.12705236689046