What did you personally accomplish this week on the project?
- Design report
- A substantial portion of the week’s work involved creating the design presentation. Our report wound up being longer, and taking longer to write than expected so not much else was done during the week of October 7th.
- Completed MVP
- Over break, I took some time to create an end-to-end MVP of our product. As I initially only had proof-of-concept scripts showing that a server could be launched on my laptop, and be sent messages or files, this involved several steps.
- Firstly, I had to define the necessary endpoints for my server. I needed the capability to send room images to the server, and query for objects of a certain type.
- Secondly, I had to create a script meant to run on the raspberry pi, which periodically takes pictures, and sends them to the server with an http request. With our group’s focus on modularity in mind, I implemented it in a way that would let it run on any platform that runs python, by abstracting the code which is platform-dependant – in other words, the code that takes pictures. Taking advantage of this feature, I implemented a version of the code which takes pictures using a laptop camera. This is very good for debugging, because I won’t have to create and maintain a “mock version” of the code (which differs from the actual code that will run on the raspberry pi) for when I want to test my server, but don’t have the raspberry pi with me.
- Next, as I had not yet met with my groupmates to acquire the real implementations of their assigned components, I created mock components for the machine learning model, and the database, in a way that I could easily switch to the “real” implementation by implementing the real version, and setting a value in the config file. This importantly involved making a version of the database which stored all values using in-memory python data structures, and saved them to json text files in a way that allows the server to be restored upon server re-initialization.
- Next, I implemented all of the required server endpoints, which required learning how the Flask web framework works, as well as generally how http, and the web, work.
- Next, I implemented a preliminary html website which could communicate with the server. It lets the user enter basic queries for objects, and shows the user the last time that one was seen, in the form of an image with a bright green rectangle on it. The website looks extremely ugly, but as this is a MVP, I only wanted to demonstrate functionality, and give my groupmates a complete platform on which they can iterate. We plan on further discussing and improving our UI in the future.
- Finally, I met up with my groupmates, and integrated both a sample ML object detection model, and a database backend. At this point, we had a fully functioning, albeit minimal, MVP.
Is your progress on schedule or behind? If you are behind, what actions will be
taken to catch up to the project schedule?
Our progress should be on schedule for this week. Because I took some time over break to work on our project, and because future weeks will (hopefully) involve less proposals, presentations, and bureaucracy, we should be able to speed along with our implementation.
What deliverables do you hope to complete in the next week?
I firstly plan on containerizing all of the existing server code. As of right now, the server code is designed to work in a python virtual environment, but this only provides very weak guarantees regarding platform-agnosticity. In particular, I am afraid that my teammates, who have Windows and MacOS machines may use implementations of python libraries with slightly different behavior, which would therefore break the system. Later down the line, I plan on running our code in a cloud machine, and testing it on the raspberry pi, both of which have different environments and requirements than our laptops.
As such, much of my focus will be on getting our server working on a docker container, which has much stronger guarantees. I hope on implementing both a “production” docker container, which should be able to run our code directly upon creation, and a “debug” docker container. The “debug” container should drop the user into a shell, which allows the user to change how the server is run, without having to rebuild the container from scratch every time.
Secondly, I hope to solidify some more interfaces and intended behavior with my groupmates. These will be necessary for our project going forwards, for when we eventually want to implement proper UI and authentication.
0 Comments