Releases: mad-lab-fau/gaitmap
Releases · mad-lab-fau/gaitmap
v2.5.1 - Made things more reliable
[2.5.1] - 2024-05-27
Fixed
The package updates in 2.5.0 broke some things. These are now fixed.
- For the parameter errors, the order of the output parameters has changed slightly, as they are now sorted to avoid
future breaking changes, based on changes in the sor policy in pandas - The matches for the stride matching are now sorted to avoid future breaking changes, based on changes in the sor
policy in scipy sparse arrays - The
PCAAlignment
is now more robust by enforcing a direction of the first principal component.
The method also has a new attributenormalized_pca_components_
that hold the components after this adjustment.
This change might result in different results for the PCA step of the alignment.
However, in combination with the forward direction alignment, the results should be identical to the previous version.
v2.5.0 - Looser version constrains
v2.4.0 - Some small fixes and features
[2.4.0] - 2024-04-19
Added
- All orientation and trajectory methods now have a new parameter
rotated_data_
that provides the input data rotated
to the world frame based on the calculated orientation.
(#64) - The Spatial Parameter Calculation now also calculates the "Range of Motion" (i.e. the angle change of the sensor in
the sagittal plane) (#54)
Fixed
- Fixed a bug that when using
merge_interval
with empty input of shape (0, 2), the output was not empty.
(#61) - Fixed a bug that an error was raised when importing from the TrajectoryReconstruction module without gaitmap_mad
installed (#63)
Changed
v2.3.0 - Easier download of example data
[2.3.0] - 2023-08-03
Changed
- Example data is now automatically downloaded if it is not already present.
(#49)
v2.2.3 - Fix Spatial Parameter Calculation for empty inputs
[2.2.3] - 2023-07-18
Fixed
- Spatial parameter calculation now works when no strides are detected for a sensor.
(#48)
v2.2.2 - HMM fix for newer numpy versions
[2.2.2] - 2023-06-22
Fixed
- Fixed bug in HMM when uneven sequnece length were provided. In newer numpy versions this requires an explicit cast to
an object array.
v2.2.1 - Fixed Event Detection Edge Case
[2.2.1] - 2023-06-22
Fixed
- Fixed edecase where the output of the stride event method had the events in the wrong order for some strides.
The reason for that is that a valid segmented stridelist does not always result in a valid min_vel_event list for
algorithms that are allowed to search outside the segmented stride region (e.g.HerzerEventDetection
).
We now check for consistency again after the stride list conversion.
v2.2.0 - First Public Release
[2.2.0] - 2023-06-07
Gaitmap is now available as official PyPi package!!!
Added
- New Algorithm:
MadgwickRtsKalman
.
This is a slightly modified implementation of theRtsKalman
algorithm.
Instead of naive gyro integration it uses theMadgwick
algorithm to estimate the orientation.
(#15) - Certain ZUPT detectors now return the
min_vel_index_
andmin_vel_value_
as additional attributes.
These values represent the index in the input data with the lowest velocity and the corresponding velocity value
(according to the internal metric of the repective ZUPT detector).
(#16) - New example explaining more advanced usage of the
RtsKalman
algorithm.
(#17) - The
find_extrema_in_radius
and thesnap_to_min
utility functions gained the ability to define asymetric search
windows around the search indices.
(#21) - Temporal and Spatial Parameter calculation have new options to work with ic-stride lists and with partial input
information - A new method
calculate_parameter_errors
(old version is renamed tocalculate_aggregated_parameter_errors
) is
added that allows to calculate just the errors (i.e. relative error, absolute error, etc.) for a given list of
parameters. If you want to have the aggregated parameter errors (i.e. mean absolute error, mean relative error, etc.)
use thecalculate_aggregated_parameter_errors
method.
Changed
- We now require Pandas >2.0 as we are using the new pandas dtypes.
It could be that this will require you to perform some explicit type conversion in your code. - The Zupt Detector example is updated to use newer tpcp features
(#17) - The column order of the Spatial Parameter Calculation output has been changed
- The function
calculate_parameter_errors
is renamed tocalculate_aggregated_parameter_errors
function is now more
general and can be used with parameter lists that don't represent strides.
For this the unique-id column (i.e. original stride index) is can be explicitly set and all wording is changed to
be more general.
(#24) - Fixed a bug that the calculation of the ICC in
calculate_parameter_errors
/calculate_aggregated_parameter_errors
was not working correctly, when the stride ids where duplicated across sensors.
2.1.1a0 - Pypi testing
v2.1.1a0 Created prerelease for testing
v2.1.0
[2.1.0] - 2023-02-08
Added
- HIGHLIGHT: Finally reworked the HMM branch, added tests and documentation and adapted the API to fit the rest of
the gaitmap and tpcp ecosystem better.
(#3).
On the way, there were also some bugs fixed and internal computations were optimized.
If you were using the HMM branch before, read through the HMM examples again before updating!
All the classes and methods have new names and import paths.
Further, you will likely not get exactly the same results.
However, when using the pretrained model, changes should be minimal.
If you were training your own model, it might be that you get different results, as you might have been effected by
a bug in the training code when using "labeled" training with the composite model
(for details: #4).
This is fixed now! So please retrain your models. - A new version of the
RamppEventDetection
is added.FilteredRamppEventDetection
adds a lowpass filter before the
detection of the IC to remove potential high-freq artifacts. - New higher level transformers that allow for complex combinations and chaining of transformers.
Most of them make use of the newtpcp
composite Algorithm feature that allows to easily get and set complicated
nested parameters.
New transformers include:ChainedTransformer
,ParallelTransformer
(#2) - New implementation of a Filter class and a
ButterworthFilter
implementation on top of the transformer API.
(#2) - Added a new
flip_dataset
function that can be used instead ofrotate_dataset
, when you only need to perform 90/180
degree rotations.
It is much faster thanrotate_dataset
, as it just flips the axis labels and multiplies values by -1.
(#10) - New Zupt detecor methods:
AredZuptDetectors
andShoeZuptDetectors
.
The ARED detector is a special case of the existingNormZuptDetector
(using specifically the mean of the gyr norm)
and the SHOE detector uses a combination of acc and gyr data.
(#11) - All Zupt detectors have a new parameter
window_overlap_samples
that can be used as alternative towindow_overlap
to specify the window overlap in samples independent of the sampling rate.
(#11) - Added new example to show how the Zupt Detector can be tuned to improve the performance of the trajectory estimation
kalman filter.
(#11) - It is now possible to only detect a subset of the supported events of an event detection method using the
detect_only
parameter.
(#12) - The function
calculate_parameter_errors
now also outputs the number of strides used for matching per parameter.
(#13) - The function
calculate_parameter_errors
returns way more parameters.
All basic statistics are now calculated for the error, relative error, absolute error and the relative absolute error.
Ifpingouin
is installed, we also calculte the ICC.
(#13) - A new utility method to intersect stride lists by a region of interest list.
(#14) - A new ZuptDetector method
StrideEventZuptDetector
that simply returns the min_vel events of an already provided
event list as ZUPTs.
This is enabled by the newstride_event_list
parameter of thedetect
method of all ZuptDetector methods (see
Changes)
(#14) - A new ZuptDetector method
ComboZuptDetector
that allows to combine the output of multiple ZuptDetector methods using
either logical "or" or "and".
(#14) - The
PerSampleZuptDetectorMixin
andRegionZuptDetectorMixin
are now public API to simplify the implementation of
custom ZUPT detectors.
(#14)
Changed
- When using
memory
with any of Dtw methods, we will not cache the peak detection step anymore.
It does not really speed up things and just leads to dozents of cache writes/reads as the chance of a cache match is
really low. - The
zupts_
result ofRtsKalmanFilter
is not a pandas dataframe withstart
andend
columns instead of a
np.ndarray.
The content remains the same. - The
sampling_rate_hz
parameter of thedetect
method of theEventDetection
algorithms is now keyword only.
(#12) - For the function
calculate_parameter_errors
the naming of ground truth was changed to reference and input to
predicted.
This change requires updating the function call in your code.
(#13) - For all trajectory/pos/ori methods, the
sampling_rate_hz
parameter is now keyword only.
This might require some user facing code changes.
(#14) - Trajectory/pos/ori and ZUPT methods can now get an optional parameter called
stride_event_list
as parameter for the detect
method.
So far, only the RTS Kalman Filter is using this parameter to forward it to the ZUPT method.
Both wrapper (Stride-level and Region) are both aware of this parameter and pass them correctly down to the respective
methods.
(#14) - The util method
start_end_array_to_bool_array
now assumes that the end index of all regions is inclusive.
This enables roundtrip conversion with thebool_array_to_start_end_array
method and is in line with the definitions
used for strides, ROIs, and ZUPTs in gaitmap.
Further, the method now supports to output arrays that are shorter than the largest input index.
Before, this resulted in an error.
Both changes might require some user facing code changes, if this function is used.
However, as it was not used internally, it is likely that no one was using it anyway.
(#14)
Removed
- The
find_zupts
method of theRtsKalmanFilter
and all deprecated arguments are now fully removed in favor of the
dedicated ZUPT algorithms.
The parameters where deprecated since version 1.5
Migration Guide
- There are a bunch of small changes that are not backwards compatible.
The most important is likely the change to make thesampling_rate_hz
parameter (and other) keyword only in many
methods.
This means, you need to use the parameter name when calling these methods.
For example, if you useddetect(data, 100)
before, you now need to usedetect(data, sampling_rate_hz=100)
.