Skip to content

pradosh-dash/Ultrasound-Gesture-Recognition

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Wearable Echomyography System

A comprehensive Python implementation of a wearable ultrasound-based muscle monitoring system, inspired by "A wearable echomyography system based on a single transducer." Nature Electronics 7.11 (2024): 1035-1046."

Overview

This system uses echomyography (ultrasound-based muscle monitoring) to track muscle activity through a single transducer, offering significant advantages over traditional electromyography (EMG):

  • Higher signal stability - Actively transmitted ultrasound waves
  • Better spatial resolution - Direct tissue interface detection
  • Deeper tissue penetration - Can monitor muscles 6+ cm deep
  • No skin preparation required - Unlike EMG electrodes
  • Real-time monitoring - 50 Hz frame rate for responsive tracking

Applications

1. Diaphragm Monitoring

  • Continuous breathing pattern analysis
  • Respiratory disease monitoring
  • Ventilator weaning assessment
  • Sleep apnea detection

2. Hand Gesture Recognition

  • 13 degrees of freedom tracking
  • Prosthetic control interfaces
  • Virtual reality interactions
  • Rehabilitation monitoring

System Architecture


Wearable Echomyography System                

  Single Ultrasound Transducer                                
     ├── Piezoelectric Layer (4MHz center frequency)             
     ├── Backing Layer (vibration damping)                       
     └── Flexible Electrodes (serpentine design)                 

  Signal Processing Pipeline                                  
     ├── RF Signal Acquisition (12 MHz sampling)                 
     ├── Bandpass Filtering (2-6 MHz)                            
     ├── Envelope Detection (Hilbert transform)                  
     └── Tissue Boundary Detection                               

  Analysis Modules                                            
     ├── DiaphragmMonitor (breathing patterns)                   
     └── HandGestureClassifier (deep learning)                  

  Output Interface                                           
     ├── Real-time Monitoring                                   
     ├── Analysis Reports                                       
     └── Visualization Tools                                    

Quick Start

Installation

# Clone the repository
git clone https://github.com/pradosh94/Ultrasound-Gesture-Recognition
cd Ultrasound-Gesture-Recognition

# Install dependencies
pip install numpy tensorflow scipy matplotlib pandas

Basic Usage

from echomyography_system import EchomyographySystem
import numpy as np

# Initialize for diaphragm monitoring
system = EchomyographySystem("diaphragm")

# Process a single RF frame (1024 samples at 12 MHz)
rf_signal = np.random.randn(1024)  # Replace with actual data
results = system.process_real_time_frame(rf_signal)

print(f"Diaphragm thickness: {results['thickness']:.2f} mm")
print(f"Breathing mode: {results['breathing_mode']}")
print(f"DTF: {results['dtf']:.3f}")

Core Components

1. UltrasoundSignalProcessor

Purpose: Core signal processing for RF ultrasound data

Key Features:

  • Bandpass filtering (2-6 MHz for muscle imaging)
  • Envelope detection using Hilbert transform
  • Tissue boundary detection with peak finding
  • Automatic thickness calculation
processor = UltrasoundSignalProcessor(sampling_rate=12_000_000)

# Process RF signal
filtered_signal = processor.apply_bandpass_filter(rf_data)
envelope = processor.extract_envelope(filtered_signal)
boundaries = processor.detect_tissue_boundaries(envelope)
thickness = processor.calculate_tissue_thickness(boundaries)

2. DiaphragmMonitor

Purpose: Specialized breathing pattern analysis

Key Metrics:

  • DTF (Diaphragm Thickening Fraction): Primary breathing assessment metric
  • Respiratory Rate: Breaths per minute calculation
  • Breathing Mode Classification:
    • abdominal: DTF > 0.25 (deep diaphragmatic breathing)
    • mixed: DTF 0.10-0.25 (combined breathing)
    • thoracic: DTF < 0.10 (shallow chest breathing)
monitor = DiaphragmMonitor(signal_processor)

# Analyze breathing over time
for rf_frame in rf_data_stream:
    results = monitor.process_rf_frame(rf_frame)
    
    if results['breathing_mode'] == 'thoracic':
        print(" Shallow breathing detected!")

3. HandGestureClassifier

Purpose: Deep learning-based gesture recognition

Architecture:

  • 8-layer 1D CNN for feature extraction
  • Tracks 13 degrees of freedom:
    • 10 finger joint angles (MCP, PIP, IP)
    • 3 wrist rotations (roll, pitch, yaw)
  • Real-time prediction at 50 Hz
classifier = HandGestureClassifier()

# Train model (if you have training data)
# classifier.train_model(rf_signals, joint_angles)

# Predict gesture
gesture_results = classifier.predict_gesture(rf_signal)
joint_angles = gesture_results['joint_angles']
print(f"Wrist pitch: {joint_angles[-2]:.1f}°")

Usage Examples

Diaphragm Monitoring Example

import matplotlib.pyplot as plt

# Initialize system
diaphragm_system = EchomyographySystem("diaphragm")

# Collect data over time
thickness_history = []
dtf_history = []

for i in range(300):  # 6 seconds at 50 Hz
    # Get RF signal from hardware (simulated here)
    rf_signal = get_ultrasound_frame()  # Your hardware interface
    
    # Process frame
    results = diaphragm_system.process_real_time_frame(rf_signal)
    
    thickness_history.append(results['thickness'])
    dtf_history.append(results['dtf'])

# Generate comprehensive report
report = diaphragm_system.generate_report()
print(f"Average DTF: {report['average_dtf']:.3f}")
print(f"Breathing mode: {report['dominant_breathing_mode']}")

# Visualize results
diaphragm_system.visualize_results()

Hand Gesture Tracking Example

# Initialize gesture system
gesture_system = EchomyographySystem("gesture")

# Real-time gesture tracking
for rf_frame in realtime_rf_stream():
    results = gesture_system.process_real_time_frame(rf_frame)
    
    # Extract specific joint angles
    angles = results['predictions_dict']
    wrist_pitch = angles['wrist_pitch']
    index_mcp = angles['index_mcp']
    
    # Control external device
    if wrist_pitch > 45:
        robot_arm.move_up()
    elif abs(index_mcp) > 30:
        robot_arm.grasp()

Clinical Applications

Respiratory Monitoring

  • COPD patients: Detect breathing pattern changes
  • Ventilator weaning: Assess diaphragm function recovery
  • Sleep studies: Monitor breathing disorders
  • Exercise physiology: Breathing efficiency analysis

Rehabilitation

  • Hand therapy: Objective progress tracking
  • Prosthetic training: Natural control interfaces
  • Stroke recovery: Motor function assessment
  • Sports medicine: Movement pattern analysis

Customization & Extension

Adding New Breathing Patterns

def custom_breathing_classifier(dtf_sequence):
    """Custom breathing pattern classification"""
    if detect_irregular_pattern(dtf_sequence):
        return "pathological"
    elif detect_exercise_pattern(dtf_sequence):
        return "exercise"
    return "normal"

# Integrate into monitor
monitor.custom_classifier = custom_breathing_classifier

Training Custom Gesture Models

# Prepare training data
rf_training_data = load_rf_signals("training_data.npz")
gesture_labels = load_joint_angles("gesture_labels.npz")

# Train model
classifier = HandGestureClassifier()
history = classifier.train_model(rf_training_data, gesture_labels, epochs=200)

# Save trained model
classifier.model.save("custom_gesture_model.h5")

Research References

Primary Research: Gao, X. et al. "A wearable echomyography system based on a single transducer." Nature Electronics 7, 1035–1046 (2024).

License

This project is licensed under the MIT License. See LICENSE file for details.


About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages