Go to file
Phuntsok Drak-pa 79284fe473 Add LICENSE
2019-03-19 15:06:20 +00:00
cmake initial commit 2019-03-19 10:14:19 +01:00
include/genimg added helper function for drawing squares 2019-03-19 15:26:03 +01:00
src added helper function for drawing squares 2019-03-19 15:26:03 +01:00
.gitignore initial commit 2019-03-19 10:14:19 +01:00
CMakeLists.txt added CI, fixed configuration 2019-03-19 11:01:39 +01:00
conanfile.py added logger 2019-03-19 14:22:59 +01:00
LICENSE Add LICENSE 2019-03-19 15:06:20 +00:00
README.org updated readme 2019-03-19 14:19:27 +01:00

https://cdn.rawgit.com/syl20bnr/spacemacs/442d025779da2f62fc86c2082703697714db6514/assets/spacemacs-badge.svg

Genetic image generation

This project is a university assignment that aims at regenerating a reference image from random shapes of random color applied. There will be lots of different tests on what method is the best and/or the fastest to get a new image as close as possible to the reference image.

The first method will be the random addition of squares of random size to random locations of random color. If the picture with the new random square improves in similarity with the reference image, then it is preserved, otherwise the change is discarded. The generation of the new pictures will be multi-threaded; if two or more threads return an improved picture, the best one will be selected. Then it will be reused by the next threads.

The second method will instead delegate different parts of the picture to different threads. For instance, if the software runs on four threads, the reference picture will be divided in four zones, each one will be generated by a separate thread.

The third method, which can be combined with either the first or the second, will limit the choice in terms of random color to the colors already existing in the reference image.

The fourth method, which can be combined with the three first methods, will force the random squares to be larger during the first iterations and progressively smaller until the smallest specified size which should be reached by the last iteration.

More methods will be added later once these four will be implemented.

How to build this project

To build the project, you will also be required to install the development libraries your distro offers for GTK+3. For Ubuntu, it is libgtk3-devel, for Void Linux it is gtk3-devel and for Arch Linux it is already bundled with the gtk3 package.

You will also ned to have Ninja and Conan installed. To install Ninja, install the appropriate package offered by your package manager (ninja-build on Debian, ninja on Arch Linux and Void Linux), and to install conan, use pip.

  pip install --user conan

This project is built with conan, ninja and cmake using clang-7 for C++17. To use it, first install clang-7 and lldb 7, then run this:

  conan profile new default --detect
  conan profile update settings.compiler=clang default
  conan profile update settings.compiler.version=7.0 default
  conan profile update settings.compiler.libcxx=libstdc++11 default
  conan profile update env.CC=/bin/clang default
  conan profile update env.CXX=/bin/clang++ default

If you do not wish to overwrite your default profile, you can instead create a new one, for instance clang. To do so, write the name of your new profile (in this example clang) instead of default in the commands shown above.

Then, To build and run the program, go to the root of the project and run this:

  mkdir build && cd build
  conan install .. --build missing
  cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ .. -G Ninja
  cmake --build .

If you want to use another profile than your default one, you should run the following line instead of the second line:

  conan install .. --build missing --profile <your_profile>

This project was built and tested using clang-7, lldb and gdb on Void Linux (kernel 4.19) and Arch Linux (kernel 5.0).

Credits

Awesome C++ Template by devkoriel.