Team Status Report for 10/26

General updates:

  • Team trip to Home Depot to buy parts to connect the webcam gooseneck to the tripod. The connecting part of the gooseneck was a wider tube (⅝”) and not threaded while the connecting part of the tripod was a smaller threaded screw (¼”) so it was difficult to find a connector for the 2. However, with assistance from the Home Depot staff we landed on using multiple spacers. We screwed the tripod connecting part with the help of a heat gun to create threads in the spacers. In the future, we might have to glue the spacers to the gooseneck tube to make sure it stays in there.
  • We met with Dueck’s students and tested our newly built stand. Images are attached below. The stand worked great! It was stable (didn’t require a counterweight) and was tall enough to capture all the keys on the keyboard. Additionally, the gooseneck was able to stretch enough horizontally such that the pianist’s head did not block the view of their hands. The webcam’s USB cable was a bit short so it was inconvenient to hold the laptop close to the camera stand. Additionally, the USB cable kept bumping into the pianist’s head. We have ordered velcro for the purpose of wire management and a USB extension cable. 
    • We also gather video of scales & Hanon specifically to test with. More details can be found in Shaye’s report 

  • As per Joshna and Prof Bain’s suggestion we met with Varun to ask for advice on using the KV260. More details can be found in Jessie’s report. 

Design Changes: 

Based on the feedback we received from Varun, we have decided to drop using the KV260 and commit to pivoting to the RPi with an accelerator to accelerate our hand landmark model. 

Updated Schedule:

We are slightly behind our originally planned schedule of finishing the CV and FPGA integration by the coming Wednesday; additionally, our plans have shifted to using the RPi instead of the FPGA. Here is our updated schedule with the RPi:

Due 11/01 – 

  • Jessie: finish moving the model to RPi and research how to connect the buzzer and display and web app hosting RPi using UART 
  • Shaye: write many versions of the tension detection algorithm for RPi (see Shaye’s status report)

Due 11/06 – (next meeting with Professor Dueck’s students)

  • Shaye: finalize tension detection algorithm using output of RPi model (see Shaye’s status report for more)

Due 11/08 –

  • Jessie: finish implementing buzzer feature and set up UART connection with web app hosting RPi

(11/08-11/11) – buffer time

Due 11/11 – start full system integration

Team Status Report for 10/20

General updates:

  • Worked on and finished the design report (the vast majority of our time this week was spent here).
  • Worked with musicians on 10/9 to test out rough camera setup & tension detection algorithm—see Shaye’s status report for more info.

Product solution considerations: 

A was written by Jessie, B was written by Danny and C was written by Shaye.

Part A: 

We hope our product will allow pianists of all skill levels, from hobbyists and beginner students to professionals, to protect themselves from hand and wrist injuries related to piano playing– all players can benefit from injury prevention. The product’s utility, though intended for students with access to a teacher, could also be applied to those who are self-taught. However, the self-taught student would also have to self-learn how to identify correct positioning in order to properly set the initial calibration. Additionally, our system does not rely on a laptop to host our system, so users with only access to a phone or a tablet can also protect themselves. The system will also have simple and intuitive features, so it does not require the user to be technologically advanced. 

Part B:

Our product will hopefully encourage people to either learn or continue playing the piano. Whether you are completely new to the piano or perhaps have been injured in the past, our product will ensure that these players are avoiding positions that can cause injury. We hope that the peace of mind our product will provide will lead to an increase in piano players. If the amount of pianists increases due to our product then we believe that we are contributing to a growing and deeper culture. While we are targeting piano players, we believe that a more musically inclined population is able to both better appreciate the culture we currently have but also make contributions to the culture we all share. 

Part C: 

We account for environmental factors with our system in two main ways: by using less power-hungry hardware, and by decreasing overall medical interventions for wrist strain injuries. In terms of hardware, our FPGA-based system would use less power than a Jetson/ GPU based system, minimizing power consumption during longer practice sessions. If our proof-of-concept becomes more widely adopted, this difference in power consumption would have a large impact on reducing overall energy waste from our system. 

Additionally, by preventing wrist strain injury in pianists, our product will decrease the amount of medical resources spent attending to those injuries, thus reducing the environmental impact of those resources. This includes a variety of healthcare items, ranging from single-use wrist wraps to energy spent on wrist imaging. 

Danny’s Status Report for 10/20

Most of my time this week was spent on the design report. I underestimated how long the design report would take us so there was little progress in terms of the web application. However, the design report helped solidify some of the ideas we had for our project. I have a deeper understanding of our overall project and have a clearer understanding of what we still need to do. The web application is also more fleshed out from working on the design report and it is more clear to me what parts I need to work on in order to complete the web application. Additionally, on Wednesday we met with the pianists again. This time it was a different group of pianists who were participating so we polled them on the UI and any web app features they might want. They seemed to really want to have more control over the different features and wanted to toggle certain features off and on. They were also interested in potentially having different types of feedback other than audio but we have not decided if we will pursue that route. The discussion with the pianists was helpful because it further clarified what they are expecting from the web application.

My progress is slightly behind schedule. One part of this is that we used the micro SD card that came with the RPi for the FPGA. Thus, I could not work on setting up the RPi to host the web application. We should be receiving another micro SD soon so I should be able to make some progress on that front. I should be able to catch up quickly as I have spent time while working on the design report to understand what I have to do. Setting up the RPi should be a fairly quick process. I would still need to work on the web application itself but that should not take a long time either. Overall, I think I am slightly behind but that it is not a major issue and that I should be able to quickly catch up.

In the next week I hope to set up the RPi for the web application hosting and to start working on the web application itself. This will involve using the Django web framework to begin writing out the different parts that we will need for our web application.

Danny’s Status Report for 10/05

This week I spent a decent amount of time practicing for the presentation I had on Wednesday. I spent time going over it both by myself and with Shaye and Jessie so that they could give me feedback on the presentation.

I also spent some time helping Jessie with the Zynq UltraScale+ tutorial: https://xilinx.github.io/Vitis-AI/3.0/html/docs/quickstart/mpsoc.html. I mainly did the first half of the tutorial of setting up the necessary software that is needed and making sure the target was up and running correctly. There were a couple issues that we had while going through the tutorial. There were a couple of minor issues that got in the way such as incorrectly flashing the SD card and not having the correct micro USB to USB A cord (we only had a charging cable so had to run to the store to get one). Another issue was that the Kria KV260 needs internet connection in order to download certain packages but it can only access the internet through an ethernet port. I had to figure out how to provide internet to the Kria KV260 using the ethernet port on my laptop as we had no easy access to a router. After we solved these issues running the example model in the first half tutorial was relatively easy to do. Once the target was running and setup, Jessie took over and completed the second half of the tutorial.

Lastly, for the web apps I did not do as much work as I would have wanted on it this week. I was caught up with different things in capstone and in my different courses. However, I was still able to take a look at how different web app examples to get a better understanding of how Django works and is typically used.

I think I have not progressed on the web apps as much as I would have wanted. I didn’t expect this week to be as busy as it has been so that was an oversight on my part. I am not too worried thought because we will have more work sessions coming in the following weeks so I believe I should be able to catch up the. Additionally, there is no major urgency to finish the web app (before meeting Professor Dueck and her students) so I think it is acceptable to be slightly behind. Also, I think it was more important to help with the FPGA as that is a priority for us as we want to make sure we are able to get the CV models we want working on it ASAP.

Next week, I hope to catch up on the work that I was supposed to do this week for the web app. Additionally, I believe we should be obtaining another SD card for the RPi so I should be able to set that up and perhaps set up a test server on the RPi to understand how it works.

Team Status Report for 10/05

General update: 

  • We gave the design report presentation. This involved considering some use case requirements and making design decisions regarding our camera setup. We also fleshed out the testing for each of the different components.
  • We had a couple of practice sessions over the weekend to strengthen Danny’s presentation skills. 
  • We obtained the parts for our stand. We did a rough setup to see if the stand was able to capture the full keyboard. Our stand was tall enough that it was able to capture the entire keyboard. We plan to build a connector between the gooseneck and the stand before we meet with Professor Dueck’s students again on Wednesday. 
  • We ran through the basic setup tutorial for Vitis AI on the Kria KV260. We were able to set up a model and detect their example image. More details can be found in Danny’s status report. We also ran through the Vitis AI workflow tutorial for quantizing and compiling a model on the FPGA. More details can be found in Jessie’s Status report. 
  • We looked into how to implement kinematics on the FPGA. More details can be found in Jessie’s Status report. 
  • We worked on printing out tension vs not tension CV pipeline—see Shaye’s status report
  • We tested kinematics in CV pipeline—see Shaye’s status report
  • We further looked into the different webapp examples that are found in Django. 

Risks: 

  • Weight distribution of the camera stand being off-center leading to the stand tipping over. 
    • If this happens, we plan to add a counterweight. 
  • FPGA not working—many complications in general 
    • Order RPI to work with over break for contingency. 
    • May order RPI ai kit if we end up switching over 100%.

Changes to schedule/ design

  • No changes were made, we’re still on track of our schedule.

Stand setup:

 

Screenshot of “rough setup” we did

Danny’s Status Report for 09/28

For this week, I have finished the Django tutorial. I should have a very simple and basic understanding of how the Django framework functions. I have a more definitive idea of how the web app should be structured so I will do some research into how I can implement those features. I will probably also spend some time looking at existing frameworks if they already exist. Additionally, since I will be running the web server on the RPi I will look into how to do that effectively. I do not think the RPi section will take very long though. 

This past Wednesday we met with Professor Dueck and some of her students. I asked them about the features we currently had planned and any features that they might want. The consensus seemed to be that they wanted either limited live feedback or to be able to control the amount of live feedback they receive. For example, they were against the idea of having a live video as they were worried it would be too distracting. We are now considering having a live video on a display only for calibration purposes. Additionally, the audio buzzer used as live feedback was also questioned. They seemed to think it would also be distracting depending on the piece they are playing. Thus, they wanted to be able to toggle when they receive the audio feedback or not. For the web app, this would mean I would need to add some feature that is able to toggle the audio feedback as well. This should not be hard to do but it was good to know. Lastly, they supported the idea of storing their previous recordings on the web app so that they can go back and see their progress. Thus, we are considering buying a dedicated hard drive to store the videos for our users but we will stick to using the RPi for now.

Thirdly, I briefly helped Jessie with the quick guide at this link: https://xilinx.github.io/Vitis-AI/3.0/html/docs/quickstart/mpsoc.html.   However, we were not able to get far because we realized that the power supply we found for the FPGA was not compatible.

I would say my progress is still on track overall. For this upcoming week I am worried about slightly falling behind on the web app so that will be my main focus.

Next week, I hope to have examined a couple Django example frameworks to see how it is typically used. I would also want to research a couple ideas of how to implement the features that are required for our project. This includes having a start/stop record button, toggling the audio feedback, storing and serving the video files from the FPGA. I would like to get a decent idea of how all this could be implemented.

Danny’s Status Report for 09/21

This week I started looking into web app development. My part for this project will be to work on the web app but I have no experience working with web apps. I dedicated some time researching the different parts and frameworks that go into creating a web app. There seemed to be a many ways to go about creating a web application and many tools to help. I settled on learning Django at first because it is popular and seems to provide a lot of features for both the backend and the frontend. It also seemed that if I needed to create a better/prettier frontend I can add that onto Django. Thus, I thought Django would be a good place to start picking up web apps. I am currently completing the tutorial on how to create your first web app and will be making progress throughout the rest of the week.

My progress is currently on track with my schedule and I have no concerns with falling behind.

My current plan for deliverables is to finish the Django tutorial to catch myself up to speed on how implementing the backend of a web app works. I will then continue to look into the documentation that I feel is relevant for our project. Currently, our main feature that we are considering adding into our web app is to create a page that will play the video feedback. I will try to look into what would be necessary for this to work.

On this upcoming Wednesday, we will meet with Professor Dueck’s students. I will attempt to get some preliminary feedback on what type of features they might expect from a web app. This will hopefully provide more guidance on what type of documentation from Django I would need to read so that I can begin thinking about implementing the features early.

Team Status Report for 09/21

At the start of the week, we prepared slides for the proposal presentation and did a couple of practice runs during the weekend.  We also placed inventory orders for a (temporary) camera and KR260.  Discussed more concrete requirements for the camera tripod. Shaye got a basic CV pipeline up.  Danny looked into different backends for the web app and started the Django tutorial.  Jessie began Varun’s tutorial for Kria KR260 setup.

One risk that came up this week is camera compatibility with FPGA. We are waiting for Varun to test the compatibility with the 1080p webcam and are hoping to hear back by the end of this weekend. If the compatibility is confirmed, we’ll decide on and order a camera next week.  We are also concerned with the camera field of view in relation to capturing the whole keyboard.  We plan to either use a taller camera tripod or place the camera in a taller position, or get a more expensive camera with a larger field of view.  We will weigh the decision out by the end of next week.  A general worry we still have is porting to the FPGA. We’ll hold off on FPGA porting until the CV pipeline is fully finalized. We may start working in parallel on RPi in addition to the FPGA if we’re unable to see a path forward by October 12th. Shaye will focus on working with either an RPi4 or RPi5 while Jessie continues with the FPGA. If we’re unable to get the FPGA working on a basic level by mid October then we will give up on the FPGA.

No major changes happened—we have more concrete ideas on how to position the camera. This is included in Jessie’s status report for more detail; the diagram also included there.

We’re still on schedule. For next week we want to finish up CV pipeline and FPGA setup and hopefully start CV and FPGA integration. We will meet with Professor Dueck’s students on Wednesday, where we will test the CV pipeline to detect different angles on the keyboard. We will use a loaned camera from the inventory that will be handheld temporarily before we order one.

Link to video of current CV pipeline: link