Jeremy’s Status Report for 3/13/2021

Last week, we ordered the first batch of parts to prototype our system. Shipping took a week longer than we planned for, but we got the parts on Thursday. While we waited, I researched lens distortion correction in case that is necessary for the system. Starting today (Friday), I have setup the Jetson Nano and am currently working to get the camera drivers working and bring-up a python script to stream images from the camera. Once I have that done, I will experiment with different camera poses and lighting. Ethan proposed angling the camera so it can sit recessed in the card shoe. That provides benefits for the physical design, so I will also explore homographies to warp images if the captures include a perspective projection.

Because shipping took longer than we expected, I may be delayed in my task list if the camera drivers pose an extended issue. I did not include a “camera bring-up” task in my Gantt Chart, but I will update my schedule in next week’s status report either way.

Sid’s Status Report for 3/13/2021

I’ve spent the first two days of this week (Sunday and Monday) finishing up the design slides and rehearsing my presentation. After presenting on Monday, I spent the remainder of the week finishing making the web app dynamic/interactive to HTTP requests. Before, the web app was able to accept POST requests and update the MongoDB database. I’ve now cleaned up the code so whenever a user sends a POST request (containing the suit/rank of a player’s card), it accurately updates the database for the proper player (ex: player 1 vs player 2).  In addition, I connected the Python Flask backend to the HTML front-end code, so the backend software is able to pass the suit/rank information to the frontend software for rendering. Then, when a user visits the web page, it showcases this updated information. I’ve also finished implementing card images for the web app, so instead of displaying “2 Hearts”, the web app is able to showcase an actual card image corresponding to the suit/rank. Hence, the web app is now completely stateful and showcases consistent information for all visitors. This was one of my main goals this week, so my progress is on schedule. Today, I am meeting with Ethan and Jeremy to pick up our shipped hardware (Jetson Nano) and I am currently trying to set up the Nano. My goals for the next week are to finish setting up the Nano and to migrate my web app to AWS. I will also spend some more time researching machine learning algorithms that I plan to experiment around with for image classification.

Ethan’s Status Report for 3/6/2021

This week we finally ordered our first round of parts!

 

 

 

 

We settled on getting one Nvidia Jetson Nano for each team member so we all have access to a developer kit. We also got two camera modules to test out: the OV9281 and the Sony IMX219. Both of them are pretty promising, however the IMX219 is also available as just the module (as opposed to on an adapter board for the Jetson) so, if we want to, we can mount it to our own pcb more easily.

We hope to receive our parts and begin working on a prototype. I’ll also begin working on the PCB design once we know which of the camera modules we plan on using.

Team Status Report for 3/6/2021

This week, we met numerous times to create our design presentation, refine our project components, and submit a budget proposal to obtain hardware. Our most significant risk remains the same as last week’s, which is time delays with turnaround and shipping. We plan to mitigate this risk by aiming to get our hardware as soon as possible and performing tasks in parallel to reduce idle time. No significant changes were made to our existing system or schedule. We did narrow down our camera modules (OV9281 and IMX219), for which we have filled out a purchase request form. In addition, we were notified that Azure would not be a possible cloud hosting provider for our web display, and so we will have to use AWS. This does not pose any significant changes to our project, as both platforms are suitable for our web app. Finally, we did make a minor change to our shoebox design, as we have placed an internal extension to make the cards flat and consistent when they are dispensed. This will enhance our image quality and help with image preprocessing/classification.

Jeremy’s Status Report for 3/6/21

This week, we stayed our course by ordering Nvidia Jetson Nano’s, two camera evaluation boards, card shoes, and card decks.  Once they arrive (hopefully this weekend), I will bring up my Jetson Nano and start taking photos.

We purchased two camera modules that have a different sensor resolution and framerate.  This will allow us to experiment with different resolutions without needing to wait another week for shipping.  The cameras go up to 180fps, and we estimate we need a high FPS to avoid motion blur during quick card movements.

The primary camera I am interested in has the following specs:

  • Up to 1280×800@120fps
  • 30mm minimum object distance
  • 75deg horizontal field of view.

With the camera 3cm away from the playing card, this images a 46mm (1.81in) area with 0.058mm horizontal resolution at 180fps.  This is the closest distance to stay in focus.  This resolution should be more than sufficient for card classification when the rank and suit are on the imaging plane.

This brings me to another challenge for the project: image selection before classification.  When the card trips the sensor, the camera will spam photos to the Jetson Nano.  Since we will likely use a camera that has a small imaging plane (ex. 1.81in tall), we will need to choose a valid image to classify.  I hope to choose this with _priors_.  From the sensor, we will know how long it took to move the card over the camera.  Using prior knowledge of Bicycle Standard cards, we can estimate approximately which images contain the rank and suit by assuming constant velocity.  While I hope this solution will work, I will have to examine it once we have prototyped the imaging system.

I adjusted our schedule to account for ordering parts on Thursday.  I began exploring lens distortion correct methods, but I’ll need the camera in-hand to actually implement that.  I am otherwise on schedule.

Sid’s Status Report for 3/6/2021

This week, I created a MongoDB cluster to act as a centralized database for our card data. I realized that without a centralized database, there may be inconsistent information presented to users about the current state of the game. After experimenting with several databases, such as SQLite, I realized MongoDB would be our best option given its flexible, unstructured schema and reliability. After writing some Python code and working with the Pymongo package, I was able to connect my web app to our database and make queries. In addition, my web app now accepts POST requests. As a result, other machines (in our project, this will be our Jetson Nano) can send HTTP requests to my web app to update the data stored in our cluster, which also updates the visual display of the web app. I’ve also spent time updating our design presentation slides by refining our use case, metrics, risks/uncertainties, and software stack. I plan to spend tomorrow practicing my presentation for next week.

 

I am currently on schedule. Next week, I plan to finish making the web app dynamic/interactive so that I can start migrating it to AWS.

Ethan’s Status Reports

We decided this week that the Jetson Nano was the platform that we wanted to pursue. Mainly because of the CUDA cores and MIPI camera interface.
Speaking of cameras, Jeremy and I began looking at camera modules this week. There’s actually a surprising amount of them supported by Nvidia. I’ve been scouting around around on some forums to get a feel for what the common choices are for projects similar to ours. Two that i’ve had my eye on are the OV7251 and the OV9281.

https://www.uctronics.com/arducam-ov7251-mipi-camera-module-0-3mp-monochrome-global-shutter-camera-jetson-nano.html

https://www.uctronics.com/arducam-ov9281-mipi-camera-module-1mp-global-shutter-mono-camera-130-jetson-nano.html

The 7251 is a 0.3MP camera which is usable up to 360fps@160 x 120. The 9281 is a 1MP camera which has a whopping 1280 x 800@120 fps. Currently looking into whether the 9281 supports higher framerates and also whether the additional resolution is necessary (160×120 up close shouldn’t be an issue, but would rather be safe than sorry).

Both modules are pretty cheap so we likely will get both to test and see which works better for our project. Jeremy was also looking at modules with interchangeable lens systems. However, i think the focal length on the default lens for all these cameras should work.

Jeremy’s Status Report for 2/27

This week, I explored camera options that are cheap and have an evaluation board available.  We need the evaluation board so Sid and I can start prototyping the imaging pipeline before the PCB is ready with the final product.  Here are some options from which I will choose one to order:

OpenMV Cam H7 Plus

Pros: Easy integration with a Jetson Nano over SPI.   Lens is interchangeable on M12 mount.  This could be very convenient if we change the geometry of the final product.

Resolution: Up to 120 fps at 320x240px. Price: $80

IMX447 Sensor Board

Pros: Higher quality sensor, convenient hardware interface.

Cons: must purchase a lens separately

NVIDIA also provides a list of supported camera hardware.  I’m still inspecting those options, but many of them are lab-grade cameras that are far beyond our budget.  Ethan is also looking at those.

I am still on schedule with the camera and hope to order a evaluation board in the coming days.   After our design presentation, I pushed back some initial tasks on the Gantt chart to have a more realistic timeline.

Team Status Report for 2/27/2021

As a group, we spent the first half of the week further refining our schedule and division of labor. Sid spent most of the week developing a web app for our visual display. Jeremy has been working on determining camera geometric/optical/electrical requirements. Ethan has been helping look at cameras to ensure they’re compatible with the hardware he’ll work on. Shipping time and turnaround times represent our most significant risk that could jeopardize the success of our project. We plan to manage these risks by carrying our development and testing as efficiently as possible. This will help accommodate for delays in shipping and turnaround. No significant changes were made to the existing system design or schedule. As a group, we have decided to utilize a Nvidia Jetson to run the ML software. We have started working on our design presentation and plan to focus on completing this presentation by the end of next week. This will require several meetings as a group, which will take place during our assigned lectures next week.