Looking back at my IB Computer Science Project

To view the project page for the work that I will be discussing in this blog post, click here.

Summary/Premise of Project: Sometimes an artist needs to think outside the box. They need to add a new dynamic to each piece that they create so that they can continue to captivate their audience, but they also want to be able to maintain a signature style. The rise of the internet has both promoted new ventures in art and made it necessary for artists to keep innovating in order to remain relevant. For most innovators, colors is one of the most feasible ways to create a new look. In a recent interview, an IBDP candidate and aspiring artist discussed the issue in depth and talked about their idea of a perfect solution. When I heard this, I knew that it was my time to swoop in.

There are many color-generating applications to assist with finding a perfect color scheme, and there are many applications that analyze the existing colors in each pixel of an image to come up with a general pattern that eventually gets turned into a color palette scheme. The goal is this project, however, is to merge and expand upon these functions by creating a Python-based desktop application that identifies an object in a photo to analyze, analyzes the colors in that object and generates new families of color palettes for that object. These can then be applied as an artistic filter, which adds a new dynamic to photos. This is good for artists who want to merge into the digital age and add a new kind of power to their work, photographers that want to further manipulate the emotions that their pictures invoke through color association, and even advertisers that want to rebrand the look of their product.

When I began this project, I set a list of criteria for what would define this project as being a "success" or not based off of the goal of this product. Towards the end, I evaluated myself on how I did based on my client's review.

Criteria for Success Reflection:

  • Can identify objects in an image and apply changes to those objects only - Not Yet a Success: Ability to effectively identify objects in the photo to apply select changes to not yet master. After consulting the client, she decided that she prefers to just work with the full image, so this feature wasn’t necessary for her to accomplish making artwork.

  • Can parse through the RGB values of pixels in the object(s) of a chosen image - Success: The program analyzes the photo for each pixel’s intensity value and converts it into an iterable list in order to effectively made changes to the picture and update it.

  • Can calculate the intensity of a pixel (sum of the R, G and B values) - Success: Used to identify which pixels in the image to apply color changes to. The intensity of a color pixel (for the purposes of this IA) is the sum of the degree of red, green and blue light contained within that pixel.

  • Can identify pixels by intensity - Success: Pixels with a low intensity (< 175) in the original photo were swapped with a dark color of the user’s choice, while pixels with a high intensity (> 546) were swapped with a light color of the user’s choice.

  • Can calculate the RGB values of a complementary color palette, given R, G and B values of an existing pixel - Success: See criteria “Can apply the calculated RGB values of a complementary color palette to the photo.”

  • Can decide the color to apply based on user input (and show a preview of each) - Success: The user can choose four colors to make up the color scheme that will be applied to the photo. Whenever a scheme is applied, the application uses the system viewer to show the user the result before prompting the user to save the photo.

  • Can apply the calculated RGB values of a complementary color palette to the photo. (Assigns RGB value from color palette to each pixel in picture based on intensity) - Success: Allows user to work with system color viewer (on Windows, this feature is limited on Mac due the way that Mac computers compile Python) to determine a complementary color to apply to the photo.

  • User-Friendly GUI with working storage capacity - Success (somewhat): Although my client did suggest that there should be more individual tooltips for each button, she agreed that being able to access some major tooltips by hovering the cursor over the feature was helpful in understanding how to use the program and what various widgets are for.

My client was satisfied with the application overall. She mentioned that she plans to use this tool to create artwork to inspire her for her Art exhibition. In a recent interview to follow up on the application, the client made the following statement:

“At first, I had to become adjusted to the different features. I wished there was a tool tip for each feature. However, after testing it out I was impressed by how user friendly this application is. As a customer, who is interested in creating digital art, this application allows me to experiment with color in an efficient, simple manner and create graphic designs using my own photography. I believe this app has the potential to be an extension to Photoshop, especially when you just want to manipulate colors and do not want to deal with changing gradients or adding filters.”

As a step moving forward, my client had two suggestions for features to be added in a later update of the application. These are suggestions that I want to really focus on, should I develop this project further and attempt to integrate it into other projects.

Object Detection in Photographs

One goal that would be ideal to achieve is to allow the program to detect and modify specific objects in a photo. This was a criterion from Part A that was not successfully met due to the difficulty of ensuring that the program can identify a define a ‘specific object’ rather than ‘a specific object and all similar one’s. This can be done by find the difference of a pixel’s intensity from the intensities of all the surrounding pixels and that determining which different is big enough of the object to be considered distinct. The issue with this is determining with directional edge (top or side) to look for, or how to implement both at once.

Interactive Walkthrough With Tooltips

As noted in the interview, one of my clients suggestions was to add more tool tips and user documentation, since she, as well as many others, don’t identify as technologically literate. In addition to preparing and making available such documentation to be viewed from the application, I thought of the idea of including an interactive guide of the application to demonstrate its features to first time users. This guide will run through the program once with forward and back buttons, while allowing the user to see how the app works.