As a follow up to my initial TrafflicFlow post, I have built some more software to help me classify the dataset I collected over the past few weeks.
TrafficFlow is a project where I develop an algorithm that can “look” at a still image pulled from a traffic camera and determine whether or not traffic is congested. I am using the deep learning framework, TensorFlow, to build the model that will house this algorithm.
Over the past few weeks, I have collected 4,966 still images from a NCDOT traffic camera. I wrote a Python script that took a snapshot. I cron’d that Python script to run every 4 minutes. Now that I have all of this data, how can I efficiently classify it? A few ideas came to mind:
- Python script that loaded the image in a picture viewer and presented a question in terminal. This worked, but the picture viewer grabbed focus. I also couldn’t close the picture viewer automatically. I determined that the extra interaction involved would make classifying the data this way, inefficient. This also limited me to classifying data on my MacBook Pro only.
- AngularJS web app that allowed me to classify images in a desktop web browser. This was interesting, but I didn’t know a ton of Angular and this limited me to classifying data on my MacBook Pro only.
I’m an Android developer by day (checkout RadioPublic 😉 ). I figured I’d just build an Android app that would allow me to classify the data, so I did. But first, I needed to gather the collected data into a format that is easily usable in this app. So I wrote a Python script:
This script simply reads a list of files from a directory, creates an entry in a dictionary (saving some additional metadata in the process), and exports that object to JSON.
A snippet from the exported data looks like:
Next, I uploaded this JSON file to Firebase. Firebase is a backend as a service that allows app developers to quickly build apps without needing to spin up servers or turn into “devops”. Best of all, it’s free to get started and use.
Finally, I uploaded 4,966 images to my web server so that my app can access them.
Now on to the app. It’s nothing special and particularly ugly, but it works.
It allows me to quickly classify an image as congested (1), not congested (0), or ditch/don’t include (-1). Once I classify an image, it saves the result (and my progress) to Firebase, then automatically loads the next one. It turns this exercise into a single tap adventure, well a 4,966 series-of-single-taps adventure.
I’ve uploaded the Python script and Classify Android app to GitHub (https://github.com/emuneee/trafficflow). I hope to make my dataset available soon as well.
Now onto classification.