- New class CrossSection. This is to prepare for water level estimation functionalities. It provides several geometrical operations along a cross section. This is documented yet. and may change significantly in the near future.
cli.cli_utils.get_gcps_optimized_fit
now export rotation and translation vectors also, for later use in front end functionalities (e.g. show pose of camera interactively).
progress bars while reading can be configured with new flag progress
Reading of last frame in video often got errors. This is now more robust
Writing with frames.to_video
became very slow with the latest video reader, this has been fixed, it is now very fast.
get_piv
now uses several engines, engine="numba"
is a lot fastr
Reading frames is now a lot more efficient as they are read in bulks (20 by default). As a result, very large videos can be processed efficiently.
openpiv is still default, but may become deprecated in future versions.
- fixing
rasterio
to version <1.4.0 to allow 2d array transforms
A logo with modifications in trademark guidelines in TRADEMARK.md and README.md. Logo is also shown in the online documentation on https://localdevices.github.io/pyorc
Frames.project
with method="numpy"
is improved so that it also works well in heavily undersampled areas.
Video
instances defaulting with lazy=False
. This in most cases increases the speed of video treatment significantly.
For large videos with large memory requirements, videos can be opened with lazy=True
.
The legacy setup.py
has been replaced by a pyproject.toml
using flit installer.
Frames.project
with method="numpy"
is improved so that it also works well in heavily undersampled areas.
Video
instances will default with lazy=False
in v0.6.0. A warning message will appear for now
Plots of videos that are projected with method="numpy"
were not correctly projected in commnad-line use, as they were still using cv
as method. Now, method="numpy"
is forced on plots as well, when using the command-line interface (direct use of the API requires the user to ensure the projection method is correct).
Projection with method="numpy"
sometimes results in missing values in the result when parts of the objective are outside the camera view. This consequently results in only zero values when difference filtering is applied. This has been fixed.
Video
instances can now be made with lazy=False
(default is True
). In this case, frames of videos are read in one go instead of lazily per frame. This consumes more memory but is a lot faster. For tested workflows from opening videos to writing and masking of velocities, this reduces the compute time with about 20%.
frames.project
now has a method
option which allows for choosing projection using opencv-methods (method="cv"
)
which is currently still the default, or numpy-like operations (method="numpy"
). method="numpy"
is new and we
may change the default behaviour to this option in a later release as it is much more robust in cases with a lot
of lens distortion and where part of the area of interest is outside of the field of view.
Videos can now be rotated, e.g. if a camera was setup with vertical orientation, without having a metadata tag for this.
Video rotation can be defined in the camera configuration, on the CLI with --rotation
using either 90
, 180
or 270
as measured in degrees, or for individual single videos as an additional input argument to pyorc.Video
e.g. pyorc.Video(..., rotation=90)
.
Some default values for estimating the intrinsic lens parameters from control points are changed. We now estimate the first two barrel distortion coefficients if enough information for constraining them is available.
In some cases, ground control points were not correctly projected from real-world to camera coordinates. This seemed to be an issue only on windows machines. This is now fixed.
--lowmem
option added in the CLI for very large videos and/or low resource devices.
Calling of the service level now works through one function call that executes all actions within the service. All inputs to these functions MUST be in deserialized form. This generalizes the approach by which a service is executed which was necessary for getting ready for nodeOpenRiverCam (not released yet), which will be a shell around pyopenrivercam for scalable computation across a cloud. API / CLI users do not notice a difference.
Notebook 02 in the examples folder contained a deprecation error with the stabilize option for opening videos. This has been corrected and functionality description improved.
- removed the strict cartopy dependency. This enables pip installation for users that are not interested in geographical plotting. Enables also installation on raspi platforms (only 64-bit!)
- Transects sometimes gave infinite discharge when areas with zero depth received a small velocity. This has now been resolved.
- make it a lot easier to get well-calibrated ground control and lens parameters at the same time. we now do this by optimizing the lens' focal length and (if enough ground control is provided) barrel distortion whilst fitting the perspective to the user-provided ground control points.
- provide the fitted ground control points in the interface so that the user can immediately see if the ground control points are well fitted or if anything seems to be wrong with one or more control points.
- feature stabilization on command line which consequently provided user-interfacing to select non-moving areas by pointing and clicking.
- Much-improved stabilization for non-stable videos
- stabilization can also be configured in CameraConfig level to accomodate slightly moving fixed rigs
- h_a can be provided on command-line instead of in recipe
- old velocimetry.filter_... methods are now entirely removed
The most notable change is that the code now includes an automatically installed command-line interface. This will facilitate a much easier use by a large user group. Also the documentation is fully updated to include all functionalities for both command-line users and API users. In detail we have the following additions:
- First release of a command-line interface for the entire process of camera configuration, processing and preparing outputs and figures.
- Service layer that makes it easy for developers to connect pyorc to apps such as GUIs or dashboards.
- Full user guide with description of both the command-line interface and API.
- Small modifications and additions in the API to accomodate the command-line interface building.
- Bug fixes in the video objects causing videos to sometimes not open properly because of missing frames
- Documentation for velocimetry and masking
- filtering changed into mask as subclass pyorc.Velocimetry.mask
- all functions starting with pyorc.Velocimetry.filter....
- scipy 1.10.0 release causing regression error in xarray.Dataset.interp
- perspective transform with 6 gcps
- several small bugs
- Video.set_lens_calibration added automated camera calibration with chessboard
- User guide
- Improved pytest code coverage
- several API modifications to accommodate lens calibration and 6-point orthorectification
- CameraConfig format changed
- CameraConfig.lens_parameters no longer used (replaced by camera_matrix and dist_coeffs)
- CameraConfig.gcps extended orthorectification with 6(+)-point x, y, z perspective option
- CameraConfig.set_corners changed into set_bbox_from_corners (setting a POLYGON as property bbox)
- CameraConfig.set_lens_parameters
- pyorc.Video added stabilize option for video stabilization
- Start with user guide
- Improved pytest code coverage
- pyorc.transect.get_q added method="log_interp" using a log-depth normalized velocity and linear interpolation
- pyorc.transect.get_q improved method="log_fit" (former "log_profile"), so that it works if no dry bed points are found
- pytest
- small improvements and bug fixes
- Documentation
- docstrings (numpy format, and completed)
- small improvements and bug fixes
- API for entire library
- Example notebooks (+binders)
- Conda environment
- Restructured code
- Data model in xarray (with lazy dask workflows)
- First release