Skip to main content

title: YAMS emoji: 🍠 colorFrom: purple colorTo: purple sdk: gradio sdk_version: 5.15.0 app_file: yams/main.py pinned: false license: mit

YAMS

Yet Another Motionsense Service utility

Code | PyPI | 🤗 Demo (UI only)

Quickstart

Pre-compiled version

  • Download the latest release from here

Development

  1. (optional) create a dedicated conda environment
    • conda create -n yams python=3.12
    • conda activate yams
  2. Clone this repository
    • git clone https://github.com/SenSE-Lab-OSU/YAMS.git
    • cd yams
  3. Install dependencies
    • pip install -r requirements.txt
  4. Config liblsl
    • conda install -c conda-forge liblsl
  5. Lauch YAMS
    • python -m yams

(Deprecated) Windows

Python 3.12 or newer is needed

  1. Download setup scripts
  2. Run the installation script
    • Run the script by double-click the install.bat file
    • The script will perform any necessary setup
  3. Start the app
    • by double-click the start_yams.bat file
    • Once the initialization is completed, you will see a messge similar to: * Running on local URL: http://127.0.0.1:7860
  4. Access the application

(Deprecated) MacOS / Linux

  1. Download scripts/unix to a desired location
  2. Run run.sh to install and start the app

General usage

Download onboard data

Refer to Extract onboard data

Extract raw data

Refer to Data Extraction Feature

Emergency stop

Terminating data collection is also available in YAMS web app under bluetooth scanner - collection control - stop

To halt all on-going collection on the MotionSenSE wristbands,

  • On windows, go to your folder where the setup scripts are located as in Quickstart-Windows part
  • Locate and double-click emergency_stop.bat
  • Wait until all operations are completed

Installation

  • pip install -U yams-util
  • python -m yams

Development guide

  • Clone the repository
    • git clone https://github.com/SenSE-Lab-OSU/YAMS.git
  • Install dependencies
    • pip install -r requirements.txt
  • Launch the application
    • python -m yams
  • Visit http://127.0.0.1:7860 (by default, check on-screen prompt)

Build guide

  • Install pyinstaller via pip install pyinstaller
  • Create .spec by pyi-makespec --collect-data=gradio_client --collect-data=gradio --collect-data=safehttpx --collect-data=groovy --onefile app.py
  • Manually add the following in a = analysis ...
    module_collection_mode={
        'gradio': 'py',  # Collect gradio package as source .py files
    },
  • Build the app: pyinstaller app.spec

MacOS

pyi-makespec --collect-data=gradio_client --collect-data=gradio --collect-data=safehttpx --collect-data=groovy --onefile --osx-bundle-identifier 'com.yams' --icon yams/resources/icons/yams.icns app.py

Instructions

(advanced) running data extraction in command line

Run from the project root:

python -m yams.data_extraction -i "data_in" -o "data_out"

All options:

Flag Default Description
-i, --in_dir (required) Directory containing .bin files
-o, --out_dir ./ Output directory
--save_format csv Output format: csv or pickle
--ignore_id off Skip subject/session ID parsing; use raw filenames
--legacy_fs off Use 25 Hz clock for CDCT (uncommon, old devices)
--force_new_format off Force v4.7.0+ binary layout regardless of uuid.txt version
--mode dir dir: single folder of .bin files; batch: folder of .zip archives

Data type detection — the extractor scans the input folder and processes whichever file types are present:

File pattern Sensor Output
[id]ac*.bin IMU (AccX/Y/Z, QuatX/Y/Z, ENMO) [id]ac.csv
[id]ppg*.bin PPG (ir1, ir2, g1, g2) [id]ppg.csv
[id]ecg*.bin MAX30001 ECG (ECG, ETAG, PTAG) [id]ecg.csv

A single run extracts all types present. Missing types are silently skipped.

Examples:

# Wristband (AC + PPG) — firmware auto-detected from uuid.txt
python -m yams.data_extraction -i "data/subject01" -o "out/subject01"

# Wristband on v4.7.0+ firmware (force if uuid.txt is absent or reports wrong version)
python -m yams.data_extraction -i "data/subject01" -o "out/subject01" --force_new_format

# ECG only folder (e.g. data/260708_ecg containing ecg*.bin)
python -m yams.data_extraction -i "data/260708_ecg" -o "out/ecg" --ignore_id

# Mixed folder with both wristband and ECG files
python -m yams.data_extraction -i "data/session01" -o "out/session01" --force_new_format --ignore_id

# Save as pickle, skip ID parsing
python -m yams.data_extraction -i "data/subject01" -o "out/subject01" --save_format pickle --ignore_id

# Batch extract a folder of zip archives
python -m yams.data_extraction -i "data_in" --mode batch

Notes:

  • The device version is read automatically from uuid.txt. If v4.7.0+, the new binary layout (uint32 PPG, quaternion IMU, 32-bit counter at 512 Hz) is used for AC/PPG; otherwise the legacy layout is used. Use --force_new_format to override.
  • ECG binary format (ecg*.bin) is always parsed the same way regardless of firmware version — it uses 12-byte CRC-validated frames with a 512 Hz sequence counter.
  • ECG output columns: ECG (signed 18-bit ADC count), ETAG (0 = valid sample, 2 = leads off), PTAG, Counter, CDCT, Datetime.

Roadmap

  • Device data transfer
  • Device data post processing
    • format conversion
    • visualization
  • simple data collection utilities
  • LSL support
  • Auto reconnect
  • Selected file download
  • Advanced device monitoring [ ] global state: active connection, active outlet, ctl status [ ] BAT monitoring [ ] storage monitoring

Acknowledgement

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yams_util-1.6.0.tar.gz (55.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yams_util-1.6.0-py3-none-any.whl (50.3 kB view details)

Uploaded Python 3

File details

Details for the file yams_util-1.6.0.tar.gz.

File metadata

  • Download URL: yams_util-1.6.0.tar.gz
  • Upload date:
  • Size: 55.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for yams_util-1.6.0.tar.gz
Algorithm Hash digest
SHA256 aeaddc613d17adc034f7941bcfe853e05eb1e699fa98c433e83b527a2c567fc5
MD5 c3c8ac9512e71b28a88a7ac45c4b2ffe
BLAKE2b-256 be178fc3be6aa6b4f4593a98bb0ecf523e97de60cba5c588f8ea5c6c3c0b66cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for yams_util-1.6.0.tar.gz:

Publisher: python-publish.yml on SenSE-Lab-OSU/YAMS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file yams_util-1.6.0-py3-none-any.whl.

File metadata

  • Download URL: yams_util-1.6.0-py3-none-any.whl
  • Upload date:
  • Size: 50.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for yams_util-1.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e99732b79a94c159dc533679755c443851383f02daa5e1e386d637a17fa53a73
MD5 cf0eacd908efb4f71db7e7b829490f37
BLAKE2b-256 972fd6d45faa78e0c378585078adc3670e18acca475ca533ef1e7cd6b5466796

See more details on using hashes here.

Provenance

The following attestation bundles were made for yams_util-1.6.0-py3-none-any.whl:

Publisher: python-publish.yml on SenSE-Lab-OSU/YAMS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.6.0 This release

2 files

1.5.0

2 files

1.4.1

2 files

1.3.0

2 files

1.2.3

2 files

1.2.2

2 files

1.2.1

2 files

1.2.0

2 files

1.1.2

2 files

1.1.1

2 files

1.1.0

2 files

1.0.0

2 files

0.3.0

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page