Development of a platform that helps users to create art
A website with which it is possible to use an API that transfers images into another art style through a microservice.
Python, Tensorflow, Keras, Flask Docker
Creating art is fun. But many people are not talented enough to be artists themselves, and when they are, they often have far too little time to express themselves freely. This is where MAI, our AI, comes in. With artificial intelligence we can outsource part of the workload to them.
In this special case study we focus on a demo project. So we are basically our own customer. Nevertheless, we wanted to behave like two different companies. This allowed us to carry out and test the entire process from planning to development and deployment from start to finish. The fictitious customer in this scenario is a company that offers an online overview of new AI technologies. They want to offer an image-to-art converter system online that allows users to upload an image and turn it into art.
First we had to specify the requirements. Some were specified by customers, but they were not detailed enough for us. These requirements are:
- There must be a web frontend.
- The user must be able to upload an image.
- The entire system runs as a Web service (and therefore has limited computing capacity).
After these initial requirements, we needed more detailed information. For example: Does the user upload another image for conversion or is there a fixed pool of predefined styles? Does the algorithm need to be further trained during operation and will there be a feedback option?
Most optional requirements were discarded but some were considered sufficient. The end result is as follows:
- A web frontend will be available
- The user must be able to upload an image and either select a style or upload a second image as a style image.
- The entire system runs as a web service (and therefore has only limited computing capacity).
- The algorithm is implemented and not further trained.
First, we began researching the best practice methods for these tasks. It should be noted that creating from a given image and converting from one image to the style of another are two completely different tasks.
We implemented an offline system that can take an image as content input and produce a customized version of it in a specific style. This product did not meet any of the criteria defined above, but showed the feasibility of the project. The offline version is a Python module that satisfies various conditions using command line arguments. Before we add the remaining functions, we decided to complete this part first. So we set out to find a suitable cloud VM operator.
The whole process of uploading the project to a cloud operator’s server turned out to be quite a tricky challenge. First, we defined our API using the OpenAPI 3.0 specification. The Python module was then transformed into an easily implementable docker container just to see that our cloud operators did not support docker containers.
In the meantime, we developed a simple but functional frontend that serves the defined API.
To solve the Docker problem, we implemented the second algorithm, which takes a content image and a style image and merges them into one image. Both models offer a user-friendly command line interface that has been designed to be as simple as possible. This way we can call both models with the same parameters and don’t have to change the server code when adding new features.
We solved the Docker problem by porting this system to our in-house server landscape, which perfectly supports Dockers. MAI, our own AI in the cloud, supports two additional functions.
The biggest insight we gained from running this demo project was that we no longer had to rely on third-party systems to deliver our services. We achieved the goal of creating a web interface that would meet all requirements, within the desired timeframe. Although we had to change the course of the project several times, we have a product that delivers great results. Since this was just a first test, we now have to examine the execution, locate faulty processes and polish up our management.