Simon Lee’s Status Report for Feb 28

This week I focused on integrating the Scan Layer preprocessing pipeline with the Optical Music Recognition (OMR) stage and building tools to validate that the preprocessing output produces reliable symbolic music data. My goal was to move the system from an isolated preprocessing pipeline to a functional end-to-end scan workflow that converts sheet music images into structured MusicXML data.

Integrated Audiveris OMR Execution

The main milestone this week was connecting the preprocessing pipeline directly to the Audiveris OMR engine. Previously the system stopped after producing normalized images, but it can now automatically pass the cleaned image output into Audiveris and generate MusicXML files. I implemented this integration using Python subprocess calls so the pipeline can invoke Audiveris programmatically and capture the resulting MusicXML output.

Once this was working, I tested the system on multiple sheet music samples to verify that the preprocessing improvements from last week were producing images that Audiveris could reliably interpret. I also validated the generated MusicXML by importing the results into MuseScore, which made it easier to visually compare the recognized notes against the original sheet music. This proof-of-concept confirmed that the preprocessing stage is producing OMR-compatible images and that the overall scan pipeline is technically feasible.

Implemented MusicXML Validation and Cleaning

After OMR execution, I began implementing a validation and cleanup stage for the generated MusicXML. OMR output can occasionally include inconsistent metadata, missing attributes, or formatting irregularities that can break downstream parsing. To address this, I used the music21 library to parse the generated MusicXML files and enforce a consistent structure.

This stage verifies that measures are correctly defined, removes unnecessary metadata, and ensures that note and duration information can be safely extracted by the Conversion Layer. The goal is to guarantee that the output from the Scan Layer is not only readable but also structurally reliable for the rest of the LumiKey pipeline.

Built Visualization Tools for Scan Layer Processing

To better understand how preprocessing affects OMR performance, I developed visualization scripts that highlight the structural features extracted from sheet music images. These tools overlay detected staff lines, barlines, and candidate noteheads on top of the processed image, making it easier to confirm that the system is correctly identifying musical structure before OMR is executed.

These visualizations also helped refine several preprocessing parameters, such as thresholding behavior and morphological filters used to isolate staff lines. In addition to helping with debugging, the visualization outputs will also be useful for illustrating the Scan Layer architecture in our design report.

Status Report 4 Requirements: Part B

Cultural factors were considered in the design of LumiKey because music education is strongly shaped by cultural traditions, learning practices, and accessibility within different communities. Many cultures place significant value on learning traditional instruments such as the piano, yet access to formal instruction and specialized digital instruments can vary widely depending on economic and regional circumstances. By designing LumiKey as a retrofit system that works with existing acoustic or digital pianos, the project respects the cultural importance of traditional instruments while lowering barriers to entry for learners. The system also avoids requiring proprietary hardware or software ecosystems, allowing it to be adapted for use in diverse educational settings, including home practice, community music programs, and classrooms across different cultural contexts.

Schedule

I am currently on schedule. The Scan Layer is now capable of running the full pipeline from image input through preprocessing and OMR execution. The remaining work in this stage primarily involves refining MusicXML cleanup and validating the pipeline on a larger dataset of sheet music images.

Deliverables for Next Week

Next week I plan to finalize the MusicXML validation logic and begin implementing the Conversion Layer that transforms symbolic music data into the time-indexed event representation used by the embedded system. I will also run the full scan pipeline on a larger dataset of sheet music images to evaluate pitch extraction accuracy and ensure the system can consistently meet our ≥90% correctness target. Additionally, I will work with the rest of the team to begin connecting the software pipeline to the ESP32 communication layer so recognized notes can be transmitted to the hardware for LED playback.

Chris Oh’s Status Report for Feb 28

This week I focused on implementing and testing the conversion layer pipeline and adding an audio preview feature to support early validation of the system. The goal was to ensure that sheet music can successfully be converted into event data and previewed before hardware integration. In addition, I improved the pipeline to support direct MusicXML uploads so the system can be tested without relying on the OMR stage.

Conversion Layer Implementation

  • Completed implementation of the functionality to convert parsed MusicXML scores into structured note events.
  • Added a sanity check tool that verifies MusicXML parsing and event generation by loading a test score and printing basic statistics such as number of notes and generated events.
  • Improved robustness of the conversion module so it can run independently from the repository root, which simplifies development and testing.
  • Extended the pipeline to support direct MusicXML and MXL file uploads, allowing users to bypass the OMR stage when testing the system with known sheet music files.

Audio Playback and Testing

  • Implemented a lightweight audio synthesis system that generates simple sine-wave playback from MIDI note values. This allows the generated event data to be previewed without needing hardware.
  • Added support for chords and basic attack/release envelopes to reduce clicking artifacts during playback.
  • Implemented an event playback session system that supports play, pause, and stop controls while tracking elapsed playback time.
  • Integrated the playback system into the Streamlit interface as an Audio Preview feature. Users can now upload sheet music, generate events, and preview the resulting audio with adjustable BPM.
  • Added playback progress visualization and improved session state management so playback behaves correctly within Streamlit’s execution model.

Status Report 4 Requirements: Part A

From a global perspective, LumiKey addresses a common barrier in music education: the difficulty of learning to read sheet music and translate it into correct key presses on a piano. Many beginners around the world have access to inexpensive keyboards but lack access to formal instruction or structured learning tools. LumiKey aims to reduce this barrier by visually guiding users to the correct keys using LED indicators driven by sheet music input. Because the system relies on widely available hardware components and open-source software, it has the potential to be used by learners in many different environments, including schools, homes, and self-study settings where formal music instruction may not be available.

Schedule

I am currently on schedule. The conversion layer pipeline is now functional and can generate note events from MusicXML files. The addition of the audio preview feature also provides a useful way to validate the correctness of event generation before integrating with the hardware layer.

Deliverables for Next Week

  • Connect the event generation pipeline to the LED hardware interface.
  • Begin testing event timing synchronization between software playback and LED output.
  • Continue improving robustness of the conversion pipeline with additional sheet music examples.
  • Perform integration testing of the Streamlit interface with the full software pipeline.

Gene Chang’s Status Report for Feb 21

This week I focused on implementing the wireless communication layer between the software system and the hardware system. Specifically, I transitioned from isolated hardware testing into full Bluetooth Low Energy (BLE) integration, enabling the Python processing layer to transmit parsed musical event data directly to the ESP32 for real-time LED control.

Hardware–Software Integration Progress

  • Implemented BLE communication between the Python program and the
  • ESP32 using the Bleak library.
  • Established a reliable connection protocol to transmit structured string data from Python to the ESP32.
  • Successfully sent parsed musical event data (JSON format) over Bluetooth when running the Python program.
  • Mapped received note data on the ESP32 to individual NeoPixel LEDs for per-key illumination.
  • Verified that individual LEDs can be controlled with correct musical timing.
  • Confirmed bidirectional communication capability for future expansion (sensor data return path).

This establishes a functional wireless pipeline from the software layer to the hardware layer, allowing musical events processed in Python to directly drive LED feedback on the keyboard prototype.

Bill of Materials (BOM) Development

  • Developed the first draft of the Bill of Materials based on current hardware requirements and projected scaling needs.
  • Analyzed budget constraints and identified required components, including sensing hardware, multiplexers, LEDs, power regulation components, and supporting circuitry.
  • Documented detailed component names, quantities, and estimated costs to ensure financial feasibility as the system expands.

System Testing and Validation

  • Tested BLE transmission stability under repeated LED updates.
  • Verified that note-triggered LED activation works reliably across mapped keys.
  • Confirmed that the ESP32 correctly parses incoming Bluetooth payloads and updates LEDs accordingly.

Schedule

I am currently on schedule. Wireless data transmission from Python to ESP32 is operational, and individual LED mapping is functioning correctly. The next phase involves stress testing simultaneous LED activations to evaluate performance under chord conditions and high event density.

Deliverables for Next Week

  • Integrate FSR strips with the analog multiplexer to begin key-press detection testing.
  • Validate whether FSR sensor data can be transmitted back through Bluetooth to the software layer.
  • Evaluate latency and signal stability during simultaneous LED control and sensor feedback.
  • Begin preliminary testing of full duplex communication (LED output + sensor input).

Team Status Report for Feb 21

The most significant risks at this stage come from the new features we recently added to our implementation plan: Beat Mode, the Lightweight UI, and Bluetooth transmission. These features are not replacements for existing components but additional functionality layered on top of our original scope. Because of this, they increase the overall system complexity and compress the development timeline. Integrating these additions while continuing progress on the core system introduces schedule pressure and a higher risk of integration challenges.

To manage these risks, we are being more deliberate about incremental integration and testing. Rather than building everything separately and merging at the end, we are validating functionality at each stage to ensure components remain stable as new features are introduced. This reduces the likelihood of large integration failures late in development.

Our primary contingency plan is to fall back to our previously defined MVP configuration if necessary. This ensures that even if advanced features require scaling back, the core system (sheet music processing, note detection, and feedback) remains functional and demonstrable. However, we believe that by increasing our development throughput and maintaining disciplined testing practices, we can integrate these additional features successfully within the current timeline.

The most significant hardware risks at this stage stem from signal integrity issues and potential component failures as we scale the system. Because our design relies on multiple force-sensitive resistors (FSRs) connected to a centralized ESP32, long wiring runs may introduce electrical noise and increased latency in the analog signals. Excessive noise could make it difficult to reliably distinguish between pressed and un pressed states, which would directly impact key detection accuracy and overall system responsiveness. As we expand from small-scale testing to a full 35-key implementation, these risks become more pronounced.

To manage these risks, we are approaching hardware integration incrementally. We will first prototype the sensing system on a breadboard and gradually increase wiring length to evaluate noise levels and latency under realistic conditions. Since the project remains within budget, we plan to order additional components to account for potential hardware failures during testing. If signal noise or latency becomes noticeable during live play, we will transition to a custom PCB design to shorten signal paths and improve electrical stability. Additionally, if FSR reliability becomes a concern, we are prepared to shift to a Hall-effect sensor and magnet-based detection approach, which would provide cleaner digital signals instead of analog resistance values.

Our primary hardware contingency plan is to preserve the LED feedback system even if key detection encounters setbacks. If analog sensing proves unreliable, we can integrate Bluetooth-based communication or pivot to MIDI input from a digital keyboard to ensure accurate note detection. This guarantees that the core functionality of visual feedback and guided learning remains demonstrable, even if the original sensing method requires modification. By planning alternative detection pathways in advance, we reduce the risk of complete system failure while maintaining a functional MVP.

There are no specific updates to the schedule as the software and hardware integration periods will include these new design changes. Work is progressing as planned, with no new visual milestones to report at this time. The Gantt chart (Gantt) outlines the team’s current timeline.

Simon Lee’s Status Report for Feb 21

This week I focused entirely on designing and implementing the Scan Layer preprocessing pipeline for LumiKey. My goal was to build a robust system that converts raw phone photos of sheet music into normalized, OMR-ready images suitable for Audiveris. I built, refined, tested, and structured a modular preprocessing system that is tuned for phone photo conditions as well as PDF uploads.

Rebuilt and Stabilized the Full Normalization Pipeline

Instead of keeping preprocessing as a collection of loosely connected image operations, I reorganized it into a clearer, more structured pipeline. I separated configuration, image processing steps, quality checks, and utility functions into different files so the system is easier to understand and modify. The main preprocessing function now returns a structured result that includes whether the scan passed, relevant metrics, and specific failure reasons, rather than just showing intermediate debug images. This makes the behavior much more transparent and easier to improve.

I also improved the page detection step by tightening how contours are filtered and adding fallback logic when the page can’t be confidently detected. After perspective correction, I normalize the image resolution and ensure the page is upright before continuing. These changes make the preprocessing output more consistent and reliable across different phone photos.

Replaced Basic Contrast Enhancement with Illumination

Last week I was using CLAHE to improve contrast, but this week I replaced that with a better lighting correction method that works more reliably for phone photos. Instead of just boosting contrast, I now estimate the background lighting and normalize the image to reduce shadows and uneven brightness. This made a noticeable difference when testing on real photos taken under indoor lighting.

I also improved the black-and-white conversion step. I’m now using adaptive thresholding, and if the result looks clearly wrong (for example, too much black or too much white), the system automatically falls back to a different thresholding method. This helps prevent cases where the sheet music becomes unreadable due to poor lighting.

Finally, I refined the deskew step so that the image is only rotated when the detected angle is reasonable. Previously, large or incorrect skew estimates could make the image worse. Now, the system avoids over-correcting and instead flags the image if it’s too distorted.

Implemented Formal Quality Gate and Testing Framework

The biggest improvement this week was adding a proper quality check stage. Before, I was mainly checking whether the image was blurry, whereas now the system checks multiple things: whether the image is too blurry, whether there’s too much glare, whether the black-and-white conversion looks reasonable, and whether the page is still slightly rotated after correction. If something looks wrong, the preprocessing step doesn’t just fail silently, but rather provides reasons for what went wrong. This makes it much easier to understand and improve weak spots, and it also lets us track whether we’re meeting the ≥90% usable scan goal.

I also added automated tests using pytest to make sure key parts of the pipeline behave consistently, such as blur detection and skew correction. On top of that, I built a simple script that runs preprocessing over an entire folder of phone photos, saves the cleaned outputs, and logs which ones failed and why. Instead of manually eyeballing results, I can now evaluate performance in a more systematic and measurable way.

Schedule

I am on schedule. The preprocess stage has been evolving into a structured, modular, and testable system as thought out by the team from a partially implemented prototype. Remaining work primarily involves larger-scale testing and integrating with the OMR stage.

Deliverables for Next Week

Next week, I plan to connect the preprocessing pipeline directly to Audiveris so the entire scan process can run automatically from image input to MusicXML output. I’ll also begin implementing the MusicXML validation and cleaning stage to make sure the OMR output is structurally sound before it moves into the conversion layer. In addition, I want to run preprocessing on a larger batch of real phone photos to measure our actual usable scan rate and fine-tune parameters as needed to confidently meet the ≥90% target.

Chris Oh’s Status Report for Feb 21

This week I focused on transitioning from architecture design into concrete implementation. I set up the project repository, implemented the foundational conversion layer logic, and built a placeholder Streamlit-based UI that connects to the processing pipeline.

Software Implementation Progress

  • Initialized and structured the main project repository to reflect the modular architecture defined previously (UI/Core, Conversion, Hardware Interface).
  • Ensured clear separation of responsibilities so each layer can be developed and tested independently.
  • Implemented core functionality of the conversion layer, including:
    • MusicXML parsing and note extraction
    • MIDI to 88-key index mapping logic
    • Raw Event IR construction
    • Chord grouping for simultaneous note events
  • Established a functional end-to-end pipeline from MusicXML input to structured Raw Event IR output.
  • Integrated a Streamlit-based UI (skeleton UI; not hooked with backend yet) that supports:
    • File upload (MusicXML input)
    • Mode selection (Beat Mode / No-Beat Mode)
    • BPM input field
    • Play/Pause controls
    • Real-time display of processed event data fordebugging and validation

System Integration and Testing

  • Tested the conversion pipeline using sample sheet music files to verify:
    • Correct note extraction
    • Accurate key index mapping
    • Proper grouping of simultaneous notes
    • Stable modular boundaries between layers
  • The system is a prototype that partially supports a working vertical slice from file input to structured event output through the UI.

Schedule

I am currently on schedule. The repository structure is established, the basic conversion logic is implemented, and the UI layer is sketched out. The project is now in active prototyping and ready for further feature expansion.

Deliverables for Next Week

  • Complete Beat Mode quantization logic.
  • Finalize JSON payload structure for hardware transmission.

Simon Lee’s Status Report for Feb 14

This week was mainly about stepping back and rethinking the scan subsystem so it’s realistic and achievable within our timeline. After looking more closely at what it would take to build a fully custom OMR pipeline, I decided to revise the architecture to something more modular and practical. Instead of implementing staff detection and symbol recognition from scratch, I restructured the scan layer into three parts: preprocessing, third-party OMR execution, and postprocessing. This change reduces risk and gives us more flexibility to focus on higher-impact features later.

Planning & Architecture Refinement

A large part of the week went into refining the scan pipeline design and updating our system diagrams to reflect that change. I clarified how image normalization feeds into the OMR engine, and how the raw MusicXML output will be validated and cleaned before being used downstream.

This week I clarified the following pipeline stages:

  • Image normalization and geometric correction
  • Quality-based input filtering
  • OMR engine execution
  • MusicXML parsing and structural validation

During this process, I also worked on completing the design presentation with my teammates in refining our user requirements, design requirements, solution approach, and our overall schedule and approach.

Initial Normalization Implementation

I began implementing the preprocessing stage using OpenCV in Python. So far, I’ve put together the basic structure of the normalization pipeline, including:

  • Detecting the page contour and applying perspective warping
  • Estimating and correcting skew using Hough line detection
  • Applying contrast enhancement (CLAHE)
  • Adding preliminary blur detection using Laplacian variance

The pipeline is partially implemented and producing intermediate debug outputs so I can see how each stage behaves. I’m still tuning parameters and testing on different sheet music images to make sure the behavior is consistent.

Schedule

I’m currently on schedule. The architecture change actually reduces complexity and makes the scan layer more manageable moving forward. There are no major blockers right now.

Deliverables for Next Week

Next week I plan to connect the normalization output to the OMR execution step and start integrating basic MusicXML parsing and validation. I’ll also continue refining the preprocessing parameters using additional test images.

Part A

On the topic of public health, safety, and overall welfare, the system we are building is designed to be safe, low-risk and supportive for users. Specifically on the safety side, the system operates using low-voltage microcontroller hardware and LED components which minimizes electrical hazard. The bluetooth communication between the hardware and software also follows standard protocols and is not exposed to high-power components. From a health and well-being perspective, the system is designed to create a positive learning experience where feedback is structured and is not overwhelming for the user. The guided playing modes are intended to give users more freedom to choose how to practice rather than cause unnecessary stress. There is also not personal data being transmitted externally and therefore, overall the system is built to be safe, accessible, and supportive for beginners at different skill levels

Team Status Report for Feb 14

  • Week 2 Status Report Requirements: Part A was written by Simon, B was written by Gene, and C was written by Chris.

One of the most significant software-side risks is system latency, particularly in Beat Mode where LED updates must remain synchronized with user-defined BPM. Excessive processing time during conversion, JSON transmission delays, or timing jitter on the microcontroller could result in visibly inaccurate or unstable LED guidance. To manage this risk, the architecture separates preprocessing (image conversion and quantization) from real-time playback, ensuring all heavy computation occurs before transmission. The system also uses fixed 1/16-note quantization to simplify timing logic.

This week, the software architecture was updated to explicitly support two operating modes (Beat and No-Beat) and to integrate a Streamlit-based UI into the Core Layer. The change was necessary to better align the implementation with the defined use-case requirements—specifically, supporting both note-learning and tempo-synchronized practice. Additionally, the conversion layer was refined to include a Raw Event Intermediate Representation to improve modularity and testability. The primary cost of this change is increased architectural complexity and additional development time for mode handling and UI integration. To mitigate these costs, the system has been organized into modular components with clearly defined data interfaces, enabling incremental implementation and reducing integration risk going forward.

There have been no updates to the schedule. Work is progressing as planned, with no new visual milestones to report at this time. The Gantt chart (Gantt) outlines the team’s current timeline.

Chris Oh’s Status Report for Feb 14

This week I focused on refining the software architecture and transitioning from high-level design into early implementation. I expanded the system design to incorporate both Beat and No-Beat modes, further specified the responsibilities of the conversion layer, and began prototyping the overall software framework. In parallel, I prepared materials for the upcoming design presentation.

Software Architecture Updates

  • Refined and updated the software architecture to explicitly support two operating modes: Beat Mode and No-Beat Mode.
  • Expanded the conversion layer design by clearly defining:
    • Raw Event IR structure
    • Quantization process for Beat Mode
    • Key mapping logic (MIDI → 88-key index)
    • JSON payload generation for hardware transmission

  •  Integrated a Streamlit-based UI into the Core Layer design to support:
    • Image upload
    • Mode selection
    • BPM input
    • Play/Pause controls
    • Status feedback

  • Ensured that the updated architecture maintains modular boundaries and allows independent testing of:
    • Image-to-MusicXML conversion
    • MusicXML parsing
    • Event processing
    • Hardwarecommunication

Design Presentation Preparation

  • Prepared slides and technical material for the design presentation.
  • Refined system diagrams to reflect:
    • Updated pipeline stages
    • Mode branching logic
    • Software-hardware interface definition

Week 2 Status Report Requirements: Part C

From an economic standpoint, LumiKey is intentionally designed to remain affordable and practical. The hardware uses commonly available, low-cost components such as an ESP32 microcontroller and addressable LED strips, which keeps overall system cost reasonable. On the software side, we rely on open-source tools like Python and music21, avoiding licensing fees and making long-term development more sustainable. Because the system is designed to attach to a standard piano or keyboard rather than replacing it, users do not need to purchase a specialized instrument. This approach helps keep the product accessible to students and families who may already own a keyboard but are looking for a more guided learning experience.

Schedule

I am currently on schedule. The architecture has been refined to include mode logic and UI integration, and the foundational software framework has been established. The project is transitioning from planning into active implementation.

Deliverables for Next Week

  • Implement core functionality of the conversion layer (MusicXML → Raw Event IR → chord grouping).
  • Begin implementing Beat Mode quantization logic.
  • Establish and test JSON transmission pipeline to the hardware layer.

Gene Chang’s Status Report for Feb 14

This week focused on exploring and implementing communication methods between the ESP32 and the software layer, while continuing hardware integration for the LumiKeys system. Specifically, I focused on evaluating different connection methods, integrating LED control with the ESP32, and prototyping communication between the ESP32 and a Python-based interface.

Hardware Integration and Communication Prototyping

  • Researched and evaluated multiple communication approaches for connecting the ESP32 to a computer and software layer, including Bluetooth and MQTT-based web services.
  • Selected Bluetooth as the primary method for the proof of concept due to its simplicity, low setup overhead, and suitability for short-range communication.
  • Integrated NeoPixel LEDs with the ESP32 and implemented basic LED control using the Arduino IDE to verify that LEDs can be addressed and controlled reliably.
  • Investigated methods for transmitting note and color data between Python and the ESP32, including the use of structured data formats such as JSON for communication.
  • Focused on prototyping the connection between the ESP32 and the Python layer to establish a stable communication workflow before full hardware assembly.

System Planning and Preparation

  • Planned the transition from prototyping to full assembly by identifying components that will need to be ordered once the communication architecture and hardware configuration are finalized.
  • Prepared for scaling from breadboard prototyping to a complete physical model after validating communication and control workflows.

Schedule

I am currently on schedule, as communication methods have been evaluated, LED control has been successfully integrated with the ESP32, and the architecture for Python-to-ESP32 communication has been defined.

Deliverables for Next Week

  • Fully integrate Bluetooth communication between the Python program and the ESP32.
  • Develop the first prototype demonstrating LED control through Bluetooth commands sent from Python, including color coding and structured message formats.Test transmission of force-sensitive resistor (FSR) input data to the Python layer and verify that key presses are detected and recorded reliably.

Part B – Social FactorsThe LumiKeys system is designed with consideration of social factors, particularly accessibility to music education and differences in how people learn in modern social environments. Many beginner piano learners rely on online tutorials or self-guided learning due to limited access to formal lessons, which may be influenced by cultural, geographic, or financial constraints. By providing real-time visual guidance and note verification on any existing piano, LumiKeys supports learners who may not have access to private instruction or structured music programs, helping to reduce barriers to participation in music as a social and cultural activity.

In addition, the system is intended to support collaborative and informal learning settings, where friends, family members, or online communities share music learning experiences. Because the device is portable and designed to work with standard acoustic pianos, it can be used in homes, schools, and shared spaces without requiring specialized instruments. This flexibility allows the product to fit into diverse social contexts and encourages music learning as a shared and engaging activity rather than an isolated or resource-intensive one.