README.org 4.86 KB
Newer Older
Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
1 2 3 4 5 6 7 8 9
[[http://spacemacs.org][file: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.

Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
10 11 12
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
Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
13
is discarded. This method is here as a reference for the other methods.
Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
14

Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
15 16 17 18 19 20
The second method will be the same as the first method, however 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 third method will instead delegate different parts of the picture to
Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
21 22 23 24
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.

Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
25 26 27
The fourth method, which can be combined with the first three, will limit the
choice in terms of random color to the colors already existing in the reference
image.
Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
28

Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
29 30 31 32
The fifth method, which can be combined with the four 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.
Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
33 34 35

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

Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
36 37 38
This project has only be tested with RGB images, and does not officially support
ARGB images. Use ARGB images at your own risks.

Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
39
* How to build this project
Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
40

41
To build the project, you will also be required to install the development
Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
42 43 44
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.
45 46 47 48 49 50 51 52

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~.
#+begin_src shell
  pip install --user conan
#+end_src

Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
53 54 55 56 57 58
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:
#+begin_src shell
  conan profile new default --detect
  conan profile update settings.compiler=clang default
  conan profile update settings.compiler.version=7.0 default
59
  conan profile update settings.compiler.libcxx=libstdc++11 default
Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
60 61 62 63 64 65 66
  conan profile update env.CC=/bin/clang default
  conan profile update env.CXX=/bin/clang++ default
#+end_src
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.

67 68 69 70 71 72 73 74 75 76 77 78
You also *must* have the correct conan remotes activated. You will find the
dependencies on ~conan-center~ and ~bincrafters~. Run the command below:
#+begin_src shell
  conan remote list
#+end_src
If ~conan-center~ and/or ~bincrafters~ are missing, you will need to run the
corresponding commands listed below.
#+begin_src shell
  conan remote add conan-center https://conan.bintray.com
  conan remote add bincrafters https://api.bintray.com/conan/bincrafters/public-conan
#+end_src

Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
79 80 81 82
Then, To build and run the program, go to the root of the project and run this:
#+begin_src shell
  mkdir build && cd build
  conan install .. --build missing
83
  cmake -DCMAKE_CXX_COMPILER=clang++ .. -G Ninja
Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
84 85 86 87 88 89 90
  cmake --build .
#+end_src
If you want to use another profile than your default one, you should run the
following line instead of the second line:
#+begin_src shell
  conan install .. --build missing --profile <your_profile>
#+end_src
91 92 93 94 95 96
If you wish to build the project’s tests in addition to the project itself, you
can add the option ~-DTESTS=True~ to the first ~cmake~ command to build the
project’s tests too.
#+begin_src shell
  cmake -DCMAKE_CXX_COMPILER=clang++ -DTESTS=True .. -G Ninja
#+end_src
Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
97

98 99 100 101 102 103 104 105 106
If you do not wish to build your project with Ninja but with another generator,
such as Unix Makefiles, simply replace ~Ninja~ in the second to last ~cmake~
command with the name of your generator. For instance:
#+begin_src shell
  cmake -DCMAKE_CXX_COMPILER=clang++ .. -G "Unix Makefiles"
#+end_src
You can still build your project by running ~cmake --build .~ or by running
~make~ manually.

Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
107 108 109 110 111
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

Phuntsok Drak-pa's avatar
Phuntsok Drak-pa committed
112
Awesome C++ Template by [[https://github.com/devkoriel/AwesomeCppTemplate][devkoriel]].