{"dataset":{"id":"49","dataset_id":"nm000104","name":"emg2qwerty: A Large Dataset with Baselines for Touch Typing using Surface Electromyography","description":"NEMAR Dataset nm000104: emg2qwerty - EMG-based typing detection","owner_user_id":2,"status":"active","github_repo":"nemarDatasets/nm000104","concept_doi":"10.82901/nemar.nm000104","latest_version_doi":"10.82901/nemar.nm000104.v2.0.0","created_at":"2026-01-19 03:25:23","updated_at":"2026-07-10 21:42:44","zenodo_concept_id":null,"is_sandbox":0,"visibility":"public","ezid_status":"public","enrichment_json":"{\n  \"version\": \"2.0\",\n  \"pipeline_stage\": \"enriched\",\n  \"title\": \"emg2qwerty: A Large Dataset with Baselines for Touch Typing using Surface Electromyography\",\n  \"description\": \"emg2qwerty is the largest public surface electromyography (sEMG) dataset to date, comprising 1,135 sessions from 108 participants performing touch typing on a QWERTY keyboard. The dataset captures wrist-based sEMG signals (32 channels, 2000 Hz sampling rate) synchronized with keystroke ground truth, totaling 346.4 hours of data and 5.26 million keystrokes. Designed to enable keyboard-free text input through decoding of typing intent from neuromuscular activity, the dataset supports research in sequence-to-sequence learning, cross-user generalization, domain adaptation, and neuromotor interfaces for AR/VR and accessibility applications.\",\n  \"methods_description\": \"Participants performed touch typing on an Apple Magic Keyboard while wearing two sEMG Research Devices (one per wrist), each with 16 dry gold-plated differential electrode pairs sampled at 2000 Hz with 12-bit resolution and ±6.6 mV dynamic range. Keystrokes were recorded via keylogger with ±0.5 ms precision. Text prompts consisted of random dictionary words and filtered Wikipedia sentences. Sessions lasted 9.5-47.5 minutes depending on typing speed. Between sessions, wristbands were completely removed and re-donned to simulate realistic electrode placement variability. Preprocessing included 40 Hz high-pass filtering, clock drift correction, and temporal alignment between devices.\",\n  \"license\": \"CC-BY-NC-SA-4.0\",\n  \"authors\": {\n    \"Viswanath Sivakumar\": {},\n    \"Jeffrey Seely\": {},\n    \"Alan Du\": {},\n    \"Sean R. Bittner\": {},\n    \"Adam Berenzweig\": {},\n    \"Anuoluwapo Bolarinwa\": {},\n    \"Alexandre Gramfort\": {},\n    \"Michael I. Mandel\": {}\n  },\n  \"keywords\": [\n    {\n      \"term\": \"Electromyography\",\n      \"subject_scheme\": \"MeSH\",\n      \"value_uri\": \"https://id.nlm.nih.gov/mesh/D004576\"\n    },\n    {\n      \"term\": \"motor control\",\n      \"subject_scheme\": \"MeSH\",\n      \"value_uri\": \"https://id.nlm.nih.gov/mesh/D009048\"\n    },\n    {\n      \"term\": \"sequence-to-sequence learning\"\n    },\n    {\n      \"term\": \"domain adaptation\"\n    },\n    {\n      \"term\": \"brain-computer interfaces\",\n      \"subject_scheme\": \"MeSH\",\n      \"value_uri\": \"https://id.nlm.nih.gov/mesh/D001931\"\n    },\n    {\n      \"term\": \"keystroke decoding\"\n    },\n    {\n      \"term\": \"keystroke dynamics\"\n    },\n    {\n      \"term\": \"keystroke recognition\"\n    },\n    {\n      \"term\": \"transfer learning\"\n    },\n    {\n      \"term\": \"sEMG\"\n    },\n    {\n      \"term\": \"wrist-based EMG\"\n    },\n    {\n      \"term\": \"wearable sensors\",\n      \"subject_scheme\": \"MeSH\",\n      \"value_uri\": \"https://id.nlm.nih.gov/mesh/D061608\"\n    },\n    {\n      \"term\": \"accessibility\"\n    },\n    {\n      \"term\": \"neuromotor interfaces\"\n    }\n  ],\n  \"related_identifiers\": [\n    {\n      \"identifier\": \"https://github.com/nemarDatasets/nm000104\",\n      \"identifier_type\": \"URL\",\n      \"relation_type\": \"IsDescribedBy\"\n    },\n    {\n      \"identifier\": \"https://nemar.org/dataexplorer/detail?dataset_id=nm000104\",\n      \"identifier_type\": \"URL\",\n      \"relation_type\": \"IsDescribedBy\"\n    },\n    {\n      \"identifier\": \"10.5281/zenodo.17287903\",\n      \"identifier_type\": \"DOI\",\n      \"relation_type\": \"IsVersionOf\"\n    },\n    {\n      \"identifier\": \"10.5281/zenodo.17613953\",\n      \"identifier_type\": \"DOI\",\n      \"relation_type\": \"IsIdenticalTo\"\n    },\n    {\n      \"identifier\": \"10.82901/nemar.nm000104\",\n      \"identifier_type\": \"DOI\",\n      \"relation_type\": \"IsVersionOf\"\n    },\n    {\n      \"identifier\": \"10.48550/arXiv.2410.20081\",\n      \"identifier_type\": \"DOI\",\n      \"relation_type\": \"IsDescribedBy\"\n    }\n  ],\n  \"funding_references\": [\n    {\n      \"funder_name\": \"Meta Reality Labs\"\n    },\n    {\n      \"funder_name\": \"Meta Reality Labs\",\n      \"award_number\": \"CTRL-labs\"\n    }\n  ],\n  \"resource_type_specific\": \"EMG Dataset\",\n  \"modalities\": [\n    \"emg\"\n  ],\n  \"source_hash\": \"60b91588f724eab705677fd68b372d460e424310713c5f30fe08d2ae9334d186\"\n}","last_activity_at":"2026-02-12 09:49:28","source":null,"source_id":null,"subject_count":108,"modalities":"emg","age_min":null,"age_max":null,"file_size":239682241934,"total_files":5693,"tasks":"typing","metadata_columns_error":null,"staleness_warn_stage":null,"staleness_admin_notified_at":null,"authors":"Viswanath Sivakumar, Jeffrey Seely, Alan Du, Sean R. Bittner, Adam Berenzweig, Anuoluwapo Bolarinwa, Alexandre Gramfort, Michael I. Mandel","license":"CC-BY-NC-SA-4.0","readme":"# emg2qwerty: Touch Typing from Surface Electromyography\n\n## Overview\n\n**Dataset**: emg2qwerty - Touch typing from wrist-based surface electromyography\n**Task**: Touch typing on QWERTY keyboard\n**Participants**: 108 subjects\n**Sessions**: 1,135 total (average 10 per subject, range 1-18)\n**Duration**: 346.4 hours total (9.5-47.5 min per session)\n**Publication**: Sivakumar et al., 2024 - \"emg2qwerty: A Large Dataset with Baselines for Touch Typing using Surface Electromyography\"\n\n### Purpose\n\nThis dataset captures wrist-based sEMG signals during touch typing on a physical keyboard. The goal is to enable keyboard-free text input by decoding typing intent directly from neuromuscular activity, with applications in AR/VR, mobile computing, and brain-computer interfaces.\n\nThis is the largest public sEMG dataset to date, specifically designed to study:\n- Cross-user generalization\n- Cross-session adaptation (domain shift from electrode placement)\n- Sequence-to-sequence learning (analogous to automatic speech recognition)\n- High-bandwidth neuromotor interfaces\n\n## Dataset Details\n\n### Participants\n\n**Sample size**: 108 participants\n**Demographics**: Not available (age, sex, handedness marked as n/a)\n**Screening**: Touch typists with >90% correct finger-to-key mapping\n**Typing speed**: 130-439 keys/min (mean: 265 keys/min, ~4.4 keys/sec)\n\n### Hardware\n\n**Device**: sEMG Research Device (sEMG-RD)\n**Configuration**: Two wristbands (left and right wrists)\n**Channels**: 32 total (16 per wrist)\n**Sampling rate**: 2000 Hz\n**Bit depth**: 12 bits\n**Dynamic range**: ±6.6 mV\n**Bandwidth**: 20-850 Hz\n**Connectivity**: Bluetooth\n**Electrode type**: Dry gold-plated differential pairs\n\n### Recording Setup\n\n**Keyboard**: Apple Magic Keyboard (US English)\n**Text prompts**:\n- Random words from dictionary\n- Sentences from English Wikipedia\n- Filtered for offensive terms\n- Lowercase with basic punctuation only\n\n**Ground truth**: Keylogger recording key-down and key-up timestamps (±0.5 ms precision)\n**Backspace usage**: Allowed (natural typing behavior)\n\n### Session Protocol\n\n1. Participant dons two sEMG-RDs (one per wrist)\n2. Types prompted text on physical keyboard\n3. Keylogger records all keystrokes with timestamps\n4. sEMG signals streamed via Bluetooth\n5. Between sessions: Bands doffed and re-donned (realistic electrode placement variability)\n\n**Session duration**: 9.5-47.5 minutes (depends on typing speed)\n**Inter-session protocol**: Complete band removal and replacement to simulate real-world usage\n\n## Data Contents\n\n### Files per Session\n\n```\nsub-XXXXXXXX/ses-YYYYYYYYYY/emg/\n├── sub-XXXXXXXX_ses-YYYYYYYYYY_task-typing_emg.edf\n├── sub-XXXXXXXX_ses-YYYYYYYYYY_task-typing_emg.json\n├── sub-XXXXXXXX_ses-YYYYYYYYYY_task-typing_channels.tsv\n├── sub-XXXXXXXX_ses-YYYYYYYYYY_task-typing_events.tsv\n└── sub-XXXXXXXX_ses-YYYYYYYYYY_electrodes.tsv\n```\n\n### Channel Configuration\n\n**Total channels**: 32\n- EMG0-EMG15: Left wrist\n- EMG16-EMG31: Right wrist\n\n**Channel naming**: Unique across entire dataset (EMG0-EMG31)\n**Electrode naming**: E0-E15 (reused for left and right wrists)\n**Reference**: Bipolar (differential sensing)\n\n**channels.tsv columns**:\n- `name`: Channel identifier (EMG0-EMG31)\n- `type`: EMG\n- `units`: V\n- `signal_electrode`: Physical electrode name (E0-E15)\n- `reference`: bipolar\n- `group`: left or right (wrist)\n- `target_muscle`: forearm muscles\n\n**electrodes.tsv columns**:\n- `name`: Electrode identifier (E0-E15)\n- `x`, `y`, `z`: 3D coordinates (percent units, no decimals)\n- `coordinate_system`: leftForearm or rightForearm\n- `group`: left or right\n\n### Events\n\n**events.tsv contains**:\n- **Keystroke events**: Individual key-press and key-release\n  - `type`: keystroke_X (where X is the key character)\n  - `latency`: Sample index of keystroke\n  - `duration`: Samples from press to release\n  - `key`: Character typed\n- **Prompt events**: Text prompts shown to participant\n  - `type`: prompt\n  - `prompt_text`: Displayed text\n\n**Total keystrokes**: 5,262,671 across all sessions\n\n### Coordinate Systems\n\n**Two separate coordinate systems** (space entities):\n\n**Left Forearm** (`space-leftForearm_coordsystem.json`):\n```\nEMGCoordinateSystem: Other\nEMGCoordinateUnits: percent\nX: USP → RSP (0-100%)\nY: Right-hand rule perpendicular (limits: Olecranon Process → Cubital Fossa)\nZ: Midpoint RSP-USP → Lateral Humeral Epicondyle\n```\n\n**Right Forearm** (`space-rightForearm_coordsystem.json`):\n```\nEMGCoordinateSystem: Other\nEMGCoordinateUnits: percent\nX: RSP → USP (0-100%, reversed from left)\nY: Right-hand rule perpendicular (limits: Olecranon Process → Cubital Fossa)\nZ: Midpoint RSP-USP → Lateral Humeral Epicondyle\n```\n\n**Anatomical landmarks**:\n- RSP: Radial Styloid Process\n- USP: Ulnar Styloid Process\n- LHE: Lateral Humeral Epicondyle\n\n**Note**: Same physical device worn on both wrists with reversed differential polarity\n\n## Signal Processing\n\n### Preprocessing Applied\n\n1. **High-pass filtering**: 40 Hz cutoff (removes DC drift, motion artifacts)\n2. **Clock drift correction**: Synchronization between devices and laptop\n3. **Temporal alignment**: Left/right wristband sample alignment (±0.5 ms)\n4. **Irregular sampling handling**: Resampling applied when deviation >1%\n\n### Signal Characteristics\n\n**Typical features**:\n- Muscle activation precedes keystroke by ~tens of milliseconds\n- Different muscles activate for different fingers\n- \"Co-articulation\" effects: sEMG affected by adjacent keystrokes\n- Bigram/trigram context important for fast typists\n\n**Receptive field**: Models typically need ~1 second context\n\n## Baseline Performance\n\n### Published Results (Sivakumar et al., 2024)\n\n**Generic Model** (100 training users):\n- Validation CER: 52.10 ± 5.54% (with 6-gram LM)\n- Test CER: 51.78 ± 4.61% (with 6-gram LM)\n- **Interpretation**: Unusable without personalization\n\n**Personalized Model** (finetuned from generic):\n- Validation CER: 8.31 ± 3.19% (with 6-gram LM)\n- Test CER: 6.95 ± 3.61% (with 6-gram LM)\n- **Best user**: 3.16% CER\n- **Usability threshold**: ~10% CER\n\n**Model architecture**: Time Depth Separable ConvNets (TDS)\n**Loss function**: Connectionist Temporal Classification (CTC)\n**Language model**: 6-gram modified Kneser-Ney (trained on WikiText-103)\n\n### Key Findings\n\n1. **Generalization emerges at scale**: 100+ users needed for meaningful representations\n2. **Personalization essential**: Generic model alone has >50% CER\n3. **Domain shift is severe**: Cross-user variation much larger than cross-session\n4. **No obvious user clusters**: Every user requires individual adaptation\n\n## Data Splits\n\n### Benchmark Setup (from paper)\n\n**Training set**: 100 users (all sessions except 2 validation per user)\n**Validation set**: 2 sessions from each of 100 training users\n**Test set**: 8 held-out users\n  - Each test user: Multiple sessions split into train/val/test\n  - Used for personalization experiments\n\n**Note**: This split ensures test users don't influence generic model hyperparameters\n\n## Use Cases\n\n### Machine Learning\n\n- **Sequence-to-sequence learning**: Similar to ASR but with different generative process\n- **Domain adaptation**: Cross-user, cross-session generalization\n- **Transfer learning**: Generic models with user-specific fine-tuning\n- **Few-shot learning**: Data-efficient personalization\n- **Language modeling**: Backspace-aware beam search decoding\n\n### Neuroscience\n\n- **Motor control**: Understand muscle coordination during fine motor tasks\n- **Motor learning**: Track typing skill changes across sessions\n- **Neuromuscular variability**: Study individual differences in muscle recruitment\n\n### Applications\n\n- **Keyboard-free typing**: Text entry without physical keyboard\n- **AR/VR interfaces**: Text input for head-mounted displays\n- **Silent communication**: Private text entry in public spaces\n- **Accessibility**: Alternative input for users with limited mobility\n\n## Known Issues and Limitations\n\n### By Design\n\n- **Touch typing required**: Not representative of hunt-and-peck typists\n- **English only**: Language-specific\n- **Physical keyboard**: Not actual keyboard-free typing\n- **Typing style variation**: Individual strategies differ (especially non-fluent typists)\n- **No demogr","bids_version":"1.11.0","sessions_count":1135,"publish_date":"2026-01-19 03:25:23","embedding_dirty":0,"license_tier":"noncommercial","zarr_status":"ready","zarr_converted_at":"2026-09-05 03:07:29","zarr_store_count":1131,"zarr_index_etag":"6de8782cadd0c8394a40f4955fc3bafc","zarr_source_commit":"673eaae90fb7354977495f4670aa195c77f22a98","archive_status":null,"archive_size":null,"archive_retry_count":0,"records_status":null,"archive_skip_reason":"Archive (>100 GB) removed to save space; use the per-file direct download (#752).","zarr_errors":5,"zarr_failure_count":0,"zarr_deterministic":0,"zarr_failed_at":"2026-09-05 03:07:29","num_dataset_citations":1,"num_datapaper_citations":0,"n_channels":null,"electrode_system":null,"has_hed":0,"hed_version":null,"is_exemplar":0,"bytes_present":398991921444,"data_complete":1,"withdrawn_at":null,"withdrawn_reason":null,"archive_complete":null,"archive_absent_files":null,"archive_declared_files":null,"zarr_pool_breaks":0,"total_recording_duration":1240633,"recording_duration_min":335,"recording_duration_max":2851,"recording_count":1131,"recordings_unavailable":0,"recordings_measured":1131,"channel_count_min":32,"channel_count_max":32,"sampling_frequency":null,"power_line_frequency":null,"eeg_reference":null,"placement_scheme":null,"sweep_stamps":"{\"enrichment_updated_at\":\"2026-02-23 07:49:20\",\"metadata_updated_at\":\"2026-05-16 07:29:35\",\"archive_checked_at\":\"2026-06-17 01:02:40\",\"zarr_checked_at\":\"2026-06-07 17:57:58\",\"records_checked_at\":null,\"citations_updated_at\":\"2026-09-05 03:00:26\",\"channel_montage_checked_at\":null,\"hed_checked_at\":\"2026-06-30 03:44:41\",\"data_checked_at\":\"2026-07-22 04:44:25\",\"availability_report_at\":\"2026-07-23 01:04:10\",\"signal_defaults_at\":\"2026-09-02 11:34:36\",\"zarr_verify_attempted_at\":\"2026-09-04 03:00:42\",\"zarr_verified_at\":\"2026-09-04 03:00:43\",\"zarr_verified_commit\":\"\",\"zarr_verify_status\":\"unverifiable\",\"zarr_verify_examples\":[],\"zarr_verify_sampled\":40.0,\"zarr_verify_checked\":0.0,\"zarr_verify_checked_channels\":0.0,\"zarr_verify_checked_duration\":0.0,\"zarr_verify_checked_rate\":0.0,\"zarr_verify_unchecked\":40.0,\"zarr_verify_mismatch_count\":0.0,\"zarr_verify_examples_truncated\":0.0}","participants":108,"num_citations":1,"latest_version":"v2.0.0","zarr_verify_status":"unverifiable","zarr_verified_at":"2026-09-04 03:00:43","owner_username":"yahya","owner_github":"neuromechanist","file_size_formatted":"223 GB","zarr_data_failures":{"count":0,"detail_ref":"zarr/index.json","pending":5,"discovered":1136},"zarr_index_url":"https://zarr.nemar.org/nm000104/zarr/index.json","attestation_deposit_type":null,"attestation_key_status":null,"attestation_deidentified":null,"attestation_no_duplicate":null,"attestation_upstream_source":null,"attestation_accepted_at":null}}