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.

Gene Chang’s Status Report for Feb 7

This week focused on acquiring, testing, and integrating the core hardware components for the LumiKeys system, while continuing to define the technical direction of the hardware architecture. Specifically, I focused on testing NeoPixel LEDs, force-sensitive resistors (FSRs), and their integration with the ESP32 microcontroller, as well as researching UDP-based communication between the server and ESP32 for user-input verification.

Hardware Design and Component Work

  • Researched and evaluated hardware components required for key-press detection and visual feedback, including NeoPixel LED strips and force-sensitive resistors.
  • Developed simple test programs to read analog values from FSR strips and characterize resistance changes under applied force.
  • Defined threshold values to distinguish between pressed and unpressed states for reliable key detection.
  • Investigated communication methods between the ESP32 and the server, focusing on UDP as a lightweight protocol for transmitting note and verification data.
  • Planned the next stage of LED control using the Adafruit NeoPixel library and preparation for soldering and breadboard integration.

Initial Technical Prototyping

  • Prototyped force-sensing resistor input using the ESP32 ADC to measure resistance changes and convert them into usable analog values.
  • Validated that force input can be reliably detected and distinguished through thresholding.
  • Evaluated power requirements and identified the need for a stable power supply and voltage regulation for driving LEDs alongside the ESP32.

Schedule

I am currently on schedule, as core hardware components have been obtained, basic sensing functionality has been validated, and integration planning is underway.

Deliverables for Next Week

  • Integrate the NeoPixel LED strip with the ESP32 and implement basic LED control.
  • Set up a stable power system, including an appropriate supply and a 3.3 V step-down converter where needed.
  • Begin combining FSR input detection with LED feedback to demonstrate a basic end-to-end hardware loop.

Team Status Report for Feb 7

One of the most significant risks to the project is the complexity of integrating multiple software components together with the hardware layer. Because the system depends on several stages working seamlessly, any mismatch in interfaces or unexpected behavior during integration could delay progress. To manage this risk, we are intentionally designing the system to be highly modular, with clearly defined boundaries and data formats between components. Each module will be developed and validated independently through thorough test cases before being connected to the rest of the system. This approach allows us to verify correctness at the component level first, making integration more predictable and easier to debug.

Specifically a major risk for the project is the reliable nature of interpreting the sheet music under real-world conditions, in which given the factors of scan quality, lighting, and perspectives of the sheet music can affect accuracy of extracting necessary information and unfortunately if there are errors at this stage it would affect the final result of the LED. To manage this risk, the team will plan to design a software pipeline that will provide preprocessing, validation, and modular testing at each stage allowing inaccuracies to be noticeable and isolated before putting together other components.

An additional risk involves the responsiveness requirements that we set for the full system starting from the user input to LED output. The latency that will come from software processing, verification logic, and the software-hardware communication is something that is necessary to mitigate. To avoid these risks, we will measure the end-to-end latency across components, optimize paths, and avoid blocking operations between subsystems. If accuracy or latency measures are not met within the timeline, some backup plans include supporting alternative digital input formats or simplifying processing to maintain a functional user experience.

There is also a risk of hardware-related issues, such as FSR strip malfunctions or defects in the LED components, which are distinct from software bugs. To mitigate these risks, we plan to keep spare parts on hand and maintain fallback options. If FSR strips prove unreliable, we will explore alternative input methods such as IMU-based detection or MIDI input.

A minor change was made to the hardware sensing design during this stage of development. The original design assumed force-sensitive resistors (FSRs) would be used as the primary method for detecting key presses. After initial testing and evaluation, we decided to keep alternative sensing methods, such as IMU-based detection or MIDI input, as fallback options in case FSR reliability, durability, or sensitivity becomes a limitation in real use. This change was necessary to reduce technical risk early in development and ensure that the system can still meet functional requirements if the primary sensing method proves unreliable. The main costs associated with this change include purchasing additional components for testing and prototyping, as well as the extra time required to evaluate multiple sensing approaches. These costs will be mitigated by performing early validation to determine the most reliable sensing method and standardizing on a single solution once testing is complete.

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.