Browse Source

Ajout d'un main de test

L'essentiel du main sera déplacé dans un module
Yann Weber 6 years ago
parent
commit
fb27715713
2 changed files with 103 additions and 2 deletions
  1. 99
    0
      gte/__main__.py
  2. 4
    2
      gte/fractdim.py

+ 99
- 0
gte/__main__.py View File

@@ -0,0 +1,99 @@
1
+import argparse
2
+import logging
3
+import numpy as np
4
+from random import randint
5
+
6
+logging.basicConfig(level=logging.DEBUG,
7
+                    format="%(created)d %(asctime)s:%(module)s(%(lineno)d):%(levelname)s:%(message)s %(relativeCreated)dms")
8
+logger = logging.getLogger(__name__)
9
+logger.debug('Logger started')
10
+
11
+from . import turmit, rpnlib
12
+from .turmit import Turmit
13
+
14
+parser = argparse.ArgumentParser(description='Genetic Turmit Evolver')
15
+
16
+parser.add_argument('--list-op', action='store_const', default=False,
17
+                    const=True)
18
+parser.add_argument('--list-var', action='store_const', default=False,
19
+                    const=True)
20
+parser.add_argument('--rand-sym', '-r', action='store_const', default=False,
21
+                    const=True)
22
+
23
+
24
+args = parser.parse_args()
25
+
26
+if args.list_op:
27
+    for i,(op, desc) in enumerate(rpnlib._op_list.items()):
28
+        print('#%02X %7s%s' % (i, op.upper(), desc[0].__doc__))
29
+    exit(0)
30
+elif args.list_var:
31
+    print([op.upper() for op in rpnlib._op_list.keys()])
32
+    exit(0)
33
+elif args.rand_sym:
34
+    for _ in range(10):
35
+        print(rpnlib.RpnSymbol.random())
36
+    exit(0)
37
+
38
+x = 512
39
+y = 512
40
+nb_turmit = 10
41
+steps = 1024
42
+
43
+img = [[(0,0,0) for _ in range(x)] for _ in range(y)]
44
+
45
+prog = rpnlib.RpnExpr.random(10)
46
+prog.append(rpnlib.RpnSymbol.rand_op())
47
+
48
+turmits = [Turmit(prog=prog) for _ in range(nb_turmit)]
49
+turmits_color = [(randint(0,255), randint(0,255), randint(0,255))
50
+                 for _ in range(nb_turmit)]
51
+turmits_pos = [(randint(0,y-1), randint(0,x-1)) for _ in range(nb_turmit)]
52
+
53
+import time
54
+
55
+print(str(prog))
56
+start = time.time()
57
+for step in range(steps):
58
+    for i in range(nb_turmit):
59
+        ty, tx = turmits_pos[i]
60
+        r,g,b = img[ty][tx]
61
+        turmit = turmits[i]
62
+        tdir = turmit(x=tx,y=ty,r=r,g=g,b=b) % 8
63
+
64
+        img[ty][tx] = turmits_color[i]
65
+
66
+        if tdir == 0 or tdir == 4 or tdir == 5:
67
+            tx += 1
68
+        if tdir == 1 or tdir == 4 or tdir == 6:
69
+            ty += 1
70
+        if tdir == 2 or tdir == 6 or tdir == 7:
71
+            if tx == 0:
72
+                tx = x -1
73
+            else:
74
+                tx -= 1
75
+        if tdir == 3 or tdir == 5 or tdir == 7:
76
+            if ty == 0:
77
+                ty = y - 1
78
+            else:
79
+                ty -= 1
80
+        tx %= x
81
+        ty %= y
82
+        #print('Turmit #%d dir:%d x:%d y:%d prog="%s"' % (i, tdir, tx, ty,
83
+        #                                                 str(turmit._prog)))
84
+        turmits_pos[i] = (ty,tx)
85
+    if step % 100 == 0:
86
+        print('%d/%d' % (step, steps))
87
+stop = time.time()
88
+print('Exec %d steps in %.2fs : %.4fs/step' % (steps, stop - start,
89
+                                                (stop - start) / steps))
90
+from .fractdim import *
91
+I = rgb2gray(np.array(img))
92
+print(fractal_dimension(I))
93
+
94
+import scipy.misc
95
+scipy.misc.imsave('/tmp/GTE.jpg', img)
96
+print('saved to : /tmp/GTE.jpg')
97
+print()
98
+            
99
+    

+ 4
- 2
gte/fractdim.py View File

@@ -51,5 +51,7 @@ def fractal_dimension(Z, threshold=None):
51 51
     coeffs = np.polyfit(np.log(sizes), np.log(counts), 1)
52 52
     return -coeffs[0]
53 53
 
54
-I = rgb2gray(scipy.misc.imread(sys.argv[1]))
55
-print("%f:%s" % (fractal_dimension(I), sys.argv[1]))
54
+if __name__ == '__main__':
55
+    I = rgb2gray(scipy.misc.imread(sys.argv[1]))
56
+    print(I)
57
+    print("%f:%s" % (fractal_dimension(I), sys.argv[1]))

Loading…
Cancel
Save