Core Classes¶
MGT-python is built around several core classes that provide the main functionality for musical gesture analysis. This guide covers the primary classes and their key methods.
Class Hierarchy¶
MgVideo (inherits from MgAudio)
├── MgAudio
├── Mg360Video (specialized video class)
└── Flow (optical flow analysis)
Utility Classes:
├── MgFigure (plotting utilities)
├── MgImage (image handling)
└── MgList (list processing)
MgVideo Class¶
The MgVideo
class is the primary interface for video analysis and inherits all audio functionality from MgAudio
.
Constructor¶
MgVideo(
filename, # Video file path or list of paths
array=None, # Optional: numpy array input
fps=None, # Override frame rate
path=None, # Output path
# Preprocessing options
filtertype="Regular", # Motion filter type
thresh=0.05, # Motion detection threshold
starttime=0, # Start time in seconds
endtime=0, # End time in seconds (0 = full video)
blur="None", # Blur type: "None", "Heavy", "Medium"
skip=0, # Frame skipping (0 = no skip)
frames=0, # Limit number of frames
rotate=0, # Rotation angle in degrees
color=True, # Color (True) or grayscale (False)
contrast=0, # Contrast adjustment (-1 to 1)
brightness=0, # Brightness adjustment (-1 to 1)
# Cropping options
crop_movement=False, # Auto-crop to motion area
motion_box_thresh=0.1, # Motion detection threshold for cropping
motion_box_margin=1, # Margin around motion box
# Manual cropping
cropx=None, # Manual crop x coordinates [start, end]
cropy=None, # Manual crop y coordinates [start, end]
# Output options
target_name=None, # Custom output filename
overwrite=False, # Overwrite existing files
outdir=None # Output directory
)
Key Properties¶
mv = mg.MgVideo('video.mp4')
# Basic video properties
print(f"Filename: {mv.filename}")
print(f"Width: {mv.width}")
print(f"Height: {mv.height}")
print(f"Length: {mv.length} seconds")
print(f"Frame rate: {mv.fps}")
print(f"Frame count: {mv.framecount}")
print(f"Output directory: {mv.outdir}")
# Check if color or grayscale
print(f"Color video: {mv.color}")
# Access underlying OpenCV VideoCapture
print(f"Video capture object: {mv.cap}")
Motion Analysis Methods¶
Basic Motion Analysis¶
# Complete motion analysis - most common method
motion_data = mv.motion(
filtertype='Regular', # 'Regular', 'Binary', 'Blob'
thresh=0.05, # Motion threshold (0-1)
blur='None', # Blur: 'None', 'Heavy', 'Medium'
use_median=False, # Use median filtering
kernel_size=5, # Morphological kernel size
normalize=False, # Normalize motion values
inverted_motiongram=False, # Invert motiongram colors
target_name=None, # Custom output name
overwrite=False # Overwrite existing files
)
# Returns dictionary with:
# - 'motion_video': path to motion video
# - 'motion_data': path to CSV data file
Optical Flow Analysis¶
# Dense optical flow
flow_data = mv.flow(
type='Dense', # 'Dense' or 'Sparse'
target_name=None,
overwrite=False
)
# Sparse optical flow with feature tracking
flow_sparse = mv.flow(
type='Sparse',
corners_max=100, # Maximum corners to track
quality_level=0.3, # Corner detection quality
min_distance=7, # Minimum distance between corners
block_size=7 # Size of averaging window
)
Visualization Methods¶
Motiongrams¶
# Create horizontal and vertical motiongrams
motiongrams = mv.motiongrams(
filtertype='Regular',
thresh=0.05,
blur='None',
use_median=False,
normalize=False,
inverted_motiongram=False,
target_name_x=None, # Custom name for horizontal
target_name_y=None, # Custom name for vertical
overwrite=False
)
# Returns dictionary:
# - 'mg_x': horizontal motiongram path
# - 'mg_y': vertical motiongram path
Average Images¶
# Standard average
average_img = mv.average(
method='mean', # 'mean', 'median'
target_name=None,
overwrite=False
)
# Median average (good for removing outliers)
median_avg = mv.average(method='median')
Motion History¶
# Create motion history visualization
history = mv.history(
history_length=10, # Number of frames in history
target_name=None,
overwrite=False,
normalize=False
)
Videograms¶
# Extract pixel intensity over time
videograms = mv.videograms(
target_name_x=None,
target_name_y=None,
overwrite=False
)
# Returns paths to horizontal and vertical videograms
Centroid and Feature Extraction¶
# Motion centroid tracking
centroid = mv.centroid(
filtertype='Regular',
thresh=0.05,
target_name=None,
overwrite=False
)
# Pose estimation (requires OpenPose)
pose_data = mv.pose(
pose_model='BODY_25', # Pose model type
target_name=None,
overwrite=False
)
Video Processing Methods¶
# Apply video effects and transformations
blend_result = mv.blend(
blend_mode='difference', # Blending mode
target_name=None,
overwrite=False
)
# Subtract background
subtract_result = mv.subtract(
method='mog2', # Background subtraction method
target_name=None,
overwrite=False
)
# Create video grid
grid_result = mv.grid(
height=300, # Grid cell height
rows=3, # Number of rows
cols=3, # Number of columns
padding=0, # Padding between cells
margin=0, # Margin around grid
target_name=None,
overwrite=False
)
MgAudio Class¶
The MgAudio
class handles all audio processing functionality and is inherited by MgVideo
.
Constructor¶
MgAudio(
filename, # Audio/video file path
array=None, # Optional: numpy array input
sr=None, # Sample rate override
offset=0.0, # Start offset in seconds
duration=None, # Duration to load in seconds
mono=True, # Convert to mono
dtype=np.float32 # Data type for audio array
)
Audio Analysis Methods¶
Waveform Visualization¶
audio = mg.MgAudio('audio.wav')
waveform = audio.waveform(
mono=True, # Mono or stereo display
title='Waveform', # Plot title
target_name=None, # Output filename
overwrite=False,
dpi=300, # Image resolution
autoshow=True # Display plot automatically
)
Spectrogram Analysis¶
spectrogram = audio.spectrogram(
window_size=4096, # FFT window size
overlap=0.5, # Window overlap (0-1)
mel=True, # Use mel scale
power=2.0, # Power for amplitude
title='Spectrogram',
target_name=None,
overwrite=False,
autoshow=True
)
Audio Descriptors¶
descriptors = audio.descriptors(
window_size=1024, # Analysis window size
hop_size=512, # Hop size between windows
target_name=None,
overwrite=False
)
# Creates CSV file with:
# - Spectral centroid
# - Spectral rolloff
# - Spectral bandwidth
# - Zero crossing rate
# - MFCC coefficients
# - Chroma features
# - Tonnetz features
Tempo and Beat Analysis¶
tempogram = audio.tempogram(
window_size=384, # Window size for tempo analysis
hop_size=192, # Hop size
target_name=None,
overwrite=False,
autoshow=True
)
Self-Similarity Matrix¶
ssm = audio.ssm(
feature='mfcc', # Feature type: 'mfcc', 'chroma', 'tonnetz'
distance_metric='cosine', # Distance metric
target_name=None,
overwrite=False,
autoshow=True
)
Flow Class¶
Specialized class for optical flow analysis.
Constructor¶
flow = Flow(
filename, # Video file path
color=True, # Color or grayscale
starttime=0, # Start time
endtime=0, # End time
target_name=None, # Output name
overwrite=False
)
Flow Analysis Methods¶
# Dense optical flow
dense_flow = flow.dense(
save_plot=True, # Save flow visualization
save_data=True, # Save flow data
save_video=True # Save flow video
)
# Sparse optical flow
sparse_flow = flow.sparse(
corners_max=100,
quality_level=0.3,
min_distance=7,
block_size=7,
save_plot=True,
save_data=True,
save_video=True
)
Utility Classes¶
MgFigure¶
Handle plot creation and customization:
from musicalgestures._utils import MgFigure
fig = MgFigure(
figure=plt.figure(), # Matplotlib figure
figure_type='plot', # Type of figure
data=data_array, # Associated data
layers=[], # Plot layers
title='My Plot' # Figure title
)
MgImage¶
Handle image operations:
from musicalgestures._utils import MgImage
img = MgImage(
image=image_array, # Image data
title='My Image', # Image title
xlabel='X Label', # X-axis label
ylabel='Y Label' # Y-axis label
)
Common Usage Patterns¶
Complete Analysis Workflow¶
import musicalgestures as mg
# Load video with preprocessing
mv = mg.MgVideo(
'performance.mp4',
starttime=10, # Skip intro
endtime=120, # First 2 minutes
color=False, # Grayscale for motion
filtertype='Regular', # Motion filter
thresh=0.1 # Motion threshold
)
# Perform all analyses
motion = mv.motion()
motiongrams = mv.motiongrams()
average = mv.average()
history = mv.history()
# Audio analysis
spectrogram = mv.audio.spectrogram()
descriptors = mv.audio.descriptors()
tempogram = mv.audio.tempogram()
print("Analysis complete!")
Error Handling¶
import musicalgestures as mg
try:
mv = mg.MgVideo('video.mp4')
motion = mv.motion()
print("Success!")
except FileNotFoundError:
print("Video file not found")
except ValueError as e:
print(f"Invalid parameters: {e}")
except Exception as e:
print(f"Unexpected error: {e}")
Next Steps¶
- Video Processing Guide - Advanced video techniques
- Audio Analysis Guide - Detailed audio processing
- Motion Analysis Guide - Motion detection techniques
- API Reference - Complete method documentation